From 76718abdb2138623102398a10f3228e576dd0ae8 Mon Sep 17 00:00:00 2001 From: tpearson Date: Wed, 10 Feb 2010 01:27:27 +0000 Subject: Added abandoned KDE3 version of kdiff3 git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/applications/kdiff3@1088041 283d02a7-25f6-0310-bc7c-ecb5cbfe19da --- AUTHORS | 1 + COPYING | 340 + ChangeLog | 460 + Doxyfile | 236 + INSTALL | 168 + Makefile.am | 22 + Makefile.cvs | 10 + NEWS | 1 + README | 280 + TODO | 119 + acinclude.m4 | 12361 +++++++++++++++++++++ aclocal.m4 | 863 ++ config.guess | 1686 +++ config.h.in | 244 + config.log | 363 + config.sub | 1686 +++ configure.files | 2 + configure.in | 166 + configure.in.in | 34 + diff_ext_for_kdiff3/.depend | 385 + diff_ext_for_kdiff3/LICENSE | 25 + diff_ext_for_kdiff3/Makefile | 64 + diff_ext_for_kdiff3/README | 41 + diff_ext_for_kdiff3/class_factory.cpp | 77 + diff_ext_for_kdiff3/class_factory.h | 33 + diff_ext_for_kdiff3/diff_ext.cpp | 624 ++ diff_ext_for_kdiff3/diff_ext.h | 67 + diff_ext_for_kdiff3/diff_ext.pot | 96 + diff_ext_for_kdiff3/diff_ext_de.po | 102 + diff_ext_for_kdiff3/diff_ext_for_kdiff3.def | 6 + diff_ext_for_kdiff3/diff_ext_for_kdiff3.exp | Bin 0 -> 4571 bytes diff_ext_for_kdiff3/diff_ext_for_kdiff3.rc | 47 + diff_ext_for_kdiff3/diff_ext_for_kdiff3.vcproj | 230 + diff_ext_for_kdiff3/diff_ext_for_kdiff3_msvc.def | 6 + diff_ext_for_kdiff3/diffextstring.h | 157 + diff_ext_for_kdiff3/server.cpp | 452 + diff_ext_for_kdiff3/server.h | 81 + doc/Makefile.am | 6 + doc/README | 80 + doc/createpdfdoc | 8 + doc/da/Makefile.am | 4 + doc/da/dirbrowser.png | Bin 0 -> 8126 bytes doc/da/dirmergebig.png | Bin 0 -> 30842 bytes doc/da/index.docbook | 2918 +++++ doc/da/iteminfo.png | Bin 0 -> 5505 bytes doc/da/letter_by_letter.png | Bin 0 -> 1977 bytes doc/da/merge_current.png | Bin 0 -> 184 bytes doc/da/new.png | Bin 0 -> 254 bytes doc/da/open_dialog.png | Bin 0 -> 5414 bytes doc/da/screenshot_diff.png | Bin 0 -> 33590 bytes doc/da/screenshot_merge.png | Bin 0 -> 10423 bytes doc/da/triple_diff.png | Bin 0 -> 2426 bytes doc/da/white_space.png | Bin 0 -> 1923 bytes doc/de/Makefile.am | 4 + doc/de/dirbrowser.png | Bin 0 -> 8126 bytes doc/de/dirmergebig.png | Bin 0 -> 30842 bytes doc/de/index.docbook | 2430 ++++ doc/de/iteminfo.png | Bin 0 -> 5505 bytes doc/de/letter_by_letter.png | Bin 0 -> 1977 bytes doc/de/merge_current.png | Bin 0 -> 184 bytes doc/de/new.png | Bin 0 -> 254 bytes doc/de/open_dialog.png | Bin 0 -> 5414 bytes doc/de/screenshot_diff.png | Bin 0 -> 33590 bytes doc/de/screenshot_merge.png | Bin 0 -> 10423 bytes doc/de/triple_diff.png | Bin 0 -> 2426 bytes doc/de/white_space.png | Bin 0 -> 1923 bytes doc/en/Makefile.am | 5 + doc/en/common/appheader.html | 36 + doc/en/common/artistic-license.html | 165 + doc/en/common/bottom-left.png | Bin 0 -> 664 bytes doc/en/common/bottom-middle.png | Bin 0 -> 173 bytes doc/en/common/bottom-right.png | Bin 0 -> 4921 bytes doc/en/common/fdl-license.html | 353 + doc/en/common/fdl-notice.html | 15 + doc/en/common/footer.html | 65 + doc/en/common/gpl-license.html | 381 + doc/en/common/header.html | 56 + doc/en/common/headerbg.png | Bin 0 -> 492 bytes doc/en/common/kde-default.css | 327 + doc/en/common/kde-localised.css.template | 32 + doc/en/common/kde_gear_64.png | Bin 0 -> 6356 bytes doc/en/common/kde_logo_bg.png | Bin 0 -> 198 bytes doc/en/common/mainfooter.html | 68 + doc/en/common/mainheader.html | 70 + doc/en/common/top-left.png | Bin 0 -> 15483 bytes doc/en/common/top-middle.png | Bin 0 -> 232 bytes doc/en/common/top-right-konqueror.png | Bin 0 -> 14422 bytes doc/en/compilation.html | 11 + doc/en/credits.html | 11 + doc/en/dirbrowser.png | Bin 0 -> 8126 bytes doc/en/dirmerge.html | 25 + doc/en/dirmergebig.png | Bin 0 -> 30842 bytes doc/en/dirmergeoptions.html | 58 + doc/en/dirmergevisible.html | 105 + doc/en/documentation.html | 54 + doc/en/dothemerge.html | 65 + doc/en/faq.html | 132 + doc/en/features.html | 22 + doc/en/find.html | 10 + doc/en/index.docbook | 2135 ++++ doc/en/index.html | 16 + doc/en/installation.html | 6 + doc/en/interpretinginformation.html | 68 + doc/en/introduction.html | 32 + doc/en/iteminfo.png | Bin 0 -> 5505 bytes doc/en/kdiff3.1 | 89 + doc/en/kpart.html | 22 + doc/en/letter_by_letter.png | Bin 0 -> 1977 bytes doc/en/merge_current.png | Bin 0 -> 184 bytes doc/en/merging.html | 195 + doc/en/misc.html | 49 + doc/en/navigation.html | 38 + doc/en/new.png | Bin 0 -> 254 bytes doc/en/open_dialog.png | Bin 0 -> 5414 bytes doc/en/opendialog.html | 23 + doc/en/options.html | 138 + doc/en/other.html | 33 + doc/en/pasteinput.html | 20 + doc/en/preprocessors.html | 202 + doc/en/printing.html | 20 + doc/en/requirements.html | 10 + doc/en/saving.html | 16 + doc/en/screenshot_diff.png | Bin 0 -> 33590 bytes doc/en/screenshot_merge.png | Bin 0 -> 10423 bytes doc/en/screenshots.html | 15 + doc/en/selections.html | 34 + doc/en/startingdirmerge.html | 22 + doc/en/triple_diff.png | Bin 0 -> 2426 bytes doc/en/white_space.png | Bin 0 -> 1923 bytes doc/es/Makefile.am | 4 + doc/es/dirbrowser.png | Bin 0 -> 8126 bytes doc/es/dirmergebig.png | Bin 0 -> 30842 bytes doc/es/index.docbook | 2936 +++++ doc/es/iteminfo.png | Bin 0 -> 5505 bytes doc/es/letter_by_letter.png | Bin 0 -> 1977 bytes doc/es/merge_current.png | Bin 0 -> 184 bytes doc/es/new.png | Bin 0 -> 254 bytes doc/es/open_dialog.png | Bin 0 -> 5414 bytes doc/es/screenshot_diff.png | Bin 0 -> 33590 bytes doc/es/screenshot_merge.png | Bin 0 -> 10423 bytes doc/es/triple_diff.png | Bin 0 -> 2426 bytes doc/es/white_space.png | Bin 0 -> 1923 bytes doc/et/Makefile.am | 4 + doc/et/dirbrowser.png | Bin 0 -> 8126 bytes doc/et/dirmergebig.png | Bin 0 -> 30842 bytes doc/et/index.docbook | 2425 ++++ doc/et/iteminfo.png | Bin 0 -> 5505 bytes doc/et/letter_by_letter.png | Bin 0 -> 1977 bytes doc/et/merge_current.png | Bin 0 -> 184 bytes doc/et/new.png | Bin 0 -> 254 bytes doc/et/open_dialog.png | Bin 0 -> 5414 bytes doc/et/screenshot_diff.png | Bin 0 -> 33590 bytes doc/et/screenshot_merge.png | Bin 0 -> 10423 bytes doc/et/triple_diff.png | Bin 0 -> 2426 bytes doc/et/white_space.png | Bin 0 -> 1923 bytes doc/fr/Makefile.am | 4 + doc/fr/dirbrowser.png | Bin 0 -> 8126 bytes doc/fr/dirmergebig.png | Bin 0 -> 30842 bytes doc/fr/index.docbook | 2320 ++++ doc/fr/iteminfo.png | Bin 0 -> 5505 bytes doc/fr/letter_by_letter.png | Bin 0 -> 1977 bytes doc/fr/merge_current.png | Bin 0 -> 184 bytes doc/fr/new.png | Bin 0 -> 254 bytes doc/fr/open_dialog.png | Bin 0 -> 5414 bytes doc/fr/screenshot_diff.png | Bin 0 -> 33590 bytes doc/fr/screenshot_merge.png | Bin 0 -> 10423 bytes doc/fr/triple_diff.png | Bin 0 -> 2426 bytes doc/fr/white_space.png | Bin 0 -> 1923 bytes doc/it/Makefile.am | 4 + doc/it/dirbrowser.png | Bin 0 -> 8126 bytes doc/it/dirmergebig.png | Bin 0 -> 30842 bytes doc/it/index.docbook | 2442 ++++ doc/it/iteminfo.png | Bin 0 -> 5505 bytes doc/it/letter_by_letter.png | Bin 0 -> 1977 bytes doc/it/merge_current.png | Bin 0 -> 184 bytes doc/it/new.png | Bin 0 -> 254 bytes doc/it/open_dialog.png | Bin 0 -> 5414 bytes doc/it/screenshot_diff.png | Bin 0 -> 33590 bytes doc/it/screenshot_merge.png | Bin 0 -> 10423 bytes doc/it/triple_diff.png | Bin 0 -> 2426 bytes doc/it/white_space.png | Bin 0 -> 1923 bytes doc/nl/Makefile.am | 4 + doc/nl/dirbrowser.png | Bin 0 -> 8126 bytes doc/nl/dirmergebig.png | Bin 0 -> 30842 bytes doc/nl/index.docbook | 2407 ++++ doc/nl/iteminfo.png | Bin 0 -> 5505 bytes doc/nl/letter_by_letter.png | Bin 0 -> 1977 bytes doc/nl/merge_current.png | Bin 0 -> 184 bytes doc/nl/new.png | Bin 0 -> 254 bytes doc/nl/open_dialog.png | Bin 0 -> 5414 bytes doc/nl/screenshot_diff.png | Bin 0 -> 33590 bytes doc/nl/screenshot_merge.png | Bin 0 -> 10423 bytes doc/nl/triple_diff.png | Bin 0 -> 2426 bytes doc/nl/white_space.png | Bin 0 -> 1923 bytes doc/pt/Makefile.am | 4 + doc/pt/dirbrowser.png | Bin 0 -> 8126 bytes doc/pt/dirmergebig.png | Bin 0 -> 30842 bytes doc/pt/index.docbook | 2975 +++++ doc/pt/iteminfo.png | Bin 0 -> 5505 bytes doc/pt/letter_by_letter.png | Bin 0 -> 1977 bytes doc/pt/merge_current.png | Bin 0 -> 184 bytes doc/pt/new.png | Bin 0 -> 254 bytes doc/pt/open_dialog.png | Bin 0 -> 5414 bytes doc/pt/screenshot_diff.png | Bin 0 -> 33590 bytes doc/pt/screenshot_merge.png | Bin 0 -> 10423 bytes doc/pt/triple_diff.png | Bin 0 -> 2426 bytes doc/pt/white_space.png | Bin 0 -> 1923 bytes doc/sv/Makefile.am | 4 + doc/sv/dirbrowser.png | Bin 0 -> 8126 bytes doc/sv/dirmergebig.png | Bin 0 -> 30842 bytes doc/sv/index.docbook | 2938 +++++ doc/sv/iteminfo.png | Bin 0 -> 5505 bytes doc/sv/letter_by_letter.png | Bin 0 -> 1977 bytes doc/sv/merge_current.png | Bin 0 -> 184 bytes doc/sv/new.png | Bin 0 -> 254 bytes doc/sv/open_dialog.png | Bin 0 -> 5414 bytes doc/sv/screenshot_diff.png | Bin 0 -> 33590 bytes doc/sv/screenshot_merge.png | Bin 0 -> 10423 bytes doc/sv/triple_diff.png | Bin 0 -> 2426 bytes doc/sv/white_space.png | Bin 0 -> 1923 bytes kdiff3.kdevelop | 191 + kdiff3.spec | 61 + kdiff3plugin/Makefile.am | 20 + kdiff3plugin/kdiff3_plugin.desktop | 6 + kdiff3plugin/kdiff3plugin.cpp | 263 + kdiff3plugin/kdiff3plugin.desktop | 7 + kdiff3plugin/kdiff3plugin.h | 50 + kdiff3plugin/po/Makefile | 661 ++ kdiff3plugin/po/Makefile.am | 2 + kdiff3plugin/po/bg.po | 83 + kdiff3plugin/po/br.po | 68 + kdiff3plugin/po/cs.po | 73 + kdiff3plugin/po/da.po | 84 + kdiff3plugin/po/de.po | 91 + kdiff3plugin/po/el.po | 84 + kdiff3plugin/po/et.po | 83 + kdiff3plugin/po/ga.po | 71 + kdiff3plugin/po/it.po | 84 + kdiff3plugin/po/nl.po | 87 + kdiff3plugin/po/pt.po | 82 + kdiff3plugin/po/pt_BR.po | 85 + kdiff3plugin/po/sk.po | 73 + kdiff3plugin/po/sv.po | 84 + kdiff3plugin/po/tr.po | 75 + po/Makefile.am | 1 + po/README | 133 + po/ar.po | 2318 ++++ po/az.po | 2312 ++++ po/bg.po | 2547 +++++ po/br.po | 2329 ++++ po/ca.po | 2304 ++++ po/createqm | 9 + po/cs.po | 2324 ++++ po/cvsgetpo | 3 + po/cy.po | 2320 ++++ po/da.po | 2572 +++++ po/de.po | 2570 +++++ po/el.po | 2567 +++++ po/en_GB.po | 2533 +++++ po/es.po | 2568 +++++ po/et.po | 2519 +++++ po/fr.po | 2578 +++++ po/ga.po | 2314 ++++ po/gl.po | 2309 ++++ po/hi.po | 2427 ++++ po/hu.po | 2620 +++++ po/is.po | 2304 ++++ po/it.po | 2544 +++++ po/ja.po | 2445 ++++ po/ka.po | 2526 +++++ po/kdiff3.pot | 2249 ++++ po/lt.po | 2604 +++++ po/nb.po | 2511 +++++ po/nl.po | 2572 +++++ po/pl.po | 2560 +++++ po/pt.po | 2546 +++++ po/pt_BR.po | 2561 +++++ po/ro.po | 2309 ++++ po/ru.po | 2430 ++++ po/rw.po | 2875 +++++ po/sk.po | 2309 ++++ po/sr.po | 2586 +++++ po/sr@Latn.po | 2587 +++++ po/sv.po | 2523 +++++ po/ta.po | 2586 +++++ po/tg.po | 2450 ++++ po/tr.po | 2473 +++++ po/uk.po | 2541 +++++ po/zh_CN.po | 2499 +++++ src/Makefile.am | 58 + src/Makefile.qt | 425 + src/ccInstHelper.cpp | 334 + src/common.cpp | 341 + src/common.h | 113 + src/diff.cpp | 1920 ++++ src/diff.h | 462 + src/difftextwindow.cpp | 1751 +++ src/difftextwindow.h | 135 + src/directorymergewindow.cpp | 3048 +++++ src/directorymergewindow.h | 362 + src/fileaccess.cpp | 1809 +++ src/fileaccess.h | 265 + src/gnudiff_analyze.cpp | 873 ++ src/gnudiff_diff.h | 355 + src/gnudiff_io.cpp | 559 + src/gnudiff_system.h | 123 + src/gnudiff_xmalloc.cpp | 88 + src/hi16-app-kdiff3.png | Bin 0 -> 219 bytes src/hi32-app-kdiff3.png | Bin 0 -> 345 bytes src/kdiff3.cpp | 992 ++ src/kdiff3.desktop | 91 + src/kdiff3.h | 410 + src/kdiff3.ico | Bin 0 -> 1078 bytes src/kdiff3.lsm | 16 + src/kdiff3.pro | 57 + src/kdiff3.rc | 1 + src/kdiff3_meta_unload.cpp | 1 + src/kdiff3_part.cpp | 309 + src/kdiff3_part.h | 100 + src/kdiff3_part.rc | 24 + src/kdiff3_shell.cpp | 191 + src/kdiff3_shell.h | 74 + src/kdiff3_shell.rc | 128 + src/kdiff3part.desktop | 18 + src/kreplacements/README | 30 + src/kreplacements/ShellContextMenu.cpp | 492 + src/kreplacements/ShellContextMenu.h | 60 + src/kreplacements/kaboutdata.h | 2 + src/kreplacements/kaccel.h | 2 + src/kreplacements/kaction.h | 2 + src/kreplacements/kapplication.h | 2 + src/kreplacements/kcmdlineargs.h | 2 + src/kreplacements/kcolorbtn.h | 2 + src/kreplacements/kconfig.h | 2 + src/kreplacements/kdialogbase.h | 2 + src/kreplacements/kedittoolbar.h | 2 + src/kreplacements/kfiledialog.h | 2 + src/kreplacements/kfontdialog.h | 2 + src/kreplacements/kiconloader.h | 2 + src/kreplacements/kinstance.h | 2 + src/kreplacements/kio/global.h | 2 + src/kreplacements/kio/job.h | 2 + src/kreplacements/kio/jobclasses.h | 2 + src/kreplacements/kkeydialog.h | 2 + src/kreplacements/klibloader.h | 2 + src/kreplacements/klocale.h | 2 + src/kreplacements/kmainwindow.h | 2 + src/kreplacements/kmenubar.h | 2 + src/kreplacements/kmessagebox.h | 2 + src/kreplacements/konq_popupmenu.h | 2 + src/kreplacements/kparts/factory.h | 2 + src/kreplacements/kparts/mainwindow.h | 2 + src/kreplacements/kparts/part.h | 2 + src/kreplacements/kpopupmenu.h | 2 + src/kreplacements/kprinter.h | 2 + src/kreplacements/kprogress.h | 2 + src/kreplacements/kreplacements.cpp | 1185 ++ src/kreplacements/kreplacements.h | 505 + src/kreplacements/kstandarddirs.h | 2 + src/kreplacements/kstatusbar.h | 2 + src/kreplacements/kstdaction.h | 2 + src/kreplacements/ktempfile.h | 2 + src/kreplacements/kunload.h | 2 + src/kreplacements/kurl.h | 2 + src/kreplacements/kurldrag.h | 2 + src/lo16-app-kdiff3.png | Bin 0 -> 219 bytes src/lo32-app-kdiff3.png | Bin 0 -> 345 bytes src/main.cpp | 236 + src/merger.cpp | 87 + src/merger.h | 61 + src/mergeresultwindow.cpp | 3222 ++++++ src/mergeresultwindow.h | 454 + src/optiondialog.cpp | 1755 +++ src/optiondialog.h | 229 + src/pdiff.cpp | 2268 ++++ src/smalldialogs.cpp | 579 + src/smalldialogs.h | 120 + src/version.h | 2 + src/xpm/autoadvance.xpm | 25 + src/xpm/currentpos.xpm | 22 + src/xpm/down1arrow.xpm | 25 + src/xpm/down2arrow.xpm | 25 + src/xpm/downend.xpm | 22 + src/xpm/file.xpm | 24 + src/xpm/filenew.xpm | 22 + src/xpm/fileopen.xpm | 22 + src/xpm/fileprint.xpm | 24 + src/xpm/filesave.xpm | 21 + src/xpm/folder.xpm | 24 + src/xpm/iconA.xpm | 22 + src/xpm/iconB.xpm | 22 + src/xpm/iconC.xpm | 22 + src/xpm/link_arrow.xpm | 24 + src/xpm/nextunsolved.xpm | 23 + src/xpm/prevunsolved.xpm | 23 + src/xpm/reload.xpm | 74 + src/xpm/showequalfiles.xpm | 23 + src/xpm/showfilesonlyina.xpm | 23 + src/xpm/showfilesonlyinb.xpm | 23 + src/xpm/showfilesonlyinc.xpm | 22 + src/xpm/showlinenumbers.xpm | 21 + src/xpm/showwhitespace.xpm | 22 + src/xpm/showwhitespacechars.xpm | 21 + src/xpm/startmerge.xpm | 25 + src/xpm/up1arrow.xpm | 22 + src/xpm/up2arrow.xpm | 25 + src/xpm/upend.xpm | 22 + stamp-h.in | 0 subdirs | 4 + templates/cpp | 19 + templates/h | 24 + 411 files changed, 182492 insertions(+) create mode 100644 AUTHORS create mode 100644 COPYING create mode 100755 ChangeLog create mode 100644 Doxyfile create mode 100644 INSTALL create mode 100644 Makefile.am create mode 100644 Makefile.cvs create mode 100644 NEWS create mode 100644 README create mode 100644 TODO create mode 100644 acinclude.m4 create mode 100644 aclocal.m4 create mode 100644 config.guess create mode 100644 config.h.in create mode 100644 config.log create mode 100644 config.sub create mode 100644 configure.files create mode 100644 configure.in create mode 100644 configure.in.in create mode 100755 diff_ext_for_kdiff3/.depend create mode 100644 diff_ext_for_kdiff3/LICENSE create mode 100644 diff_ext_for_kdiff3/Makefile create mode 100644 diff_ext_for_kdiff3/README create mode 100644 diff_ext_for_kdiff3/class_factory.cpp create mode 100644 diff_ext_for_kdiff3/class_factory.h create mode 100755 diff_ext_for_kdiff3/diff_ext.cpp create mode 100755 diff_ext_for_kdiff3/diff_ext.h create mode 100644 diff_ext_for_kdiff3/diff_ext.pot create mode 100755 diff_ext_for_kdiff3/diff_ext_de.po create mode 100644 diff_ext_for_kdiff3/diff_ext_for_kdiff3.def create mode 100644 diff_ext_for_kdiff3/diff_ext_for_kdiff3.exp create mode 100644 diff_ext_for_kdiff3/diff_ext_for_kdiff3.rc create mode 100644 diff_ext_for_kdiff3/diff_ext_for_kdiff3.vcproj create mode 100644 diff_ext_for_kdiff3/diff_ext_for_kdiff3_msvc.def create mode 100644 diff_ext_for_kdiff3/diffextstring.h create mode 100644 diff_ext_for_kdiff3/server.cpp create mode 100644 diff_ext_for_kdiff3/server.h create mode 100644 doc/Makefile.am create mode 100644 doc/README create mode 100644 doc/createpdfdoc create mode 100644 doc/da/Makefile.am create mode 100644 doc/da/dirbrowser.png create mode 100644 doc/da/dirmergebig.png create mode 100644 doc/da/index.docbook create mode 100644 doc/da/iteminfo.png create mode 100644 doc/da/letter_by_letter.png create mode 100644 doc/da/merge_current.png create mode 100644 doc/da/new.png create mode 100644 doc/da/open_dialog.png create mode 100644 doc/da/screenshot_diff.png create mode 100644 doc/da/screenshot_merge.png create mode 100644 doc/da/triple_diff.png create mode 100644 doc/da/white_space.png create mode 100644 doc/de/Makefile.am create mode 100644 doc/de/dirbrowser.png create mode 100644 doc/de/dirmergebig.png create mode 100644 doc/de/index.docbook create mode 100644 doc/de/iteminfo.png create mode 100644 doc/de/letter_by_letter.png create mode 100644 doc/de/merge_current.png create mode 100644 doc/de/new.png create mode 100644 doc/de/open_dialog.png create mode 100644 doc/de/screenshot_diff.png create mode 100644 doc/de/screenshot_merge.png create mode 100644 doc/de/triple_diff.png create mode 100644 doc/de/white_space.png create mode 100644 doc/en/Makefile.am create mode 100644 doc/en/common/appheader.html create mode 100644 doc/en/common/artistic-license.html create mode 100644 doc/en/common/bottom-left.png create mode 100644 doc/en/common/bottom-middle.png create mode 100644 doc/en/common/bottom-right.png create mode 100644 doc/en/common/fdl-license.html create mode 100644 doc/en/common/fdl-notice.html create mode 100644 doc/en/common/footer.html create mode 100644 doc/en/common/gpl-license.html create mode 100644 doc/en/common/header.html create mode 100644 doc/en/common/headerbg.png create mode 100644 doc/en/common/kde-default.css create mode 100644 doc/en/common/kde-localised.css.template create mode 100644 doc/en/common/kde_gear_64.png create mode 100644 doc/en/common/kde_logo_bg.png create mode 100644 doc/en/common/mainfooter.html create mode 100644 doc/en/common/mainheader.html create mode 100644 doc/en/common/top-left.png create mode 100644 doc/en/common/top-middle.png create mode 100644 doc/en/common/top-right-konqueror.png create mode 100644 doc/en/compilation.html create mode 100644 doc/en/credits.html create mode 100644 doc/en/dirbrowser.png create mode 100644 doc/en/dirmerge.html create mode 100644 doc/en/dirmergebig.png create mode 100644 doc/en/dirmergeoptions.html create mode 100644 doc/en/dirmergevisible.html create mode 100644 doc/en/documentation.html create mode 100644 doc/en/dothemerge.html create mode 100644 doc/en/faq.html create mode 100644 doc/en/features.html create mode 100644 doc/en/find.html create mode 100644 doc/en/index.docbook create mode 100644 doc/en/index.html create mode 100644 doc/en/installation.html create mode 100644 doc/en/interpretinginformation.html create mode 100644 doc/en/introduction.html create mode 100644 doc/en/iteminfo.png create mode 100644 doc/en/kdiff3.1 create mode 100644 doc/en/kpart.html create mode 100644 doc/en/letter_by_letter.png create mode 100644 doc/en/merge_current.png create mode 100644 doc/en/merging.html create mode 100644 doc/en/misc.html create mode 100644 doc/en/navigation.html create mode 100644 doc/en/new.png create mode 100644 doc/en/open_dialog.png create mode 100644 doc/en/opendialog.html create mode 100644 doc/en/options.html create mode 100644 doc/en/other.html create mode 100644 doc/en/pasteinput.html create mode 100644 doc/en/preprocessors.html create mode 100644 doc/en/printing.html create mode 100644 doc/en/requirements.html create mode 100644 doc/en/saving.html create mode 100644 doc/en/screenshot_diff.png create mode 100644 doc/en/screenshot_merge.png create mode 100644 doc/en/screenshots.html create mode 100644 doc/en/selections.html create mode 100644 doc/en/startingdirmerge.html create mode 100644 doc/en/triple_diff.png create mode 100644 doc/en/white_space.png create mode 100644 doc/es/Makefile.am create mode 100644 doc/es/dirbrowser.png create mode 100644 doc/es/dirmergebig.png create mode 100644 doc/es/index.docbook create mode 100644 doc/es/iteminfo.png create mode 100644 doc/es/letter_by_letter.png create mode 100644 doc/es/merge_current.png create mode 100644 doc/es/new.png create mode 100644 doc/es/open_dialog.png create mode 100644 doc/es/screenshot_diff.png create mode 100644 doc/es/screenshot_merge.png create mode 100644 doc/es/triple_diff.png create mode 100644 doc/es/white_space.png create mode 100644 doc/et/Makefile.am create mode 100644 doc/et/dirbrowser.png create mode 100644 doc/et/dirmergebig.png create mode 100644 doc/et/index.docbook create mode 100644 doc/et/iteminfo.png create mode 100644 doc/et/letter_by_letter.png create mode 100644 doc/et/merge_current.png create mode 100644 doc/et/new.png create mode 100644 doc/et/open_dialog.png create mode 100644 doc/et/screenshot_diff.png create mode 100644 doc/et/screenshot_merge.png create mode 100644 doc/et/triple_diff.png create mode 100644 doc/et/white_space.png create mode 100644 doc/fr/Makefile.am create mode 100644 doc/fr/dirbrowser.png create mode 100644 doc/fr/dirmergebig.png create mode 100644 doc/fr/index.docbook create mode 100644 doc/fr/iteminfo.png create mode 100644 doc/fr/letter_by_letter.png create mode 100644 doc/fr/merge_current.png create mode 100644 doc/fr/new.png create mode 100644 doc/fr/open_dialog.png create mode 100644 doc/fr/screenshot_diff.png create mode 100644 doc/fr/screenshot_merge.png create mode 100644 doc/fr/triple_diff.png create mode 100644 doc/fr/white_space.png create mode 100644 doc/it/Makefile.am create mode 100644 doc/it/dirbrowser.png create mode 100644 doc/it/dirmergebig.png create mode 100644 doc/it/index.docbook create mode 100644 doc/it/iteminfo.png create mode 100644 doc/it/letter_by_letter.png create mode 100644 doc/it/merge_current.png create mode 100644 doc/it/new.png create mode 100644 doc/it/open_dialog.png create mode 100644 doc/it/screenshot_diff.png create mode 100644 doc/it/screenshot_merge.png create mode 100644 doc/it/triple_diff.png create mode 100644 doc/it/white_space.png create mode 100644 doc/nl/Makefile.am create mode 100644 doc/nl/dirbrowser.png create mode 100644 doc/nl/dirmergebig.png create mode 100644 doc/nl/index.docbook create mode 100644 doc/nl/iteminfo.png create mode 100644 doc/nl/letter_by_letter.png create mode 100644 doc/nl/merge_current.png create mode 100644 doc/nl/new.png create mode 100644 doc/nl/open_dialog.png create mode 100644 doc/nl/screenshot_diff.png create mode 100644 doc/nl/screenshot_merge.png create mode 100644 doc/nl/triple_diff.png create mode 100644 doc/nl/white_space.png create mode 100644 doc/pt/Makefile.am create mode 100644 doc/pt/dirbrowser.png create mode 100644 doc/pt/dirmergebig.png create mode 100644 doc/pt/index.docbook create mode 100644 doc/pt/iteminfo.png create mode 100644 doc/pt/letter_by_letter.png create mode 100644 doc/pt/merge_current.png create mode 100644 doc/pt/new.png create mode 100644 doc/pt/open_dialog.png create mode 100644 doc/pt/screenshot_diff.png create mode 100644 doc/pt/screenshot_merge.png create mode 100644 doc/pt/triple_diff.png create mode 100644 doc/pt/white_space.png create mode 100644 doc/sv/Makefile.am create mode 100644 doc/sv/dirbrowser.png create mode 100644 doc/sv/dirmergebig.png create mode 100644 doc/sv/index.docbook create mode 100644 doc/sv/iteminfo.png create mode 100644 doc/sv/letter_by_letter.png create mode 100644 doc/sv/merge_current.png create mode 100644 doc/sv/new.png create mode 100644 doc/sv/open_dialog.png create mode 100644 doc/sv/screenshot_diff.png create mode 100644 doc/sv/screenshot_merge.png create mode 100644 doc/sv/triple_diff.png create mode 100644 doc/sv/white_space.png create mode 100644 kdiff3.kdevelop create mode 100644 kdiff3.spec create mode 100644 kdiff3plugin/Makefile.am create mode 100644 kdiff3plugin/kdiff3_plugin.desktop create mode 100755 kdiff3plugin/kdiff3plugin.cpp create mode 100644 kdiff3plugin/kdiff3plugin.desktop create mode 100755 kdiff3plugin/kdiff3plugin.h create mode 100644 kdiff3plugin/po/Makefile create mode 100644 kdiff3plugin/po/Makefile.am create mode 100644 kdiff3plugin/po/bg.po create mode 100644 kdiff3plugin/po/br.po create mode 100644 kdiff3plugin/po/cs.po create mode 100644 kdiff3plugin/po/da.po create mode 100644 kdiff3plugin/po/de.po create mode 100644 kdiff3plugin/po/el.po create mode 100644 kdiff3plugin/po/et.po create mode 100644 kdiff3plugin/po/ga.po create mode 100644 kdiff3plugin/po/it.po create mode 100644 kdiff3plugin/po/nl.po create mode 100644 kdiff3plugin/po/pt.po create mode 100644 kdiff3plugin/po/pt_BR.po create mode 100644 kdiff3plugin/po/sk.po create mode 100644 kdiff3plugin/po/sv.po create mode 100644 kdiff3plugin/po/tr.po create mode 100644 po/Makefile.am create mode 100644 po/README create mode 100644 po/ar.po create mode 100644 po/az.po create mode 100644 po/bg.po create mode 100644 po/br.po create mode 100644 po/ca.po create mode 100644 po/createqm create mode 100644 po/cs.po create mode 100644 po/cvsgetpo create mode 100644 po/cy.po create mode 100644 po/da.po create mode 100644 po/de.po create mode 100644 po/el.po create mode 100644 po/en_GB.po create mode 100644 po/es.po create mode 100644 po/et.po create mode 100644 po/fr.po create mode 100644 po/ga.po create mode 100644 po/gl.po create mode 100644 po/hi.po create mode 100644 po/hu.po create mode 100644 po/is.po create mode 100644 po/it.po create mode 100644 po/ja.po create mode 100644 po/ka.po create mode 100644 po/kdiff3.pot create mode 100644 po/lt.po create mode 100644 po/nb.po create mode 100644 po/nl.po create mode 100644 po/pl.po create mode 100644 po/pt.po create mode 100644 po/pt_BR.po create mode 100644 po/ro.po create mode 100644 po/ru.po create mode 100644 po/rw.po create mode 100644 po/sk.po create mode 100644 po/sr.po create mode 100644 po/sr@Latn.po create mode 100644 po/sv.po create mode 100644 po/ta.po create mode 100644 po/tg.po create mode 100644 po/tr.po create mode 100644 po/uk.po create mode 100644 po/zh_CN.po create mode 100644 src/Makefile.am create mode 100644 src/Makefile.qt create mode 100644 src/ccInstHelper.cpp create mode 100644 src/common.cpp create mode 100644 src/common.h create mode 100644 src/diff.cpp create mode 100644 src/diff.h create mode 100644 src/difftextwindow.cpp create mode 100644 src/difftextwindow.h create mode 100644 src/directorymergewindow.cpp create mode 100644 src/directorymergewindow.h create mode 100644 src/fileaccess.cpp create mode 100644 src/fileaccess.h create mode 100644 src/gnudiff_analyze.cpp create mode 100644 src/gnudiff_diff.h create mode 100644 src/gnudiff_io.cpp create mode 100644 src/gnudiff_system.h create mode 100644 src/gnudiff_xmalloc.cpp create mode 100644 src/hi16-app-kdiff3.png create mode 100644 src/hi32-app-kdiff3.png create mode 100644 src/kdiff3.cpp create mode 100644 src/kdiff3.desktop create mode 100644 src/kdiff3.h create mode 100644 src/kdiff3.ico create mode 100644 src/kdiff3.lsm create mode 100644 src/kdiff3.pro create mode 100644 src/kdiff3.rc create mode 100644 src/kdiff3_meta_unload.cpp create mode 100644 src/kdiff3_part.cpp create mode 100644 src/kdiff3_part.h create mode 100644 src/kdiff3_part.rc create mode 100644 src/kdiff3_shell.cpp create mode 100644 src/kdiff3_shell.h create mode 100644 src/kdiff3_shell.rc create mode 100644 src/kdiff3part.desktop create mode 100644 src/kreplacements/README create mode 100755 src/kreplacements/ShellContextMenu.cpp create mode 100644 src/kreplacements/ShellContextMenu.h create mode 100644 src/kreplacements/kaboutdata.h create mode 100644 src/kreplacements/kaccel.h create mode 100644 src/kreplacements/kaction.h create mode 100644 src/kreplacements/kapplication.h create mode 100644 src/kreplacements/kcmdlineargs.h create mode 100644 src/kreplacements/kcolorbtn.h create mode 100644 src/kreplacements/kconfig.h create mode 100644 src/kreplacements/kdialogbase.h create mode 100644 src/kreplacements/kedittoolbar.h create mode 100644 src/kreplacements/kfiledialog.h create mode 100644 src/kreplacements/kfontdialog.h create mode 100644 src/kreplacements/kiconloader.h create mode 100644 src/kreplacements/kinstance.h create mode 100644 src/kreplacements/kio/global.h create mode 100644 src/kreplacements/kio/job.h create mode 100644 src/kreplacements/kio/jobclasses.h create mode 100644 src/kreplacements/kkeydialog.h create mode 100644 src/kreplacements/klibloader.h create mode 100644 src/kreplacements/klocale.h create mode 100644 src/kreplacements/kmainwindow.h create mode 100644 src/kreplacements/kmenubar.h create mode 100644 src/kreplacements/kmessagebox.h create mode 100644 src/kreplacements/konq_popupmenu.h create mode 100644 src/kreplacements/kparts/factory.h create mode 100644 src/kreplacements/kparts/mainwindow.h create mode 100644 src/kreplacements/kparts/part.h create mode 100644 src/kreplacements/kpopupmenu.h create mode 100644 src/kreplacements/kprinter.h create mode 100644 src/kreplacements/kprogress.h create mode 100644 src/kreplacements/kreplacements.cpp create mode 100644 src/kreplacements/kreplacements.h create mode 100644 src/kreplacements/kstandarddirs.h create mode 100644 src/kreplacements/kstatusbar.h create mode 100644 src/kreplacements/kstdaction.h create mode 100644 src/kreplacements/ktempfile.h create mode 100644 src/kreplacements/kunload.h create mode 100644 src/kreplacements/kurl.h create mode 100644 src/kreplacements/kurldrag.h create mode 100644 src/lo16-app-kdiff3.png create mode 100644 src/lo32-app-kdiff3.png create mode 100644 src/main.cpp create mode 100644 src/merger.cpp create mode 100644 src/merger.h create mode 100644 src/mergeresultwindow.cpp create mode 100644 src/mergeresultwindow.h create mode 100644 src/optiondialog.cpp create mode 100644 src/optiondialog.h create mode 100644 src/pdiff.cpp create mode 100644 src/smalldialogs.cpp create mode 100644 src/smalldialogs.h create mode 100644 src/version.h create mode 100644 src/xpm/autoadvance.xpm create mode 100644 src/xpm/currentpos.xpm create mode 100644 src/xpm/down1arrow.xpm create mode 100644 src/xpm/down2arrow.xpm create mode 100644 src/xpm/downend.xpm create mode 100644 src/xpm/file.xpm create mode 100644 src/xpm/filenew.xpm create mode 100644 src/xpm/fileopen.xpm create mode 100644 src/xpm/fileprint.xpm create mode 100644 src/xpm/filesave.xpm create mode 100644 src/xpm/folder.xpm create mode 100644 src/xpm/iconA.xpm create mode 100644 src/xpm/iconB.xpm create mode 100644 src/xpm/iconC.xpm create mode 100644 src/xpm/link_arrow.xpm create mode 100644 src/xpm/nextunsolved.xpm create mode 100644 src/xpm/prevunsolved.xpm create mode 100644 src/xpm/reload.xpm create mode 100644 src/xpm/showequalfiles.xpm create mode 100644 src/xpm/showfilesonlyina.xpm create mode 100644 src/xpm/showfilesonlyinb.xpm create mode 100644 src/xpm/showfilesonlyinc.xpm create mode 100644 src/xpm/showlinenumbers.xpm create mode 100644 src/xpm/showwhitespace.xpm create mode 100644 src/xpm/showwhitespacechars.xpm create mode 100644 src/xpm/startmerge.xpm create mode 100644 src/xpm/up1arrow.xpm create mode 100644 src/xpm/up2arrow.xpm create mode 100644 src/xpm/upend.xpm create mode 100644 stamp-h.in create mode 100644 subdirs create mode 100644 templates/cpp create mode 100644 templates/h diff --git a/AUTHORS b/AUTHORS new file mode 100644 index 0000000..e4781f1 --- /dev/null +++ b/AUTHORS @@ -0,0 +1 @@ +Joachim Eibl diff --git a/COPYING b/COPYING new file mode 100644 index 0000000..f3551af --- /dev/null +++ b/COPYING @@ -0,0 +1,340 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 51 Franklin Steet, Fifth Floor, Boston, MA 02110-1301 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 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. diff --git a/ChangeLog b/ChangeLog new file mode 100755 index 0000000..ba9ead6 --- /dev/null +++ b/ChangeLog @@ -0,0 +1,460 @@ +Version 0.9.92 - 2007/04/15 +=========================== +- Windows installer now allows to install KDiff3 as Clearcase Diff and Merge Tool +- Windows installer "SVN Merge tool" corrected: Not creating $AppData\Subversion\config subdir anymore. +- KDE-Konqueror plugin: Launch KDiff3 from Konqueror. (Similar to Diff-Ext on Windows.) +- Qt4-version + - Printing crash fixed + - Compilation issue for Mac fixed +- Dir Rescan keeps settings for Show identical files etc. +- Bugfix: Empty file and not existing file were detected as binary equal. +- Temp file names use the process id in file name to allow several instances. +- Suppress flicker during startup. (Don't show status info window on creation.) +- New File comparison mode: Trust the size and date, but use binary comparison if date doesn't match (unsafe) +- After explicitely selecting files any file of the selected may be right clicked for context menu. +- Open dialog also shows current directories in directory comparison mode. +- Writing a file via --auto option didn't work for relative files. (Reported by Guilhem Bichot) +- New option for history merge: Max number of history entries +- New option "Auto save and quit on merge without conflicts" +- Directory Merge with Case sensitivity disabled: Correct destination filename chosen for merge. + +Version 0.9.91 - 2006/10/29 +=========================== +- Encoding auto detection +- Fix for crash after double click below last line +- Saving of maximized window-state (Patch by Robert Vock) +- Separated Merge-options in own tab because "Diff and Merge"-options tab got too big. +- When pasting multiple lines into openfile dialog only first line is kept +- Drawing in directory view fixed. +- When specifying a separate output dir then for equal files a copy operation will also be offered. +- Windows specific: + - Windows installer problems fixed for users without admin-rights + - Fix for slow startup problem on Windows (Patch by Manfred Koehler) + - New: diff-ext-for-kdiff3 - Shell extension (originally by Sergey Zorin) +- Qt4-version: + - Saving of merge-result didn't work. + - Start external processes directly without cmd.exe-window + - Rewrote everything requiring Qt3-support + +Version 0.9.90 - 2006/05/14 +=========================== +- Fixed KIO-problems of type "File exists" with tempfiles (introduced in 0.9.89) +- Fix for manual alignment with 3 files which caused crash (new feature in 0.9.89) +- Fix for Alt-Left caused crash for leftmost window on windows (due to changed compiler) +- Use of WResizeNoErase|WRepaintNoErase instead of WNoAutoErase (fix for compiler error with Qt3.1) +- Removed #include which is (currently) unneeded and required extra dependencies. +- Removed "Save/Load Directory Merge State ..." in directory menu. (These aren't working yet.) +- Fixed crash when used as Diff-part with KDevelop. +- Preserve executable bit when overwriting an existing file. + +Version 0.9.89 - 2006/04/09 +=========================== +New features: +- Version control history auto merge plus sorting +- Auto merge regular expression +- Splitting and joining differences for merging +- Manual Diff Alignment tool +- Printing of differences +- Colorsettings for Dir-Colors +- Dir-show identical/different/A-only/B-only/C-only files with immediate effect (instead of option "List only deltas") +- Filename-edit above DiffInputWindows +- Windows-Context Menu in A/B/C-columns for dir-comparison (Windows only) +- Edit Menu: Select All (Ctrl-A) +- New commandline options: + --config filename: Select an individual config file. (Now also available for Windows and Qt-only version.) + --cs config: Change one specific setting via the command line. (For settings that were previously adjustable via GUI only.) + --confighelp: Show available config items and their current values. +- Dircomp: "Compare/Merge explicitly selected files" (Select files/dirs by clicking icons in columns A/B/C) +- User definable ignored command line options. +- Ability to swap pathnames in open dialog +- "Ignore"-button in error dialog when option not understood (Windows only) +- Quadratical scroll speedup during selection when mouse moves out of the diff input window. +Bugfixes, redesign: +- Preparations for Qt4-Port + some redesign +- GNU-Diff algorithm improved to be independent of line endings (needed for manual diff alignment) +- Avoid restoring a window where it is almost invisible (if moved almost out of the screen area) +- Go to next delta honors special "A vs. B", "A vs. C" or "B vs. C" overview when active. (Patch by Vladan Bato) +- DirectoryMergeWindow: File/Antifile and DirPattern changes will update immediately without rescan. +- Blue toolbar icons (for better visibility of disabled state) +- Bugfix: Crash when merging and selecting "Choose A/B/C for all unsolved conflicts" + and one of the solved conflicts contained no lines in chosen input. +- Fix: With --auto option, GUI stays invisible if not necessary +- Fixed odd ProgressDialog-behaviour when continuing after an error or abort. +- Directory merge: Fixed FollowFileLinks. (Didn't work when copying a file.) +- Initial position now (x=0,y=22). This solves a problem on some Macs. +- Better alignment of B and C in 3-file comparison +- Correctly updating the selection when scrolling via keys and mouse is pressed +- Horizontal scrolling in right-to-left language caused vertical lines - fixed. + + +Version 0.9.88 - 2005/25/02 +=========================== +- Fixed crash that occurred in Directory Comparison mode "Full-Analysis". +- Fix for Windows: Didn't save encoding correctly. +- Many translations updated. + +Version 0.9.87 - 2005/30/01 +=========================== +- Unicode16 and UTF8 support (Internal data format is now QString (Unicode16). Conversion during save and load.) +- Directory "Full Analysis": Equality-Coloring for files with only whitespace differences. (Michael Denio) +- Support for right to left languages. +- In MergeResultWindow show "" for whitespace-only conflicts +- Statusbar shows the number of remaining conflicts and whitespace conflicts. +- Go Next/Prev Difference/Conflict now have improved tooltips informing about "Show White Space"-disabled-behaviour. + +Version 0.9.86 - 2004/06/14 +=========================== +- Double click on any file in directory merge would close the directory merge window. (Regression in 0.9.85) + +Version 0.9.85 - 2004/06/14 +=========================== +- When solving a conflict KDiff3 reports the number of remaining unsolved conflicts in the status bar. +Bugfixes: +- Fix for MergeResultWindow-contextmenu: All items were disabled always. (new in 0.9.84) +- Fix for problem when opening files specified relative to current directory. (new in 0.9.84, qt-only-version) +- Fix for compilation with older gcc (2.9x) +- Several Word-wrap problems fixed: + - Find string with word wrap active didn't work if found text was not in first wrap-line. + - overview-position was not updated when toggling word wrap + - horizontal scrollbar was not updated when toggling word wrap + - current selection was lost when toggling word wrap + - selecting a conflict in the diff-text-window didn't work right with word wrap. +- Qt-only: Bold attribute for fonts was not persistent +- Qt-only: Toolbar position was not persistent +- Qt-only: Language-choice shows also the full language name. +- Cursor and windows-boundary-lines were always black instead of having the foreground color +- Starting KDiff3 with two not existing files showed a dialog saying that files are binary equal. +- Errors while starting a directory comparison now also reopens the open-dialog. +- Speedup during directory comparison by avoiding unnecessary redraws. (These always creep in again :-() +- On KDE: When resetting to default options (or first start) now the default KDE-fixed font will be used. +- Mergeresultwindow: Improved behaviour after automatic merge operation. + +Version 0.9.84 - 2004/05/29 +============================ +New Features: +- Word Wrap for DiffTextWindow +- Directory-Comparison: Option "Full Analysis" allows to show the number of solved vs. unsolved + conflicts or deltas vs. whitespace-changes in the directory tree. +- Diff-Menu for Diff-view specific entries +- Docs now contain a new chapter for uses of preprocessor and line-matching-preprocessor. +- Added several credits which now are also visible in the Qt-only version. +- The Qt-only version now also shows all command-line options. Under windows a dialog shows them. +- Command line options -u and -L for Subversion-support. +- Command line options --L1/2/3 for specifying alias names. +- In the Qt-only-version the user-interface-language can be set via the regional-settings + (only effective after a restart). +- ProgressDialog redesign for recursive use. +- Overview now allows to show the delta between two other files in triplediff-mode. +- Option to ignore case which treats case-changes like white space (instead of conversion to upcase). +Bugfixes: +- Dir-Comp: When one file exists, but the other doesn't then instead the latest used other file was displayed. +- Open dialog: When previously a file C was used, but should be empty now, it reappeared unbidden. +- Several bugs for 64-bit systems fixed. +- Fixed crash when one file ended with a newline and the other did not. +- Windows: Case insensitive filename-pattern matching. +- Corrected behaviour for files with size 0. +- Fix for crash due to a race-condition (Patch by Eike Sauer) +- Windows: Scrolling didn't work right when another window was in front. +- Mergeresultwindow didn't show correct position when starting a second or later merge. +- Fix for problem where sometimes the A/B/C-buttons were in wrong state. +- Pasting from selection via the middle mousebutton. + +Version 0.9.83 - 2004/03/06 +=========================== +- Reading directorys fixed for Win95/98 +- Caseinsensitive filename matching for windows. +- Autocopy to selection for systems that support this. (Patch by Stefan Partheymueller) +- Drawing during recalc suppressed in merge result editor. +- Cursor could go beyond last line in merge result editor. (Corrected NrOfLine-counting.) +- Windows: Start with invalid cmd-line-options brings up a messagebox with the list of options. +- Corrected encoding when copying to or pasting from clipboard. +- Corrected char-by-char-diff at beginning of line. ("012345 12345 xyz" <-> "012345 xyz") +- Warning when merging with preprocessor or upcase-conversion enabled. +- Rewrite of preprocessing code should fix several problems. E.g.: + - Ignore C/C++-comments only worked with a preprocessor active. + - Preprocessor output now is input of line-matching preprocessor. + - Paste to diff-window, didn't work if LMPP or Ignore C/C++-Comments was set. + +Version 0.9.82 - 2004/02/02 +=========================== +- DirectoryMerge: Running merge op for last item in a folder, performed the + merge op for all following items in following folders. (Possible data loss!) +- Fix: Preprocessors and "Ignore Comments" didn't work at the same time. +- Fix: Preprocessors crashed with remote files. +- Open-Dialog: When either input is changed, then reset the output to be empty. + (To avoid accidental overwrites.) +- Icon for "Highlight white space differences." +- Editor-Option: Line End Style for saving: Dos/Windows "\r\n" vs. Unix "\n" +- Merge output editor: Corrected wrong encoding for output-filename and + user-typed characters. +- Speedup for reading directories under Windows. +- Enhanced progress dialog responsiveness during local file copy. +- Fix for non-KDE-version: No URL-encoding when dropping files in open dialog. + +Version 0.9.81 - 2004/01/08 +=========================== +- Allow to compile with --enable-final +- Bugfix for 3 file-compare (and A or B don't exist, crashed) +- Bugfix for crash when second directory is merged +- Some keyboard-shortcuts for selection of merge-operation didn't work correctly. +- Shortcuts Ctrl-1/2/3 are possible in textmergewindow and in dirmergewindow, + depending on the focus. +- First steps towards internationalisation +- Manpage doc/en/kdiff3.1 by Eike Sauer (for Debian) +- Directory rescan shortcut SHIFT-F5 + +Version 0.9.80 - 2003/12/08 +=========================== +New Text Diff/Merge Features: +- Now using GNU-diff algorithms internally. (Option "External Diff" removed.) +- Option for treating C/C++ comments as whitespace during diff. +- Bugfix for locale character encoding (+ new option "Use string encoding") +- Option for suppressing highlighting in white-space changes. + (Also suppresses highlighting in comments and numbers when the + respective options are active.) +- Merge-menu: Choose A/B/C for all unsolved conflicts. + Choose A/B/C for all unsolved whitespace conflicts. +- Options to automatically choose a certain source for whitespace conflicts. +- Shorcut F5 now used to reload the current file. + +New Directory-Comparison/Merge Features: +- Option to trust filesize. (Some directory services don't copy the date/time correctly.) +- Shortcut F7 now starts complete directory merge (previously F5). +- Do the selected merge operation for the selected file/dir only + "Run Operation For Current Item" (F6). +- Shortcuts for selecting the merge operation for the selected item. + Ctrl-1/2/3/4/Del select A/B/C/Merge/Delete respectively. + +Other Improvements: +- Several i18n-corrections (by Stephan Binner) +- Bugfix for option CVS-ignore: Didn't work correctly in subdirectories. +- Bugfix for remote operations: Operation can now be aborted, when KIO-slaves doesn't respond. +- Cancel-Button in progress bar. +- Default diff-view now again side by side instead of one above the other. + + +Version 0.9.71 - 2003/10/17 +=========================== +- Windows-Installer by Sebastien Fricker. +- Bugfixes for Windows. (Problems with setFont() in paintEvent().) +- Default font for Windows now "Courier New" (instead of Courier) +- Fix for compilation with gcc 2.95 +- Support for Ctrl-Tab under Windows. +- Fix for finding documentation. +- Fix for problem with directory-sync-mode (new in 0.9.70). +- Fix for several subsequent CR-characters in input file. + +Version 0.9.70 - 2003/09/28 +=========================== +- Transparent access to URLs via KIO (KDE only): + Compare files and directories on ftp, fish, smb, tar etc. ressources. +- Workaround for a Win32-bug (Crashed sometimes during selections) +- When the merge flag is selected in the open dialog, the directory-tool + always starts a merge by default for each file. Without the flag only a + diff will be started by default. +- Immediately showing progress bar in dir scan. +- Showing progress bar for file comparison too. +- Directory-menu: Fold/Unfold all subdirs +- Bugfix for 3-way auto-merge: A line deleted from the base in B and C + resulted in a empty line instead of being completely removed. +- Improved locale support +- KDiff3 is now a KPart + - in KDevelop3 it can be used to compare the current text with the + last saved version, or the current version on disk with the last cvs version. + - in Konqueror it can be used to look at a unified *.patch-file if one complete + version is available too. +- Documentation is now in docbook-format. +- "Toggle Split Orientation" for Diff-Input windows. (Good for long lines.) +- When "Dir and Text Split-Screen-View" is off: Now "Focus Next/Prev Window" + also toggles between dir and text-windows. Selecting a file via double click + switches to text-screen. +- KDiff3 displays a warning when trying to read a dir without the permission. +- Directory-Diff-Option "Use CVS-Ignore" to ignore files like CVS does. +- Displaying a status message at the end of the directory-comparison. +- Cursor in MergeResultWindow is automatically placed at current difference when a jump occurred. + (But not when something was selected.) +- Fix for cursor blinking in the topline of the MergeResultWindow. + + +Version 0.9.61 - 2003/06/07 +=========================== +- Compilation problem fixed. +- Directory merge: Preserving file attributes and times during copy. (now also for Win32) +- Crash fixed, when directory comparison from the command-line was started. + + +Version 0.9.60 - 2003/06/01 +=========================== +New features: +- New ways to select input for the diff window: + - Pasting clipboard text into a diff window. + - Drag and drop a file from a filemanager (e.g. konqueror) onto a diff window. + - Drag and drop text from an editor (e.g. kate) onto a diff window. + Reanalysis starts immediately if no merge is in progress. + (This should help you to compare similar parts in the same file.) +- New/Deleted white lines are now also considered as white deltas. +- Configurable keyboard shortcuts for most actions (KDE version only). +- The overview now also distinguishes whitespace deltas. +New preprocessor options: +- You can now define your own external Preprocessor and LineMatchingPreprocessor: +- "Convert to upper case", +- "Ignore numbers" +Fixed bugs: +- Directory merge: Preserving file attributes and times during copy. + (not for Win32 yet) +Source-tree-structure: +- Switch to KDevelop3 (Gideon): Renamed subdir "kdiff3" to "src". +- xpm-files in xpm-subdirectory. + + +Version 0.9.51 - 2003/04/14 +=========================== +- Compilation fix for gcc 2.95. + + +Version 0.9.50 - 2003/03/30 +=========================== +Fixed bugs: +- Auto-Advance setting was lost when entering the settings-dialog. +- Windows specific: Keys with AltGr-Combination didn't work. +- Windows 95/98/ME: Fixed crash when KDiff3 is called used without parameters, + and corrected support for external diff. +New Features: +- Search-function: Search for a string in all open text windows. +- Special background colors for current region. +- Button to toggle showing of whitespace in differences. +- Buttons to go to next/prev unsolved (!) conflict. +- While auto-advance waits, no more choices are allowed. +- New setting: Auto-advance-delay. + (Note that with delay 0 fast clicks might be detected as double clicks and the second + click does nothing. My advice: Prefer the keyboard-shortcuts Ctrl-1/2/3) +- Functions to Show/Hide Diff Window A, B or C. The other windows then have more space. +- Merge editor: The right mouse button selects the current region and lets you choose + A, B or C via a popup menu. +- Commandline option --auto: No GUI if all conflicts are auto-solvable. +- When equal files are compared, then a message box informs you. +- Merge current file: When comparing two or three files, the merge can be started with a single click. +- Option dialog: Warning for "Defaults" added, because it resets all options. +- A warning is given, when the user tries to merge binary files. (i.e. files that contain '\0'-bytes) +Changed behaviour: +- 3 file automerge: When for a line B==C (and A!=B) then C will be selected. + (In older versions this was a conflict. I was convinced that this is no problem.) +- Auto-Advance now jumps to next unsolved (!) conflict. +- On 256-color-displays KDiff3 uses them. (Previously KDiff3 only used 16 colors.) +- On 16-color-displays the Defaults-button in the options dialog selects special colors. + + +Version 0.941 - 2003/02/09 +========================== +Fixed bugs: +- Qt-only-version: Compile problem corrected. +- Documentation: Formatting for tables corrected. + + +Version 0.94 - 2003/02/09 +========================= +New features: +- Option to use external GNU-diff for line matching. + (Sometimes GNU-diff is better, sometimes not: You may choose now.) +- In diff-windows a tooltip shows the full path if you move the mouse on the filename. +- Speedup of directory-merge operations without user interaction. + (Not every item in the tree is made visible anymore. This took too long.) +- When opening a file for comparison or merge KDiff3 immediately shows the first difference. +- "Go To Top/Bottom"-action have been changed to "Go To First/Last Delta". +- Font-Option "Italic For Deltas" added. +- Many icons and actions will only be enabled, when the operation is possible. +- Icon for merge of current file in directory merge mode added. +- New action "Go to Current Delta". +- Conflicts where some lines contained only-white-space-changes are now separated from + other non-white-space-conflicts. +- Experimental: Use as replacement for ClearCase-cleardiffmrg.exe (under Windows only). + See main.cpp for details. + +Fixed bugs: +- If files were different, but had the same dates, the "not existant"-icon was + shown for one file. Now a error message will be shown if the option + "Copy newer instead of merging" is used. +- Documentation: Section "The Operation Column" corrected. +- Qt-only-version: Fontsize wasn't correctly restored. +- Keyboard accelerators didn't work for ToggleActions. + + +Version 0.931 - 2003/01/19 +========================== +Fix for compilation problems with gcc version < 3. + + +Version 0.93 - 2003/01/16 +========================= +New features: +- Directory comparison and merge. (More than 3000 new lines of code only here!!!) +- Open-Dialog: Filename specification: If no previous filename is there then start + directory is taken from another file. +- Message about number of found and automatically solved conflicts. +- Support for wheelmouse based scrolling. +- New option in Diff-tab: Preserve Carriage Return Characters + +Fixed bugs: +- Save button disabled until all conflicts are solved. +- Copy-operation conserves conflict messages "". +- Paste operation created pseudo conflicts when the clipboard contained empty lines. +- W95/98/ME specific program crash removed. + + +Version 0.92 - 2002/11/04 +========================= +Severe bug corrected: +- Merge menu: Choose A/B/C Everywhere sometimes lost data. (introduced in 0.9) + + +Version 0.91 - 2002/11/03 +========================= +Speed improvements for very big/complicated files: +- Faster analysis because of limited search range (can be adjusted). +- Faster scrolling and editor behaviour. + +Fixed bugs: +- Compilation problem with gcc 3.2 fixed. +- When comparing two lines, matching spaces often were undetected. +- Merge editor appended extra empty line when saving. +- Sometimes the next diff/conflict wasn't made visible. +- The Auto-Advance setting is saved now. +- When doing a merge the application now has modified-state, + even without further input. (The old method wasn't safe.) +- File selection now always in directory of respective file. + + +Version 0.9 - 2002/10/16 +======================== +New features: +- Qt-only support. Allows compilation under KDE2, Gnome, Mac, Windows, ... + Note that KDE3 still gets special treatment. +- For Mergers: Auto-Advance after selection, Choose A/B/C everwhere, ... +- Commandline: If files with same name in different directories + are compared, only the first parameter needs the filename. +- Shift-Del, Ctrl-Ins, Shift-Ins supported for Cut/Copy/Paste + +Fixed bugs: +- Make failed on some systems because of missing "minmax.h". +- Files where opened for reading, but not closed afterwards. +- Vertical scrollbar sometimes didn't work correctly. + + + +Version 0.81 - 2002/08/18 +========================= +New features: +- Now KDE3 is also supported. Previously only KDE2 was supported. +- Navigation via click into the overview column now supported. + +Fixed bugs: +- Some input files caused a crash in the diff-algorithm. +- The meaning of option "Ignore trivial matches" was inverted. +- When selecting a text in one window, this deselects any previously + active selection in the same or another window. + + + +Version 0.8 - 2002/07/28 +======================== +This is the first version to be released. diff --git a/Doxyfile b/Doxyfile new file mode 100644 index 0000000..bed3cc1 --- /dev/null +++ b/Doxyfile @@ -0,0 +1,236 @@ +# Doxyfile 1.3.7-KDevelop + +#--------------------------------------------------------------------------- +# Project related configuration options +#--------------------------------------------------------------------------- +PROJECT_NAME = kdiff3 +PROJECT_NUMBER = 0.9.85 +OUTPUT_DIRECTORY = +CREATE_SUBDIRS = NO +OUTPUT_LANGUAGE = English +USE_WINDOWS_ENCODING = NO +BRIEF_MEMBER_DESC = YES +REPEAT_BRIEF = YES +ABBREVIATE_BRIEF = +ALWAYS_DETAILED_SEC = NO +INLINE_INHERITED_MEMB = NO +FULL_PATH_NAMES = NO +STRIP_FROM_PATH = +STRIP_FROM_INC_PATH = +SHORT_NAMES = NO +JAVADOC_AUTOBRIEF = NO +MULTILINE_CPP_IS_BRIEF = NO +DETAILS_AT_TOP = NO +INHERIT_DOCS = YES +DISTRIBUTE_GROUP_DOC = NO +TAB_SIZE = 8 +ALIASES = +OPTIMIZE_OUTPUT_FOR_C = NO +OPTIMIZE_OUTPUT_JAVA = NO +SUBGROUPING = YES +#--------------------------------------------------------------------------- +# Build related configuration options +#--------------------------------------------------------------------------- +EXTRACT_ALL = YES +EXTRACT_PRIVATE = NO +EXTRACT_STATIC = NO +EXTRACT_LOCAL_CLASSES = YES +EXTRACT_LOCAL_METHODS = NO +HIDE_UNDOC_MEMBERS = NO +HIDE_UNDOC_CLASSES = NO +HIDE_FRIEND_COMPOUNDS = NO +HIDE_IN_BODY_DOCS = NO +INTERNAL_DOCS = NO +CASE_SENSE_NAMES = YES +HIDE_SCOPE_NAMES = NO +SHOW_INCLUDE_FILES = YES +INLINE_INFO = YES +SORT_MEMBER_DOCS = YES +SORT_BRIEF_DOCS = NO +SORT_BY_SCOPE_NAME = NO +GENERATE_TODOLIST = YES +GENERATE_TESTLIST = YES +GENERATE_BUGLIST = YES +GENERATE_DEPRECATEDLIST= YES +ENABLED_SECTIONS = +MAX_INITIALIZER_LINES = 30 +SHOW_USED_FILES = YES +#--------------------------------------------------------------------------- +# configuration options related to warning and progress messages +#--------------------------------------------------------------------------- +QUIET = NO +WARNINGS = YES +WARN_IF_UNDOCUMENTED = YES +WARN_IF_DOC_ERROR = YES +WARN_FORMAT = "$file:$line: $text" +WARN_LOGFILE = +#--------------------------------------------------------------------------- +# configuration options related to the input files +#--------------------------------------------------------------------------- +INPUT = /home/joachim/kdiff3 +FILE_PATTERNS = *.c \ + *.cc \ + *.cxx \ + *.cpp \ + *.c++ \ + *.java \ + *.ii \ + *.ixx \ + *.ipp \ + *.i++ \ + *.inl \ + *.h \ + *.hh \ + *.hxx \ + *.hpp \ + *.h++ \ + *.idl \ + *.odl \ + *.C \ + *.H \ + *.tlh \ + *.diff \ + *.patch \ + *.moc \ + *.xpm +RECURSIVE = YES +EXCLUDE = +EXCLUDE_SYMLINKS = NO +EXCLUDE_PATTERNS = +EXAMPLE_PATH = +EXAMPLE_PATTERNS = * +EXAMPLE_RECURSIVE = NO +IMAGE_PATH = +INPUT_FILTER = +FILTER_SOURCE_FILES = NO +#--------------------------------------------------------------------------- +# configuration options related to source browsing +#--------------------------------------------------------------------------- +SOURCE_BROWSER = NO +INLINE_SOURCES = NO +STRIP_CODE_COMMENTS = YES +REFERENCED_BY_RELATION = YES +REFERENCES_RELATION = YES +VERBATIM_HEADERS = YES +#--------------------------------------------------------------------------- +# configuration options related to the alphabetical class index +#--------------------------------------------------------------------------- +ALPHABETICAL_INDEX = NO +COLS_IN_ALPHA_INDEX = 5 +IGNORE_PREFIX = +#--------------------------------------------------------------------------- +# configuration options related to the HTML output +#--------------------------------------------------------------------------- +GENERATE_HTML = YES +HTML_OUTPUT = html +HTML_FILE_EXTENSION = .html +HTML_HEADER = +HTML_FOOTER = +HTML_STYLESHEET = +HTML_ALIGN_MEMBERS = YES +GENERATE_HTMLHELP = NO +CHM_FILE = +HHC_LOCATION = +GENERATE_CHI = NO +BINARY_TOC = NO +TOC_EXPAND = NO +DISABLE_INDEX = NO +ENUM_VALUES_PER_LINE = 4 +GENERATE_TREEVIEW = NO +TREEVIEW_WIDTH = 250 +#--------------------------------------------------------------------------- +# configuration options related to the LaTeX output +#--------------------------------------------------------------------------- +GENERATE_LATEX = NO +LATEX_OUTPUT = latex +LATEX_CMD_NAME = latex +MAKEINDEX_CMD_NAME = makeindex +COMPACT_LATEX = NO +PAPER_TYPE = a4wide +EXTRA_PACKAGES = +LATEX_HEADER = +PDF_HYPERLINKS = NO +USE_PDFLATEX = NO +LATEX_BATCHMODE = NO +LATEX_HIDE_INDICES = NO +#--------------------------------------------------------------------------- +# configuration options related to the RTF output +#--------------------------------------------------------------------------- +GENERATE_RTF = NO +RTF_OUTPUT = rtf +COMPACT_RTF = NO +RTF_HYPERLINKS = NO +RTF_STYLESHEET_FILE = +RTF_EXTENSIONS_FILE = +#--------------------------------------------------------------------------- +# configuration options related to the man page output +#--------------------------------------------------------------------------- +GENERATE_MAN = NO +MAN_OUTPUT = man +MAN_EXTENSION = .3 +MAN_LINKS = NO +#--------------------------------------------------------------------------- +# configuration options related to the XML output +#--------------------------------------------------------------------------- +GENERATE_XML = NO +XML_OUTPUT = xml +XML_SCHEMA = +XML_DTD = +XML_PROGRAMLISTING = YES +#--------------------------------------------------------------------------- +# configuration options for the AutoGen Definitions output +#--------------------------------------------------------------------------- +GENERATE_AUTOGEN_DEF = NO +#--------------------------------------------------------------------------- +# configuration options related to the Perl module output +#--------------------------------------------------------------------------- +GENERATE_PERLMOD = NO +PERLMOD_LATEX = NO +PERLMOD_PRETTY = YES +PERLMOD_MAKEVAR_PREFIX = +#--------------------------------------------------------------------------- +# Configuration options related to the preprocessor +#--------------------------------------------------------------------------- +ENABLE_PREPROCESSING = YES +MACRO_EXPANSION = NO +EXPAND_ONLY_PREDEF = NO +SEARCH_INCLUDES = YES +INCLUDE_PATH = +INCLUDE_FILE_PATTERNS = +PREDEFINED = +EXPAND_AS_DEFINED = +SKIP_FUNCTION_MACROS = YES +#--------------------------------------------------------------------------- +# Configuration::additions related to external references +#--------------------------------------------------------------------------- +TAGFILES = +GENERATE_TAGFILE = +ALLEXTERNALS = NO +EXTERNAL_GROUPS = YES +PERL_PATH = /usr/bin/perl +#--------------------------------------------------------------------------- +# Configuration options related to the dot tool +#--------------------------------------------------------------------------- +CLASS_DIAGRAMS = YES +HIDE_UNDOC_RELATIONS = YES +HAVE_DOT = NO +CLASS_GRAPH = YES +COLLABORATION_GRAPH = YES +UML_LOOK = NO +TEMPLATE_RELATIONS = YES +INCLUDE_GRAPH = YES +INCLUDED_BY_GRAPH = YES +CALL_GRAPH = NO +GRAPHICAL_HIERARCHY = YES +DOT_IMAGE_FORMAT = png +DOT_PATH = +DOTFILE_DIRS = +MAX_DOT_GRAPH_WIDTH = 1024 +MAX_DOT_GRAPH_HEIGHT = 1024 +MAX_DOT_GRAPH_DEPTH = 0 +GENERATE_LEGEND = YES +DOT_CLEANUP = YES +#--------------------------------------------------------------------------- +# Configuration::additions related to the search engine +#--------------------------------------------------------------------------- +SEARCHENGINE = NO diff --git a/INSTALL b/INSTALL new file mode 100644 index 0000000..0eaa759 --- /dev/null +++ b/INSTALL @@ -0,0 +1,168 @@ +Basic Installation +================== + + These are generic installation instructions. + Please read the README-file for most needed steps first. + + The `configure' shell script attempts to guess correct values for +various system-dependent variables used during compilation. It uses +those values to create a `Makefile' in each directory of the package. +It may also create one or more `.h' files containing system-dependent +definitions. Finally, it creates a shell script `config.status' that +you can run in the future to recreate the current configuration, a file +`config.cache' that saves the results of its tests to speed up +reconfiguring, and a file `config.log' containing compiler output +(useful mainly for debugging `configure'). + + If you need to do unusual things to compile the package, please try +to figure out how `configure' could check whether to do them, and mail +diffs or instructions to the address given in the `README' so they can +be considered for the next release. If at some point `config.cache' +contains results you don't want to keep, you may remove or edit it. + + The file `configure.in' is used to create `configure' by a program +called `autoconf'. You only need `configure.in' if you want to change +it or regenerate `configure' using a newer version of `autoconf'. + +The simplest way to compile this package is: + + 1. `cd' to the directory containing the package's source code and type + `./configure' to configure the package for your system. If you're + using `csh' on an old version of System V, you might need to type + `sh ./configure' instead to prevent `csh' from trying to execute + `configure' itself. + + Running `configure' takes a while. While running, it prints some + messages telling which features it is checking for. + + 2. Type `make' to compile the package. + + 3. Type `make install' to install the programs and any data files and + documentation. + + 4. You can remove the program binaries and object files from the + source code directory by typing `make clean'. + +Compilers and Options +===================== + + Some systems require unusual options for compilation or linking that +the `configure' script does not know about. You can give `configure' +initial values for variables by setting them in the environment. Using +a Bourne-compatible shell, you can do that on the command line like +this: + CC=c89 CFLAGS=-O2 LIBS=-lposix ./configure + +Or on systems that have the `env' program, you can do it like this: + env CPPFLAGS=-I/usr/local/include LDFLAGS=-s ./configure + +Compiling For Multiple Architectures +==================================== + + You can compile the package for more than one kind of computer at the +same time, by placing the object files for each architecture in their +own directory. To do this, you must use a version of `make' that +supports the `VPATH' variable, such as GNU `make'. `cd' to the +directory where you want the object files and executables to go and run +the `configure' script. `configure' automatically checks for the +source code in the directory that `configure' is in and in `..'. + + If you have to use a `make' that does not supports the `VPATH' +variable, you have to compile the package for one architecture at a time +in the source code directory. After you have installed the package for +one architecture, use `make distclean' before reconfiguring for another +architecture. + +Installation Names +================== + + By default, `make install' will install the package's files in +`/usr/local/bin', `/usr/local/man', etc. You can specify an +installation prefix other than `/usr/local' by giving `configure' the +option `--prefix=PATH'. + + You can specify separate installation prefixes for +architecture-specific files and architecture-independent files. If you +give `configure' the option `--exec-prefix=PATH', the package will use +PATH as the prefix for installing programs and libraries. +Documentation and other data files will still use the regular prefix. + + If the package supports it, you can cause programs to be installed +with an extra prefix or suffix on their names by giving `configure' the +option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'. + +Optional Features +================= + + Some packages pay attention to `--enable-FEATURE' options to +`configure', where FEATURE indicates an optional part of the package. +They may also pay attention to `--with-PACKAGE' options, where PACKAGE +is something like `gnu-as' or `x' (for the X Window System). The +`README' should mention any `--enable-' and `--with-' options that the +package recognizes. + + For packages that use the X Window System, `configure' can usually +find the X include and library files automatically, but if it doesn't, +you can use the `configure' options `--x-includes=DIR' and +`--x-libraries=DIR' to specify their locations. + +Specifying the System Type +========================== + + There may be some features `configure' can not figure out +automatically, but needs to determine by the type of host the package +will run on. Usually `configure' can figure that out, but if it prints +a message saying it can not guess the host type, give it the +`--host=TYPE' option. TYPE can either be a short name for the system +type, such as `sun4', or a canonical name with three fields: + CPU-COMPANY-SYSTEM + +See the file `config.sub' for the possible values of each field. If +`config.sub' isn't included in this package, then this package doesn't +need to know the host type. + + If you are building compiler tools for cross-compiling, you can also +use the `--target=TYPE' option to select the type of system they will +produce code for and the `--build=TYPE' option to select the type of +system on which you are compiling the package. + +Sharing Defaults +================ + + If you want to set default values for `configure' scripts to share, +you can create a site shell script called `config.site' that gives +default values for variables like `CC', `cache_file', and `prefix'. +`configure' looks for `PREFIX/share/config.site' if it exists, then +`PREFIX/etc/config.site' if it exists. Or, you can set the +`CONFIG_SITE' environment variable to the location of the site script. +A warning: not all `configure' scripts look for a site script. + +Operation Controls +================== + + `configure' recognizes the following options to control how it +operates. + +`--cache-file=FILE' + Use and save the results of the tests in FILE instead of + `./config.cache'. Set FILE to `/dev/null' to disable caching, for + debugging `configure'. + +`--help' + Print a summary of the options to `configure', and exit. + +`--quiet' +`--silent' +`-q' + Do not print messages saying which checks are being made. + +`--srcdir=DIR' + Look for the package's source code in directory DIR. Usually + `configure' can determine that directory automatically. + +`--version' + Print the version of Autoconf used to generate the `configure' + script, and exit. + +`configure' also accepts some other, not widely useful, options. + diff --git a/Makefile.am b/Makefile.am new file mode 100644 index 0000000..8a2284f --- /dev/null +++ b/Makefile.am @@ -0,0 +1,22 @@ +SUBDIRS = $(TOPSUBDIRS) + +$(top_srcdir)/configure.in: configure.in.in $(top_srcdir)/subdirs + cd $(top_srcdir) && $(MAKE) -f admin/Makefile.common configure.in ; + +$(top_srcdir)/subdirs: + cd $(top_srcdir) && $(MAKE) -f admin/Makefile.common subdirs + +$(top_srcdir)/acinclude.m4: $(top_srcdir)/admin/acinclude.m4.in $(top_srcdir)/admin/libtool.m4.in + @cd $(top_srcdir) && cat admin/acinclude.m4.in admin/libtool.m4.in > acinclude.m4 + +MAINTAINERCLEANFILES = subdirs configure.in acinclude.m4 configure.files + +package-messages: + cd $(top_srcdir) && $(MAKE) -f admin/Makefile.common package-messages + $(MAKE) -C po merge + +EXTRA_DIST = admin COPYING configure.in.in + +dist-hook: + cd $(top_distdir) && perl admin/am_edit -padmin + cd $(top_distdir) && $(MAKE) -f admin/Makefile.common subdirs diff --git a/Makefile.cvs b/Makefile.cvs new file mode 100644 index 0000000..4c0afd1 --- /dev/null +++ b/Makefile.cvs @@ -0,0 +1,10 @@ +all: + @echo "This Makefile is only for the CVS repository" + @echo "This will be deleted before making the distribution" + @echo "" + $(MAKE) -f admin/Makefile.common cvs + +dist: + $(MAKE) -f admin/Makefile.common dist + +.SILENT: diff --git a/NEWS b/NEWS new file mode 100644 index 0000000..203ae39 --- /dev/null +++ b/NEWS @@ -0,0 +1 @@ +See the ChangeLog diff --git a/README b/README new file mode 100644 index 0000000..8b16f79 --- /dev/null +++ b/README @@ -0,0 +1,280 @@ +KDiff3-Readme +============= + +Author: Joachim Eibl (joachim.eibl at gmx.de) +Copyright: (C) 2002-2006 by Joachim Eibl +KDiff3-Version: 0.9.92 + + +KDiff3 is a program that +- compares and merges two or three input files or directories, +- shows the differences line by line and character by character (!), +- provides an automatic merge-facility and +- an integrated editor for comfortable solving of merge-conflicts +- has support for KDE-KIO (ftp, sftp, http, fish, smb) +- and has an intuitive graphical user interface, +- also supports 64 bit systems. (Some build issues are discussed in here.) + + +Do you want help translating? Read the README in the po-subdirectory! + + +License: + GNU GENERAL PUBLIC LICENSE, Version 2, June 1991 + 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., 51 Franklin Steet, Fifth Floor, Boston, MA 02110-1301 USA + + For details see file "COPYING". + +Exception from the GPL: + As a special exception, the copyright holder Joachim Eibl gives permission + to link this program with the Qt-library (commercial or non-commercial edition) + from Trolltech (www.trolltech.com), and he permits to distribute the resulting + executable, without including the source code for the Qt-library in the + source distribution. + + +Requirements & Installation: + Version 0.9.91 provides special support for KDE3, but it can also be + built without KDE3 if the Qt-libraries are available. + (I also test and use the program under Windows.) + It is now also possible to build with Qt4 (See further below). + + You always need + - kdiff3-0.9.91.tar.gz + + For building the KDE3-version + - KDE>=3.3 and QT>=3.3-libraries. (but not with KDE4) + - gcc, g++ with version >=3.2 + + For building the Qt-only-version + - QT-libraries (version >=3.3.0, but <4.0 or >=4.2.0). + (www.trolltech.com) + - for Un*x: gcc, g++ with version >=3.2 + - for Windows: VC6 / VC7.1 + + On some distributions it will be necessary to install developer + packages (RPMs) that contain include files for compilation: + - xorg-x11-devel (or x11-devel) + - qt-devel + - kdelibs-devel + +Installation for KDE3: + - Make sure your shell-variable QTDIR is correct. (echo $QTDIR). + If it doesn't contain the correct path, type + export QTDIR=your_path_to_qt (e.g. /usr/lib/qt3) + - cd into the directory kdiff3-0.9.91 and type + - ./configure --prefix=/opt/kde3 (your KDE3 directory here) + - (make clean) (Required if you already compiled once.) + - make (Run compilation) + - make install (You must have root-rights for this step.) + + For details also see the generic instructions in file "INSTALL". + + If some icons are not visible or don't seem right, probably the prefix + was wrong. Check where your KDE3 installation is located and + use that directory with the prefix-option of configure. + + This command should tell you: kde-config --prefix + + For SuSE and most distributions the prefix usually is /opt/kde3. + For Redhat/Fedora and Mandrake the prefix usually is /usr. + For a local installation, that doesn't need root rights try + - ./configure --prefix=$KDEHOME ($KDEHOME probably is the same as $HOME/.kde) + - make + - make install (Installs everything in $KDEHOME. No root rights required.) + - Run $KDEHOME/bin/kdiff3. ($KDEHOME/bin is probably not in your path.) + Warning: If a local installation and a global installation exist, the local + menu, toolbar, help etc. will be used, even if you start the global + executable. To avoid confusion, better remove the local version then. + (rm -R `find $KDEHOME -name "*kdiff3*" -not -name "kdiff3*rc"`) + + On Fedora-64-bit systems the following configure-line was reported to work: + ./configure --prefix=`kde-config --prefix` --enable-libsuffix=64 --with-qt-libraries=/usr/lib64/qt-3.3/lib/ + Both --enable-libsuffix=64 and -with-qt-libraries=/usr/lib64/qt-3.3/lib/ are needed; + without the first one it fails to find the KDE libraries, + and without the second one it fails to find libqt-mt + (strangely enough: libqt-mt is in /usr/lib64/qt-3.3/lib, + and "configure" tries /usr/lib64/qt-3.3/lib64) + If your qt-libraries are elsewhere please adapt the path accordingly. + + Some secondary dependencies aren't correctly discovered by configure. + If e.g the a linker error appears telling you something like + "Can't find -lacl" this probably means that you have to install + libacl-devel-*.rpm etc. + + If you run an older version of KDE and the make-process fails in the + doc- or po-directory, cd to the src-directory and run "make" there. Also run + "make install" there. This hopefully will create a working kdiff3-binary, + although without doc and language support. + +Upgrading KDiff3 for KDE: + If you already installed an older version or KDiff3 and you have the + impression, that the new version doesn't work as described, you should try to + remove all files belonging to KDiff3 before reinstalling. + Try this search command to locate KDiff3-related files: + find $HOME/.kde /usr /opt -iname "*kdiff3*" + (Will take a few minutes.) + + +Building an RPM for Fedora Core (by Vadim Likhota) + Copy kdiff3-0.9.91.tar.gz into /usr/src/redhat/SOURCE + Copy kdiff3.spec into /usr/src/redhat/SPEC + Run rpmbuild -bb --target i686 kdiff3.spec + Find kdiff3-0.9.91-fc.i686.rpm in /usr/src/redhat/RPMS/I386 + + +Installation for the Qt-only-platforms for Un*x: + (for Qt >=3.3.0 but <4.0) + - Make sure your shell-variable QTDIR is correct. (echo $QTDIR). + If it doesn't contain the correct path, type + export QTDIR=your_path_to_qt (e.g. /usr/lib/qt) + - cd into the directory kdiff3-0.9.91/src and type + - make -f Makefile.qt + - make -f Makefile.qt install (You must have root-rights for this step.) + (copies the files into /usr/local/bin and /usr/local/share/doc/kdiff3) + - Note: The file kdiff3.pro was used to generate the Makefile.qt: + qmake kdiff3.pro -o Makefile.qt + If you want to build the Qt-only version _and_ the KDE-version, do this + in separate directories, otherwise there will be errors. + - A user reported that on his 64-bit machine running FC4 he had to edit his Makefile.qt + LIBS = $(SUBLIBS) -L/usr/lib64/ -L$(QTDIR)/lib64/ -L/usr/lib -L$(QTDIR)/lib/ -L/usr/X11R6/lib/ -L/usr/X11R6/lib64/ -lqt-mt -lXext -lX11 -lm -lpthread + + +Build for Windows: + Use qmake and kdiff3.pro to generate + an appropriate Makefile. + qmake kdiff3.pro -o Makefile + + +Building KDiff3 (Qt3) for Mac OSX 10.3.8 (by Mark Teel) +------------------------------------------------------- + 1) Install Qt/Mac with thread support and static libraries. + 2) cd .../kdiff3-0.9.91/src + 3) Create a makefile for kdiff3 by executing: + qmake kdiff3.pro -o Makefile.qt + 4) Edit Makefile.qt and change the include path like so: + (old) INCPATH = -I/Library/qt3/mkspecs/default -Isrc ... + (new) INCPATH = -I/Library/qt3/mkspecs/macx-g++ -Isrc ... + 5) Execute: + make -f Makefile.qt + 6) After the build completes copy kdiff3 from the kdiff3-0.9.91/src directory to + /Applications + +Building KDiff3 (Qt4) for Mac OSX (with Intel processor) as a universal binary (by Michael Schmidt) +--------------------------------------------------------------------------------------------------- + 1) Install Qt/Mac 4.x with thread support, static libraries and universal flag. + 2) cd .../kdiff3-0.9.91/src-QT4 + 3a) Create a makefile for kdiff3 by executing: + qmake kdiff3.pro + 3b) optionally generate XCode-Project (for debugging purposes only) by executing: + qmake -spec macx-xcode kdiff3.pro + 4) Execute: + make + 5) After the build completes copy kdiff3 from the kdiff3-0.9.91/src-QT4 directory to + /Applications + +---------------------------------------------------------------- + +Building KDiff3 with Qt4: + +Requirements & Installation: + The version 0.9.91 requires Qt 4.2.0 (from www.trolltech.com) for compilation. + + You always need + - kdiff3-0.9.91.tar.gz + + - for Un*x: gcc, g++ with version >=3.4.2 + Qt-X11-libraries + + - for Windows: Qt-win-libs + If you have the Qt4 commercial edition, then compile with Visual Studio. + If you use the Qt4 open source edition, then you'll need MinGW. + I verified that compilation and debugging works with these packages (probably newer ones will also work): + - gcc-core-3.4.2-20040916-1.tar.gz + - binutils-2.15.91-20040904-1.tar.gz + - gcc-g++-3.4.2-20040916-1.tar.gz + - mingw-runtime-3.9.tar.gz + - mingw32-make-3.80.0-3.tar.gz + - w32api-3.6.tar.gz (see also the note below) + - gdb-5.2.1-1.exe (for debugging) + + (Note: At the time of writing this README, the MinGW-package that was part + of qt-win-opensource-4.1.2-mingw.exe lacked the latest w32api needed for + KDiff3-compilation. You will need to unpack w32api-3.6.tar.gz or newer + from www.mingw.org into your MinGW-directory.) + + - for Mac: gcc, g++ with version >=3.4.2 + Qt-Mac-libraries + + +Note for KDE-users: + The version 0.9.91-Qt4 doesn't provide support for KDE-3.x + because KDE-3.x.y requires Qt3. + If you need KDE-specific features like KIO-support stick to the + normal version 0.9.91. + +Build-instructions (Unix or Mac): + - Make sure your shell-variable QTDIR is correct and that + your path contains the Qt4-bin-directory. + - cd into the directory kdiff3-0.9.91/src-QT4 and type + - qmake kdiff3.pro + - make (or "gmake" for GNU-Make) + +Build-instructions (Windows): + - Run your qtvars.bat in the Qt4-bin directory. + (This should set your QTDIR, QMAKESPEC and PATH-environment-variables.) + - cd into the directory kdiff3-0.9.91/src-Qt4 and type + - qmake kdiff3.pro + - make (which calls either "mingw32-make" or "nmake") + +Debugging with MinGW under Windows: +- The qt-win-opensource-4.2.0-mingw.exe only installs release dlls. You will have to compile the + debug dlls yourself. Enter the qt-4.2.0-directory and run "configure -debug" and then "make". +- cd into the directory kdiff3-0.9.91/src-Qt4 +- edit the file "Makefile.Debug" and in the LFLAGS replace "-Wl,-subsystem,windows" with "-Wl,-subsystem,console" + (this is necessary so that gdb can send a break signal to the running program) +- make debug (create a debuggable executable) +- gdb debug\kdiff3.exe +- At the "(gdb)"-prompt type "run" and enter to start. +- While the program runs you can't set breakpoints, first interrupt it with Ctrl-C. +- Use "help" to find out about how to use gdb. (Important commands: run, break, backtrace, print, quit) + Using break with c++-methods requires to specify the parameter types too. Breakpoints in constructors might not work. +- I've tested graphical gdb-frontends too: + 1. Insight (also from mingw.org) worked until I wanted to interrupt the program for setting breakpoints. + 2. Dev-Cpp: The debugger said that the app crashed before even launching it. + Result: For Windows I recommend gdb on the console. Please tell me when things have improved! + +(End of KDiff3 with Qt4-instructions) +------------------------------------------------------------------------ + + +Start from commandline: +- Comparing 2 files: kdiff3 file1 file2 +- Merging 2 files: kdiff3 file1 file2 -o outputfile +- Comparing 3 files: kdiff3 file1 file2 file3 +- Merging 3 files: kdiff3 file1 file2 file3 -o outputfile + Note that file1 will be treated as base of file2 and file3. + +If all files have the same name but are in different directories, you can +reduce typework by specifying the filename only for the first file. E.g.: +- Comparing 3 files: kdiff3 dir1/filename dir2 dir3 +(This also works in the open-dialog.) + +If you start without arguments, then a dialog will appear where you can +select your files via a filebrowser. + +For more documentation, see the help-menu or the subdirectory doc. + +Have fun! diff --git a/TODO b/TODO new file mode 100644 index 0000000..f2c710d --- /dev/null +++ b/TODO @@ -0,0 +1,119 @@ +This file contains some feature-wishes for future KDiff3-versions. + +TODO +==== + +- Fix drawing in columns A/B/C-directory window +- Qt4-translation files +- Double clicking into empty area causes crash +- Option window is too big (within KDE). (Scrollable?) +- Windows issues: + - Diff-Ext-For-KDiff3 included in the installer + - language selection from within KDiff3 +- Export to html-format file +- Export to diff-format output (and import?) +- Export to diff3-format output (and import?) +- Use diff-output as input +- Variable width fonts. + + - Use regular expression to ignore certain patterns + - Start without visible compare widgets. (? what did I mean by that) + +- Hardlinks -performance support +- Manual alignment during merge should tell user his data will be lost +- Installer for windows for users. +- "List Only Deltas" causes directory merge to delete files + (https://sourceforge.net/tracker/index.php?func=detail&aid=1004853&group_id=58666&atid=488548) +- Diff-view for binary files +- Diff-view for pictures + +> > What I find weird is that KDiff3 first creates the 3-way merge view (so +> > the window splits in 4 parts), then closes that and reopens in 2-way +> > diff view. I've never seen the binary package do that. Can this be fixed? + + +- Only show different lines. + +- ftp: Abbruch beim Einlesen von Verzeichnis stoppt nicht vollständig + +- Projekt-Verwaltung: Die ganze Config-Datei (=Projektdatei) an einen benutzerdefinierten Ort zu legen. (Keine Angabe->Default) +- Bei Combobox-History alle Elemente von (A/B/C/Out) anzeigen. + +- Test on empty floppy drive. + +-I suppose this has been asked before, but are there any plans to use + colors for change/insert/delete (i.e. blue = change, green = insert, red + = delete)? + +> I want to compare two revisions of a file (eventually I wanna do this on +> two directory hierarchies of files) and have an output of how many lines +> of code were added, modified, and deleted for each file and overall. + +> Also, for "Send To" from Windows, it would be nice if I could pick one +> file via Send To, find the second file (if it's in a different +> directory), and click "Send To" again to compare. I.e., when user does +> "Send To", if one instance is already open and waiting for a second +> file, the first instance is used. + + +- kdiff3 does not preserve the permissions of files it overwrites during a 'save' operation. + +- Insbesondere Ausführbarkeit "x" und Schreibschutz "w" sollten erhalten bleiben. + +- Under Windows: Shortcut Ctrl-Shift-2 (for select B everywhere doesn't work.) +- Paste from Clipboard doesn't work. + +- Bug: Comment section isn't recognized as nonwhite difference if several lines are between /* and */ on one side. + + +- Overview-option to show only remaining conflicts. +- Overview bar for merge-window and for directory-window. + +- ??? The gutters (kdiff3 have 2 "gutters") fonts and background-foreground colors sholud be configured other + than the "general" foreground-background colors. Otherwise they are confused with the main dialog. + +- Try to autodetect the line-end-style +- Ignore cvs-keywords like $Revision: x.y$ + +- Undo function in the merge-editor. +- More viewing options for directory widget. + +- And one observation. When select Cyrillic charset - it looks like it was + not saved. When open this dialog again - Latin charset is selected anyway. +- Add options to specify charset. +- Ask before saving to a file that already exists (optionally). +- Don't overwrite existing .orig-file, when saving the second time. + +- File Menu: Close (Ctrl-F4): Close current file (check if saved and forget the data) +- Dirview: + - Multiselections: Changing Operations or applying ops for all selected items. + - Optionally show size/date for A/B/C + - Choose what to see (all or only different items) + - If only different items are visible: copy the others nevertheless to destdir. + - Warnung wenn Datum in B oder C älter als A ist. + - Zielverzeichnis nachträglich änderbar + - Bei Kopie von Remote nach lokal: Auf jeden Fall das modification Datum setzen. + - Ctrl-Space doesn't work when a file comparison takes place. + - Option to allow case-insensitive filename-matching. +- Options to show/suppress annoying messages + +- What's this-Help. +- Tip of the day. + +More Statistics before the merge begins: +- How many files are there? +- How many files are equal/different? +- How many files would be copies/merged/ignored? + +- Allow to view and merge CVS-conflict files (and diff3-output) and allow to save output + with conflicts in diff3 output-format. + +- Provide configure-rules for systems without KDE. (I need help here.) + +- Allow different comment-styles (e.g. via a regexp for comments) + +- Possibility to jump to next difference in the same line (for very long lines). + +- Allow analysis of unified directory-diff/patch-file. + +- LineEdit for Save-Filename diff --git a/acinclude.m4 b/acinclude.m4 new file mode 100644 index 0000000..22a0315 --- /dev/null +++ b/acinclude.m4 @@ -0,0 +1,12361 @@ +## -*- autoconf -*- + +dnl This file is part of the KDE libraries/packages +dnl Copyright (C) 1997 Janos Farkas (chexum@shadow.banki.hu) +dnl (C) 1997,98,99 Stephan Kulow (coolo@kde.org) + +dnl This file is free software; you can redistribute it and/or +dnl modify it under the terms of the GNU Library General Public +dnl License as published by the Free Software Foundation; either +dnl version 2 of the License, or (at your option) any later version. + +dnl This library is distributed in the hope that it will be useful, +dnl but WITHOUT ANY WARRANTY; without even the implied warranty of +dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +dnl Library General Public License for more details. + +dnl You should have received a copy of the GNU Library General Public License +dnl along with this library; see the file COPYING.LIB. If not, write to +dnl the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, +dnl Boston, MA 02110-1301, USA. + +dnl IMPORTANT NOTE: +dnl Please do not modify this file unless you expect your modifications to be +dnl carried into every other module in the repository. +dnl +dnl Single-module modifications are best placed in configure.in for kdelibs +dnl and kdebase or configure.in.in if present. + +# KDE_PATH_X_DIRECT +dnl Internal subroutine of AC_PATH_X. +dnl Set ac_x_includes and/or ac_x_libraries. +AC_DEFUN([KDE_PATH_X_DIRECT], +[ +AC_REQUIRE([KDE_CHECK_LIB64]) + +if test "$ac_x_includes" = NO; then + # Guess where to find include files, by looking for this one X11 .h file. + test -z "$x_direct_test_include" && x_direct_test_include=X11/Intrinsic.h + + # First, try using that file with no special directory specified. +AC_TRY_CPP([#include <$x_direct_test_include>], +[# We can compile using X headers with no special include directory. +ac_x_includes=], +[# Look for the header file in a standard set of common directories. +# Check X11 before X11Rn because it is often a symlink to the current release. + for ac_dir in \ + /usr/X11/include \ + /usr/X11R6/include \ + /usr/X11R5/include \ + /usr/X11R4/include \ + \ + /usr/include/X11 \ + /usr/include/X11R6 \ + /usr/include/X11R5 \ + /usr/include/X11R4 \ + \ + /usr/local/X11/include \ + /usr/local/X11R6/include \ + /usr/local/X11R5/include \ + /usr/local/X11R4/include \ + \ + /usr/local/include/X11 \ + /usr/local/include/X11R6 \ + /usr/local/include/X11R5 \ + /usr/local/include/X11R4 \ + \ + /usr/X386/include \ + /usr/x386/include \ + /usr/XFree86/include/X11 \ + \ + /usr/include \ + /usr/local/include \ + /usr/unsupported/include \ + /usr/athena/include \ + /usr/local/x11r5/include \ + /usr/lpp/Xamples/include \ + \ + /usr/openwin/include \ + /usr/openwin/share/include \ + ; \ + do + if test -r "$ac_dir/$x_direct_test_include"; then + ac_x_includes=$ac_dir + break + fi + done]) +fi # $ac_x_includes = NO + +if test "$ac_x_libraries" = NO; then + # Check for the libraries. + + test -z "$x_direct_test_library" && x_direct_test_library=Xt + test -z "$x_direct_test_function" && x_direct_test_function=XtMalloc + + # See if we find them without any special options. + # Don't add to $LIBS permanently. + ac_save_LIBS="$LIBS" + LIBS="-l$x_direct_test_library $LIBS" +AC_TRY_LINK([#include ], [${x_direct_test_function}(1)], +[LIBS="$ac_save_LIBS" +# We can link X programs with no special library path. +ac_x_libraries=], +[LIBS="$ac_save_LIBS" +# First see if replacing the include by lib works. +# Check X11 before X11Rn because it is often a symlink to the current release. +for ac_dir in `echo "$ac_x_includes" | sed s/include/lib${kdelibsuff}/` \ + /usr/X11/lib${kdelibsuff} \ + /usr/X11R6/lib${kdelibsuff} \ + /usr/X11R5/lib${kdelibsuff} \ + /usr/X11R4/lib${kdelibsuff} \ + \ + /usr/lib${kdelibsuff}/X11 \ + /usr/lib${kdelibsuff}/X11R6 \ + /usr/lib${kdelibsuff}/X11R5 \ + /usr/lib${kdelibsuff}/X11R4 \ + \ + /usr/local/X11/lib${kdelibsuff} \ + /usr/local/X11R6/lib${kdelibsuff} \ + /usr/local/X11R5/lib${kdelibsuff} \ + /usr/local/X11R4/lib${kdelibsuff} \ + \ + /usr/local/lib${kdelibsuff}/X11 \ + /usr/local/lib${kdelibsuff}/X11R6 \ + /usr/local/lib${kdelibsuff}/X11R5 \ + /usr/local/lib${kdelibsuff}/X11R4 \ + \ + /usr/X386/lib${kdelibsuff} \ + /usr/x386/lib${kdelibsuff} \ + /usr/XFree86/lib${kdelibsuff}/X11 \ + \ + /usr/lib${kdelibsuff} \ + /usr/local/lib${kdelibsuff} \ + /usr/unsupported/lib${kdelibsuff} \ + /usr/athena/lib${kdelibsuff} \ + /usr/local/x11r5/lib${kdelibsuff} \ + /usr/lpp/Xamples/lib${kdelibsuff} \ + /lib/usr/lib${kdelibsuff}/X11 \ + \ + /usr/openwin/lib${kdelibsuff} \ + /usr/openwin/share/lib${kdelibsuff} \ + ; \ +do +dnl Don't even attempt the hair of trying to link an X program! + for ac_extension in a so sl; do + if test -r $ac_dir/lib${x_direct_test_library}.$ac_extension; then + ac_x_libraries=$ac_dir + break 2 + fi + done +done]) +fi # $ac_x_libraries = NO +]) + + +dnl ------------------------------------------------------------------------ +dnl Find a file (or one of more files in a list of dirs) +dnl ------------------------------------------------------------------------ +dnl +AC_DEFUN([AC_FIND_FILE], +[ +$3=NO +for i in $2; +do + for j in $1; + do + echo "configure: __oline__: $i/$j" >&AC_FD_CC + if test -r "$i/$j"; then + echo "taking that" >&AC_FD_CC + $3=$i + break 2 + fi + done +done +]) + +dnl KDE_FIND_PATH(program-name, variable-name, list-of-dirs, +dnl if-not-found, test-parameter, prepend-path) +dnl +dnl Look for program-name in list-of-dirs+$PATH. +dnl If prepend-path is set, look in $PATH+list-of-dirs instead. +dnl If found, $variable-name is set. If not, if-not-found is evaluated. +dnl test-parameter: if set, the program is executed with this arg, +dnl and only a successful exit code is required. +AC_DEFUN([KDE_FIND_PATH], +[ + AC_MSG_CHECKING([for $1]) + if test -n "$$2"; then + kde_cv_path="$$2"; + else + kde_cache=`echo $1 | sed 'y%./+-%__p_%'` + + AC_CACHE_VAL(kde_cv_path_$kde_cache, + [ + kde_cv_path="NONE" + kde_save_IFS=$IFS + IFS=':' + dirs="" + for dir in $PATH; do + dirs="$dirs $dir" + done + if test -z "$6"; then dnl Append dirs in PATH (default) + dirs="$3 $dirs" + else dnl Prepend dirs in PATH (if 6th arg is set) + dirs="$dirs $3" + fi + IFS=$kde_save_IFS + + for dir in $dirs; do + if test -x "$dir/$1"; then + if test -n "$5" + then + evalstr="$dir/$1 $5 2>&1 " + if eval $evalstr; then + kde_cv_path="$dir/$1" + break + fi + else + kde_cv_path="$dir/$1" + break + fi + fi + done + + eval "kde_cv_path_$kde_cache=$kde_cv_path" + + ]) + + eval "kde_cv_path=\"`echo '$kde_cv_path_'$kde_cache`\"" + + fi + + if test -z "$kde_cv_path" || test "$kde_cv_path" = NONE; then + AC_MSG_RESULT(not found) + $4 + else + AC_MSG_RESULT($kde_cv_path) + $2=$kde_cv_path + + fi +]) + +AC_DEFUN([KDE_MOC_ERROR_MESSAGE], +[ + AC_MSG_ERROR([No Qt meta object compiler (moc) found! +Please check whether you installed Qt correctly. +You need to have a running moc binary. +configure tried to run $ac_cv_path_moc and the test didn't +succeed. If configure shouldn't have tried this one, set +the environment variable MOC to the right one before running +configure. +]) +]) + +AC_DEFUN([KDE_UIC_ERROR_MESSAGE], +[ + AC_MSG_WARN([No Qt ui compiler (uic) found! +Please check whether you installed Qt correctly. +You need to have a running uic binary. +configure tried to run $ac_cv_path_uic and the test didn't +succeed. If configure shouldn't have tried this one, set +the environment variable UIC to the right one before running +configure. +]) +]) + + +AC_DEFUN([KDE_CHECK_UIC_FLAG], +[ + AC_MSG_CHECKING([whether uic supports -$1 ]) + kde_cache=`echo $1 | sed 'y% .=/+-%____p_%'` + AC_CACHE_VAL(kde_cv_prog_uic_$kde_cache, + [ + cat >conftest.ui < +EOT + ac_uic_testrun="$UIC_PATH -$1 $2 conftest.ui >/dev/null" + if AC_TRY_EVAL(ac_uic_testrun); then + eval "kde_cv_prog_uic_$kde_cache=yes" + else + eval "kde_cv_prog_uic_$kde_cache=no" + fi + rm -f conftest* + ]) + + if eval "test \"`echo '$kde_cv_prog_uic_'$kde_cache`\" = yes"; then + AC_MSG_RESULT([yes]) + : + $3 + else + AC_MSG_RESULT([no]) + : + $4 + fi +]) + + +dnl ------------------------------------------------------------------------ +dnl Find the meta object compiler and the ui compiler in the PATH, +dnl in $QTDIR/bin, and some more usual places +dnl ------------------------------------------------------------------------ +dnl +AC_DEFUN([AC_PATH_QT_MOC_UIC], +[ + AC_REQUIRE([KDE_CHECK_PERL]) + qt_bindirs="" + for dir in $kde_qt_dirs; do + qt_bindirs="$qt_bindirs $dir/bin $dir/src/moc" + done + qt_bindirs="$qt_bindirs /usr/bin /usr/X11R6/bin /usr/local/qt/bin" + if test ! "$ac_qt_bindir" = "NO"; then + qt_bindirs="$ac_qt_bindir $qt_bindirs" + fi + + KDE_FIND_PATH(moc, MOC, [$qt_bindirs], [KDE_MOC_ERROR_MESSAGE]) + if test -z "$UIC_NOT_NEEDED"; then + KDE_FIND_PATH(uic, UIC_PATH, [$qt_bindirs], [UIC_PATH=""]) + if test -z "$UIC_PATH" ; then + KDE_UIC_ERROR_MESSAGE + exit 1 + else + UIC=$UIC_PATH + + if test $kde_qtver = 3; then + KDE_CHECK_UIC_FLAG(L,[/nonexistent],ac_uic_supports_libpath=yes,ac_uic_supports_libpath=no) + KDE_CHECK_UIC_FLAG(nounload,,ac_uic_supports_nounload=yes,ac_uic_supports_nounload=no) + + if test x$ac_uic_supports_libpath = xyes; then + UIC="$UIC -L \$(kde_widgetdir)" + fi + if test x$ac_uic_supports_nounload = xyes; then + UIC="$UIC -nounload" + fi + fi + fi + else + UIC="echo uic not available: " + fi + + AC_SUBST(MOC) + AC_SUBST(UIC) + + UIC_TR="i18n" + if test $kde_qtver = 3; then + UIC_TR="tr2i18n" + fi + + AC_SUBST(UIC_TR) +]) + +AC_DEFUN([KDE_1_CHECK_PATHS], +[ + KDE_1_CHECK_PATH_HEADERS + + KDE_TEST_RPATH= + + if test -n "$USE_RPATH"; then + + if test -n "$kde_libraries"; then + KDE_TEST_RPATH="-R $kde_libraries" + fi + + if test -n "$qt_libraries"; then + KDE_TEST_RPATH="$KDE_TEST_RPATH -R $qt_libraries" + fi + + if test -n "$x_libraries"; then + KDE_TEST_RPATH="$KDE_TEST_RPATH -R $x_libraries" + fi + + KDE_TEST_RPATH="$KDE_TEST_RPATH $KDE_EXTRA_RPATH" + fi + +AC_MSG_CHECKING([for KDE libraries installed]) +ac_link='$LIBTOOL_SHELL --silent --mode=link ${CXX-g++} -o conftest $CXXFLAGS $all_includes $CPPFLAGS $LDFLAGS $all_libraries conftest.$ac_ext $LIBS -lkdecore $LIBQT $KDE_TEST_RPATH 1>&5' + +if AC_TRY_EVAL(ac_link) && test -s conftest; then + AC_MSG_RESULT(yes) +else + AC_MSG_ERROR([your system fails at linking a small KDE application! +Check, if your compiler is installed correctly and if you have used the +same compiler to compile Qt and kdelibs as you did use now. +For more details about this problem, look at the end of config.log.]) +fi + +if eval `KDEDIR= ./conftest 2>&5`; then + kde_result=done +else + kde_result=problems +fi + +KDEDIR= ./conftest 2> /dev/null >&5 # make an echo for config.log +kde_have_all_paths=yes + +KDE_SET_PATHS($kde_result) + +]) + +AC_DEFUN([KDE_SET_PATHS], +[ + kde_cv_all_paths="kde_have_all_paths=\"yes\" \ + kde_htmldir=\"$kde_htmldir\" \ + kde_appsdir=\"$kde_appsdir\" \ + kde_icondir=\"$kde_icondir\" \ + kde_sounddir=\"$kde_sounddir\" \ + kde_datadir=\"$kde_datadir\" \ + kde_locale=\"$kde_locale\" \ + kde_cgidir=\"$kde_cgidir\" \ + kde_confdir=\"$kde_confdir\" \ + kde_kcfgdir=\"$kde_kcfgdir\" \ + kde_mimedir=\"$kde_mimedir\" \ + kde_toolbardir=\"$kde_toolbardir\" \ + kde_wallpaperdir=\"$kde_wallpaperdir\" \ + kde_templatesdir=\"$kde_templatesdir\" \ + kde_bindir=\"$kde_bindir\" \ + kde_servicesdir=\"$kde_servicesdir\" \ + kde_servicetypesdir=\"$kde_servicetypesdir\" \ + kde_moduledir=\"$kde_moduledir\" \ + kde_styledir=\"$kde_styledir\" \ + kde_widgetdir=\"$kde_widgetdir\" \ + xdg_appsdir=\"$xdg_appsdir\" \ + xdg_menudir=\"$xdg_menudir\" \ + xdg_directorydir=\"$xdg_directorydir\" \ + kde_result=$1" +]) + +AC_DEFUN([KDE_SET_DEFAULT_PATHS], +[ +if test "$1" = "default"; then + + if test -z "$kde_htmldir"; then + kde_htmldir='\${datadir}/doc/HTML' + fi + if test -z "$kde_appsdir"; then + kde_appsdir='\${datadir}/applnk' + fi + if test -z "$kde_icondir"; then + kde_icondir='\${datadir}/icons' + fi + if test -z "$kde_sounddir"; then + kde_sounddir='\${datadir}/sounds' + fi + if test -z "$kde_datadir"; then + kde_datadir='\${datadir}/apps' + fi + if test -z "$kde_locale"; then + kde_locale='\${datadir}/locale' + fi + if test -z "$kde_cgidir"; then + kde_cgidir='\${exec_prefix}/cgi-bin' + fi + if test -z "$kde_confdir"; then + kde_confdir='\${datadir}/config' + fi + if test -z "$kde_kcfgdir"; then + kde_kcfgdir='\${datadir}/config.kcfg' + fi + if test -z "$kde_mimedir"; then + kde_mimedir='\${datadir}/mimelnk' + fi + if test -z "$kde_toolbardir"; then + kde_toolbardir='\${datadir}/toolbar' + fi + if test -z "$kde_wallpaperdir"; then + kde_wallpaperdir='\${datadir}/wallpapers' + fi + if test -z "$kde_templatesdir"; then + kde_templatesdir='\${datadir}/templates' + fi + if test -z "$kde_bindir"; then + kde_bindir='\${exec_prefix}/bin' + fi + if test -z "$kde_servicesdir"; then + kde_servicesdir='\${datadir}/services' + fi + if test -z "$kde_servicetypesdir"; then + kde_servicetypesdir='\${datadir}/servicetypes' + fi + if test -z "$kde_moduledir"; then + if test "$kde_qtver" = "2"; then + kde_moduledir='\${libdir}/kde2' + else + kde_moduledir='\${libdir}/kde3' + fi + fi + if test -z "$kde_styledir"; then + kde_styledir='\${libdir}/kde3/plugins/styles' + fi + if test -z "$kde_widgetdir"; then + kde_widgetdir='\${libdir}/kde3/plugins/designer' + fi + if test -z "$xdg_appsdir"; then + xdg_appsdir='\${datadir}/applications/kde' + fi + if test -z "$xdg_menudir"; then + xdg_menudir='\${sysconfdir}/xdg/menus' + fi + if test -z "$xdg_directorydir"; then + xdg_directorydir='\${datadir}/desktop-directories' + fi + + KDE_SET_PATHS(defaults) + +else + + if test $kde_qtver = 1; then + AC_MSG_RESULT([compiling]) + KDE_1_CHECK_PATHS + else + AC_MSG_ERROR([path checking not yet supported for KDE 2]) + fi + +fi +]) + +AC_DEFUN([KDE_CHECK_PATHS_FOR_COMPLETENESS], +[ if test -z "$kde_htmldir" || test -z "$kde_appsdir" || + test -z "$kde_icondir" || test -z "$kde_sounddir" || + test -z "$kde_datadir" || test -z "$kde_locale" || + test -z "$kde_cgidir" || test -z "$kde_confdir" || + test -z "$kde_kcfgdir" || + test -z "$kde_mimedir" || test -z "$kde_toolbardir" || + test -z "$kde_wallpaperdir" || test -z "$kde_templatesdir" || + test -z "$kde_bindir" || test -z "$kde_servicesdir" || + test -z "$kde_servicetypesdir" || test -z "$kde_moduledir" || + test -z "$kde_styledir" || test -z "kde_widgetdir" || + test -z "$xdg_appsdir" || test -z "$xdg_menudir" || test -z "$xdg_directorydir" || + test "x$kde_have_all_paths" != "xyes"; then + kde_have_all_paths=no + fi +]) + +AC_DEFUN([KDE_MISSING_PROG_ERROR], +[ + AC_MSG_ERROR([The important program $1 was not found! +Please check whether you installed KDE correctly. +]) +]) + +AC_DEFUN([KDE_MISSING_ARTS_ERROR], +[ + AC_MSG_ERROR([The important program $1 was not found! +Please check whether you installed aRts correctly or use +--without-arts to compile without aRts support (this will remove functionality). +]) +]) + +AC_DEFUN([KDE_SET_DEFAULT_BINDIRS], +[ + kde_default_bindirs="/usr/bin /usr/local/bin /opt/local/bin /usr/X11R6/bin /opt/kde/bin /opt/kde3/bin /usr/kde/bin /usr/local/kde/bin" + test -n "$KDEDIR" && kde_default_bindirs="$KDEDIR/bin $kde_default_bindirs" + if test -n "$KDEDIRS"; then + kde_save_IFS=$IFS + IFS=: + for dir in $KDEDIRS; do + kde_default_bindirs="$dir/bin $kde_default_bindirs " + done + IFS=$kde_save_IFS + fi +]) + +AC_DEFUN([KDE_SUBST_PROGRAMS], +[ + AC_ARG_WITH(arts, + AC_HELP_STRING([--without-arts],[build without aRts [default=no]]), + [build_arts=$withval], + [build_arts=yes] + ) + AM_CONDITIONAL(include_ARTS, test "$build_arts" '!=' "no") + if test "$build_arts" = "no"; then + AC_DEFINE(WITHOUT_ARTS, 1, [Defined if compiling without arts]) + fi + + KDE_SET_DEFAULT_BINDIRS + kde_default_bindirs="$exec_prefix/bin $prefix/bin $kde_libs_prefix/bin $kde_default_bindirs" + KDE_FIND_PATH(dcopidl, DCOPIDL, [$kde_default_bindirs], [KDE_MISSING_PROG_ERROR(dcopidl)]) + KDE_FIND_PATH(dcopidl2cpp, DCOPIDL2CPP, [$kde_default_bindirs], [KDE_MISSING_PROG_ERROR(dcopidl2cpp)]) + if test "$build_arts" '!=' "no"; then + KDE_FIND_PATH(mcopidl, MCOPIDL, [$kde_default_bindirs], [KDE_MISSING_ARTS_ERROR(mcopidl)]) + KDE_FIND_PATH(artsc-config, ARTSCCONFIG, [$kde_default_bindirs], [KDE_MISSING_ARTS_ERROR(artsc-config)]) + fi + KDE_FIND_PATH(meinproc, MEINPROC, [$kde_default_bindirs]) + + kde32ornewer=1 + kde33ornewer=1 + if test -n "$kde_qtver" && test "$kde_qtver" -lt 3; then + kde32ornewer= + kde33ornewer= + else + if test "$kde_qtver" = "3"; then + if test "$kde_qtsubver" -le 1; then + kde32ornewer= + fi + if test "$kde_qtsubver" -le 2; then + kde33ornewer= + fi + if test "$KDECONFIG" != "compiled"; then + if test `$KDECONFIG --version | grep KDE | sed 's/KDE: \(...\).*/\1/'` = 3.2; then + kde33ornewer= + fi + fi + fi + fi + + if test -n "$kde32ornewer"; then + KDE_FIND_PATH(kconfig_compiler, KCONFIG_COMPILER, [$kde_default_bindirs], [KDE_MISSING_PROG_ERROR(kconfig_compiler)]) + KDE_FIND_PATH(dcopidlng, DCOPIDLNG, [$kde_default_bindirs], [KDE_MISSING_PROG_ERROR(dcopidlng)]) + fi + if test -n "$kde33ornewer"; then + KDE_FIND_PATH(makekdewidgets, MAKEKDEWIDGETS, [$kde_default_bindirs], [KDE_MISSING_PROG_ERROR(makekdewidgets)]) + AC_SUBST(MAKEKDEWIDGETS) + fi + KDE_FIND_PATH(xmllint, XMLLINT, [${prefix}/bin ${exec_prefix}/bin], [XMLLINT=""]) + + if test -n "$MEINPROC" -a "$MEINPROC" != "compiled"; then + kde_sharedirs="/usr/share/kde /usr/local/share /usr/share /opt/kde3/share /opt/kde/share $prefix/share" + test -n "$KDEDIR" && kde_sharedirs="$KDEDIR/share $kde_sharedirs" + AC_FIND_FILE(apps/ksgmltools2/customization/kde-chunk.xsl, $kde_sharedirs, KDE_XSL_STYLESHEET) + if test "$KDE_XSL_STYLESHEET" = "NO"; then + KDE_XSL_STYLESHEET="" + else + KDE_XSL_STYLESHEET="$KDE_XSL_STYLESHEET/apps/ksgmltools2/customization/kde-chunk.xsl" + fi + fi + + DCOP_DEPENDENCIES='$(DCOPIDL)' + if test -n "$kde32ornewer"; then + KCFG_DEPENDENCIES='$(KCONFIG_COMPILER)' + DCOP_DEPENDENCIES='$(DCOPIDL) $(DCOPIDLNG)' + AC_SUBST(KCONFIG_COMPILER) + AC_SUBST(KCFG_DEPENDENCIES) + AC_SUBST(DCOPIDLNG) + fi + AC_SUBST(DCOPIDL) + AC_SUBST(DCOPIDL2CPP) + AC_SUBST(DCOP_DEPENDENCIES) + AC_SUBST(MCOPIDL) + AC_SUBST(ARTSCCONFIG) + AC_SUBST(MEINPROC) + AC_SUBST(KDE_XSL_STYLESHEET) + AC_SUBST(XMLLINT) +])dnl + +AC_DEFUN([AC_CREATE_KFSSTND], +[ +AC_REQUIRE([AC_CHECK_RPATH]) + +AC_MSG_CHECKING([for KDE paths]) +kde_result="" +kde_cached_paths=yes +AC_CACHE_VAL(kde_cv_all_paths, +[ + KDE_SET_DEFAULT_PATHS($1) + kde_cached_paths=no +]) +eval "$kde_cv_all_paths" +KDE_CHECK_PATHS_FOR_COMPLETENESS +if test "$kde_have_all_paths" = "no" && test "$kde_cached_paths" = "yes"; then + # wrong values were cached, may be, we can set better ones + kde_result= + kde_htmldir= kde_appsdir= kde_icondir= kde_sounddir= + kde_datadir= kde_locale= kde_cgidir= kde_confdir= kde_kcfgdir= + kde_mimedir= kde_toolbardir= kde_wallpaperdir= kde_templatesdir= + kde_bindir= kde_servicesdir= kde_servicetypesdir= kde_moduledir= + kde_have_all_paths= + kde_styledir= + kde_widgetdir= + xdg_appsdir = xdg_menudir= xdg_directorydir= + KDE_SET_DEFAULT_PATHS($1) + eval "$kde_cv_all_paths" + KDE_CHECK_PATHS_FOR_COMPLETENESS + kde_result="$kde_result (cache overridden)" +fi +if test "$kde_have_all_paths" = "no"; then + AC_MSG_ERROR([configure could not run a little KDE program to test the environment. +Since it had compiled and linked before, it must be a strange problem on your system. +Look at config.log for details. If you are not able to fix this, look at +http://www.kde.org/faq/installation.html or any www.kde.org mirror. +(If you're using an egcs version on Linux, you may update binutils!) +]) +else + rm -f conftest* + AC_MSG_RESULT($kde_result) +fi + +bindir=$kde_bindir + +KDE_SUBST_PROGRAMS + +]) + +AC_DEFUN([AC_SUBST_KFSSTND], +[ +AC_SUBST(kde_htmldir) +AC_SUBST(kde_appsdir) +AC_SUBST(kde_icondir) +AC_SUBST(kde_sounddir) +AC_SUBST(kde_datadir) +AC_SUBST(kde_locale) +AC_SUBST(kde_confdir) +AC_SUBST(kde_kcfgdir) +AC_SUBST(kde_mimedir) +AC_SUBST(kde_wallpaperdir) +AC_SUBST(kde_bindir) +dnl X Desktop Group standards +AC_SUBST(xdg_appsdir) +AC_SUBST(xdg_menudir) +AC_SUBST(xdg_directorydir) +dnl for KDE 2 +AC_SUBST(kde_templatesdir) +AC_SUBST(kde_servicesdir) +AC_SUBST(kde_servicetypesdir) +AC_SUBST(kde_moduledir) +AC_SUBST(kdeinitdir, '$(kde_moduledir)') +AC_SUBST(kde_styledir) +AC_SUBST(kde_widgetdir) +if test "$kde_qtver" = 1; then + kde_minidir="$kde_icondir/mini" +else +# for KDE 1 - this breaks KDE2 apps using minidir, but +# that's the plan ;-/ + kde_minidir="/dev/null" +fi +dnl AC_SUBST(kde_minidir) +dnl AC_SUBST(kde_cgidir) +dnl AC_SUBST(kde_toolbardir) +]) + +AC_DEFUN([KDE_MISC_TESTS], +[ + dnl Checks for libraries. + AC_CHECK_LIB(util, main, [LIBUTIL="-lutil"]) dnl for *BSD + AC_SUBST(LIBUTIL) + AC_CHECK_LIB(compat, main, [LIBCOMPAT="-lcompat"]) dnl for *BSD + AC_SUBST(LIBCOMPAT) + kde_have_crypt= + AC_CHECK_LIB(crypt, crypt, [LIBCRYPT="-lcrypt"; kde_have_crypt=yes], + AC_CHECK_LIB(c, crypt, [kde_have_crypt=yes], [ + AC_MSG_WARN([you have no crypt in either libcrypt or libc. +You should install libcrypt from another source or configure with PAM +support]) + kde_have_crypt=no + ])) + AC_SUBST(LIBCRYPT) + if test $kde_have_crypt = yes; then + AC_DEFINE_UNQUOTED(HAVE_CRYPT, 1, [Defines if your system has the crypt function]) + fi + AC_CHECK_SOCKLEN_T + AC_CHECK_LIB(dnet, dnet_ntoa, [X_EXTRA_LIBS="$X_EXTRA_LIBS -ldnet"]) + if test $ac_cv_lib_dnet_dnet_ntoa = no; then + AC_CHECK_LIB(dnet_stub, dnet_ntoa, + [X_EXTRA_LIBS="$X_EXTRA_LIBS -ldnet_stub"]) + fi + AC_CHECK_FUNC(inet_ntoa) + if test $ac_cv_func_inet_ntoa = no; then + AC_CHECK_LIB(nsl, inet_ntoa, X_EXTRA_LIBS="$X_EXTRA_LIBS -lnsl") + fi + AC_CHECK_FUNC(connect) + if test $ac_cv_func_connect = no; then + AC_CHECK_LIB(socket, connect, X_EXTRA_LIBS="-lsocket $X_EXTRA_LIBS", , + $X_EXTRA_LIBS) + fi + + AC_CHECK_FUNC(remove) + if test $ac_cv_func_remove = no; then + AC_CHECK_LIB(posix, remove, X_EXTRA_LIBS="$X_EXTRA_LIBS -lposix") + fi + + # BSDI BSD/OS 2.1 needs -lipc for XOpenDisplay. + AC_CHECK_FUNC(shmat, , + AC_CHECK_LIB(ipc, shmat, X_EXTRA_LIBS="$X_EXTRA_LIBS -lipc")) + + # more headers that need to be explicitly included on darwin + AC_CHECK_HEADERS(sys/types.h stdint.h) + + # sys/bitypes.h is needed for uint32_t and friends on Tru64 + AC_CHECK_HEADERS(sys/bitypes.h) + + # darwin requires a poll emulation library + AC_CHECK_LIB(poll, poll, LIB_POLL="-lpoll") + + # for some image handling on Mac OS X + AC_CHECK_HEADERS(Carbon/Carbon.h) + + # CoreAudio framework + AC_CHECK_HEADER(CoreAudio/CoreAudio.h, [ + AC_DEFINE(HAVE_COREAUDIO, 1, [Define if you have the CoreAudio API]) + FRAMEWORK_COREAUDIO="-Wl,-framework,CoreAudio" + ]) + + AC_CHECK_RES_INIT + AC_SUBST(LIB_POLL) + AC_SUBST(FRAMEWORK_COREAUDIO) + LIBSOCKET="$X_EXTRA_LIBS" + AC_SUBST(LIBSOCKET) + AC_SUBST(X_EXTRA_LIBS) + AC_CHECK_LIB(ucb, killpg, [LIBUCB="-lucb"]) dnl for Solaris2.4 + AC_SUBST(LIBUCB) + + case $host in dnl this *is* LynxOS specific + *-*-lynxos* ) + AC_MSG_CHECKING([LynxOS header file wrappers]) + [CFLAGS="$CFLAGS -D__NO_INCLUDE_WARN__"] + AC_MSG_RESULT(disabled) + AC_CHECK_LIB(bsd, gethostbyname, [LIBSOCKET="-lbsd"]) dnl for LynxOS + ;; + esac + + KDE_CHECK_TYPES + KDE_CHECK_LIBDL + KDE_CHECK_STRLCPY + KDE_CHECK_PIE_SUPPORT + +# darwin needs this to initialize the environment +AC_CHECK_HEADERS(crt_externs.h) +AC_CHECK_FUNC(_NSGetEnviron, [AC_DEFINE(HAVE_NSGETENVIRON, 1, [Define if your system needs _NSGetEnviron to set up the environment])]) + +AH_VERBATIM(_DARWIN_ENVIRON, +[ +#if defined(HAVE_NSGETENVIRON) && defined(HAVE_CRT_EXTERNS_H) +# include +# include +# define environ (*_NSGetEnviron()) +#endif +]) + +AH_VERBATIM(_AIX_STRINGS_H_BZERO, +[ +/* + * AIX defines FD_SET in terms of bzero, but fails to include + * that defines bzero. + */ + +#if defined(_AIX) +#include +#endif +]) + +AC_CHECK_FUNCS([vsnprintf snprintf]) + +AH_VERBATIM(_TRU64,[ +/* + * On HP-UX, the declaration of vsnprintf() is needed every time ! + */ + +#if !defined(HAVE_VSNPRINTF) || defined(hpux) +#if __STDC__ +#include +#include +#else +#include +#endif +#ifdef __cplusplus +extern "C" +#endif +int vsnprintf(char *str, size_t n, char const *fmt, va_list ap); +#ifdef __cplusplus +extern "C" +#endif +int snprintf(char *str, size_t n, char const *fmt, ...); +#endif +]) + +]) + +dnl ------------------------------------------------------------------------ +dnl Find the header files and libraries for X-Windows. Extended the +dnl macro AC_PATH_X +dnl ------------------------------------------------------------------------ +dnl +AC_DEFUN([K_PATH_X], +[ +AC_REQUIRE([KDE_MISC_TESTS])dnl +AC_REQUIRE([KDE_CHECK_LIB64]) + +AC_ARG_ENABLE( + embedded, + AC_HELP_STRING([--enable-embedded],[link to Qt-embedded, don't use X]), + kde_use_qt_emb=$enableval, + kde_use_qt_emb=no +) + +AC_ARG_ENABLE( + qtopia, + AC_HELP_STRING([--enable-qtopia],[link to Qt-embedded, link to the Qtopia Environment]), + kde_use_qt_emb_palm=$enableval, + kde_use_qt_emb_palm=no +) + +AC_ARG_ENABLE( + mac, + AC_HELP_STRING([--enable-mac],[link to Qt/Mac (don't use X)]), + kde_use_qt_mac=$enableval, + kde_use_qt_mac=no +) + +# used to disable x11-specific stuff on special platforms +AM_CONDITIONAL(include_x11, test "$kde_use_qt_emb" = "no" && test "$kde_use_qt_mac" = "no") + +if test "$kde_use_qt_emb" = "no" && test "$kde_use_qt_mac" = "no"; then + +AC_MSG_CHECKING(for X) + +AC_CACHE_VAL(kde_cv_have_x, +[# One or both of the vars are not set, and there is no cached value. +if test "{$x_includes+set}" = set || test "$x_includes" = NONE; then + kde_x_includes=NO +else + kde_x_includes=$x_includes +fi +if test "{$x_libraries+set}" = set || test "$x_libraries" = NONE; then + kde_x_libraries=NO +else + kde_x_libraries=$x_libraries +fi + +# below we use the standard autoconf calls +ac_x_libraries=$kde_x_libraries +ac_x_includes=$kde_x_includes + +KDE_PATH_X_DIRECT +dnl AC_PATH_X_XMKMF picks /usr/lib as the path for the X libraries. +dnl Unfortunately, if compiling with the N32 ABI, this is not the correct +dnl location. The correct location is /usr/lib32 or an undefined value +dnl (the linker is smart enough to pick the correct default library). +dnl Things work just fine if you use just AC_PATH_X_DIRECT. +dnl Solaris has a similar problem. AC_PATH_X_XMKMF forces x_includes to +dnl /usr/openwin/include, which doesn't work. /usr/include does work, so +dnl x_includes should be left alone. +case "$host" in +mips-sgi-irix6*) + ;; +*-*-solaris*) + ;; +*) + _AC_PATH_X_XMKMF + if test -z "$ac_x_includes"; then + ac_x_includes="." + fi + if test -z "$ac_x_libraries"; then + ac_x_libraries="/usr/lib${kdelibsuff}" + fi +esac +#from now on we use our own again + +# when the user already gave --x-includes, we ignore +# what the standard autoconf macros told us. +if test "$kde_x_includes" = NO; then + kde_x_includes=$ac_x_includes +fi + +# for --x-libraries too +if test "$kde_x_libraries" = NO; then + kde_x_libraries=$ac_x_libraries +fi + +if test "$kde_x_includes" = NO; then + AC_MSG_ERROR([Can't find X includes. Please check your installation and add the correct paths!]) +fi + +if test "$kde_x_libraries" = NO; then + AC_MSG_ERROR([Can't find X libraries. Please check your installation and add the correct paths!]) +fi + +# Record where we found X for the cache. +kde_cv_have_x="have_x=yes \ + kde_x_includes=$kde_x_includes kde_x_libraries=$kde_x_libraries" +])dnl + +eval "$kde_cv_have_x" + +if test "$have_x" != yes; then + AC_MSG_RESULT($have_x) + no_x=yes +else + AC_MSG_RESULT([libraries $kde_x_libraries, headers $kde_x_includes]) +fi + +if test -z "$kde_x_includes" || test "x$kde_x_includes" = xNONE; then + X_INCLUDES="" + x_includes="."; dnl better than nothing :- + else + x_includes=$kde_x_includes + X_INCLUDES="-I$x_includes" +fi + +if test -z "$kde_x_libraries" || test "x$kde_x_libraries" = xNONE; then + X_LDFLAGS="" + x_libraries="/usr/lib"; dnl better than nothing :- + else + x_libraries=$kde_x_libraries + X_LDFLAGS="-L$x_libraries" +fi +all_includes="$X_INCLUDES" +all_libraries="$X_LDFLAGS $LDFLAGS_AS_NEEDED $LDFLAGS_NEW_DTAGS" + +# Check for libraries that X11R6 Xt/Xaw programs need. +ac_save_LDFLAGS="$LDFLAGS" +LDFLAGS="$LDFLAGS $X_LDFLAGS" +# SM needs ICE to (dynamically) link under SunOS 4.x (so we have to +# check for ICE first), but we must link in the order -lSM -lICE or +# we get undefined symbols. So assume we have SM if we have ICE. +# These have to be linked with before -lX11, unlike the other +# libraries we check for below, so use a different variable. +# --interran@uluru.Stanford.EDU, kb@cs.umb.edu. +AC_CHECK_LIB(ICE, IceConnectionNumber, + [LIBSM="-lSM -lICE"], , $X_EXTRA_LIBS) +LDFLAGS="$ac_save_LDFLAGS" + +LIB_X11='-lX11 $(LIBSOCKET)' + +AC_MSG_CHECKING(for libXext) +AC_CACHE_VAL(kde_cv_have_libXext, +[ +kde_ldflags_safe="$LDFLAGS" +kde_libs_safe="$LIBS" + +LDFLAGS="$LDFLAGS $X_LDFLAGS $USER_LDFLAGS" +LIBS="-lXext -lX11 $LIBSOCKET" + +AC_TRY_LINK([ +#include +#ifdef STDC_HEADERS +# include +#endif +], +[ +printf("hello Xext\n"); +], +kde_cv_have_libXext=yes, +kde_cv_have_libXext=no +) + +LDFLAGS=$kde_ldflags_safe +LIBS=$kde_libs_safe +]) + +AC_MSG_RESULT($kde_cv_have_libXext) + +if test "$kde_cv_have_libXext" = "no"; then + AC_MSG_ERROR([We need a working libXext to proceed. Since configure +can't find it itself, we stop here assuming that make wouldn't find +them either.]) +fi + +LIB_XEXT="-lXext" +QTE_NORTTI="" + +elif test "$kde_use_qt_emb" = "yes"; then + dnl We're using QT Embedded + CPPFLAGS=-DQWS + CXXFLAGS="$CXXFLAGS -fno-rtti" + QTE_NORTTI="-fno-rtti -DQWS" + X_PRE_LIBS="" + LIB_X11="" + LIB_XEXT="" + LIB_XRENDER="" + LIBSM="" + X_INCLUDES="" + X_LDFLAGS="" + x_includes="" + x_libraries="" +elif test "$kde_use_qt_mac" = "yes"; then + dnl We're using QT/Mac (I use QT_MAC so that qglobal.h doesn't *have* to + dnl be included to get the information) --Sam + CXXFLAGS="$CXXFLAGS -DQT_MAC -no-cpp-precomp" + CFLAGS="$CFLAGS -DQT_MAC -no-cpp-precomp" + X_PRE_LIBS="" + LIB_X11="" + LIB_XEXT="" + LIB_XRENDER="" + LIBSM="" + X_INCLUDES="" + X_LDFLAGS="" + x_includes="" + x_libraries="" +fi +AC_SUBST(X_PRE_LIBS) +AC_SUBST(LIB_X11) +AC_SUBST(LIB_XRENDER) +AC_SUBST(LIBSM) +AC_SUBST(X_INCLUDES) +AC_SUBST(X_LDFLAGS) +AC_SUBST(x_includes) +AC_SUBST(x_libraries) +AC_SUBST(QTE_NORTTI) +AC_SUBST(LIB_XEXT) + +]) + +AC_DEFUN([KDE_PRINT_QT_PROGRAM], +[ +AC_REQUIRE([KDE_USE_QT]) +cat > conftest.$ac_ext < +#include +EOF +if test "$kde_qtver" = "2"; then +cat >> conftest.$ac_ext < +#include +#include +EOF + +if test $kde_qtsubver -gt 0; then +cat >> conftest.$ac_ext <> conftest.$ac_ext < +#include +#include +EOF +fi + +echo "#if ! ($kde_qt_verstring)" >> conftest.$ac_ext +cat >> conftest.$ac_ext <> conftest.$ac_ext <> conftest.$ac_ext <> conftest.$ac_ext <> conftest.$ac_ext <&AC_FD_CC + cat conftest.$ac_ext >&AC_FD_CC +fi + +rm -f conftest* +CXXFLAGS="$ac_cxxflags_safe" +LDFLAGS="$ac_ldflags_safe" +LIBS="$ac_libs_safe" + +LD_LIBRARY_PATH="$ac_LD_LIBRARY_PATH_safe" +export LD_LIBRARY_PATH +LIBRARY_PATH="$ac_LIBRARY_PATH" +export LIBRARY_PATH +AC_LANG_RESTORE +]) + +if test "$kde_cv_qt_direct" = "yes"; then + AC_MSG_RESULT(yes) + $1 +else + AC_MSG_RESULT(no) + $2 +fi +]) + +dnl ------------------------------------------------------------------------ +dnl Try to find the Qt headers and libraries. +dnl $(QT_LDFLAGS) will be -Lqtliblocation (if needed) +dnl and $(QT_INCLUDES) will be -Iqthdrlocation (if needed) +dnl ------------------------------------------------------------------------ +dnl +AC_DEFUN([AC_PATH_QT_1_3], +[ +AC_REQUIRE([K_PATH_X]) +AC_REQUIRE([KDE_USE_QT]) +AC_REQUIRE([KDE_CHECK_LIB64]) + +dnl ------------------------------------------------------------------------ +dnl Add configure flag to enable linking to MT version of Qt library. +dnl ------------------------------------------------------------------------ + +AC_ARG_ENABLE( + mt, + AC_HELP_STRING([--disable-mt],[link to non-threaded Qt (deprecated)]), + kde_use_qt_mt=$enableval, + [ + if test $kde_qtver = 3; then + kde_use_qt_mt=yes + else + kde_use_qt_mt=no + fi + ] +) + +USING_QT_MT="" + +dnl ------------------------------------------------------------------------ +dnl If we not get --disable-qt-mt then adjust some vars for the host. +dnl ------------------------------------------------------------------------ + +KDE_MT_LDFLAGS= +KDE_MT_LIBS= +if test "x$kde_use_qt_mt" = "xyes"; then + KDE_CHECK_THREADING + if test "x$kde_use_threading" = "xyes"; then + CPPFLAGS="$USE_THREADS -DQT_THREAD_SUPPORT $CPPFLAGS" + KDE_MT_LDFLAGS="$USE_THREADS" + KDE_MT_LIBS="$LIBPTHREAD" + else + kde_use_qt_mt=no + fi +fi +AC_SUBST(KDE_MT_LDFLAGS) +AC_SUBST(KDE_MT_LIBS) + +kde_qt_was_given=yes + +dnl ------------------------------------------------------------------------ +dnl If we haven't been told how to link to Qt, we work it out for ourselves. +dnl ------------------------------------------------------------------------ +if test -z "$LIBQT_GLOB"; then + if test "x$kde_use_qt_emb" = "xyes"; then + LIBQT_GLOB="libqte.*" + else + LIBQT_GLOB="libqt.*" + fi +fi + +dnl ------------------------------------------------------------ +dnl If we got --enable-embedded then adjust the Qt library name. +dnl ------------------------------------------------------------ +if test "x$kde_use_qt_emb" = "xyes"; then + qtlib="qte" +else + qtlib="qt" +fi + +kde_int_qt="-l$qtlib" + +if test -z "$LIBQPE"; then +dnl ------------------------------------------------------------ +dnl If we got --enable-palmtop then add -lqpe to the link line +dnl ------------------------------------------------------------ + if test "x$kde_use_qt_emb" = "xyes"; then + if test "x$kde_use_qt_emb_palm" = "xyes"; then + LIB_QPE="-lqpe" + else + LIB_QPE="" + fi + else + LIB_QPE="" + fi +fi + +dnl ------------------------------------------------------------------------ +dnl If we got --enable-qt-mt then adjust the Qt library name for the host. +dnl ------------------------------------------------------------------------ + +if test "x$kde_use_qt_mt" = "xyes"; then + LIBQT="-l$qtlib-mt" + kde_int_qt="-l$qtlib-mt" + LIBQT_GLOB="lib$qtlib-mt.*" + USING_QT_MT="using -mt" +else + LIBQT="-l$qtlib" +fi + +if test $kde_qtver != 1; then + + AC_REQUIRE([AC_FIND_PNG]) + AC_REQUIRE([AC_FIND_JPEG]) + LIBQT="$LIBQT $LIBPNG $LIBJPEG" +fi + +if test $kde_qtver = 3; then + AC_REQUIRE([KDE_CHECK_LIBDL]) + LIBQT="$LIBQT $LIBDL" +fi + +AC_MSG_CHECKING([for Qt]) + +if test "x$kde_use_qt_emb" != "xyes" && test "x$kde_use_qt_mac" != "xyes"; then +LIBQT="$LIBQT $X_PRE_LIBS -lXext -lX11 $LIBSM $LIBSOCKET" +fi +ac_qt_includes=NO ac_qt_libraries=NO ac_qt_bindir=NO +qt_libraries="" +qt_includes="" +AC_ARG_WITH(qt-dir, + AC_HELP_STRING([--with-qt-dir=DIR],[where the root of Qt is installed ]), + [ ac_qt_includes="$withval"/include + ac_qt_libraries="$withval"/lib${kdelibsuff} + ac_qt_bindir="$withval"/bin + ]) + +AC_ARG_WITH(qt-includes, + AC_HELP_STRING([--with-qt-includes=DIR],[where the Qt includes are. ]), + [ + ac_qt_includes="$withval" + ]) + +kde_qt_libs_given=no + +AC_ARG_WITH(qt-libraries, + AC_HELP_STRING([--with-qt-libraries=DIR],[where the Qt library is installed.]), + [ ac_qt_libraries="$withval" + kde_qt_libs_given=yes + ]) + +AC_CACHE_VAL(ac_cv_have_qt, +[#try to guess Qt locations + +qt_incdirs="" +for dir in $kde_qt_dirs; do + qt_incdirs="$qt_incdirs $dir/include $dir" +done +qt_incdirs="$QTINC $qt_incdirs /usr/local/qt/include /usr/include/qt /usr/include /usr/X11R6/include/X11/qt /usr/X11R6/include/qt /usr/X11R6/include/qt2 /usr/include/qt3 $x_includes" +if test ! "$ac_qt_includes" = "NO"; then + qt_incdirs="$ac_qt_includes $qt_incdirs" +fi + +if test "$kde_qtver" != "1"; then + kde_qt_header=qstyle.h +else + kde_qt_header=qglobal.h +fi + +AC_FIND_FILE($kde_qt_header, $qt_incdirs, qt_incdir) +ac_qt_includes="$qt_incdir" + +qt_libdirs="" +for dir in $kde_qt_dirs; do + qt_libdirs="$qt_libdirs $dir/lib${kdelibsuff} $dir" +done +qt_libdirs="$QTLIB $qt_libdirs /usr/X11R6/lib /usr/lib /usr/local/qt/lib $x_libraries" +if test ! "$ac_qt_libraries" = "NO"; then + qt_libdir=$ac_qt_libraries +else + qt_libdirs="$ac_qt_libraries $qt_libdirs" + # if the Qt was given, the chance is too big that libqt.* doesn't exist + qt_libdir=NONE + for dir in $qt_libdirs; do + try="ls -1 $dir/${LIBQT_GLOB}" + if test -n "`$try 2> /dev/null`"; then qt_libdir=$dir; break; else echo "tried $dir" >&AC_FD_CC ; fi + done +fi +for a in $qt_libdir/lib`echo ${kde_int_qt} | sed 's,^-l,,'`_incremental.*; do + if test -e "$a"; then + LIBQT="$LIBQT ${kde_int_qt}_incremental" + break + fi +done + +ac_qt_libraries="$qt_libdir" + +AC_LANG_SAVE +AC_LANG_CPLUSPLUS + +ac_cxxflags_safe="$CXXFLAGS" +ac_ldflags_safe="$LDFLAGS" +ac_libs_safe="$LIBS" + +CXXFLAGS="$CXXFLAGS -I$qt_incdir $all_includes" +LDFLAGS="$LDFLAGS -L$qt_libdir $all_libraries $USER_LDFLAGS $KDE_MT_LDFLAGS" +LIBS="$LIBS $LIBQT $KDE_MT_LIBS" + +KDE_PRINT_QT_PROGRAM + +if AC_TRY_EVAL(ac_link) && test -s conftest; then + rm -f conftest* +else + echo "configure: failed program was:" >&AC_FD_CC + cat conftest.$ac_ext >&AC_FD_CC + ac_qt_libraries="NO" +fi +rm -f conftest* +CXXFLAGS="$ac_cxxflags_safe" +LDFLAGS="$ac_ldflags_safe" +LIBS="$ac_libs_safe" + +AC_LANG_RESTORE +if test "$ac_qt_includes" = NO || test "$ac_qt_libraries" = NO; then + ac_cv_have_qt="have_qt=no" + ac_qt_notfound="" + missing_qt_mt="" + if test "$ac_qt_includes" = NO; then + if test "$ac_qt_libraries" = NO; then + ac_qt_notfound="(headers and libraries)"; + else + ac_qt_notfound="(headers)"; + fi + else + if test "x$kde_use_qt_mt" = "xyes"; then + missing_qt_mt=" +Make sure that you have compiled Qt with thread support!" + ac_qt_notfound="(library $qtlib-mt)"; + else + ac_qt_notfound="(library $qtlib)"; + fi + fi + + AC_MSG_ERROR([Qt ($kde_qt_minversion) $ac_qt_notfound not found. Please check your installation! +For more details about this problem, look at the end of config.log.$missing_qt_mt]) +else + have_qt="yes" +fi +]) + +eval "$ac_cv_have_qt" + +if test "$have_qt" != yes; then + AC_MSG_RESULT([$have_qt]); +else + ac_cv_have_qt="have_qt=yes \ + ac_qt_includes=$ac_qt_includes ac_qt_libraries=$ac_qt_libraries" + AC_MSG_RESULT([libraries $ac_qt_libraries, headers $ac_qt_includes $USING_QT_MT]) + + qt_libraries="$ac_qt_libraries" + qt_includes="$ac_qt_includes" +fi + +if test ! "$kde_qt_libs_given" = "yes" && test ! "$kde_qtver" = 3; then + KDE_CHECK_QT_DIRECT(qt_libraries= ,[]) +fi + +AC_SUBST(qt_libraries) +AC_SUBST(qt_includes) + +if test "$qt_includes" = "$x_includes" || test -z "$qt_includes"; then + QT_INCLUDES="" +else + QT_INCLUDES="-I$qt_includes" + all_includes="$QT_INCLUDES $all_includes" +fi + +if test "$qt_libraries" = "$x_libraries" || test -z "$qt_libraries"; then + QT_LDFLAGS="" +else + QT_LDFLAGS="-L$qt_libraries" + all_libraries="$QT_LDFLAGS $all_libraries" +fi +test -z "$KDE_MT_LDFLAGS" || all_libraries="$all_libraries $KDE_MT_LDFLAGS" + +AC_SUBST(QT_INCLUDES) +AC_SUBST(QT_LDFLAGS) +AC_PATH_QT_MOC_UIC + +KDE_CHECK_QT_JPEG + +if test "x$kde_use_qt_emb" != "xyes" && test "x$kde_use_qt_mac" != "xyes"; then +LIB_QT="$kde_int_qt $LIBJPEG_QT "'$(LIBZ) $(LIBPNG) -lXext $(LIB_X11) $(LIBSM)' +else +LIB_QT="$kde_int_qt $LIBJPEG_QT "'$(LIBZ) $(LIBPNG)' +fi +test -z "$KDE_MT_LIBS" || LIB_QT="$LIB_QT $KDE_MT_LIBS" +for a in $qt_libdir/lib`echo ${kde_int_qt} | sed 's,^-l,,'`_incremental.*; do + if test -e "$a"; then + LIB_QT="$LIB_QT ${kde_int_qt}_incremental" + break + fi +done + +AC_SUBST(LIB_QT) +AC_SUBST(LIB_QPE) + +AC_SUBST(kde_qtver) +]) + +AC_DEFUN([AC_PATH_QT], +[ +AC_PATH_QT_1_3 +]) + +AC_DEFUN([KDE_CHECK_UIC_PLUGINS], +[ +AC_REQUIRE([AC_PATH_QT_MOC_UIC]) + +if test x$ac_uic_supports_libpath = xyes; then + +AC_MSG_CHECKING([if UIC has KDE plugins available]) +AC_CACHE_VAL(kde_cv_uic_plugins, +[ +cat > actest.ui << EOF + +NewConnectionDialog + + + + testInput + + + + +EOF + + + +kde_cv_uic_plugins=no +kde_line="$UIC_PATH -L $kde_widgetdir" +if test x$ac_uic_supports_nounload = xyes; then + kde_line="$kde_line -nounload" +fi +kde_line="$kde_line -impl actest.h actest.ui > actest.cpp" +if AC_TRY_EVAL(kde_line); then + # if you're trying to debug this check and think it's incorrect, + # better check your installation. The check _is_ correct - your + # installation is not. + if test -f actest.cpp && grep klineedit actest.cpp > /dev/null; then + kde_cv_uic_plugins=yes + fi +fi +rm -f actest.ui actest.cpp +]) + +AC_MSG_RESULT([$kde_cv_uic_plugins]) +if test "$kde_cv_uic_plugins" != yes; then + AC_MSG_ERROR([ +you need to install kdelibs first. + +If you did install kdelibs, then the Qt version that is picked up by +this configure is not the same version you used to compile kdelibs. +The Qt Plugin installed by kdelibs is *ONLY* loadable if it is the +_same Qt version_, compiled with the _same compiler_ and the same Qt +configuration settings. +]) +fi +fi +]) + +AC_DEFUN([KDE_CHECK_FINAL], +[ + AC_ARG_ENABLE(final, + AC_HELP_STRING([--enable-final], + [build size optimized apps (experimental - needs lots of memory)]), + kde_use_final=$enableval, kde_use_final=no) + + if test "x$kde_use_final" = "xyes"; then + KDE_USE_FINAL_TRUE="" + KDE_USE_FINAL_FALSE="#" + else + KDE_USE_FINAL_TRUE="#" + KDE_USE_FINAL_FALSE="" + fi + AC_SUBST(KDE_USE_FINAL_TRUE) + AC_SUBST(KDE_USE_FINAL_FALSE) +]) + +AC_DEFUN([KDE_CHECK_CLOSURE], +[ + AC_ARG_ENABLE(closure, + AC_HELP_STRING([--enable-closure],[delay template instantiation]), + kde_use_closure=$enableval, kde_use_closure=no) + + KDE_NO_UNDEFINED="" + if test "x$kde_use_closure" = "xyes"; then + KDE_USE_CLOSURE_TRUE="" + KDE_USE_CLOSURE_FALSE="#" +# CXXFLAGS="$CXXFLAGS $REPO" + else + KDE_USE_CLOSURE_TRUE="#" + KDE_USE_CLOSURE_FALSE="" + KDE_NO_UNDEFINED="" + case $host in + *-*-linux-gnu) + KDE_CHECK_COMPILER_FLAG([Wl,--no-undefined], + [KDE_CHECK_COMPILER_FLAG([Wl,--allow-shlib-undefined], + [KDE_NO_UNDEFINED="-Wl,--no-undefined -Wl,--allow-shlib-undefined"], + [KDE_NO_UNDEFINED=""])], + [KDE_NO_UNDEFINED=""]) + ;; + esac + fi + AC_SUBST(KDE_USE_CLOSURE_TRUE) + AC_SUBST(KDE_USE_CLOSURE_FALSE) + AC_SUBST(KDE_NO_UNDEFINED) +]) + +dnl Check if the linker supports --enable-new-dtags and --as-needed +AC_DEFUN([KDE_CHECK_NEW_LDFLAGS], +[ + AC_ARG_ENABLE(new_ldflags, + AC_HELP_STRING([--enable-new-ldflags], + [enable the new linker flags]), + kde_use_new_ldflags=$enableval, + kde_use_new_ldflags=no) + + LDFLAGS_AS_NEEDED="" + LDFLAGS_NEW_DTAGS="" + if test "x$kde_use_new_ldflags" = "xyes"; then + LDFLAGS_NEW_DTAGS="" + KDE_CHECK_COMPILER_FLAG([Wl,--enable-new-dtags], + [LDFLAGS_NEW_DTAGS="-Wl,--enable-new-dtags"],) + + KDE_CHECK_COMPILER_FLAG([Wl,--as-needed], + [LDFLAGS_AS_NEEDED="-Wl,--as-needed"],) + fi + AC_SUBST(LDFLAGS_AS_NEEDED) + AC_SUBST(LDFLAGS_NEW_DTAGS) +]) + +AC_DEFUN([KDE_CHECK_NMCHECK], +[ + AC_ARG_ENABLE(nmcheck,AC_HELP_STRING([--enable-nmcheck],[enable automatic namespace cleanness check]), + kde_use_nmcheck=$enableval, kde_use_nmcheck=no) + + if test "$kde_use_nmcheck" = "yes"; then + KDE_USE_NMCHECK_TRUE="" + KDE_USE_NMCHECK_FALSE="#" + else + KDE_USE_NMCHECK_TRUE="#" + KDE_USE_NMCHECK_FALSE="" + fi + AC_SUBST(KDE_USE_NMCHECK_TRUE) + AC_SUBST(KDE_USE_NMCHECK_FALSE) +]) + +AC_DEFUN([KDE_EXPAND_MAKEVAR], [ +savex=$exec_prefix +test "x$exec_prefix" = xNONE && exec_prefix=$prefix +tmp=$$2 +while $1=`eval echo "$tmp"`; test "x$$1" != "x$tmp"; do tmp=$$1; done +exec_prefix=$savex +]) + +dnl ------------------------------------------------------------------------ +dnl Now, the same with KDE +dnl $(KDE_LDFLAGS) will be the kdeliblocation (if needed) +dnl and $(kde_includes) will be the kdehdrlocation (if needed) +dnl ------------------------------------------------------------------------ +dnl +AC_DEFUN([AC_BASE_PATH_KDE], +[ +AC_REQUIRE([KDE_CHECK_STL]) +AC_REQUIRE([AC_PATH_QT])dnl +AC_REQUIRE([KDE_CHECK_LIB64]) + +AC_CHECK_RPATH +AC_MSG_CHECKING([for KDE]) + +if test "${prefix}" != NONE; then + kde_includes=${includedir} + KDE_EXPAND_MAKEVAR(ac_kde_includes, includedir) + + kde_libraries=${libdir} + KDE_EXPAND_MAKEVAR(ac_kde_libraries, libdir) + +else + ac_kde_includes= + ac_kde_libraries= + kde_libraries="" + kde_includes="" +fi + +AC_CACHE_VAL(ac_cv_have_kde, +[#try to guess kde locations + +if test "$kde_qtver" = 1; then + kde_check_header="ksock.h" + kde_check_lib="libkdecore.la" +else + kde_check_header="ksharedptr.h" + kde_check_lib="libkio.la" +fi + +if test -z "$1"; then + +kde_incdirs="$kde_libs_prefix/include /usr/lib/kde/include /usr/local/kde/include /usr/local/include /usr/kde/include /usr/include/kde /usr/include /opt/kde3/include /opt/kde/include $x_includes $qt_includes" +test -n "$KDEDIR" && kde_incdirs="$KDEDIR/include $KDEDIR/include/kde $KDEDIR $kde_incdirs" +kde_incdirs="$ac_kde_includes $kde_incdirs" +AC_FIND_FILE($kde_check_header, $kde_incdirs, kde_incdir) +ac_kde_includes="$kde_incdir" + +if test -n "$ac_kde_includes" && test ! -r "$ac_kde_includes/$kde_check_header"; then + AC_MSG_ERROR([ +in the prefix, you've chosen, are no KDE headers installed. This will fail. +So, check this please and use another prefix!]) +fi + +kde_libdirs="$kde_libs_prefix/lib${kdelibsuff} /usr/lib/kde/lib${kdelibsuff} /usr/local/kde/lib${kdelibsuff} /usr/kde/lib${kdelibsuff} /usr/lib${kdelibsuff}/kde /usr/lib${kdelibsuff}/kde3 /usr/lib${kdelibsuff} /usr/X11R6/lib${kdelibsuff} /usr/local/lib${kdelibsuff} /opt/kde3/lib${kdelibsuff} /opt/kde/lib${kdelibsuff} /usr/X11R6/kde/lib${kdelibsuff}" +test -n "$KDEDIR" && kde_libdirs="$KDEDIR/lib${kdelibsuff} $KDEDIR $kde_libdirs" +kde_libdirs="$ac_kde_libraries $libdir $kde_libdirs" +AC_FIND_FILE($kde_check_lib, $kde_libdirs, kde_libdir) +ac_kde_libraries="$kde_libdir" + +kde_widgetdir=NO +dnl this might be somewhere else +AC_FIND_FILE("kde3/plugins/designer/kdewidgets.la", $kde_libdirs, kde_widgetdir) + +if test -n "$ac_kde_libraries" && test ! -r "$ac_kde_libraries/$kde_check_lib"; then +AC_MSG_ERROR([ +in the prefix, you've chosen, are no KDE libraries installed. This will fail. +So, check this please and use another prefix!]) +fi + +if test -n "$kde_widgetdir" && test ! -r "$kde_widgetdir/kde3/plugins/designer/kdewidgets.la"; then +AC_MSG_ERROR([ +I can't find the designer plugins. These are required and should have been installed +by kdelibs]) +fi + +if test -n "$kde_widgetdir"; then + kde_widgetdir="$kde_widgetdir/kde3/plugins/designer" +fi + + +if test "$ac_kde_includes" = NO || test "$ac_kde_libraries" = NO || test "$kde_widgetdir" = NO; then + ac_cv_have_kde="have_kde=no" +else + ac_cv_have_kde="have_kde=yes \ + ac_kde_includes=$ac_kde_includes ac_kde_libraries=$ac_kde_libraries" +fi + +else dnl test -z $1, e.g. from kdelibs + + ac_cv_have_kde="have_kde=no" + +fi +])dnl + +eval "$ac_cv_have_kde" + +if test "$have_kde" != "yes"; then + if test "${prefix}" = NONE; then + ac_kde_prefix="$ac_default_prefix" + else + ac_kde_prefix="$prefix" + fi + if test "$exec_prefix" = NONE; then + ac_kde_exec_prefix="$ac_kde_prefix" + AC_MSG_RESULT([will be installed in $ac_kde_prefix]) + else + ac_kde_exec_prefix="$exec_prefix" + AC_MSG_RESULT([will be installed in $ac_kde_prefix and $ac_kde_exec_prefix]) + fi + + kde_libraries="${libdir}" + kde_includes="${includedir}" + +else + ac_cv_have_kde="have_kde=yes \ + ac_kde_includes=$ac_kde_includes ac_kde_libraries=$ac_kde_libraries" + AC_MSG_RESULT([libraries $ac_kde_libraries, headers $ac_kde_includes]) + + kde_libraries="$ac_kde_libraries" + kde_includes="$ac_kde_includes" +fi +AC_SUBST(kde_libraries) +AC_SUBST(kde_includes) + +if test "$kde_includes" = "$x_includes" || test "$kde_includes" = "$qt_includes" || test "$kde_includes" = "/usr/include"; then + KDE_INCLUDES="" +else + KDE_INCLUDES="-I$kde_includes" + all_includes="$KDE_INCLUDES $all_includes" +fi + +KDE_DEFAULT_CXXFLAGS="-DQT_CLEAN_NAMESPACE -DQT_NO_ASCII_CAST -DQT_NO_STL -DQT_NO_COMPAT -DQT_NO_TRANSLATION" + +KDE_LDFLAGS="-L$kde_libraries" +if test ! "$kde_libraries" = "$x_libraries" && test ! "$kde_libraries" = "$qt_libraries" ; then + all_libraries="$KDE_LDFLAGS $all_libraries" +fi + +AC_SUBST(KDE_LDFLAGS) +AC_SUBST(KDE_INCLUDES) + +AC_REQUIRE([KDE_CHECK_EXTRA_LIBS]) + +all_libraries="$all_libraries $USER_LDFLAGS" +all_includes="$all_includes $USER_INCLUDES" +AC_SUBST(all_includes) +AC_SUBST(all_libraries) + +if test -z "$1"; then +KDE_CHECK_UIC_PLUGINS +fi + +ac_kde_libraries="$kde_libdir" + +AC_SUBST(AUTODIRS) + + +]) + +AC_DEFUN([KDE_CHECK_EXTRA_LIBS], +[ +AC_MSG_CHECKING(for extra includes) +AC_ARG_WITH(extra-includes,AC_HELP_STRING([--with-extra-includes=DIR],[adds non standard include paths]), + kde_use_extra_includes="$withval", + kde_use_extra_includes=NONE +) +kde_extra_includes= +if test -n "$kde_use_extra_includes" && \ + test "$kde_use_extra_includes" != "NONE"; then + + ac_save_ifs=$IFS + IFS=':' + for dir in $kde_use_extra_includes; do + kde_extra_includes="$kde_extra_includes $dir" + USER_INCLUDES="$USER_INCLUDES -I$dir" + done + IFS=$ac_save_ifs + kde_use_extra_includes="added" +else + kde_use_extra_includes="no" +fi +AC_SUBST(USER_INCLUDES) + +AC_MSG_RESULT($kde_use_extra_includes) + +kde_extra_libs= +AC_MSG_CHECKING(for extra libs) +AC_ARG_WITH(extra-libs,AC_HELP_STRING([--with-extra-libs=DIR],[adds non standard library paths]), + kde_use_extra_libs=$withval, + kde_use_extra_libs=NONE +) +if test -n "$kde_use_extra_libs" && \ + test "$kde_use_extra_libs" != "NONE"; then + + ac_save_ifs=$IFS + IFS=':' + for dir in $kde_use_extra_libs; do + kde_extra_libs="$kde_extra_libs $dir" + KDE_EXTRA_RPATH="$KDE_EXTRA_RPATH -R $dir" + USER_LDFLAGS="$USER_LDFLAGS -L$dir" + done + IFS=$ac_save_ifs + kde_use_extra_libs="added" +else + kde_use_extra_libs="no" +fi + +AC_SUBST(USER_LDFLAGS) + +AC_MSG_RESULT($kde_use_extra_libs) + +]) + +AC_DEFUN([KDE_1_CHECK_PATH_HEADERS], +[ + AC_MSG_CHECKING([for KDE headers installed]) + AC_LANG_SAVE + AC_LANG_CPLUSPLUS +cat > conftest.$ac_ext < +#endif +#include +#include "confdefs.h" +#include + +int main() { + printf("kde_htmldir=\\"%s\\"\n", KApplication::kde_htmldir().data()); + printf("kde_appsdir=\\"%s\\"\n", KApplication::kde_appsdir().data()); + printf("kde_icondir=\\"%s\\"\n", KApplication::kde_icondir().data()); + printf("kde_sounddir=\\"%s\\"\n", KApplication::kde_sounddir().data()); + printf("kde_datadir=\\"%s\\"\n", KApplication::kde_datadir().data()); + printf("kde_locale=\\"%s\\"\n", KApplication::kde_localedir().data()); + printf("kde_cgidir=\\"%s\\"\n", KApplication::kde_cgidir().data()); + printf("kde_confdir=\\"%s\\"\n", KApplication::kde_configdir().data()); + printf("kde_mimedir=\\"%s\\"\n", KApplication::kde_mimedir().data()); + printf("kde_toolbardir=\\"%s\\"\n", KApplication::kde_toolbardir().data()); + printf("kde_wallpaperdir=\\"%s\\"\n", + KApplication::kde_wallpaperdir().data()); + printf("kde_bindir=\\"%s\\"\n", KApplication::kde_bindir().data()); + printf("kde_partsdir=\\"%s\\"\n", KApplication::kde_partsdir().data()); + printf("kde_servicesdir=\\"/tmp/dummy\\"\n"); + printf("kde_servicetypesdir=\\"/tmp/dummy\\"\n"); + printf("kde_moduledir=\\"/tmp/dummy\\"\n"); + printf("kde_styledir=\\"/tmp/dummy\\"\n"); + printf("kde_widgetdir=\\"/tmp/dummy\\"\n"); + printf("xdg_appsdir=\\"/tmp/dummy\\"\n"); + printf("xdg_menudir=\\"/tmp/dummy\\"\n"); + printf("xdg_directorydir=\\"/tmp/dummy\\"\n"); + printf("kde_kcfgdir=\\"/tmp/dummy\\"\n"); + return 0; + } +EOF + + ac_save_CPPFLAGS=$CPPFLAGS + CPPFLAGS="$all_includes $CPPFLAGS" + if AC_TRY_EVAL(ac_compile); then + AC_MSG_RESULT(yes) + else + AC_MSG_ERROR([your system is not able to compile a small KDE application! +Check, if you installed the KDE header files correctly. +For more details about this problem, look at the end of config.log.]) + fi + CPPFLAGS=$ac_save_CPPFLAGS + + AC_LANG_RESTORE +]) + +AC_DEFUN([KDE_CHECK_KDEQTADDON], +[ +AC_MSG_CHECKING(for kde-qt-addon) +AC_CACHE_VAL(kde_cv_have_kdeqtaddon, +[ + kde_ldflags_safe="$LDFLAGS" + kde_libs_safe="$LIBS" + kde_cxxflags_safe="$CXXFLAGS" + + LIBS="-lkde-qt-addon $LIBQT $LIBS" + CXXFLAGS="$CXXFLAGS -I$prefix/include -I$prefix/include/kde $all_includes" + LDFLAGS="$LDFLAGS $all_libraries $USER_LDFLAGS" + + AC_TRY_LINK([ + #include + ], + [ + QDomDocument doc; + ], + kde_cv_have_kdeqtaddon=yes, + kde_cv_have_kdeqtaddon=no + ) + + LDFLAGS=$kde_ldflags_safe + LIBS=$kde_libs_safe + CXXFLAGS=$kde_cxxflags_safe +]) + +AC_MSG_RESULT($kde_cv_have_kdeqtaddon) + +if test "$kde_cv_have_kdeqtaddon" = "no"; then + AC_MSG_ERROR([Can't find libkde-qt-addon. You need to install it first. +It is a separate package (and CVS module) named kde-qt-addon.]) +fi +]) + +AC_DEFUN([KDE_CREATE_LIBS_ALIASES], +[ + AC_REQUIRE([KDE_MISC_TESTS]) + AC_REQUIRE([KDE_CHECK_LIBDL]) + AC_REQUIRE([K_PATH_X]) + +if test $kde_qtver = 3; then + case $host in + *cygwin*) lib_kded="-lkdeinit_kded" ;; + *) lib_kded="" ;; + esac + AC_SUBST(LIB_KDED, $lib_kded) + AC_SUBST(LIB_KDECORE, "-lkdecore") + AC_SUBST(LIB_KDEUI, "-lkdeui") + AC_SUBST(LIB_KIO, "-lkio") + AC_SUBST(LIB_KJS, "-lkjs") + AC_SUBST(LIB_SMB, "-lsmb") + AC_SUBST(LIB_KAB, "-lkab") + AC_SUBST(LIB_KABC, "-lkabc") + AC_SUBST(LIB_KHTML, "-lkhtml") + AC_SUBST(LIB_KSPELL, "-lkspell") + AC_SUBST(LIB_KPARTS, "-lkparts") + AC_SUBST(LIB_KDEPRINT, "-lkdeprint") + AC_SUBST(LIB_KUTILS, "-lkutils") + AC_SUBST(LIB_KDEPIM, "-lkdepim") + AC_SUBST(LIB_KIMPROXY, "-lkimproxy") + AC_SUBST(LIB_KNEWSTUFF, "-lknewstuff") + AC_SUBST(LIB_KDNSSD, "-lkdnssd") + AC_SUBST(LIB_KUNITTEST, "-lkunittest") +# these are for backward compatibility + AC_SUBST(LIB_KSYCOCA, "-lkio") + AC_SUBST(LIB_KFILE, "-lkio") +elif test $kde_qtver = 2; then + AC_SUBST(LIB_KDECORE, "-lkdecore") + AC_SUBST(LIB_KDEUI, "-lkdeui") + AC_SUBST(LIB_KIO, "-lkio") + AC_SUBST(LIB_KSYCOCA, "-lksycoca") + AC_SUBST(LIB_SMB, "-lsmb") + AC_SUBST(LIB_KFILE, "-lkfile") + AC_SUBST(LIB_KAB, "-lkab") + AC_SUBST(LIB_KHTML, "-lkhtml") + AC_SUBST(LIB_KSPELL, "-lkspell") + AC_SUBST(LIB_KPARTS, "-lkparts") + AC_SUBST(LIB_KDEPRINT, "-lkdeprint") +else + AC_SUBST(LIB_KDECORE, "-lkdecore -lXext $(LIB_QT)") + AC_SUBST(LIB_KDEUI, "-lkdeui $(LIB_KDECORE)") + AC_SUBST(LIB_KFM, "-lkfm $(LIB_KDECORE)") + AC_SUBST(LIB_KFILE, "-lkfile $(LIB_KFM) $(LIB_KDEUI)") + AC_SUBST(LIB_KAB, "-lkab $(LIB_KIMGIO) $(LIB_KDECORE)") +fi +]) + +AC_DEFUN([AC_PATH_KDE], +[ + AC_BASE_PATH_KDE + AC_ARG_ENABLE(path-check,AC_HELP_STRING([--disable-path-check],[don't try to find out, where to install]), + [ + if test "$enableval" = "no"; + then ac_use_path_checking="default" + else ac_use_path_checking="" + fi + ], + [ + if test "$kde_qtver" = 1; + then ac_use_path_checking="" + else ac_use_path_checking="default" + fi + ] + ) + + AC_CREATE_KFSSTND($ac_use_path_checking) + + AC_SUBST_KFSSTND + KDE_CREATE_LIBS_ALIASES +]) + +dnl KDE_CHECK_FUNC_EXT(, [headers], [sample-use], [C prototype], [autoheader define], [call if found]) +AC_DEFUN([KDE_CHECK_FUNC_EXT], +[ +AC_MSG_CHECKING(for $1) +AC_CACHE_VAL(kde_cv_func_$1, +[ +AC_LANG_SAVE +AC_LANG_CPLUSPLUS +save_CXXFLAGS="$CXXFLAGS" +kde_safe_LIBS="$LIBS" +LIBS="$LIBS $X_EXTRA_LIBS" +if test "$GXX" = "yes"; then +CXXFLAGS="$CXXFLAGS -pedantic-errors" +fi +AC_TRY_COMPILE([ +$2 +], +[ +$3 +], +kde_cv_func_$1=yes, +kde_cv_func_$1=no) +CXXFLAGS="$save_CXXFLAGS" +LIBS="$kde_safe_LIBS" +AC_LANG_RESTORE +]) + +AC_MSG_RESULT($kde_cv_func_$1) + +AC_MSG_CHECKING([if $1 needs custom prototype]) +AC_CACHE_VAL(kde_cv_proto_$1, +[ +if test "x$kde_cv_func_$1" = xyes; then + kde_cv_proto_$1=no +else + case "$1" in + setenv|unsetenv|usleep|random|srandom|seteuid|mkstemps|mkstemp|revoke|vsnprintf|strlcpy|strlcat) + kde_cv_proto_$1="yes - in libkdefakes" + ;; + *) + kde_cv_proto_$1=unknown + ;; + esac +fi + +if test "x$kde_cv_proto_$1" = xunknown; then + +AC_LANG_SAVE +AC_LANG_CPLUSPLUS + kde_safe_libs=$LIBS + LIBS="$LIBS $X_EXTRA_LIBS" + AC_TRY_LINK([ +$2 + +extern "C" $4; +], +[ +$3 +], +[ kde_cv_func_$1=yes + kde_cv_proto_$1=yes ], + [kde_cv_proto_$1="$1 unavailable"] +) +LIBS=$kde_safe_libs +AC_LANG_RESTORE +fi +]) +AC_MSG_RESULT($kde_cv_proto_$1) + +if test "x$kde_cv_func_$1" = xyes; then + AC_DEFINE(HAVE_$5, 1, [Define if you have $1]) + $6 +fi +if test "x$kde_cv_proto_$1" = xno; then + AC_DEFINE(HAVE_$5_PROTO, 1, + [Define if you have the $1 prototype]) +fi + +AH_VERBATIM([_HAVE_$5_PROTO], +[ +#if !defined(HAVE_$5_PROTO) +#ifdef __cplusplus +extern "C" { +#endif +$4; +#ifdef __cplusplus +} +#endif +#endif +]) +]) + +AC_DEFUN([AC_CHECK_SETENV], +[ + KDE_CHECK_FUNC_EXT(setenv, [ +#include +], + [setenv("VAR", "VALUE", 1);], + [int setenv (const char *, const char *, int)], + [SETENV]) +]) + +AC_DEFUN([AC_CHECK_UNSETENV], +[ + KDE_CHECK_FUNC_EXT(unsetenv, [ +#include +], + [unsetenv("VAR");], + [void unsetenv (const char *)], + [UNSETENV]) +]) + +AC_DEFUN([AC_CHECK_GETDOMAINNAME], +[ + KDE_CHECK_FUNC_EXT(getdomainname, [ +#include +#include +#include +], + [ +char buffer[200]; +getdomainname(buffer, 200); +], + [#include + int getdomainname (char *, size_t)], + [GETDOMAINNAME]) +]) + +AC_DEFUN([AC_CHECK_GETHOSTNAME], +[ + KDE_CHECK_FUNC_EXT(gethostname, [ +#include +#include +], + [ +char buffer[200]; +gethostname(buffer, 200); +], + [int gethostname (char *, unsigned int)], + [GETHOSTNAME]) +]) + +AC_DEFUN([AC_CHECK_USLEEP], +[ + KDE_CHECK_FUNC_EXT(usleep, [ +#include +], + [ +usleep(200); +], + [int usleep (unsigned int)], + [USLEEP]) +]) + + +AC_DEFUN([AC_CHECK_RANDOM], +[ + KDE_CHECK_FUNC_EXT(random, [ +#include +], + [ +random(); +], + [long int random(void)], + [RANDOM]) + + KDE_CHECK_FUNC_EXT(srandom, [ +#include +], + [ +srandom(27); +], + [void srandom(unsigned int)], + [SRANDOM]) + +]) + +AC_DEFUN([AC_CHECK_INITGROUPS], +[ + KDE_CHECK_FUNC_EXT(initgroups, [ +#include +#include +#include +], + [ +char buffer[200]; +initgroups(buffer, 27); +], + [int initgroups(const char *, gid_t)], + [INITGROUPS]) +]) + +AC_DEFUN([AC_CHECK_MKSTEMPS], +[ + KDE_CHECK_FUNC_EXT(mkstemps, [ +#include +#include +], + [ +mkstemps("/tmp/aaaXXXXXX", 6); +], + [int mkstemps(char *, int)], + [MKSTEMPS]) +]) + +AC_DEFUN([AC_CHECK_MKSTEMP], +[ + KDE_CHECK_FUNC_EXT(mkstemp, [ +#include +#include +], + [ +mkstemp("/tmp/aaaXXXXXX"); +], + [int mkstemp(char *)], + [MKSTEMP]) +]) + +AC_DEFUN([AC_CHECK_MKDTEMP], +[ + KDE_CHECK_FUNC_EXT(mkdtemp, [ +#include +#include +], + [ +mkdtemp("/tmp/aaaXXXXXX"); +], + [char *mkdtemp(char *)], + [MKDTEMP]) +]) + + +AC_DEFUN([AC_CHECK_RES_INIT], +[ + AC_MSG_CHECKING([if res_init needs -lresolv]) + kde_libs_safe="$LIBS" + LIBS="$LIBS $X_EXTRA_LIBS -lresolv" + AC_TRY_LINK( + [ +#include +#include +#include +#include + ], + [ + res_init(); + ], + [ + LIBRESOLV="-lresolv" + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_RES_INIT, 1, [Define if you have the res_init function]) + ], + [ AC_MSG_RESULT(no) ] + ) + LIBS=$kde_libs_safe + AC_SUBST(LIBRESOLV) + + KDE_CHECK_FUNC_EXT(res_init, + [ +#include +#include +#include +#include + ], + [res_init()], + [int res_init(void)], + [RES_INIT]) +]) + +AC_DEFUN([AC_CHECK_STRLCPY], +[ + KDE_CHECK_FUNC_EXT(strlcpy, [ +#include +], +[ char buf[20]; + strlcpy(buf, "KDE function test", sizeof(buf)); +], + [unsigned long strlcpy(char*, const char*, unsigned long)], + [STRLCPY]) +]) + +AC_DEFUN([AC_CHECK_STRLCAT], +[ + KDE_CHECK_FUNC_EXT(strlcat, [ +#include +], +[ char buf[20]; + buf[0]='\0'; + strlcat(buf, "KDE function test", sizeof(buf)); +], + [unsigned long strlcat(char*, const char*, unsigned long)], + [STRLCAT]) +]) + +AC_DEFUN([AC_CHECK_RES_QUERY], +[ + KDE_CHECK_FUNC_EXT(res_query, [ +#include +#include +#include +#include +#include +], +[ +res_query(NULL, 0, 0, NULL, 0); +], + [int res_query(const char *, int, int, unsigned char *, int)], + [RES_QUERY]) +]) + +AC_DEFUN([AC_CHECK_DN_SKIPNAME], +[ + KDE_CHECK_FUNC_EXT(dn_skipname, [ +#include +#include +#include +#include +], +[ +dn_skipname (NULL, NULL); +], + [int dn_skipname (unsigned char *, unsigned char *)], + [DN_SKIPNAME]) +]) + + +AC_DEFUN([AC_FIND_GIF], + [AC_MSG_CHECKING([for giflib]) +AC_CACHE_VAL(ac_cv_lib_gif, +[ac_save_LIBS="$LIBS" +if test "x$kde_use_qt_emb" != "xyes" && test "x$kde_use_qt_mac" != "xyes"; then +LIBS="$all_libraries -lgif -lX11 $LIBSOCKET" +else +LIBS="$all_libraries -lgif" +fi +AC_TRY_LINK(dnl +[ +#ifdef __cplusplus +extern "C" { +#endif +int GifLastError(void); +#ifdef __cplusplus +} +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +], + [return GifLastError();], + eval "ac_cv_lib_gif=yes", + eval "ac_cv_lib_gif=no") +LIBS="$ac_save_LIBS" +])dnl +if eval "test \"`echo $ac_cv_lib_gif`\" = yes"; then + AC_MSG_RESULT(yes) + AC_DEFINE_UNQUOTED(HAVE_LIBGIF, 1, [Define if you have libgif]) +else + AC_MSG_ERROR(You need giflib30. Please install the kdesupport package) +fi +]) + +AC_DEFUN([KDE_FIND_JPEG_HELPER], +[ +AC_MSG_CHECKING([for libjpeg$2]) +AC_CACHE_VAL(ac_cv_lib_jpeg_$1, +[ +ac_save_LIBS="$LIBS" +LIBS="$all_libraries $USER_LDFLAGS -ljpeg$2 -lm" +ac_save_CFLAGS="$CFLAGS" +CFLAGS="$CFLAGS $all_includes $USER_INCLUDES" +AC_TRY_LINK( +[ +#ifdef __cplusplus +extern "C" { +#endif +void jpeg_CreateDecompress(); +#ifdef __cplusplus +} +#endif +], +[jpeg_CreateDecompress();], + eval "ac_cv_lib_jpeg_$1=-ljpeg$2", + eval "ac_cv_lib_jpeg_$1=no") +LIBS="$ac_save_LIBS" +CFLAGS="$ac_save_CFLAGS" +]) + +if eval "test ! \"`echo $ac_cv_lib_jpeg_$1`\" = no"; then + LIBJPEG="$ac_cv_lib_jpeg_$1" + AC_MSG_RESULT($ac_cv_lib_jpeg_$1) +else + AC_MSG_RESULT(no) + $3 +fi + +]) + +AC_DEFUN([AC_FIND_JPEG], +[ +dnl first look for libraries +KDE_FIND_JPEG_HELPER(6b, 6b, + KDE_FIND_JPEG_HELPER(normal, [], + [ + LIBJPEG= + ] + ) +) + +dnl then search the headers (can't use simply AC_TRY_xxx, as jpeglib.h +dnl requires system dependent includes loaded before it) +jpeg_incdirs="$includedir /usr/include /usr/local/include $kde_extra_includes" +AC_FIND_FILE(jpeglib.h, $jpeg_incdirs, jpeg_incdir) +test "x$jpeg_incdir" = xNO && jpeg_incdir= + +dnl if headers _and_ libraries are missing, this is no error, and we +dnl continue with a warning (the user will get no jpeg support in khtml) +dnl if only one is missing, it means a configuration error, but we still +dnl only warn +if test -n "$jpeg_incdir" && test -n "$LIBJPEG" ; then + AC_DEFINE_UNQUOTED(HAVE_LIBJPEG, 1, [Define if you have libjpeg]) +else + if test -n "$jpeg_incdir" || test -n "$LIBJPEG" ; then + AC_MSG_WARN([ +There is an installation error in jpeg support. You seem to have only one +of either the headers _or_ the libraries installed. You may need to either +provide correct --with-extra-... options, or the development package of +libjpeg6b. You can get a source package of libjpeg from http://www.ijg.org/ +Disabling JPEG support. +]) + else + AC_MSG_WARN([libjpeg not found. disable JPEG support.]) + fi + jpeg_incdir= + LIBJPEG= +fi + +AC_SUBST(LIBJPEG) +AH_VERBATIM(_AC_CHECK_JPEG, +[/* + * jpeg.h needs HAVE_BOOLEAN, when the system uses boolean in system + * headers and I'm too lazy to write a configure test as long as only + * unixware is related + */ +#ifdef _UNIXWARE +#define HAVE_BOOLEAN +#endif +]) +]) + +AC_DEFUN([KDE_CHECK_QT_JPEG], +[ +if test -n "$LIBJPEG"; then +AC_MSG_CHECKING([if Qt needs $LIBJPEG]) +AC_CACHE_VAL(kde_cv_qt_jpeg, +[ +AC_LANG_SAVE +AC_LANG_CPLUSPLUS +ac_save_LIBS="$LIBS" +LIBS="$all_libraries $USER_LDFLAGS $LIBQT" +LIBS=`echo $LIBS | sed "s/$LIBJPEG//"` +ac_save_CXXFLAGS="$CXXFLAGS" +CXXFLAGS="$CXXFLAGS $all_includes $USER_INCLUDES" +AC_TRY_LINK( +[#include ], + [ + int argc; + char** argv; + QApplication app(argc, argv);], + eval "kde_cv_qt_jpeg=no", + eval "kde_cv_qt_jpeg=yes") +LIBS="$ac_save_LIBS" +CXXFLAGS="$ac_save_CXXFLAGS" +AC_LANG_RESTORE +fi +]) + +if eval "test ! \"`echo $kde_cv_qt_jpeg`\" = no"; then + AC_MSG_RESULT(yes) + LIBJPEG_QT='$(LIBJPEG)' +else + AC_MSG_RESULT(no) + LIBJPEG_QT= +fi + +]) + +AC_DEFUN([AC_FIND_ZLIB], +[ +AC_REQUIRE([KDE_CHECK_EXTRA_LIBS]) +AC_MSG_CHECKING([for libz]) +AC_CACHE_VAL(ac_cv_lib_z, +[ +kde_save_LIBS="$LIBS" +LIBS="$all_libraries $USER_LDFLAGS -lz $LIBSOCKET" +kde_save_CFLAGS="$CFLAGS" +CFLAGS="$CFLAGS $all_includes $USER_INCLUDES" +AC_TRY_LINK(dnl +[ +#include +], +[ + char buf[42]; + gzFile f = (gzFile) 0; + /* this would segfault.. but we only link, don't run */ + (void) gzgets(f, buf, sizeof(buf)); + + return (zlibVersion() == ZLIB_VERSION); +], + eval "ac_cv_lib_z='-lz'", + eval "ac_cv_lib_z=no") +LIBS="$kde_save_LIBS" +CFLAGS="$kde_save_CFLAGS" +])dnl +if test ! "$ac_cv_lib_z" = no; then + AC_DEFINE_UNQUOTED(HAVE_LIBZ, 1, [Define if you have libz]) + LIBZ="$ac_cv_lib_z" + AC_MSG_RESULT($ac_cv_lib_z) +else + AC_MSG_ERROR(not found. + Possibly configure picks up an outdated version + installed by XFree86. Remove it from your system. + + Check your installation and look into config.log) + LIBZ="" +fi +AC_SUBST(LIBZ) +]) + +AC_DEFUN([KDE_TRY_TIFFLIB], +[ +AC_MSG_CHECKING([for libtiff $1]) + +AC_CACHE_VAL(kde_cv_libtiff_$1, +[ +AC_LANG_SAVE +AC_LANG_CPLUSPLUS +kde_save_LIBS="$LIBS" +if test "x$kde_use_qt_emb" != "xyes" && test "x$kde_use_qt_mac" != "xyes"; then +LIBS="$all_libraries $USER_LDFLAGS -l$1 $LIBJPEG $LIBZ -lX11 $LIBSOCKET -lm" +else +LIBS="$all_libraries $USER_LDFLAGS -l$1 $LIBJPEG $LIBZ -lm" +fi +kde_save_CXXFLAGS="$CXXFLAGS" +CXXFLAGS="$CXXFLAGS $all_includes $USER_INCLUDES" + +AC_TRY_LINK(dnl +[ +#include +], + [return (TIFFOpen( "", "r") == 0); ], +[ + kde_cv_libtiff_$1="-l$1 $LIBJPEG $LIBZ" +], [ + kde_cv_libtiff_$1=no +]) + +LIBS="$kde_save_LIBS" +CXXFLAGS="$kde_save_CXXFLAGS" +AC_LANG_RESTORE +]) + +if test "$kde_cv_libtiff_$1" = "no"; then + AC_MSG_RESULT(no) + LIBTIFF="" + $3 +else + LIBTIFF="$kde_cv_libtiff_$1" + AC_MSG_RESULT(yes) + AC_DEFINE_UNQUOTED(HAVE_LIBTIFF, 1, [Define if you have libtiff]) + $2 +fi + +]) + +AC_DEFUN([AC_FIND_TIFF], +[ +AC_REQUIRE([K_PATH_X]) +AC_REQUIRE([AC_FIND_ZLIB]) +AC_REQUIRE([AC_FIND_JPEG]) +AC_REQUIRE([KDE_CHECK_EXTRA_LIBS]) + +KDE_TRY_TIFFLIB(tiff, [], + KDE_TRY_TIFFLIB(tiff34)) + +AC_SUBST(LIBTIFF) +]) + +AC_DEFUN([KDE_FIND_LIBEXR], +[ +AC_REQUIRE([KDE_CHECK_EXTRA_LIBS]) +AC_REQUIRE([AC_FIND_ZLIB]) +AC_CACHE_VAL(ac_cv_libexr, +[ + if test -z "$PKG_CONFIG"; then + AC_PATH_PROG(PKG_CONFIG, pkg-config, no) + fi + + AC_MSG_CHECKING([for OpenEXR libraries]) + + if test "$PKG_CONFIG" = "no" ; then + AC_MSG_RESULT(no) + echo "*** The pkg-config script could not be found. Make sure it is" + echo "*** in your path, or set the PKG_CONFIG environment variable" + echo "*** to the full path to pkg-config." + echo "*** Or see http://www.freedesktop.org/software/pkgconfig to get pkg-config." + else + if !(`$PKG_CONFIG --exists OpenEXR`) ; then + AC_MSG_RESULT(no) + EXRSTATUS=no + else + if !(`$PKG_CONFIG --atleast-version="1.1.1" OpenEXR`) ; then + AC_MSG_RESULT(no) + EXRSTATUS=old + else + kde_save_LIBS="$LIBS" + LIBS="$LIBS $all_libraries $USER_LDFLAGS `pkg-config --libs OpenEXR` $LIBZ" + AC_LANG_SAVE + AC_LANG_CPLUSPLUS + kde_save_CXXFLAGS="$CXXFLAGS" + EXR_FLAGS=`$PKG_CONFIG --cflags OpenEXR` + CXXFLAGS="$CXXFLAGS $all_includes $USER_INCLUDES $EXR_FLAGS" + + AC_TRY_LINK(dnl + [ + #include + ], + [ + using namespace Imf; + RgbaInputFile file ("dummy"); + return 0; + ], + eval "ac_cv_libexr='`pkg-config --libs OpenEXR`'", + eval "ac_cv_libexr=no" + ) + LIBS="$kde_save_LIBS" + CXXFLAGS="$kde_save_CXXFLAGS" + AC_LANG_RESTORE + ])dnl + if eval "test ! \"`echo $ac_cv_libexr`\" = no"; then + AC_DEFINE_UNQUOTED(HAVE_EXR, 1, [Define if you have OpenEXR]) + LIB_EXR="$ac_cv_libexr" + AC_MSG_RESULT($ac_cv_libexr) + else + AC_MSG_RESULT(no) + LIB_EXR="" + fi + fi + fi + fi + AC_SUBST(LIB_EXR) + AC_SUBST(EXR_FLAGS) +]) + + + +AC_DEFUN([AC_FIND_PNG], +[ +AC_REQUIRE([KDE_CHECK_EXTRA_LIBS]) +AC_REQUIRE([AC_FIND_ZLIB]) +AC_MSG_CHECKING([for libpng]) +AC_CACHE_VAL(ac_cv_lib_png, +[ +kde_save_LIBS="$LIBS" +if test "x$kde_use_qt_emb" != "xyes" && test "x$kde_use_qt_mac" != "xyes"; then +LIBS="$LIBS $all_libraries $USER_LDFLAGS -lpng $LIBZ -lm -lX11 $LIBSOCKET" +else +LIBS="$LIBS $all_libraries $USER_LDFLAGS -lpng $LIBZ -lm" +fi +kde_save_CFLAGS="$CFLAGS" +CFLAGS="$CFLAGS $all_includes $USER_INCLUDES" + +AC_TRY_LINK(dnl + [ + #include + ], + [ + png_structp png_ptr = png_create_read_struct( /* image ptr */ + PNG_LIBPNG_VER_STRING, 0, 0, 0 ); + return( png_ptr != 0 ); + ], + eval "ac_cv_lib_png='-lpng $LIBZ -lm'", + eval "ac_cv_lib_png=no" +) +LIBS="$kde_save_LIBS" +CFLAGS="$kde_save_CFLAGS" +])dnl +if eval "test ! \"`echo $ac_cv_lib_png`\" = no"; then + AC_DEFINE_UNQUOTED(HAVE_LIBPNG, 1, [Define if you have libpng]) + LIBPNG="$ac_cv_lib_png" + AC_SUBST(LIBPNG) + AC_MSG_RESULT($ac_cv_lib_png) +else + AC_MSG_RESULT(no) + LIBPNG="" + AC_SUBST(LIBPNG) +fi +]) + + +AC_DEFUN([AC_FIND_JASPER], +[ +AC_REQUIRE([KDE_CHECK_EXTRA_LIBS]) +AC_REQUIRE([AC_FIND_JPEG]) +AC_MSG_CHECKING([for jasper]) +AC_CACHE_VAL(ac_cv_jasper, +[ +kde_save_LIBS="$LIBS" +LIBS="$LIBS $all_libraries $USER_LDFLAGS -ljasper $LIBJPEG -lm" +kde_save_CFLAGS="$CFLAGS" +CFLAGS="$CFLAGS $all_includes $USER_INCLUDES" + +AC_TRY_LINK(dnl + [ + #include + ], + [ + return( jas_init() ); + ], + eval "ac_cv_jasper='-ljasper $LIBJPEG -lm'", + eval "ac_cv_jasper=no" +) +LIBS="$kde_save_LIBS" +CFLAGS="$kde_save_CFLAGS" +])dnl +if eval "test ! \"`echo $ac_cv_jasper`\" = no"; then + AC_DEFINE_UNQUOTED(HAVE_JASPER, 1, [Define if you have jasper]) + LIB_JASPER="$ac_cv_jasper" + AC_MSG_RESULT($ac_cv_jasper) +else + AC_MSG_RESULT(no) + LIB_JASPER="" +fi +AC_SUBST(LIB_JASPER) +]) + +AC_DEFUN([AC_CHECK_BOOL], +[ + AC_DEFINE_UNQUOTED(HAVE_BOOL, 1, [You _must_ have bool]) +]) + +AC_DEFUN([AC_CHECK_GNU_EXTENSIONS], +[ +AC_MSG_CHECKING(if you need GNU extensions) +AC_CACHE_VAL(ac_cv_gnu_extensions, +[ +cat > conftest.c << EOF +#include + +#ifdef __GNU_LIBRARY__ +yes +#endif +EOF + +if (eval "$ac_cpp conftest.c") 2>&5 | + egrep "yes" >/dev/null 2>&1; then + rm -rf conftest* + ac_cv_gnu_extensions=yes +else + ac_cv_gnu_extensions=no +fi +]) + +AC_MSG_RESULT($ac_cv_gnu_extensions) +if test "$ac_cv_gnu_extensions" = "yes"; then + AC_DEFINE_UNQUOTED(_GNU_SOURCE, 1, [Define if you need to use the GNU extensions]) +fi +]) + +AC_DEFUN([KDE_CHECK_COMPILER_FLAG], +[ +AC_MSG_CHECKING([whether $CXX supports -$1]) +kde_cache=`echo $1 | sed 'y% .=/+-,%____p__%'` +AC_CACHE_VAL(kde_cv_prog_cxx_$kde_cache, +[ + AC_LANG_SAVE + AC_LANG_CPLUSPLUS + save_CXXFLAGS="$CXXFLAGS" + CXXFLAGS="$CXXFLAGS -$1" + AC_TRY_LINK([],[ return 0; ], [eval "kde_cv_prog_cxx_$kde_cache=yes"], []) + CXXFLAGS="$save_CXXFLAGS" + AC_LANG_RESTORE +]) +if eval "test \"`echo '$kde_cv_prog_cxx_'$kde_cache`\" = yes"; then + AC_MSG_RESULT(yes) + : + $2 +else + AC_MSG_RESULT(no) + : + $3 +fi +]) + +AC_DEFUN([KDE_CHECK_C_COMPILER_FLAG], +[ +AC_MSG_CHECKING([whether $CC supports -$1]) +kde_cache=`echo $1 | sed 'y% .=/+-,%____p__%'` +AC_CACHE_VAL(kde_cv_prog_cc_$kde_cache, +[ + AC_LANG_SAVE + AC_LANG_C + save_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS -$1" + AC_TRY_LINK([],[ return 0; ], [eval "kde_cv_prog_cc_$kde_cache=yes"], []) + CFLAGS="$save_CFLAGS" + AC_LANG_RESTORE +]) +if eval "test \"`echo '$kde_cv_prog_cc_'$kde_cache`\" = yes"; then + AC_MSG_RESULT(yes) + : + $2 +else + AC_MSG_RESULT(no) + : + $3 +fi +]) + + +dnl AC_REMOVE_FORBIDDEN removes forbidden arguments from variables +dnl use: AC_REMOVE_FORBIDDEN(CC, [-forbid -bad-option whatever]) +dnl it's all white-space separated +AC_DEFUN([AC_REMOVE_FORBIDDEN], +[ __val=$$1 + __forbid=" $2 " + if test -n "$__val"; then + __new="" + ac_save_IFS=$IFS + IFS=" " + for i in $__val; do + case "$__forbid" in + *" $i "*) AC_MSG_WARN([found forbidden $i in $1, removing it]) ;; + *) # Careful to not add spaces, where there were none, because otherwise + # libtool gets confused, if we change e.g. CXX + if test -z "$__new" ; then __new=$i ; else __new="$__new $i" ; fi ;; + esac + done + IFS=$ac_save_IFS + $1=$__new + fi +]) + + +AC_DEFUN([KDE_CHECK_FOR_BAD_COMPILER], +[ + AC_MSG_CHECKING([whether $CC is blacklisted]) + + dnl In theory we have tu run this test against $CC and $CXX + dnl in C and in C++ mode, because its perfectly legal for + dnl the user to mix compiler versions, since C has a defined + dnl ABI. + dnl + dnl For now, we assume the user is not on crack. + + AC_TRY_COMPILE([ +#ifdef __GNUC__ +#if __GNUC__ == 4 && __GNUC_MINOR__ == 0 && __GNUC_PATCHLEVEL__ == 0 +choke me +#endif +#endif +], , + kde_bad_compiler=no, + kde_bad_compiler=yes +) + + AC_MSG_RESULT($kde_bad_compiler) + +if test "$kde_bad_compiler" = "yes"; then + AC_MSG_ERROR([ + +This particular compiler version is blacklisted because it +is known to miscompile KDE. Please use a newer version, or +if that is not yet available, choose an older version. + +Please do not report a bug or bother us reporting this +configure error. We know about it, and we introduced +it by intention to avoid untraceable bugs or crashes in KDE. + +]) +fi + +]) + + +AC_DEFUN([KDE_CHECK_FOR_OPT_NOINLINE_MATCH], +[ + AC_CACHE_CHECK([whether system headers can cope with -O2 -fno-inline], + kde_cv_opt_noinline_match, + [ + kde_cv_opt_noinline_match=irrelevant + dnl if we don't use both -O2 and -fno-inline, this check is moot + if echo "$CFLAGS" | grep -e -O2 >/dev/null 2>/dev/null \ + && echo "$CFLAGS" | grep -e -fno-inline >/dev/null 2>/dev/null ; then + + ac_cflags_save="$CFLAGS" + CFLAGS="$CFLAGS -D_USE_GNU" + + AC_TRY_LINK([ + #include +], [ const char *pt, *et; + et = __extension__ ({ char __a0, __a1, __a2; (__builtin_constant_p ( ";," ) && ((size_t)(const void *)(( ";," )+ 1) - (size_t)(const void *)( ";," ) == 1) ? ((__a0 =((__const char *) ( ";," ))[0], __a0 == '\0') ? ((void) ( pt ),((void *)0) ) : ((__a1 = ((__const char *) ( ";," ))[1], __a1== '\0') ? (__extension__ (__builtin_constant_p ( __a0 ) && ( __a0 ) == '\0' ? (char *) __rawmemchr ( pt , __a0) : strchr( pt , __a0 ))) : ((__a2 = ((__const char *) ( ";," ))[2], __a2 == '\0') ? __strpbrk_c2 ( pt , __a0, __a1) :(((__const char *) ( ";," ))[3] == '\0' ? __strpbrk_c3 ( pt ,__a0, __a1, __a2): strpbrk ( pt , ";," ))))) : strpbrk ( pt , ";," )); }) ; +], + kde_cv_opt_noinline_match=yes, + kde_cv_opt_noinline_match=no + ) + + CFLAGS="$ac_cflags_save" + fi + ]) +]) + + +dnl AC_VALIDIFY_CXXFLAGS checks for forbidden flags the user may have given +AC_DEFUN([AC_VALIDIFY_CXXFLAGS], +[dnl +if test "x$kde_use_qt_emb" != "xyes"; then + AC_REMOVE_FORBIDDEN(CXX, [-fno-rtti -rpath]) + AC_REMOVE_FORBIDDEN(CXXFLAGS, [-fno-rtti -rpath]) +else + AC_REMOVE_FORBIDDEN(CXX, [-rpath]) + AC_REMOVE_FORBIDDEN(CXXFLAGS, [-rpath]) +fi +]) + +AC_DEFUN([AC_CHECK_COMPILERS], +[ + AC_ARG_ENABLE(debug, + AC_HELP_STRING([--enable-debug=ARG],[enables debug symbols (yes|no|full) [default=no]]), + [ + case $enableval in + yes) + kde_use_debug_code="yes" + kde_use_debug_define=no + ;; + full) + kde_use_debug_code="full" + kde_use_debug_define=no + ;; + *) + kde_use_debug_code="no" + kde_use_debug_define=yes + ;; + esac + ], + [kde_use_debug_code="no" + kde_use_debug_define=no + ]) + + dnl Just for configure --help + AC_ARG_ENABLE(dummyoption, + AC_HELP_STRING([--disable-debug], + [disables debug output and debug symbols [default=no]]), + [],[]) + + AC_ARG_ENABLE(strict, + AC_HELP_STRING([--enable-strict], + [compiles with strict compiler options (may not work!)]), + [ + if test $enableval = "no"; then + kde_use_strict_options="no" + else + kde_use_strict_options="yes" + fi + ], [kde_use_strict_options="no"]) + + AC_ARG_ENABLE(warnings,AC_HELP_STRING([--disable-warnings],[disables compilation with -Wall and similar]), + [ + if test $enableval = "no"; then + kde_use_warnings="no" + else + kde_use_warnings="yes" + fi + ], [kde_use_warnings="yes"]) + + dnl enable warnings for debug build + if test "$kde_use_debug_code" != "no"; then + kde_use_warnings=yes + fi + + AC_ARG_ENABLE(profile,AC_HELP_STRING([--enable-profile],[creates profiling infos [default=no]]), + [kde_use_profiling=$enableval], + [kde_use_profiling="no"] + ) + + dnl this prevents stupid AC_PROG_CC to add "-g" to the default CFLAGS + CFLAGS=" $CFLAGS" + + AC_PROG_CC + + AC_PROG_CPP + + if test "$GCC" = "yes"; then + if test "$kde_use_debug_code" != "no"; then + if test $kde_use_debug_code = "full"; then + CFLAGS="-g3 -fno-inline $CFLAGS" + else + CFLAGS="-g -O2 -fno-schedule-insns -fno-inline $CFLAGS" + fi + else + CFLAGS="-O2 $CFLAGS" + fi + fi + + if test "$kde_use_debug_define" = "yes"; then + CFLAGS="-DNDEBUG $CFLAGS" + fi + + + case "$host" in + *-*-sysv4.2uw*) CFLAGS="-D_UNIXWARE $CFLAGS";; + *-*-sysv5uw7*) CFLAGS="-D_UNIXWARE7 $CFLAGS";; + esac + + if test -z "$LDFLAGS" && test "$kde_use_debug_code" = "no" && test "$GCC" = "yes"; then + LDFLAGS="" + fi + + CXXFLAGS=" $CXXFLAGS" + + AC_PROG_CXX + + KDE_CHECK_FOR_BAD_COMPILER + + if test "$GXX" = "yes" || test "$CXX" = "KCC"; then + if test "$kde_use_debug_code" != "no"; then + if test "$CXX" = "KCC"; then + CXXFLAGS="+K0 -Wall -pedantic -W -Wpointer-arith -Wwrite-strings $CXXFLAGS" + else + if test "$kde_use_debug_code" = "full"; then + CXXFLAGS="-g3 -fno-inline $CXXFLAGS" + else + CXXFLAGS="-g -O2 -fno-schedule-insns -fno-inline $CXXFLAGS" + fi + fi + KDE_CHECK_COMPILER_FLAG(fno-builtin,[CXXFLAGS="-fno-builtin $CXXFLAGS"]) + + dnl convenience compiler flags + KDE_CHECK_COMPILER_FLAG(Woverloaded-virtual, [WOVERLOADED_VIRTUAL="-Woverloaded-virtual"], [WOVERLOADED_VRITUAL=""]) + AC_SUBST(WOVERLOADED_VIRTUAL) + else + if test "$CXX" = "KCC"; then + CXXFLAGS="+K3 $CXXFLAGS" + else + CXXFLAGS="-O2 $CXXFLAGS" + fi + fi + fi + + if test "$kde_use_debug_define" = "yes"; then + CXXFLAGS="-DNDEBUG -DNO_DEBUG $CXXFLAGS" + fi + + if test "$kde_use_profiling" = "yes"; then + KDE_CHECK_COMPILER_FLAG(pg, + [ + CFLAGS="-pg $CFLAGS" + CXXFLAGS="-pg $CXXFLAGS" + ]) + fi + + if test "$kde_use_warnings" = "yes"; then + if test "$GCC" = "yes"; then + CXXFLAGS="-Wall -W -Wpointer-arith $CXXFLAGS" + case $host in + *-*-linux-gnu) + CFLAGS="-std=iso9899:1990 -W -Wall -Wchar-subscripts -Wshadow -Wpointer-arith -Wmissing-prototypes -Wwrite-strings -D_XOPEN_SOURCE=500 -D_BSD_SOURCE $CFLAGS" + CXXFLAGS="-ansi -D_XOPEN_SOURCE=500 -D_BSD_SOURCE -Wcast-align -Wconversion -Wchar-subscripts $CXXFLAGS" + KDE_CHECK_COMPILER_FLAG(Wmissing-format-attribute, [CXXFLAGS="$CXXFLAGS -Wformat-security -Wmissing-format-attribute"]) + KDE_CHECK_C_COMPILER_FLAG(Wmissing-format-attribute, [CFLAGS="$CFLAGS -Wformat-security -Wmissing-format-attribute"]) + ;; + esac + KDE_CHECK_COMPILER_FLAG(Wundef,[CXXFLAGS="-Wundef $CXXFLAGS"]) + KDE_CHECK_COMPILER_FLAG(Wno-long-long,[CXXFLAGS="-Wno-long-long $CXXFLAGS"]) + dnl ### FIXME: revert for KDE 4 + KDE_CHECK_COMPILER_FLAG(Wno-non-virtual-dtor,[CXXFLAGS="$CXXFLAGS -Wno-non-virtual-dtor"]) + fi + fi + + if test "$GXX" = "yes" && test "$kde_use_strict_options" = "yes"; then + CXXFLAGS="-Wcast-qual -Wshadow -Wcast-align $CXXFLAGS" + fi + + AC_ARG_ENABLE(pch, + AC_HELP_STRING([--enable-pch], + [enables precompiled header support (currently only KCC or gcc >=3.4+unsermake) [default=no]]), + [ kde_use_pch=$enableval ],[ kde_use_pch=no ]) + + HAVE_GCC_VISIBILITY=0 + AC_SUBST([HAVE_GCC_VISIBILITY]) + + if test "$GXX" = "yes"; then + gcc_no_reorder_blocks=NO + KDE_CHECK_COMPILER_FLAG(fno-reorder-blocks,[gcc_no_reorder_blocks=YES]) + if test $kde_use_debug_code != "no" && \ + test $kde_use_debug_code != "full" && \ + test "YES" = "$gcc_no_reorder_blocks" ; then + CXXFLAGS="$CXXFLAGS -fno-reorder-blocks" + CFLAGS="$CFLAGS -fno-reorder-blocks" + fi + KDE_CHECK_COMPILER_FLAG(fno-exceptions,[CXXFLAGS="$CXXFLAGS -fno-exceptions"]) + KDE_CHECK_COMPILER_FLAG(fno-check-new, [CXXFLAGS="$CXXFLAGS -fno-check-new"]) + KDE_CHECK_COMPILER_FLAG(fno-common, [CXXFLAGS="$CXXFLAGS -fno-common"]) + KDE_CHECK_COMPILER_FLAG(fexceptions, [USE_EXCEPTIONS="-fexceptions"], USE_EXCEPTIONS= ) + ENABLE_PERMISSIVE_FLAG="-fpermissive" + + if test "$kde_use_pch" = "yes"; then + AC_MSG_CHECKING(whether gcc supports precompiling c header files) + echo >conftest.h + if $CC -x c-header conftest.h >/dev/null 2>/dev/null; then + kde_gcc_supports_pch=yes + AC_MSG_RESULT(yes) + else + kde_gcc_supports_pch=no + AC_MSG_RESULT(no) + fi + if test "$kde_gcc_supports_pch" = "yes"; then + AC_MSG_CHECKING(whether gcc supports precompiling c++ header files) + if $CXX -x c++-header conftest.h >/dev/null 2>/dev/null; then + kde_gcc_supports_pch=yes + AC_MSG_RESULT(yes) + else + kde_gcc_supports_pch=no + AC_MSG_RESULT(no) + fi + fi + rm -f conftest.h conftest.h.gch + fi + + KDE_CHECK_FOR_OPT_NOINLINE_MATCH + if test "x$kde_cv_opt_noinline_match" = "xno" ; then + CFLAGS="`echo "$CFLAGS" | sed "s/ -fno-inline//"`" + fi + fi + AM_CONDITIONAL(unsermake_enable_pch, test "$kde_use_pch" = "yes" && test "$kde_gcc_supports_pch" = "yes") + if test "$CXX" = "KCC"; then + dnl unfortunately we currently cannot disable exception support in KCC + dnl because doing so is binary incompatible and Qt by default links with exceptions :-( + dnl KDE_CHECK_COMPILER_FLAG(-no_exceptions,[CXXFLAGS="$CXXFLAGS --no_exceptions"]) + dnl KDE_CHECK_COMPILER_FLAG(-exceptions, [USE_EXCEPTIONS="--exceptions"], USE_EXCEPTIONS= ) + + if test "$kde_use_pch" = "yes"; then + dnl TODO: support --pch-dir! + KDE_CHECK_COMPILER_FLAG(-pch,[CXXFLAGS="$CXXFLAGS --pch"]) + dnl the below works (but the dir must exist), but it's + dnl useless for a whole package. + dnl The are precompiled headers for each source file, so when compiling + dnl from scratch, it doesn't make a difference, and they take up + dnl around ~5Mb _per_ sourcefile. + dnl KDE_CHECK_COMPILER_FLAG(-pch_dir /tmp, + dnl [CXXFLAGS="$CXXFLAGS --pch_dir `pwd`/pcheaders"]) + fi + dnl this flag controls inlining. by default KCC inlines in optimisation mode + dnl all implementations that are defined inside the class {} declaration. + dnl because of templates-compatibility with broken gcc compilers, this + dnl can cause excessive inlining. This flag limits it to a sane level + KDE_CHECK_COMPILER_FLAG(-inline_keyword_space_time=6,[CXXFLAGS="$CXXFLAGS --inline_keyword_space_time=6"]) + KDE_CHECK_COMPILER_FLAG(-inline_auto_space_time=2,[CXXFLAGS="$CXXFLAGS --inline_auto_space_time=2"]) + KDE_CHECK_COMPILER_FLAG(-inline_implicit_space_time=2.0,[CXXFLAGS="$CXXFLAGS --inline_implicit_space_time=2.0"]) + KDE_CHECK_COMPILER_FLAG(-inline_generated_space_time=2.0,[CXXFLAGS="$CXXFLAGS --inline_generated_space_time=2.0"]) + dnl Some source files are shared between multiple executables + dnl (or libraries) and some of those need template instantiations. + dnl In that case KCC needs to compile those sources with + dnl --one_instantiation_per_object. To make it easy for us we compile + dnl _all_ objects with that flag (--one_per is a shorthand). + KDE_CHECK_COMPILER_FLAG(-one_per, [CXXFLAGS="$CXXFLAGS --one_per"]) + fi + AC_SUBST(USE_EXCEPTIONS) + dnl obsolete macro - provided to keep things going + USE_RTTI= + AC_SUBST(USE_RTTI) + + case "$host" in + *-*-irix*) test "$GXX" = yes && CXXFLAGS="-D_LANGUAGE_C_PLUS_PLUS -D__LANGUAGE_C_PLUS_PLUS $CXXFLAGS" ;; + *-*-sysv4.2uw*) CXXFLAGS="-D_UNIXWARE $CXXFLAGS";; + *-*-sysv5uw7*) CXXFLAGS="-D_UNIXWARE7 $CXXFLAGS";; + *-*-solaris*) + if test "$GXX" = yes; then + libstdcpp=`$CXX -print-file-name=libstdc++.so` + if test ! -f $libstdcpp; then + AC_MSG_ERROR([You've compiled gcc without --enable-shared. This doesn't work with KDE. Please recompile gcc with --enable-shared to receive a libstdc++.so]) + fi + fi + ;; + esac + + AC_VALIDIFY_CXXFLAGS + + AC_PROG_CXXCPP + + if test "$GCC" = yes; then + NOOPT_CFLAGS=-O0 + fi + KDE_CHECK_COMPILER_FLAG(O0,[NOOPT_CXXFLAGS=-O0]) + + AC_ARG_ENABLE(coverage, + AC_HELP_STRING([--enable-coverage],[use gcc coverage testing]), [ + if test "$am_cv_CC_dependencies_compiler_type" = "gcc3"; then + ac_coverage_compiler="-fprofile-arcs -ftest-coverage" + ac_coverage_linker="-lgcc" + elif test "$am_cv_CC_dependencies_compiler_type" = "gcc"; then + ac_coverage_compiler="-fprofile-arcs -ftest-coverage" + ac_coverage_linker="" + else + AC_MSG_ERROR([coverage with your compiler is not supported]) + fi + CFLAGS="$CFLAGS $ac_coverage_compiler" + CXXFLAGS="$CXXFLAGS $ac_coverage_compiler" + LDFLAGS="$LDFLAGS $ac_coverage_linker" + ]) + + AC_SUBST(NOOPT_CXXFLAGS) + AC_SUBST(NOOPT_CFLAGS) + AC_SUBST(ENABLE_PERMISSIVE_FLAG) + + KDE_CHECK_NEW_LDFLAGS + KDE_CHECK_FINAL + KDE_CHECK_CLOSURE + KDE_CHECK_NMCHECK + + ifdef([AM_DEPENDENCIES], AC_REQUIRE([KDE_ADD_DEPENDENCIES]), []) +]) + +AC_DEFUN([KDE_CHECK_VISIBILITY_GCC_BUG], + [ + AC_CACHE_CHECK([for gcc -fvisibility-inlines-hidden bug], kde_cv_val_gcc_visibility_bug, + [ + AC_LANG_SAVE + AC_LANG_CPLUSPLUS + + safe_CXXFLAGS=$CXXFLAGS + safe_LDFLAGS=$LDFLAGS + CXXFLAGS="$CXXFLAGS -fPIC -fvisibility-inlines-hidden -O0" + LDFLAGS="$LDFLAGS -shared -fPIC" + + AC_TRY_LINK( + [ + /* http://gcc.gnu.org/bugzilla/show_bug.cgi?id=19664 */ + #include + int some_function( void ) __attribute__ ((visibility("default"))); + int some_function( void ) + { + std::string s("blafasel"); + return 0; + } + ], [/* elvis is alive */], + kde_cv_val_gcc_visibility_bug=no, kde_cv_val_gcc_visibility_bug=yes) + + CXXFLAGS=$safe_CXXFLAGS + LDFLAGS=$safe_LDFLAGS + AC_LANG_RESTORE + ] + ) + + if test x$kde_cv_val_gcc_visibility_bug = xno; then + CXXFLAGS="$CXXFLAGS -fvisibility-inlines-hidden" + fi + ] +) + +AC_DEFUN([KDE_ENABLE_HIDDEN_VISIBILITY], +[ + AC_BEFORE([AC_PATH_QT_1_3], [KDE_ENABLE_HIDDEN_VISIBILITY]) + + AC_MSG_CHECKING([grepping for visibility push/pop in headers]) + + if test "x$GXX" = "xyes"; then + AC_LANG_SAVE + AC_LANG_CPLUSPLUS + AC_EGREP_CPP( + [GCC visibility push], + [ #include + ], + [ + AC_MSG_RESULT(yes) + kde_stdc_visibility_patched=yes ], + [ + AC_MSG_RESULT(no) + AC_MSG_WARN([Your libstdc++ doesn't appear to be patched for + visibility support. Disabling -fvisibility=hidden]) + + kde_stdc_visibility_patched=no ]) + + AC_LANG_RESTORE + + kde_have_gcc_visibility=no + KDE_CHECK_COMPILER_FLAG(fvisibility=hidden, + [ + kde_have_gcc_visibility=yes + dnl the whole toolchain is just a mess, gcc is just too buggy + dnl to handle STL with visibility enabled. Lets reconsider + dnl when gcc 4.2 is out or when things get fixed in the compiler. + dnl Contact mueller@kde.org for details. + AC_ARG_ENABLE(gcc-hidden-visibility, + AC_HELP_STRING([--enable-gcc-hidden-visibility],[toolchain hidden visibility [default=no]]), + [kde_have_gcc_visibility=$enableval], + [kde_have_gcc_visibility=no]) + + AC_CACHE_CHECK([if Qt is patched for -fvisibility], kde_cv_val_qt_gcc_visibility_patched, + [ + AC_LANG_SAVE + AC_LANG_CPLUSPLUS + + safe_CXXFLAGS=$CXXFLAGS + CXXFLAGS="$CXXFLAGS $all_includes" + + AC_TRY_COMPILE( + [ +#include +#if Q_EXPORT - 0 != 0 +/* if this compiles, then Q_EXPORT is undefined */ +/* if Q_EXPORT is nonempty, this will break compilation */ +#endif + ], [/* elvis is alive */], + kde_cv_val_qt_gcc_visibility_patched=no, kde_cv_val_qt_gcc_visibility_patched=yes) + + CXXFLAGS=$safe_CXXFLAGS + AC_LANG_RESTORE + ] + ) + + if test x$kde_have_gcc_visibility = "xyes" && test x$kde_stdc_visibility_patched = "xyes" && test x$kde_cv_val_qt_gcc_visibility_patched = "xyes"; then + CXXFLAGS="$CXXFLAGS -fvisibility=hidden" + KDE_CHECK_VISIBILITY_GCC_BUG + HAVE_GCC_VISIBILITY=1 + AC_DEFINE_UNQUOTED(__KDE_HAVE_GCC_VISIBILITY, "$HAVE_GCC_VISIBILITY", [define to 1 if -fvisibility is supported]) + fi + ]) + fi +]) + +AC_DEFUN([KDE_ADD_DEPENDENCIES], +[ + [A]M_DEPENDENCIES(CC) + [A]M_DEPENDENCIES(CXX) +]) + +dnl just a wrapper to clean up configure.in +AC_DEFUN([KDE_PROG_LIBTOOL], +[ +AC_REQUIRE([AC_CHECK_COMPILERS]) +AC_REQUIRE([AC_ENABLE_SHARED]) +AC_REQUIRE([AC_ENABLE_STATIC]) + +AC_REQUIRE([AC_LIBTOOL_DLOPEN]) +AC_REQUIRE([KDE_CHECK_LIB64]) + +AC_OBJEXT +AC_EXEEXT + +AM_PROG_LIBTOOL +AC_LIBTOOL_CXX + +LIBTOOL_SHELL="/bin/sh ./libtool" +# LIBTOOL="$LIBTOOL --silent" +KDE_PLUGIN="-avoid-version -module -no-undefined \$(KDE_NO_UNDEFINED) \$(KDE_RPATH) \$(KDE_MT_LDFLAGS)" +AC_SUBST(KDE_PLUGIN) + +# This hack ensures that libtool creates shared libs for kunittest plugins. By default check_LTLIBRARIES makes static libs. +KDE_CHECK_PLUGIN="\$(KDE_PLUGIN) -rpath \$(libdir)" +AC_SUBST(KDE_CHECK_PLUGIN) + +# we patch configure quite some so we better keep that consistent for incremental runs +AC_SUBST(AUTOCONF,'$(SHELL) $(top_srcdir)/admin/cvs.sh configure || touch configure') +]) + +AC_DEFUN([KDE_CHECK_LIB64], +[ + AC_ARG_ENABLE(libsuffix, + AC_HELP_STRING([--enable-libsuffix], + [/lib directory suffix (64,32,none,auto[=default])]), + kdelibsuff=$enableval, kdelibsuff="auto") + + if test "$kdelibsuff" = "auto"; then + +cat > conftest.c << EOF +#include +int main() { + return 0; +} +EOF + kdelibsuff=`$CC conftest.c -o conftest.out; ldd conftest.out |sed -ne '/libc.so/{ + s,.*/lib\([[^\/]]*\)/.*,\1, + p +}'` + rm -rf conftest.* + fi + + if test "$kdelibsuff" = "no" || test "$kdelibsuff" = "none"; then + kdelibsuff= + fi + if test -z "$kdelibsuff"; then + AC_MSG_RESULT([not using lib directory suffix]) + AC_DEFINE(KDELIBSUFF, [""], Suffix for lib directories) + else + if test "$libdir" = '${exec_prefix}/lib'; then + libdir="$libdir${kdelibsuff}" + AC_SUBST([libdir], ["$libdir"]) dnl ugly hack for lib64 platforms + fi + AC_DEFINE_UNQUOTED(KDELIBSUFF, ["${kdelibsuff}"], Suffix for lib directories) + AC_MSG_RESULT([using lib directory suffix $kdelibsuff]) + fi +]) + +AC_DEFUN([KDE_CHECK_TYPES], +[ AC_CHECK_SIZEOF(int, 4)dnl + AC_CHECK_SIZEOF(short)dnl + AC_CHECK_SIZEOF(long, 4)dnl + AC_CHECK_SIZEOF(char *, 4)dnl +])dnl + +dnl Not used - kept for compat only? +AC_DEFUN([KDE_DO_IT_ALL], +[ +AC_CANONICAL_SYSTEM +AC_ARG_PROGRAM +AM_INIT_AUTOMAKE($1, $2) +AM_DISABLE_LIBRARIES +AC_PREFIX_DEFAULT(${KDEDIR:-/usr/local/kde}) +AC_CHECK_COMPILERS +KDE_PROG_LIBTOOL +AM_KDE_WITH_NLS +AC_PATH_KDE +]) + +AC_DEFUN([AC_CHECK_RPATH], +[ +AC_MSG_CHECKING(for rpath) +AC_ARG_ENABLE(rpath, + AC_HELP_STRING([--disable-rpath],[do not use the rpath feature of ld]), + USE_RPATH=$enableval, USE_RPATH=yes) + +if test -z "$KDE_RPATH" && test "$USE_RPATH" = "yes"; then + + KDE_RPATH="-R \$(libdir)" + + if test "$kde_libraries" != "$libdir"; then + KDE_RPATH="$KDE_RPATH -R \$(kde_libraries)" + fi + + if test -n "$qt_libraries"; then + KDE_RPATH="$KDE_RPATH -R \$(qt_libraries)" + fi + dnl $x_libraries is set to /usr/lib in case + if test -n "$X_LDFLAGS"; then + X_RPATH="-R \$(x_libraries)" + KDE_RPATH="$KDE_RPATH $X_RPATH" + fi + if test -n "$KDE_EXTRA_RPATH"; then + KDE_RPATH="$KDE_RPATH \$(KDE_EXTRA_RPATH)" + fi +fi +AC_SUBST(KDE_EXTRA_RPATH) +AC_SUBST(KDE_RPATH) +AC_SUBST(X_RPATH) +AC_MSG_RESULT($USE_RPATH) +]) + +dnl Check for the type of the third argument of getsockname +AC_DEFUN([AC_CHECK_SOCKLEN_T], +[ + AC_MSG_CHECKING(for socklen_t) + AC_CACHE_VAL(kde_cv_socklen_t, + [ + AC_LANG_PUSH(C++) + kde_cv_socklen_t=no + AC_TRY_COMPILE([ + #include + #include + ], + [ + socklen_t len; + getpeername(0,0,&len); + ], + [ + kde_cv_socklen_t=yes + kde_cv_socklen_t_equiv=socklen_t + ]) + AC_LANG_POP(C++) + ]) + AC_MSG_RESULT($kde_cv_socklen_t) + if test $kde_cv_socklen_t = no; then + AC_MSG_CHECKING([for socklen_t equivalent for socket functions]) + AC_CACHE_VAL(kde_cv_socklen_t_equiv, + [ + kde_cv_socklen_t_equiv=int + AC_LANG_PUSH(C++) + for t in int size_t unsigned long "unsigned long"; do + AC_TRY_COMPILE([ + #include + #include + ], + [ + $t len; + getpeername(0,0,&len); + ], + [ + kde_cv_socklen_t_equiv="$t" + break + ]) + done + AC_LANG_POP(C++) + ]) + AC_MSG_RESULT($kde_cv_socklen_t_equiv) + fi + AC_DEFINE_UNQUOTED(kde_socklen_t, $kde_cv_socklen_t_equiv, + [type to use in place of socklen_t if not defined]) + AC_DEFINE_UNQUOTED(ksize_t, $kde_cv_socklen_t_equiv, + [type to use in place of socklen_t if not defined (deprecated, use kde_socklen_t)]) +]) + +dnl This is a merge of some macros out of the gettext aclocal.m4 +dnl since we don't need anything, I took the things we need +dnl the copyright for them is: +dnl > +dnl Copyright (C) 1994, 1995, 1996, 1997, 1998 Free Software Foundation, Inc. +dnl This Makefile.in is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl This program is distributed in the hope that it will be useful, +dnl but WITHOUT ANY WARRANTY, to the extent permitted by law; without +dnl even the implied warranty of MERCHANTABILITY or FITNESS FOR A +dnl PARTICULAR PURPOSE. +dnl > +dnl for this file it is relicensed under LGPL + +AC_DEFUN([AM_KDE_WITH_NLS], + [ + dnl If we use NLS figure out what method + + AM_PATH_PROG_WITH_TEST_KDE(MSGFMT, msgfmt, + [test -n "`$ac_dir/$ac_word --version 2>&1 | grep 'GNU gettext'`"], msgfmt) + AC_PATH_PROG(GMSGFMT, gmsgfmt, $MSGFMT) + + if test -z "`$GMSGFMT --version 2>&1 | grep 'GNU gettext'`"; then + AC_MSG_RESULT([found msgfmt program is not GNU msgfmt; ignore it]) + GMSGFMT=":" + fi + MSGFMT=$GMSGFMT + AC_SUBST(GMSGFMT) + AC_SUBST(MSGFMT) + + AM_PATH_PROG_WITH_TEST_KDE(XGETTEXT, xgettext, + [test -z "`$ac_dir/$ac_word -h 2>&1 | grep '(HELP)'`"], :) + + dnl Test whether we really found GNU xgettext. + if test "$XGETTEXT" != ":"; then + dnl If it is no 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 programs is not GNU xgettext; ignore it]) + XGETTEXT=":" + fi + fi + AC_SUBST(XGETTEXT) + + ]) + +# Search path for a program which passes the given test. +# Ulrich Drepper , 1996. + +# serial 1 +# Stephan Kulow: I appended a _KDE against name conflicts + +dnl AM_PATH_PROG_WITH_TEST_KDE(VARIABLE, PROG-TO-CHECK-FOR, +dnl TEST-PERFORMED-ON-FOUND_PROGRAM [, VALUE-IF-NOT-FOUND [, PATH]]) +AC_DEFUN([AM_PATH_PROG_WITH_TEST_KDE], +[# 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 -n "[$]$1"; then + AC_MSG_RESULT([$]$1) +else + AC_MSG_RESULT(no) +fi +AC_SUBST($1)dnl +]) + + +# Check whether LC_MESSAGES is available in . +# Ulrich Drepper , 1995. + +# serial 1 + +AC_DEFUN([AM_LC_MESSAGES], + [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 locale.h file contains LC_MESSAGES]) + fi + fi]) + +dnl From Jim Meyering. +dnl FIXME: migrate into libit. + +AC_DEFUN([AM_FUNC_OBSTACK], +[AC_CACHE_CHECK([for obstacks], am_cv_func_obstack, + [AC_TRY_LINK([#include "obstack.h"], + [struct obstack *mem;obstack_free(mem,(char *) 0)], + am_cv_func_obstack=yes, + am_cv_func_obstack=no)]) + if test $am_cv_func_obstack = yes; then + AC_DEFINE(HAVE_OBSTACK) + else + LIBOBJS="$LIBOBJS obstack.o" + fi +]) + +dnl From Jim Meyering. Use this if you use the GNU error.[ch]. +dnl FIXME: Migrate into libit + +AC_DEFUN([AM_FUNC_ERROR_AT_LINE], +[AC_CACHE_CHECK([for error_at_line], am_cv_lib_error_at_line, + [AC_TRY_LINK([],[error_at_line(0, 0, "", 0, "");], + am_cv_lib_error_at_line=yes, + am_cv_lib_error_at_line=no)]) + if test $am_cv_lib_error_at_line = no; then + LIBOBJS="$LIBOBJS error.o" + fi + AC_SUBST(LIBOBJS)dnl +]) + +# Macro to add for using GNU gettext. +# Ulrich Drepper , 1995. + +# serial 1 +# Stephan Kulow: I put a KDE in it to avoid name conflicts + +AC_DEFUN([AM_KDE_GNU_GETTEXT], + [AC_REQUIRE([AC_PROG_MAKE_SET])dnl + AC_REQUIRE([AC_PROG_RANLIB])dnl + AC_REQUIRE([AC_HEADER_STDC])dnl + AC_REQUIRE([AC_TYPE_OFF_T])dnl + AC_REQUIRE([AC_TYPE_SIZE_T])dnl + AC_REQUIRE([AC_FUNC_ALLOCA])dnl + AC_REQUIRE([AC_FUNC_MMAP])dnl + AC_REQUIRE([AM_KDE_WITH_NLS])dnl + AC_CHECK_HEADERS([limits.h locale.h nl_types.h string.h values.h alloca.h]) + AC_CHECK_FUNCS([getcwd munmap putenv setlocale strchr strcasecmp \ +__argz_count __argz_stringify __argz_next]) + + AC_MSG_CHECKING(for stpcpy) + AC_CACHE_VAL(kde_cv_func_stpcpy, + [ + kde_safe_cxxflags=$CXXFLAGS + CXXFLAGS="-Werror" + AC_LANG_SAVE + AC_LANG_CPLUSPLUS + AC_TRY_COMPILE([ + #include + ], + [ + char buffer[200]; + stpcpy(buffer, buffer); + ], + kde_cv_func_stpcpy=yes, + kde_cv_func_stpcpy=no) + AC_LANG_RESTORE + CXXFLAGS=$kde_safe_cxxflags + ]) + AC_MSG_RESULT($kde_cv_func_stpcpy) + if eval "test \"`echo $kde_cv_func_stpcpy`\" = yes"; then + AC_DEFINE(HAVE_STPCPY, 1, [Define if you have stpcpy]) + fi + + AM_LC_MESSAGES + + if test "x$CATOBJEXT" != "x"; then + if test "x$ALL_LINGUAS" = "x"; then + LINGUAS= + else + AC_MSG_CHECKING(for catalogs to be installed) + NEW_LINGUAS= + for lang in ${LINGUAS=$ALL_LINGUAS}; do + case "$ALL_LINGUAS" in + *$lang*) NEW_LINGUAS="$NEW_LINGUAS $lang" ;; + esac + 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 + + ]) + +AC_DEFUN([AC_HAVE_XPM], + [AC_REQUIRE_CPP()dnl + AC_REQUIRE([KDE_CHECK_EXTRA_LIBS]) + + test -z "$XPM_LDFLAGS" && XPM_LDFLAGS= + test -z "$XPM_INCLUDE" && XPM_INCLUDE= + + AC_ARG_WITH(xpm,AC_HELP_STRING([--without-xpm],[disable color pixmap XPM tests]), + xpm_test=$withval, xpm_test="yes") + if test "x$xpm_test" = xno; then + ac_cv_have_xpm=no + else + AC_MSG_CHECKING(for XPM) + AC_CACHE_VAL(ac_cv_have_xpm, + [ + ac_save_ldflags="$LDFLAGS" + ac_save_cflags="$CFLAGS" + if test "x$kde_use_qt_emb" != "xyes" && test "x$kde_use_qt_mac" != "xyes"; then + LDFLAGS="$LDFLAGS $X_LDFLAGS $USER_LDFLAGS $LDFLAGS $XPM_LDFLAGS $all_libraries -lXpm -lX11 -lXext $LIBZ $LIBSOCKET" + else + LDFLAGS="$LDFLAGS $X_LDFLAGS $USER_LDFLAGS $LDFLAGS $XPM_LDFLAGS $all_libraries -lXpm $LIBZ $LIBSOCKET" + fi + CFLAGS="$CFLAGS $X_INCLUDES $USER_INCLUDES" + test -n "$XPM_INCLUDE" && CFLAGS="-I$XPM_INCLUDE $CFLAGS" + AC_TRY_LINK([#include ],[], + ac_cv_have_xpm="yes",ac_cv_have_xpm="no") + LDFLAGS="$ac_save_ldflags" + CFLAGS="$ac_save_cflags" + ])dnl + + if test "$ac_cv_have_xpm" = no; then + AC_MSG_RESULT(no) + XPM_LDFLAGS="" + XPMINC="" + $2 + else + AC_DEFINE(HAVE_XPM, 1, [Define if you have XPM support]) + if test "$XPM_LDFLAGS" = ""; then + XPMLIB='-lXpm $(LIB_X11)' + else + XPMLIB="-L$XPM_LDFLAGS -lXpm "'$(LIB_X11)' + fi + if test "$XPM_INCLUDE" = ""; then + XPMINC="" + else + XPMINC="-I$XPM_INCLUDE" + fi + AC_MSG_RESULT(yes) + $1 + fi + fi + AC_SUBST(XPMINC) + AC_SUBST(XPMLIB) +]) + +AC_DEFUN([AC_HAVE_DPMS], + [AC_REQUIRE_CPP()dnl + AC_REQUIRE([KDE_CHECK_EXTRA_LIBS]) + + test -z "$DPMS_LDFLAGS" && DPMS_LDFLAGS= + test -z "$DPMS_INCLUDE" && DPMS_INCLUDE= + DPMS_LIB= + + AC_ARG_WITH(dpms,AC_HELP_STRING([--without-dpms],[disable DPMS power saving]), + dpms_test=$withval, dpms_test="yes") + if test "x$dpms_test" = xno; then + ac_cv_have_dpms=no + else + AC_MSG_CHECKING(for DPMS) + dnl Note: ac_cv_have_dpms can be no, yes, or -lXdpms. + dnl 'yes' means DPMS_LIB="", '-lXdpms' means DPMS_LIB="-lXdpms". + AC_CACHE_VAL(ac_cv_have_dpms, + [ + if test "x$kde_use_qt_emb" = "xyes" || test "x$kde_use_qt_mac" = "xyes"; then + AC_MSG_RESULT(no) + ac_cv_have_dpms="no" + else + ac_save_ldflags="$LDFLAGS" + ac_save_cflags="$CFLAGS" + ac_save_libs="$LIBS" + LDFLAGS="$LDFLAGS $DPMS_LDFLAGS $all_libraries" + LIBS="-lX11 -lXext $LIBSOCKET" + CFLAGS="$CFLAGS $X_INCLUDES" + test -n "$DPMS_INCLUDE" && CFLAGS="-I$DPMS_INCLUDE $CFLAGS" + AC_TRY_LINK([ + #include + #include + #include + #include + int foo_test_dpms() + { return DPMSSetTimeouts( 0, 0, 0, 0 ); }],[], + ac_cv_have_dpms="yes", [ + LIBS="-lXdpms $LIBS" + AC_TRY_LINK([ + #include + #include + #include + #include + int foo_test_dpms() + { return DPMSSetTimeouts( 0, 0, 0, 0 ); }],[], + [ + ac_cv_have_dpms="-lXdpms" + ],ac_cv_have_dpms="no") + ]) + LDFLAGS="$ac_save_ldflags" + CFLAGS="$ac_save_cflags" + LIBS="$ac_save_libs" + fi + ])dnl + + if test "$ac_cv_have_dpms" = no; then + AC_MSG_RESULT(no) + DPMS_LDFLAGS="" + DPMSINC="" + $2 + else + AC_DEFINE(HAVE_DPMS, 1, [Define if you have DPMS support]) + if test "$ac_cv_have_dpms" = "-lXdpms"; then + DPMS_LIB="-lXdpms" + fi + if test "$DPMS_LDFLAGS" = ""; then + DPMSLIB="$DPMS_LIB "'$(LIB_X11)' + else + DPMSLIB="$DPMS_LDFLAGS $DPMS_LIB "'$(LIB_X11)' + fi + if test "$DPMS_INCLUDE" = ""; then + DPMSINC="" + else + DPMSINC="-I$DPMS_INCLUDE" + fi + AC_MSG_RESULT(yes) + $1 + fi + fi + ac_save_cflags="$CFLAGS" + CFLAGS="$CFLAGS $X_INCLUDES" + test -n "$DPMS_INCLUDE" && CFLAGS="-I$DPMS_INCLUDE $CFLAGS" + AH_TEMPLATE(HAVE_DPMSCAPABLE_PROTO, + [Define if you have the DPMSCapable prototype in ]) + AC_CHECK_DECL(DPMSCapable, + AC_DEFINE(HAVE_DPMSCAPABLE_PROTO),, + [#include + #include ]) + AH_TEMPLATE(HAVE_DPMSINFO_PROTO, + [Define if you have the DPMSInfo prototype in ]) + AC_CHECK_DECL(DPMSInfo, + AC_DEFINE(HAVE_DPMSINFO_PROTO),, + [#include + #include ]) + CFLAGS="$ac_save_cflags" + AC_SUBST(DPMSINC) + AC_SUBST(DPMSLIB) +]) + +AC_DEFUN([AC_HAVE_GL], + [AC_REQUIRE_CPP()dnl + AC_REQUIRE([KDE_CHECK_EXTRA_LIBS]) + + test -z "$GL_LDFLAGS" && GL_LDFLAGS= + test -z "$GL_INCLUDE" && GL_INCLUDE= + + AC_ARG_WITH(gl,AC_HELP_STRING([--without-gl],[disable 3D GL modes]), + gl_test=$withval, gl_test="yes") + if test "x$kde_use_qt_emb" = "xyes"; then + # GL and Qt Embedded is a no-go for now. + ac_cv_have_gl=no + elif test "x$gl_test" = xno; then + ac_cv_have_gl=no + else + AC_MSG_CHECKING(for GL) + AC_CACHE_VAL(ac_cv_have_gl, + [ + AC_LANG_SAVE + AC_LANG_CPLUSPLUS + ac_save_ldflags=$LDFLAGS + ac_save_cxxflags=$CXXFLAGS + ac_save_libs=$LIBS + LDFLAGS="$LDFLAGS $GL_LDFLAGS $X_LDFLAGS $all_libraries" + LIBS="$LIBS -lGL -lGLU" + test "x$kde_use_qt_mac" != xyes && test "x$kde_use_qt_emb" != xyes && LIBS="$LIBS -lX11" + LIBS="$LIBS $LIB_XEXT -lm $LIBSOCKET" + CXXFLAGS="$CFLAGS $X_INCLUDES" + test -n "$GL_INCLUDE" && CFLAGS="-I$GL_INCLUDE $CFLAGS" + AC_TRY_LINK([#include +#include +], [], + ac_cv_have_gl="yes", ac_cv_have_gl="no") + AC_LANG_RESTORE + LDFLAGS=$ac_save_ldflags + CXXFLAGS=$ac_save_cxxflags + LIBS=$ac_save_libs + ])dnl + + if test "$ac_cv_have_gl" = "no"; then + AC_MSG_RESULT(no) + GL_LDFLAGS="" + GLINC="" + $2 + else + AC_DEFINE(HAVE_GL, 1, [Defines if you have GL (Mesa, OpenGL, ...)]) + if test "$GL_LDFLAGS" = ""; then + GLLIB='-lGLU -lGL $(LIB_X11)' + else + GLLIB="$GL_LDFLAGS -lGLU -lGL "'$(LIB_X11)' + fi + if test "$GL_INCLUDE" = ""; then + GLINC="" + else + GLINC="-I$GL_INCLUDE" + fi + AC_MSG_RESULT($ac_cv_have_gl) + $1 + fi + fi + AC_SUBST(GLINC) + AC_SUBST(GLLIB) +]) + + + dnl shadow password and PAM magic - maintained by ossi@kde.org + +AC_DEFUN([KDE_PAM], [ + AC_REQUIRE([KDE_CHECK_LIBDL]) + + want_pam= + AC_ARG_WITH(pam, + AC_HELP_STRING([--with-pam[=ARG]],[enable support for PAM: ARG=[yes|no|service name]]), + [ if test "x$withval" = "xyes"; then + want_pam=yes + pam_service=kde + elif test "x$withval" = "xno"; then + want_pam=no + else + want_pam=yes + pam_service=$withval + fi + ], [ pam_service=kde ]) + + use_pam= + PAMLIBS= + if test "x$want_pam" != xno; then + AC_CHECK_LIB(pam, pam_start, [ + AC_CHECK_HEADER(security/pam_appl.h, + [ pam_header=security/pam_appl.h ], + [ AC_CHECK_HEADER(pam/pam_appl.h, + [ pam_header=pam/pam_appl.h ], + [ + AC_MSG_WARN([PAM detected, but no headers found! +Make sure you have the necessary development packages installed.]) + ] + ) + ] + ) + ], , $LIBDL) + if test -z "$pam_header"; then + if test "x$want_pam" = xyes; then + AC_MSG_ERROR([--with-pam was specified, but cannot compile with PAM!]) + fi + else + AC_DEFINE(HAVE_PAM, 1, [Defines if you have PAM (Pluggable Authentication Modules)]) + PAMLIBS="$PAM_MISC_LIB -lpam $LIBDL" + use_pam=yes + + dnl darwin claims to be something special + if test "$pam_header" = "pam/pam_appl.h"; then + AC_DEFINE(HAVE_PAM_PAM_APPL_H, 1, [Define if your PAM headers are in pam/ instead of security/]) + fi + + dnl test whether struct pam_message is const (Linux) or not (Sun) + AC_MSG_CHECKING(for const pam_message) + AC_EGREP_HEADER([struct pam_message], $pam_header, + [ AC_EGREP_HEADER([const struct pam_message], $pam_header, + [AC_MSG_RESULT([const: Linux-type PAM])], + [AC_MSG_RESULT([nonconst: Sun-type PAM]) + AC_DEFINE(PAM_MESSAGE_NONCONST, 1, [Define if your PAM support takes non-const arguments (Solaris)])] + )], + [AC_MSG_RESULT([not found - assume const, Linux-type PAM])]) + fi + fi + + AC_SUBST(PAMLIBS) +]) + +dnl DEF_PAM_SERVICE(arg name, full name, define name) +AC_DEFUN([DEF_PAM_SERVICE], [ + AC_ARG_WITH($1-pam, + AC_HELP_STRING([--with-$1-pam=[val]],[override PAM service from --with-pam for $2]), + [ if test "x$use_pam" = xyes; then + $3_PAM_SERVICE=$withval + else + AC_MSG_ERROR([Cannot use use --with-$1-pam, as no PAM was detected. +You may want to enforce it by using --with-pam.]) + fi + ], + [ if test "x$use_pam" = xyes; then + $3_PAM_SERVICE="$pam_service" + fi + ]) + if test -n "$$3_PAM_SERVICE"; then + AC_MSG_RESULT([The PAM service used by $2 will be $$3_PAM_SERVICE]) + AC_DEFINE_UNQUOTED($3_PAM_SERVICE, "$$3_PAM_SERVICE", [The PAM service to be used by $2]) + fi + AC_SUBST($3_PAM_SERVICE) +]) + +AC_DEFUN([KDE_SHADOWPASSWD], [ + AC_REQUIRE([KDE_PAM]) + + AC_CHECK_LIB(shadow, getspent, + [ LIBSHADOW="-lshadow" + ac_use_shadow=yes + ], + [ dnl for UnixWare + AC_CHECK_LIB(gen, getspent, + [ LIBGEN="-lgen" + ac_use_shadow=yes + ], + [ AC_CHECK_FUNC(getspent, + [ ac_use_shadow=yes ], + [ ac_use_shadow=no ]) + ]) + ]) + AC_SUBST(LIBSHADOW) + AC_SUBST(LIBGEN) + + AC_MSG_CHECKING([for shadow passwords]) + + AC_ARG_WITH(shadow, + AC_HELP_STRING([--with-shadow],[If you want shadow password support]), + [ if test "x$withval" != "xno"; then + use_shadow=yes + else + use_shadow=no + fi + ], [ + use_shadow="$ac_use_shadow" + ]) + + if test "x$use_shadow" = xyes; then + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_SHADOW, 1, [Define if you use shadow passwords]) + else + AC_MSG_RESULT(no) + LIBSHADOW= + LIBGEN= + fi + + dnl finally make the relevant binaries setuid root, if we have shadow passwds. + dnl this still applies, if we could use it indirectly through pam. + if test "x$use_shadow" = xyes || + ( test "x$use_pam" = xyes && test "x$ac_use_shadow" = xyes ); then + case $host in + *-*-freebsd* | *-*-netbsd* | *-*-openbsd*) + SETUIDFLAGS="-m 4755 -o root";; + *) + SETUIDFLAGS="-m 4755";; + esac + fi + AC_SUBST(SETUIDFLAGS) + +]) + +AC_DEFUN([KDE_PASSWDLIBS], [ + AC_REQUIRE([KDE_MISC_TESTS]) dnl for LIBCRYPT + AC_REQUIRE([KDE_PAM]) + AC_REQUIRE([KDE_SHADOWPASSWD]) + + if test "x$use_pam" = "xyes"; then + PASSWDLIBS="$PAMLIBS" + else + PASSWDLIBS="$LIBCRYPT $LIBSHADOW $LIBGEN" + fi + + dnl FreeBSD uses a shadow-like setup, where /etc/passwd holds the users, but + dnl /etc/master.passwd holds the actual passwords. /etc/master.passwd requires + dnl root to read, so kcheckpass needs to be root (even when using pam, since pam + dnl may need to read /etc/master.passwd). + case $host in + *-*-freebsd*) + SETUIDFLAGS="-m 4755 -o root" + ;; + *) + ;; + esac + + AC_SUBST(PASSWDLIBS) +]) + +AC_DEFUN([KDE_CHECK_LIBDL], +[ +AC_CHECK_LIB(dl, dlopen, [ +LIBDL="-ldl" +ac_cv_have_dlfcn=yes +]) + +AC_CHECK_LIB(dld, shl_unload, [ +LIBDL="-ldld" +ac_cv_have_shload=yes +]) + +AC_SUBST(LIBDL) +]) + +AC_DEFUN([KDE_CHECK_DLOPEN], +[ +KDE_CHECK_LIBDL +AC_CHECK_HEADERS(dlfcn.h dl.h) +if test "$ac_cv_header_dlfcn_h" = "no"; then + ac_cv_have_dlfcn=no +fi + +if test "$ac_cv_header_dl_h" = "no"; then + ac_cv_have_shload=no +fi + +dnl XXX why change enable_dlopen? its already set by autoconf's AC_ARG_ENABLE +dnl (MM) +AC_ARG_ENABLE(dlopen, +AC_HELP_STRING([--disable-dlopen],[link statically [default=no]]), +enable_dlopen=$enableval, +enable_dlopen=yes) + +# override the user's opinion, if we know it better ;) +if test "$ac_cv_have_dlfcn" = "no" && test "$ac_cv_have_shload" = "no"; then + enable_dlopen=no +fi + +if test "$ac_cv_have_dlfcn" = "yes"; then + AC_DEFINE_UNQUOTED(HAVE_DLFCN, 1, [Define if you have dlfcn]) +fi + +if test "$ac_cv_have_shload" = "yes"; then + AC_DEFINE_UNQUOTED(HAVE_SHLOAD, 1, [Define if you have shload]) +fi + +if test "$enable_dlopen" = no ; then + test -n "$1" && eval $1 +else + test -n "$2" && eval $2 +fi + +]) + +AC_DEFUN([KDE_CHECK_DYNAMIC_LOADING], +[ +KDE_CHECK_DLOPEN(libtool_enable_shared=yes, libtool_enable_static=no) +KDE_PROG_LIBTOOL +AC_MSG_CHECKING([dynamic loading]) +eval "`egrep '^build_libtool_libs=' libtool`" +if test "$build_libtool_libs" = "yes" && test "$enable_dlopen" = "yes"; then + dynamic_loading=yes + AC_DEFINE_UNQUOTED(HAVE_DYNAMIC_LOADING) +else + dynamic_loading=no +fi +AC_MSG_RESULT($dynamic_loading) +if test "$dynamic_loading" = "yes"; then + $1 +else + $2 +fi +]) + +AC_DEFUN([KDE_ADD_INCLUDES], +[ +if test -z "$1"; then + test_include="Pix.h" +else + test_include="$1" +fi + +AC_MSG_CHECKING([for libg++ ($test_include)]) + +AC_CACHE_VAL(kde_cv_libgpp_includes, +[ +kde_cv_libgpp_includes=no + + for ac_dir in \ + \ + /usr/include/g++ \ + /usr/include \ + /usr/unsupported/include \ + /opt/include \ + $extra_include \ + ; \ + do + if test -r "$ac_dir/$test_include"; then + kde_cv_libgpp_includes=$ac_dir + break + fi + done +]) + +AC_MSG_RESULT($kde_cv_libgpp_includes) +if test "$kde_cv_libgpp_includes" != "no"; then + all_includes="-I$kde_cv_libgpp_includes $all_includes $USER_INCLUDES" +fi +]) +]) + +AC_DEFUN([KDE_CHECK_LIBPTHREAD], +[ + dnl This code is here specifically to handle the + dnl various flavors of threading library on FreeBSD + dnl 4-, 5-, and 6-, and the (weird) rules around it. + dnl There may be an environment PTHREAD_LIBS that + dnl specifies what to use; otherwise, search for it. + dnl -pthread is special cased and unsets LIBPTHREAD + dnl below if found. + LIBPTHREAD="" + + if test -n "$PTHREAD_LIBS"; then + if test "x$PTHREAD_LIBS" = "x-pthread" ; then + LIBPTHREAD="PTHREAD" + else + PTHREAD_LIBS_save="$PTHREAD_LIBS" + PTHREAD_LIBS=`echo "$PTHREAD_LIBS_save" | sed -e 's,^-l,,g'` + AC_MSG_CHECKING([for pthread_create in $PTHREAD_LIBS]) + KDE_CHECK_LIB($PTHREAD_LIBS, pthread_create, [ + LIBPTHREAD="$PTHREAD_LIBS_save"]) + PTHREAD_LIBS="$PTHREAD_LIBS_save" + fi + fi + + dnl Is this test really needed, in the face of the Tru64 test below? + if test -z "$LIBPTHREAD"; then + AC_CHECK_LIB(pthread, pthread_create, [LIBPTHREAD="-lpthread"]) + fi + + dnl This is a special Tru64 check, see BR 76171 issue #18. + if test -z "$LIBPTHREAD" ; then + AC_MSG_CHECKING([for pthread_create in -lpthread]) + kde_safe_libs=$LIBS + LIBS="$LIBS -lpthread" + AC_TRY_LINK([#include ],[(void)pthread_create(0,0,0,0);],[ + AC_MSG_RESULT(yes) + LIBPTHREAD="-lpthread"],[ + AC_MSG_RESULT(no)]) + LIBS=$kde_safe_libs + fi + + dnl Un-special-case for FreeBSD. + if test "x$LIBPTHREAD" = "xPTHREAD" ; then + LIBPTHREAD="" + fi + + AC_SUBST(LIBPTHREAD) +]) + +AC_DEFUN([KDE_CHECK_PTHREAD_OPTION], +[ + USE_THREADS="" + if test -z "$LIBPTHREAD"; then + KDE_CHECK_COMPILER_FLAG(pthread, [USE_THREADS="-D_THREAD_SAFE -pthread"]) + fi + + AH_VERBATIM(__svr_define, [ +#if defined(__SVR4) && !defined(__svr4__) +#define __svr4__ 1 +#endif +]) + case $host_os in + solaris*) + KDE_CHECK_COMPILER_FLAG(mt, [USE_THREADS="-mt"]) + CPPFLAGS="$CPPFLAGS -D_REENTRANT -D_POSIX_PTHREAD_SEMANTICS -DUSE_SOLARIS -DSVR4" + ;; + freebsd*) + CPPFLAGS="$CPPFLAGS -D_THREAD_SAFE $PTHREAD_CFLAGS" + ;; + aix*) + CPPFLAGS="$CPPFLAGS -D_THREAD_SAFE" + LIBPTHREAD="$LIBPTHREAD -lc_r" + ;; + linux*) CPPFLAGS="$CPPFLAGS -D_REENTRANT" + if test "$CXX" = "KCC"; then + CXXFLAGS="$CXXFLAGS --thread_safe" + NOOPT_CXXFLAGS="$NOOPT_CXXFLAGS --thread_safe" + fi + ;; + *) + ;; + esac + AC_SUBST(USE_THREADS) + AC_SUBST(LIBPTHREAD) +]) + +AC_DEFUN([KDE_CHECK_THREADING], +[ + AC_REQUIRE([KDE_CHECK_LIBPTHREAD]) + AC_REQUIRE([KDE_CHECK_PTHREAD_OPTION]) + dnl default is yes if libpthread is found and no if no libpthread is available + if test -z "$LIBPTHREAD"; then + if test -z "$USE_THREADS"; then + kde_check_threading_default=no + else + kde_check_threading_default=yes + fi + else + kde_check_threading_default=yes + fi + AC_ARG_ENABLE(threading,AC_HELP_STRING([--disable-threading],[disables threading even if libpthread found]), + kde_use_threading=$enableval, kde_use_threading=$kde_check_threading_default) + if test "x$kde_use_threading" = "xyes"; then + AC_DEFINE(HAVE_LIBPTHREAD, 1, [Define if you have a working libpthread (will enable threaded code)]) + fi +]) + +AC_DEFUN([KDE_TRY_LINK_PYTHON], +[ +if test "$kde_python_link_found" = no; then + +if test "$1" = normal; then + AC_MSG_CHECKING(if a Python application links) +else + AC_MSG_CHECKING(if Python depends on $2) +fi + +AC_CACHE_VAL(kde_cv_try_link_python_$1, +[ +kde_save_cflags="$CFLAGS" +CFLAGS="$CFLAGS $PYTHONINC" +kde_save_libs="$LIBS" +LIBS="$LIBS $LIBPYTHON $2 $LIBDL $LIBSOCKET" +kde_save_ldflags="$LDFLAGS" +LDFLAGS="$LDFLAGS $PYTHONLIB" + +AC_TRY_LINK( +[ +#include +],[ + PySys_SetArgv(1, 0); +], + [kde_cv_try_link_python_$1=yes], + [kde_cv_try_link_python_$1=no] +) +CFLAGS="$kde_save_cflags" +LIBS="$kde_save_libs" +LDFLAGS="$kde_save_ldflags" +]) + +if test "$kde_cv_try_link_python_$1" = "yes"; then + AC_MSG_RESULT(yes) + kde_python_link_found=yes + if test ! "$1" = normal; then + LIBPYTHON="$LIBPYTHON $2" + fi + $3 +else + AC_MSG_RESULT(no) + $4 +fi + +fi + +]) + +AC_DEFUN([KDE_CHECK_PYTHON_DIR], +[ +AC_MSG_CHECKING([for Python directory]) + +AC_CACHE_VAL(kde_cv_pythondir, +[ + if test -z "$PYTHONDIR"; then + kde_cv_pythondir=/usr/local + else + kde_cv_pythondir="$PYTHONDIR" + fi +]) + +AC_ARG_WITH(pythondir, +AC_HELP_STRING([--with-pythondir=pythondir],[use python installed in pythondir]), +[ + ac_python_dir=$withval +], ac_python_dir=$kde_cv_pythondir +) + +AC_MSG_RESULT($ac_python_dir) +]) + +AC_DEFUN([KDE_CHECK_PYTHON_INTERN], +[ +AC_REQUIRE([KDE_CHECK_LIBDL]) +AC_REQUIRE([KDE_CHECK_LIBPTHREAD]) +AC_REQUIRE([KDE_CHECK_PYTHON_DIR]) + +if test -z "$1"; then + version="1.5" +else + version="$1" +fi + +AC_MSG_CHECKING([for Python$version]) + +python_incdirs="$ac_python_dir/include /usr/include /usr/local/include/ $kde_extra_includes" +AC_FIND_FILE(Python.h, $python_incdirs, python_incdir) +if test ! -r $python_incdir/Python.h; then + AC_FIND_FILE(python$version/Python.h, $python_incdirs, python_incdir) + python_incdir=$python_incdir/python$version + if test ! -r $python_incdir/Python.h; then + python_incdir=no + fi +fi + +PYTHONINC=-I$python_incdir + +python_libdirs="$ac_python_dir/lib$kdelibsuff /usr/lib$kdelibsuff /usr/local /usr/lib$kdelibsuff $kde_extra_libs" +AC_FIND_FILE(libpython$version.so, $python_libdirs, python_libdir) +if test ! -r $python_libdir/libpython$version.so; then + AC_FIND_FILE(libpython$version.a, $python_libdirs, python_libdir) + if test ! -r $python_libdir/libpython$version.a; then + AC_FIND_FILE(python$version/config/libpython$version.a, $python_libdirs, python_libdir) + python_libdir=$python_libdir/python$version/config + if test ! -r $python_libdir/libpython$version.a; then + python_libdir=no + fi + fi +fi + +PYTHONLIB=-L$python_libdir +kde_orig_LIBPYTHON=$LIBPYTHON +if test -z "$LIBPYTHON"; then + LIBPYTHON=-lpython$version +fi + +AC_FIND_FILE(python$version/copy.py, $python_libdirs, python_moddir) +python_moddir=$python_moddir/python$version +if test ! -r $python_moddir/copy.py; then + python_moddir=no +fi + +PYTHONMODDIR=$python_moddir + +AC_MSG_RESULT(header $python_incdir library $python_libdir modules $python_moddir) + +if test x$python_incdir = xno || test x$python_libdir = xno || test x$python_moddir = xno; then + LIBPYTHON=$kde_orig_LIBPYTHON + test "x$PYTHONLIB" = "x-Lno" && PYTHONLIB="" + test "x$PYTHONINC" = "x-Ino" && PYTHONINC="" + $2 +else + dnl Note: this test is very weak + kde_python_link_found=no + KDE_TRY_LINK_PYTHON(normal) + KDE_TRY_LINK_PYTHON(m, -lm) + KDE_TRY_LINK_PYTHON(pthread, $LIBPTHREAD) + KDE_TRY_LINK_PYTHON(tcl, -ltcl) + KDE_TRY_LINK_PYTHON(db2, -ldb2) + KDE_TRY_LINK_PYTHON(m_and_thread, [$LIBPTHREAD -lm]) + KDE_TRY_LINK_PYTHON(m_and_thread_and_util, [$LIBPTHREAD -lm -lutil]) + KDE_TRY_LINK_PYTHON(m_and_thread_and_db3, [$LIBPTHREAD -lm -ldb-3 -lutil]) + KDE_TRY_LINK_PYTHON(pthread_and_db3, [$LIBPTHREAD -ldb-3]) + KDE_TRY_LINK_PYTHON(m_and_thread_and_db, [$LIBPTHREAD -lm -ldb -ltermcap -lutil]) + KDE_TRY_LINK_PYTHON(pthread_and_dl, [$LIBPTHREAD $LIBDL -lutil -lreadline -lncurses -lm]) + KDE_TRY_LINK_PYTHON(pthread_and_panel_curses, [$LIBPTHREAD $LIBDL -lm -lpanel -lcurses]) + KDE_TRY_LINK_PYTHON(m_and_thread_and_db_special, [$LIBPTHREAD -lm -ldb -lutil], [], + [AC_MSG_WARN([it seems, Python depends on another library. + Please set LIBPYTHON to '-lpython$version -lotherlib' before calling configure to fix this + and contact the authors to let them know about this problem]) + ]) + + LIBPYTHON="$LIBPYTHON $LIBDL $LIBSOCKET" + AC_SUBST(PYTHONINC) + AC_SUBST(PYTHONLIB) + AC_SUBST(LIBPYTHON) + AC_SUBST(PYTHONMODDIR) + AC_DEFINE(HAVE_PYTHON, 1, [Define if you have the development files for python]) +fi + +]) + + +AC_DEFUN([KDE_CHECK_PYTHON], +[ + KDE_CHECK_PYTHON_INTERN("2.5", + [KDE_CHECK_PYTHON_INTERN("2.4", + [KDE_CHECK_PYTHON_INTERN("2.3", + [KDE_CHECK_PYTHON_INTERN("2.2", + [KDE_CHECK_PYTHON_INTERN("2.1", + [KDE_CHECK_PYTHON_INTERN("2.0", + [KDE_CHECK_PYTHON_INTERN($1, $2) ]) + ]) + ]) + ]) + ]) + ]) +]) + +AC_DEFUN([KDE_CHECK_STL], +[ + AC_LANG_SAVE + AC_LANG_CPLUSPLUS + ac_save_CXXFLAGS="$CXXFLAGS" + CXXFLAGS="`echo $CXXFLAGS | sed s/-fno-exceptions//`" + + AC_MSG_CHECKING([if C++ programs can be compiled]) + AC_CACHE_VAL(kde_cv_stl_works, + [ + AC_TRY_COMPILE([ +#include +using namespace std; +],[ + string astring="Hallo Welt."; + astring.erase(0, 6); // now astring is "Welt" + return 0; +], kde_cv_stl_works=yes, + kde_cv_stl_works=no) +]) + + AC_MSG_RESULT($kde_cv_stl_works) + + if test "$kde_cv_stl_works" = "yes"; then + # back compatible + AC_DEFINE_UNQUOTED(HAVE_SGI_STL, 1, [Define if you have a STL implementation by SGI]) + else + AC_MSG_ERROR([Your Installation isn't able to compile simple C++ programs. +Check config.log for details - if you're using a Linux distribution you might miss +a package named similar to libstdc++-dev.]) + fi + + CXXFLAGS="$ac_save_CXXFLAGS" + AC_LANG_RESTORE +]) + +AC_DEFUN([AC_FIND_QIMGIO], + [AC_REQUIRE([AC_FIND_JPEG]) +AC_REQUIRE([KDE_CHECK_EXTRA_LIBS]) +AC_MSG_CHECKING([for qimgio]) +AC_CACHE_VAL(ac_cv_lib_qimgio, +[ +AC_LANG_SAVE +AC_LANG_CPLUSPLUS +ac_save_LIBS="$LIBS" +ac_save_CXXFLAGS="$CXXFLAGS" +LIBS="$all_libraries -lqimgio -lpng -lz $LIBJPEG $LIBQT" +CXXFLAGS="$CXXFLAGS -I$qt_incdir $all_includes" +AC_TRY_RUN(dnl +[ +#include +#include +int main() { + QString t = "hallo"; + t.fill('t'); + qInitImageIO(); +} +], + ac_cv_lib_qimgio=yes, + ac_cv_lib_qimgio=no, + ac_cv_lib_qimgio=no) +LIBS="$ac_save_LIBS" +CXXFLAGS="$ac_save_CXXFLAGS" +AC_LANG_RESTORE +])dnl +if eval "test \"`echo $ac_cv_lib_qimgio`\" = yes"; then + LIBQIMGIO="-lqimgio -lpng -lz $LIBJPEG" + AC_MSG_RESULT(yes) + AC_DEFINE_UNQUOTED(HAVE_QIMGIO, 1, [Define if you have the Qt extension qimgio available]) + AC_SUBST(LIBQIMGIO) +else + AC_MSG_RESULT(not found) +fi +]) + +AC_DEFUN([AM_DISABLE_LIBRARIES], +[ + AC_PROVIDE([AM_ENABLE_STATIC]) + AC_PROVIDE([AM_ENABLE_SHARED]) + enable_static=no + enable_shared=yes +]) + + +AC_DEFUN([AC_CHECK_UTMP_FILE], +[ + AC_MSG_CHECKING([for utmp file]) + + AC_CACHE_VAL(kde_cv_utmp_file, + [ + kde_cv_utmp_file=no + + for ac_file in \ + \ + /var/run/utmp \ + /var/adm/utmp \ + /etc/utmp \ + ; \ + do + if test -r "$ac_file"; then + kde_cv_utmp_file=$ac_file + break + fi + done + ]) + + if test "$kde_cv_utmp_file" != "no"; then + AC_DEFINE_UNQUOTED(UTMP, "$kde_cv_utmp_file", [Define the file for utmp entries]) + $1 + AC_MSG_RESULT($kde_cv_utmp_file) + else + $2 + AC_MSG_RESULT([non found]) + fi +]) + + +AC_DEFUN([KDE_CREATE_SUBDIRSLIST], +[ + +DO_NOT_COMPILE="$DO_NOT_COMPILE CVS debian bsd-port admin" +TOPSUBDIRS="" + +if test ! -s $srcdir/subdirs; then + dnl Note: Makefile.common creates subdirs, so this is just a fallback + files=`cd $srcdir && ls -1` + dirs=`for i in $files; do if test -d $i; then echo $i; fi; done` + for i in $dirs; do + echo $i >> $srcdir/subdirs + done +fi + +ac_topsubdirs= +if test -s $srcdir/inst-apps; then + ac_topsubdirs="`cat $srcdir/inst-apps`" +elif test -s $srcdir/subdirs; then + ac_topsubdirs="`cat $srcdir/subdirs`" +fi + +for i in $ac_topsubdirs; do + AC_MSG_CHECKING([if $i should be compiled]) + if test -d $srcdir/$i; then + install_it="yes" + for j in $DO_NOT_COMPILE; do + if test $i = $j; then + install_it="no" + fi + done + else + install_it="no" + fi + AC_MSG_RESULT($install_it) + vari=`echo $i | sed -e 's,[[-+.@]],_,g'` + if test $install_it = "yes"; then + TOPSUBDIRS="$TOPSUBDIRS $i" + eval "$vari""_SUBDIR_included=yes" + else + eval "$vari""_SUBDIR_included=no" + fi +done + +AC_SUBST(TOPSUBDIRS) +]) + +AC_DEFUN([KDE_CHECK_NAMESPACES], +[ +AC_MSG_CHECKING(whether C++ compiler supports namespaces) +AC_LANG_SAVE +AC_LANG_CPLUSPLUS +AC_TRY_COMPILE([ +], +[ +namespace Foo { + extern int i; + namespace Bar { + extern int i; + } +} + +int Foo::i = 0; +int Foo::Bar::i = 1; +],[ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_NAMESPACES) +], [ +AC_MSG_RESULT(no) +]) +AC_LANG_RESTORE +]) + +dnl ------------------------------------------------------------------------ +dnl Check for S_ISSOCK macro. Doesn't exist on Unix SCO. faure@kde.org +dnl ------------------------------------------------------------------------ +dnl +AC_DEFUN([AC_CHECK_S_ISSOCK], +[ +AC_MSG_CHECKING(for S_ISSOCK) +AC_CACHE_VAL(ac_cv_have_s_issock, +[ +AC_TRY_LINK( +[ +#include +], +[ +struct stat buff; +int b = S_ISSOCK( buff.st_mode ); +], +ac_cv_have_s_issock=yes, +ac_cv_have_s_issock=no) +]) +AC_MSG_RESULT($ac_cv_have_s_issock) +if test "$ac_cv_have_s_issock" = "yes"; then + AC_DEFINE_UNQUOTED(HAVE_S_ISSOCK, 1, [Define if sys/stat.h declares S_ISSOCK.]) +fi + +AH_VERBATIM(_ISSOCK, +[ +#ifndef HAVE_S_ISSOCK +#define HAVE_S_ISSOCK +#define S_ISSOCK(mode) (1==0) +#endif +]) + +]) + +dnl ------------------------------------------------------------------------ +dnl Check for MAXPATHLEN macro, defines KDEMAXPATHLEN. faure@kde.org +dnl ------------------------------------------------------------------------ +dnl +AC_DEFUN([AC_CHECK_KDEMAXPATHLEN], +[ +AC_MSG_CHECKING(for MAXPATHLEN) +AC_CACHE_VAL(ac_cv_maxpathlen, +[ +cat > conftest.$ac_ext < +#endif +#include +#include +#ifndef MAXPATHLEN +#define MAXPATHLEN 1024 +#endif + +KDE_HELLO MAXPATHLEN + +EOF + +ac_try="$ac_cpp conftest.$ac_ext 2>/dev/null | grep '^KDE_HELLO' >conftest.out" + +if AC_TRY_EVAL(ac_try) && test -s conftest.out; then + ac_cv_maxpathlen=`sed 's#KDE_HELLO ##' conftest.out` +else + ac_cv_maxpathlen=1024 +fi + +rm conftest.* + +]) +AC_MSG_RESULT($ac_cv_maxpathlen) +AC_DEFINE_UNQUOTED(KDEMAXPATHLEN,$ac_cv_maxpathlen, [Define a safe value for MAXPATHLEN] ) +]) + +AC_DEFUN([KDE_CHECK_HEADER], +[ + kde_safe_cppflags=$CPPFLAGS + CPPFLAGS="$CPPFLAGS $all_includes" + AC_LANG_SAVE + AC_LANG_CPLUSPLUS + AC_CHECK_HEADER([$1], [$2], [$3], [$4]) + AC_LANG_RESTORE + CPPFLAGS=$kde_safe_cppflags +]) + +AC_DEFUN([KDE_CHECK_HEADERS], +[ + AH_CHECK_HEADERS([$1]) + AC_LANG_SAVE + kde_safe_cppflags=$CPPFLAGS + CPPFLAGS="$CPPFLAGS $all_includes" + AC_LANG_CPLUSPLUS + AC_CHECK_HEADERS([$1], [$2], [$3], [$4]) + CPPFLAGS=$kde_safe_cppflags + AC_LANG_RESTORE +]) + +AC_DEFUN([KDE_FAST_CONFIGURE], +[ + dnl makes configure fast (needs perl) + AC_ARG_ENABLE(fast-perl, AC_HELP_STRING([--disable-fast-perl],[disable fast Makefile generation (needs perl)]), + with_fast_perl=$enableval, with_fast_perl=yes) +]) + +AC_DEFUN([KDE_CONF_FILES], +[ + val= + if test -f $srcdir/configure.files ; then + val=`sed -e 's%^%\$(top_srcdir)/%' $srcdir/configure.files` + fi + CONF_FILES= + if test -n "$val" ; then + for i in $val ; do + CONF_FILES="$CONF_FILES $i" + done + fi + AC_SUBST(CONF_FILES) +])dnl + +dnl This sets the prefix, for arts and kdelibs +dnl Do NOT use in any other module. +dnl It only looks at --prefix, KDEDIR and falls back to /usr/local/kde +AC_DEFUN([KDE_SET_PREFIX_CORE], +[ + unset CDPATH + dnl make $KDEDIR the default for the installation + AC_PREFIX_DEFAULT(${KDEDIR:-/usr/local/kde}) + + if test "x$prefix" = "xNONE"; then + prefix=$ac_default_prefix + ac_configure_args="$ac_configure_args --prefix=$prefix" + fi + # And delete superfluous '/' to make compares easier + prefix=`echo "$prefix" | sed 's,//*,/,g' | sed -e 's,/$,,'` + kde_libs_htmldir=$prefix/share/doc/HTML/ + exec_prefix=`echo "$exec_prefix" | sed 's,//*,/,g' | sed -e 's,/$,,'` + + kde_libs_prefix='$(prefix)' + kde_libs_htmldir='$(kde_htmldir)' + AC_SUBST(kde_libs_prefix) + AC_SUBST(kde_libs_htmldir) + KDE_FAST_CONFIGURE + KDE_CONF_FILES +]) + + +AC_DEFUN([KDE_SET_PREFIX], +[ + unset CDPATH + dnl We can't give real code to that macro, only a value. + dnl It only matters for --help, since we set the prefix in this function anyway. + AC_PREFIX_DEFAULT(${KDEDIR:-the kde prefix}) + + KDE_SET_DEFAULT_BINDIRS + if test "x$prefix" = "xNONE"; then + dnl no prefix given: look for kde-config in the PATH and deduce the prefix from it + KDE_FIND_PATH(kde-config, KDECONFIG, [$kde_default_bindirs], [KDE_MISSING_PROG_ERROR(kde-config)], [], prepend) + else + dnl prefix given: look for kde-config, preferrably in prefix, otherwise in PATH + kde_save_PATH="$PATH" + PATH="$exec_prefix/bin:$prefix/bin:$PATH" + KDE_FIND_PATH(kde-config, KDECONFIG, [$kde_default_bindirs], [KDE_MISSING_PROG_ERROR(kde-config)], [], prepend) + PATH="$kde_save_PATH" + fi + + kde_libs_prefix=`$KDECONFIG --prefix` + if test -z "$kde_libs_prefix" || test ! -x "$kde_libs_prefix"; then + AC_MSG_ERROR([$KDECONFIG --prefix outputed the non existant prefix '$kde_libs_prefix' for kdelibs. + This means it has been moved since you installed it. + This won't work. Please recompile kdelibs for the new prefix. + ]) + fi + kde_libs_htmldir=`$KDECONFIG --install html --expandvars` + + AC_MSG_CHECKING([where to install]) + if test "x$prefix" = "xNONE"; then + prefix=$kde_libs_prefix + AC_MSG_RESULT([$prefix (as returned by kde-config)]) + else + dnl --prefix was given. Compare prefixes and warn (in configure.in.bot.end) if different + given_prefix=$prefix + AC_MSG_RESULT([$prefix (as requested)]) + fi + + # And delete superfluous '/' to make compares easier + prefix=`echo "$prefix" | sed 's,//*,/,g' | sed -e 's,/$,,'` + exec_prefix=`echo "$exec_prefix" | sed 's,//*,/,g' | sed -e 's,/$,,'` + given_prefix=`echo "$given_prefix" | sed 's,//*,/,g' | sed -e 's,/$,,'` + + AC_SUBST(KDECONFIG) + AC_SUBST(kde_libs_prefix) + AC_SUBST(kde_libs_htmldir) + + KDE_FAST_CONFIGURE + KDE_CONF_FILES +]) + +pushdef([AC_PROG_INSTALL], +[ + dnl our own version, testing for a -p flag + popdef([AC_PROG_INSTALL]) + dnl as AC_PROG_INSTALL works as it works we first have + dnl to save if the user didn't specify INSTALL, as the + dnl autoconf one overwrites INSTALL and we have no chance to find + dnl out afterwards + test -n "$INSTALL" && kde_save_INSTALL_given=$INSTALL + test -n "$INSTALL_PROGRAM" && kde_save_INSTALL_PROGRAM_given=$INSTALL_PROGRAM + test -n "$INSTALL_SCRIPT" && kde_save_INSTALL_SCRIPT_given=$INSTALL_SCRIPT + AC_PROG_INSTALL + + if test -z "$kde_save_INSTALL_given" ; then + # OK, user hasn't given any INSTALL, autoconf found one for us + # now we test, if it supports the -p flag + AC_MSG_CHECKING(for -p flag to install) + rm -f confinst.$$.* > /dev/null 2>&1 + echo "Testtest" > confinst.$$.orig + ac_res=no + if ${INSTALL} -p confinst.$$.orig confinst.$$.new > /dev/null 2>&1 ; then + if test -f confinst.$$.new ; then + # OK, -p seems to do no harm to install + INSTALL="${INSTALL} -p" + ac_res=yes + fi + fi + rm -f confinst.$$.* + AC_MSG_RESULT($ac_res) + fi + dnl the following tries to resolve some signs and wonders coming up + dnl with different autoconf/automake versions + dnl e.g.: + dnl *automake 1.4 install-strip sets A_M_INSTALL_PROGRAM_FLAGS to -s + dnl and has INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(A_M_INSTALL_PROGRAM_FLAGS) + dnl it header-vars.am, so there the actual INSTALL_PROGRAM gets the -s + dnl *automake 1.4a (and above) use INSTALL_STRIP_FLAG and only has + dnl INSTALL_PROGRAM = @INSTALL_PROGRAM@ there, but changes the + dnl install-@DIR@PROGRAMS targets to explicitly use that flag + dnl *autoconf 2.13 is dumb, and thinks it can use INSTALL_PROGRAM as + dnl INSTALL_SCRIPT, which breaks with automake <= 1.4 + dnl *autoconf >2.13 (since 10.Apr 1999) has not that failure + dnl *sometimes KDE does not use the install-@DIR@PROGRAM targets from + dnl automake (due to broken Makefile.am or whatever) to install programs, + dnl and so does not see the -s flag in automake > 1.4 + dnl to clean up that mess we: + dnl +set INSTALL_PROGRAM to use INSTALL_STRIP_FLAG + dnl which cleans KDE's program with automake > 1.4; + dnl +set INSTALL_SCRIPT to only use INSTALL, to clean up autoconf's problems + dnl with automake<=1.4 + dnl note that dues to this sometimes two '-s' flags are used (if KDE + dnl properly uses install-@DIR@PROGRAMS, but I don't care + dnl + dnl And to all this comes, that I even can't write in comments variable + dnl names used by automake, because it is so stupid to think I wanted to + dnl _use_ them, therefor I have written A_M_... instead of AM_ + dnl hmm, I wanted to say something ... ahh yes: Arghhh. + + if test -z "$kde_save_INSTALL_PROGRAM_given" ; then + INSTALL_PROGRAM='${INSTALL} $(INSTALL_STRIP_FLAG)' + fi + if test -z "$kde_save_INSTALL_SCRIPT_given" ; then + INSTALL_SCRIPT='${INSTALL}' + fi +])dnl + +AC_DEFUN([KDE_LANG_CPLUSPLUS], +[AC_LANG_CPLUSPLUS +ac_link='rm -rf SunWS_cache; ${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&AC_FD_CC' +pushdef([AC_LANG_CPLUSPLUS], [popdef([AC_LANG_CPLUSPLUS]) KDE_LANG_CPLUSPLUS]) +]) + +pushdef([AC_LANG_CPLUSPLUS], +[popdef([AC_LANG_CPLUSPLUS]) +KDE_LANG_CPLUSPLUS +]) + +AC_DEFUN([KDE_CHECK_LONG_LONG], +[ +AC_MSG_CHECKING(for long long) +AC_CACHE_VAL(kde_cv_c_long_long, +[ + AC_LANG_SAVE + AC_LANG_CPLUSPLUS + AC_TRY_LINK([], [ + long long foo = 0; + foo = foo+1; + ], + kde_cv_c_long_long=yes, kde_cv_c_long_long=no) + AC_LANG_RESTORE +]) +AC_MSG_RESULT($kde_cv_c_long_long) +if test "$kde_cv_c_long_long" = yes; then + AC_DEFINE(HAVE_LONG_LONG, 1, [Define if you have long long as datatype]) +fi +]) + +AC_DEFUN([KDE_CHECK_LIB], +[ + kde_save_LDFLAGS="$LDFLAGS" + dnl AC_CHECK_LIB modifies LIBS, so save it here + kde_save_LIBS="$LIBS" + LDFLAGS="$LDFLAGS $all_libraries" + case $host_os in + aix*) LDFLAGS="-brtl $LDFLAGS" + test "$GCC" = yes && LDFLAGS="-Wl,$LDFLAGS" + ;; + esac + AC_CHECK_LIB($1, $2, $3, $4, $5) + LDFLAGS="$kde_save_LDFLAGS" + LIBS="$kde_save_LIBS" +]) + +AC_DEFUN([KDE_JAVA_PREFIX], +[ + dir=`dirname "$1"` + base=`basename "$1"` + list=`ls -1 $dir 2> /dev/null` + for entry in $list; do + if test -d $dir/$entry/bin; then + case $entry in + $base) + javadirs="$javadirs $dir/$entry/bin" + ;; + esac + elif test -d $dir/$entry/jre/bin; then + case $entry in + $base) + javadirs="$javadirs $dir/$entry/jre/bin" + ;; + esac + fi + done +]) + +dnl KDE_CHEC_JAVA_DIR(onlyjre) +AC_DEFUN([KDE_CHECK_JAVA_DIR], +[ + +AC_ARG_WITH(java, +AC_HELP_STRING([--with-java=javadir],[use java installed in javadir, --without-java disables]), +[ ac_java_dir=$withval +], ac_java_dir="" +) + +AC_MSG_CHECKING([for Java]) + +dnl at this point ac_java_dir is either a dir, 'no' to disable, or '' to say look in $PATH +if test "x$ac_java_dir" = "xno"; then + kde_java_bindir=no + kde_java_includedir=no + kde_java_libjvmdir=no + kde_java_libgcjdir=no + kde_java_libhpidir=no +else + if test "x$ac_java_dir" = "x"; then + + + dnl No option set -> collect list of candidate paths + if test -n "$JAVA_HOME"; then + KDE_JAVA_PREFIX($JAVA_HOME) + fi + KDE_JAVA_PREFIX(/usr/j2se) + KDE_JAVA_PREFIX(/usr/lib/j2se) + KDE_JAVA_PREFIX(/usr/j*dk*) + KDE_JAVA_PREFIX(/usr/lib/j*dk*) + KDE_JAVA_PREFIX(/opt/j*sdk*) + KDE_JAVA_PREFIX(/usr/lib/java*) + KDE_JAVA_PREFIX(/usr/java*) + KDE_JAVA_PREFIX(/usr/java/j*dk*) + KDE_JAVA_PREFIX(/usr/java/j*re*) + KDE_JAVA_PREFIX(/usr/lib/SunJava2*) + KDE_JAVA_PREFIX(/usr/lib/SunJava*) + KDE_JAVA_PREFIX(/usr/lib/IBMJava2*) + KDE_JAVA_PREFIX(/usr/lib/IBMJava*) + KDE_JAVA_PREFIX(/opt/java*) + + kde_cv_path="NONE" + kde_save_IFS=$IFS + IFS=':' + for dir in $PATH; do + if test -d "$dir"; then + javadirs="$javadirs $dir" + fi + done + IFS=$kde_save_IFS + jredirs= + + dnl Now javadirs contains a list of paths that exist, all ending with bin/ + for dir in $javadirs; do + dnl Check for the java executable + if test -x "$dir/java"; then + dnl And also check for a libjvm.so somewhere under there + dnl Since we have to go to the parent dir, /usr/bin is excluded, /usr is too big. + if test "$dir" != "/usr/bin"; then + libjvmdir=`find $dir/.. -name libjvm.so | sed 's,libjvm.so,,'|head -n 1` + if test ! -f $libjvmdir/libjvm.so; then continue; fi + jredirs="$jredirs $dir" + fi + fi + done + + dnl Now jredirs contains a reduced list, of paths where both java and ../**/libjvm.so was found + JAVAC= + JAVA= + kde_java_bindir=no + for dir in $jredirs; do + JAVA="$dir/java" + kde_java_bindir=$dir + if test -x "$dir/javac"; then + JAVAC="$dir/javac" + break + fi + done + + if test -n "$JAVAC"; then + dnl this substitution might not work - well, we test for jni.h below + kde_java_includedir=`echo $JAVAC | sed -e 's,bin/javac$,include/,'` + else + kde_java_includedir=no + fi + else + dnl config option set + kde_java_bindir=$ac_java_dir/bin + if test -x $ac_java_dir/bin/java && test ! -x $ac_java_dir/bin/javac; then + kde_java_includedir=no + else + kde_java_includedir=$ac_java_dir/include + fi + fi +fi + +dnl At this point kde_java_bindir and kde_java_includedir are either set or "no" +if test "x$kde_java_bindir" != "xno"; then + + dnl Look for libjvm.so + kde_java_libjvmdir=`find $kde_java_bindir/.. -name libjvm.so | sed 's,libjvm.so,,'|head -n 1` + dnl Look for libgcj.so + kde_java_libgcjdir=`find $kde_java_bindir/.. -name libgcj.so | sed 's,libgcj.so,,'|head -n 1` + dnl Look for libhpi.so and avoid green threads + kde_java_libhpidir=`find $kde_java_bindir/.. -name libhpi.so | grep -v green | sed 's,libhpi.so,,' | head -n 1` + + dnl Now check everything's fine under there + dnl the include dir is our flag for having the JDK + if test -d "$kde_java_includedir"; then + if test ! -x "$kde_java_bindir/javac"; then + AC_MSG_ERROR([javac not found under $kde_java_bindir - it seems you passed a wrong --with-java.]) + fi + if test ! -x "$kde_java_bindir/javah"; then + AC_MSG_ERROR([javah not found under $kde_java_bindir. javac was found though! Use --with-java or --without-java.]) + fi + if test ! -x "$kde_java_bindir/jar"; then + AC_MSG_ERROR([jar not found under $kde_java_bindir. javac was found though! Use --with-java or --without-java.]) + fi + if test ! -r "$kde_java_includedir/jni.h"; then + AC_MSG_ERROR([jni.h not found under $kde_java_includedir. Use --with-java or --without-java.]) + fi + + jni_includes="-I$kde_java_includedir" + dnl Strange thing, jni.h requires jni_md.h which is under genunix here.. + dnl and under linux here.. + + dnl not needed for gcj + + if test "x$kde_java_libgcjdir" = "x"; then + test -d "$kde_java_includedir/linux" && jni_includes="$jni_includes -I$kde_java_includedir/linux" + test -d "$kde_java_includedir/solaris" && jni_includes="$jni_includes -I$kde_java_includedir/solaris" + test -d "$kde_java_includedir/genunix" && jni_includes="$jni_includes -I$kde_java_includedir/genunix" + fi + + else + JAVAC= + jni_includes= + fi + + if test "x$kde_java_libgcjdir" = "x"; then + if test ! -r "$kde_java_libjvmdir/libjvm.so"; then + AC_MSG_ERROR([libjvm.so not found under $kde_java_libjvmdir. Use --without-java.]) + fi + else + if test ! -r "$kde_java_libgcjdir/libgcj.so"; then + AC_MSG_ERROR([libgcj.so not found under $kde_java_libgcjdir. Use --without-java.]) + fi + fi + + if test ! -x "$kde_java_bindir/java"; then + AC_MSG_ERROR([java not found under $kde_java_bindir. javac was found though! Use --with-java or --without-java.]) + fi + + dnl not needed for gcj compile + + if test "x$kde_java_libgcjdir" = "x"; then + if test ! -r "$kde_java_libhpidir/libhpi.so"; then + AC_MSG_ERROR([libhpi.so not found under $kde_java_libhpidir. Use --without-java.]) + fi + fi + + if test -n "$jni_includes"; then + dnl Check for JNI version + AC_LANG_SAVE + AC_LANG_CPLUSPLUS + ac_cxxflags_safe="$CXXFLAGS" + CXXFLAGS="$CXXFLAGS $all_includes $jni_includes" + + AC_TRY_COMPILE([ + #include + ], + [ + #ifndef JNI_VERSION_1_2 + Syntax Error + #endif + ],[ kde_jni_works=yes ], + [ kde_jni_works=no ]) + + if test $kde_jni_works = no; then + AC_MSG_ERROR([Incorrect version of $kde_java_includedir/jni.h. + You need to have Java Development Kit (JDK) version 1.2. + + Use --with-java to specify another location. + Use --without-java to configure without java support. + Or download a newer JDK and try again. + See e.g. http://java.sun.com/products/jdk/1.2 ]) + fi + + CXXFLAGS="$ac_cxxflags_safe" + AC_LANG_RESTORE + + dnl All tests ok, inform and subst the variables + + JAVAC=$kde_java_bindir/javac + JAVAH=$kde_java_bindir/javah + JAR=$kde_java_bindir/jar + AC_DEFINE_UNQUOTED(PATH_JAVA, "$kde_java_bindir/java", [Define where your java executable is]) + if test "x$kde_java_libgcjdir" = "x"; then + JVMLIBS="-L$kde_java_libjvmdir -ljvm -L$kde_java_libhpidir -lhpi" + else + JVMLIBS="-L$kde_java_libgcjdir -lgcj" + fi + AC_MSG_RESULT([java JDK in $kde_java_bindir]) + + else + AC_DEFINE_UNQUOTED(PATH_JAVA, "$kde_java_bindir/java", [Define where your java executable is]) + AC_MSG_RESULT([java JRE in $kde_java_bindir]) + fi +elif test -d "/Library/Java/Home"; then + kde_java_bindir="/Library/Java/Home/bin" + jni_includes="-I/Library/Java/Home/include" + + JAVAC=$kde_java_bindir/javac + JAVAH=$kde_java_bindir/javah + JAR=$kde_java_bindir/jar + JVMLIBS="-Wl,-framework,JavaVM" + + AC_DEFINE_UNQUOTED(PATH_JAVA, "$kde_java_bindir/java", [Define where your java executable is]) + AC_MSG_RESULT([Apple Java Framework]) +else + AC_MSG_RESULT([none found]) +fi + +AC_SUBST(JAVAC) +AC_SUBST(JAVAH) +AC_SUBST(JAR) +AC_SUBST(JVMLIBS) +AC_SUBST(jni_includes) + +# for backward compat +kde_cv_java_includedir=$kde_java_includedir +kde_cv_java_bindir=$kde_java_bindir +]) + +dnl this is a redefinition of autoconf 2.5x's AC_FOREACH. +dnl When the argument list becomes big, as in KDE for AC_OUTPUT in +dnl big packages, m4_foreach is dog-slow. So use our own version of +dnl it. (matz@kde.org) +m4_define([mm_foreach], +[m4_pushdef([$1])_mm_foreach($@)m4_popdef([$1])]) +m4_define([mm_car], [[$1]]) +m4_define([mm_car2], [[$@]]) +m4_define([_mm_foreach], +[m4_if(m4_quote($2), [], [], + [m4_define([$1], mm_car($2))$3[]_mm_foreach([$1], + mm_car2(m4_shift($2)), + [$3])])]) +m4_define([AC_FOREACH], +[mm_foreach([$1], m4_split(m4_normalize([$2])), [$3])]) + +AC_DEFUN([KDE_NEED_FLEX], +[ +kde_libs_safe=$LIBS +LIBS="$LIBS $USER_LDFLAGS" +AM_PROG_LEX +LIBS=$kde_libs_safe +if test -z "$LEXLIB"; then + AC_MSG_ERROR([You need to have flex installed.]) +fi +AC_SUBST(LEXLIB) +]) + +AC_DEFUN([AC_PATH_QTOPIA], +[ + dnl TODO: use AC_CACHE_VAL + + if test -z "$1"; then + qtopia_minver_maj=1 + qtopia_minver_min=5 + qtopia_minver_pat=0 + else + qtopia_minver_maj=`echo "$1" | sed -e "s/^\(.*\)\..*\..*$/\1/"` + qtopia_minver_min=`echo "$1" | sed -e "s/^.*\.\(.*\)\..*$/\1/"` + qtopia_minver_pat=`echo "$1" | sed -e "s/^.*\..*\.\(.*\)$/\1/"` + fi + + qtopia_minver="$qtopia_minver_maj$qtopia_minver_min$qtopia_minver_pat" + qtopia_minverstr="$qtopia_minver_maj.$qtopia_minver_min.$qtopia_minver_pat" + + AC_REQUIRE([AC_PATH_QT]) + + AC_MSG_CHECKING([for Qtopia]) + + LIB_QTOPIA="-lqpe" + AC_SUBST(LIB_QTOPIA) + + kde_qtopia_dirs="$QPEDIR /opt/Qtopia" + + ac_qtopia_incdir=NO + + AC_ARG_WITH(qtopia-dir, + AC_HELP_STRING([--with-qtopia-dir=DIR],[where the root of Qtopia is installed]), + [ ac_qtopia_incdir="$withval"/include] ) + + qtopia_incdirs="" + for dir in $kde_qtopia_dirs; do + qtopia_incdirs="$qtopia_incdirs $dir/include" + done + + if test ! "$ac_qtopia_incdir" = "NO"; then + qtopia_incdirs="$ac_qtopia_incdir $qtopia_incdirs" + fi + + qtopia_incdir="" + AC_FIND_FILE(qpe/qpeapplication.h, $qtopia_incdirs, qtopia_incdir) + ac_qtopia_incdir="$qtopia_incdir" + + if test -z "$qtopia_incdir"; then + AC_MSG_ERROR([Cannot find Qtopia headers. Please check your installation.]) + fi + + qtopia_ver_maj=`cat $qtopia_incdir/qpe/version.h | sed -n -e 's,.*QPE_VERSION "\(.*\)\..*\..*".*,\1,p'`; + qtopia_ver_min=`cat $qtopia_incdir/qpe/version.h | sed -n -e 's,.*QPE_VERSION ".*\.\(.*\)\..*".*,\1,p'`; + qtopia_ver_pat=`cat $qtopia_incdir/qpe/version.h | sed -n -e 's,.*QPE_VERSION ".*\..*\.\(.*\)".*,\1,p'`; + + qtopia_ver="$qtopia_ver_maj$qtopia_ver_min$qtopia_ver_pat" + qtopia_verstr="$qtopia_ver_maj.$qtopia_ver_min.$qtopia_ver_pat" + if test "$qtopia_ver" -lt "$qtopia_minver"; then + AC_MSG_ERROR([found Qtopia version $qtopia_verstr but version $qtopia_minverstr +is required.]) + fi + + AC_LANG_SAVE + AC_LANG_CPLUSPLUS + + ac_cxxflags_safe="$CXXFLAGS" + ac_ldflags_safe="$LDFLAGS" + ac_libs_safe="$LIBS" + + CXXFLAGS="$CXXFLAGS -I$qtopia_incdir $all_includes" + LDFLAGS="$LDFLAGS $QT_LDFLAGS $all_libraries $USER_LDFLAGS $KDE_MT_LDFLAGS" + LIBS="$LIBS $LIB_QTOPIA $LIBQT" + + cat > conftest.$ac_ext < +#include + +int main( int argc, char **argv ) +{ + QPEApplication app( argc, argv ); + return 0; +} +EOF + + if AC_TRY_EVAL(ac_link) && test -s conftest; then + rm -f conftest* + else + rm -f conftest* + AC_MSG_ERROR([Cannot link small Qtopia Application. For more details look at +the end of config.log]) + fi + + CXXFLAGS="$ac_cxxflags_safe" + LDFLAGS="$ac_ldflags_safe" + LIBS="$ac_libs_safe" + + AC_LANG_RESTORE + + QTOPIA_INCLUDES="-I$qtopia_incdir" + AC_SUBST(QTOPIA_INCLUDES) + + AC_MSG_RESULT([found version $qtopia_verstr with headers at $qtopia_incdir]) +]) + + +AC_DEFUN([KDE_INIT_DOXYGEN], +[ +AC_MSG_CHECKING([for Qt docs]) +kde_qtdir= +if test "${with_qt_dir+set}" = set; then + kde_qtdir="$with_qt_dir" +fi + +AC_FIND_FILE(qsql.html, [ $kde_qtdir/doc/html $QTDIR/doc/html /usr/share/doc/packages/qt3/html /usr/lib/qt/doc /usr/lib/qt3/doc /usr/lib/qt3/doc/html /usr/doc/qt3/html /usr/doc/qt3 /usr/share/doc/qt3-doc /usr/share/qt3/doc/html /usr/X11R6/share/doc/qt/html ], QTDOCDIR) +AC_MSG_RESULT($QTDOCDIR) + +AC_SUBST(QTDOCDIR) + +KDE_FIND_PATH(dot, DOT, [], []) +if test -n "$DOT"; then + KDE_HAVE_DOT="YES" +else + KDE_HAVE_DOT="NO" +fi +AC_SUBST(KDE_HAVE_DOT) +KDE_FIND_PATH(doxygen, DOXYGEN, [], []) +AC_SUBST(DOXYGEN) + +DOXYGEN_PROJECT_NAME="$1" +DOXYGEN_PROJECT_NUMBER="$2" +AC_SUBST(DOXYGEN_PROJECT_NAME) +AC_SUBST(DOXYGEN_PROJECT_NUMBER) + +KDE_HAS_DOXYGEN=no +if test -n "$DOXYGEN" && test -x "$DOXYGEN" && test -f $QTDOCDIR/qsql.html; then + KDE_HAS_DOXYGEN=yes +fi +AC_SUBST(KDE_HAS_DOXYGEN) + +]) + + +AC_DEFUN([AC_FIND_BZIP2], +[ +AC_MSG_CHECKING([for bzDecompress in libbz2]) +AC_CACHE_VAL(ac_cv_lib_bzip2, +[ +AC_LANG_SAVE +AC_LANG_CPLUSPLUS +kde_save_LIBS="$LIBS" +LIBS="$all_libraries $USER_LDFLAGS -lbz2 $LIBSOCKET" +kde_save_CXXFLAGS="$CXXFLAGS" +CXXFLAGS="$CXXFLAGS $all_includes $USER_INCLUDES" +AC_TRY_LINK(dnl +[ +#define BZ_NO_STDIO +#include +], + [ bz_stream s; (void) bzDecompress(&s); ], + eval "ac_cv_lib_bzip2='-lbz2'", + eval "ac_cv_lib_bzip2=no") +LIBS="$kde_save_LIBS" +CXXFLAGS="$kde_save_CXXFLAGS" +AC_LANG_RESTORE +])dnl +AC_MSG_RESULT($ac_cv_lib_bzip2) + +if test ! "$ac_cv_lib_bzip2" = no; then + BZIP2DIR=bzip2 + + LIBBZ2="$ac_cv_lib_bzip2" + AC_SUBST(LIBBZ2) + +else + + cxx_shared_flag= + ld_shared_flag= + KDE_CHECK_COMPILER_FLAG(shared, [ + ld_shared_flag="-shared" + ]) + KDE_CHECK_COMPILER_FLAG(fPIC, [ + cxx_shared_flag="-fPIC" + ]) + + AC_MSG_CHECKING([for BZ2_bzDecompress in (shared) libbz2]) + AC_CACHE_VAL(ac_cv_lib_bzip2_prefix, + [ + AC_LANG_SAVE + AC_LANG_CPLUSPLUS + kde_save_LIBS="$LIBS" + LIBS="$all_libraries $USER_LDFLAGS $ld_shared_flag -lbz2 $LIBSOCKET" + kde_save_CXXFLAGS="$CXXFLAGS" + CXXFLAGS="$CFLAGS $cxx_shared_flag $all_includes $USER_INCLUDES" + + AC_TRY_LINK(dnl + [ + #define BZ_NO_STDIO + #include + ], + [ bz_stream s; (void) BZ2_bzDecompress(&s); ], + eval "ac_cv_lib_bzip2_prefix='-lbz2'", + eval "ac_cv_lib_bzip2_prefix=no") + LIBS="$kde_save_LIBS" + CXXFLAGS="$kde_save_CXXFLAGS" + AC_LANG_RESTORE + ])dnl + + AC_MSG_RESULT($ac_cv_lib_bzip2_prefix) + + if test ! "$ac_cv_lib_bzip2_prefix" = no; then + BZIP2DIR=bzip2 + + LIBBZ2="$ac_cv_lib_bzip2_prefix" + AC_SUBST(LIBBZ2) + + AC_DEFINE(NEED_BZ2_PREFIX, 1, [Define if the libbz2 functions need the BZ2_ prefix]) + dnl else, we just ignore this + fi + +fi +AM_CONDITIONAL(include_BZIP2, test -n "$BZIP2DIR") +]) + +dnl ------------------------------------------------------------------------ +dnl Try to find the SSL headers and libraries. +dnl $(SSL_LDFLAGS) will be -Lsslliblocation (if needed) +dnl and $(SSL_INCLUDES) will be -Isslhdrlocation (if needed) +dnl ------------------------------------------------------------------------ +dnl +AC_DEFUN([KDE_CHECK_SSL], +[ +LIBSSL="-lssl -lcrypto" +AC_REQUIRE([KDE_CHECK_LIB64]) + +ac_ssl_includes=NO ac_ssl_libraries=NO +ssl_libraries="" +ssl_includes="" +AC_ARG_WITH(ssl-dir, + AC_HELP_STRING([--with-ssl-dir=DIR],[where the root of OpenSSL is installed]), + [ ac_ssl_includes="$withval"/include + ac_ssl_libraries="$withval"/lib$kdelibsuff + ]) + +want_ssl=yes +AC_ARG_WITH(ssl, + AC_HELP_STRING([--without-ssl],[disable SSL checks]), + [want_ssl=$withval]) + +if test $want_ssl = yes; then + +AC_MSG_CHECKING(for OpenSSL) + +AC_CACHE_VAL(ac_cv_have_ssl, +[#try to guess OpenSSL locations + + ssl_incdirs="/usr/include /usr/local/include /usr/ssl/include /usr/local/ssl/include $prefix/include $kde_extra_includes" + ssl_incdirs="$ac_ssl_includes $ssl_incdirs" + AC_FIND_FILE(openssl/ssl.h, $ssl_incdirs, ssl_incdir) + ac_ssl_includes="$ssl_incdir" + + ssl_libdirs="/usr/lib$kdelibsuff /usr/local/lib$kdelibsuff /usr/ssl/lib$kdelibsuff /usr/local/ssl/lib$kdelibsuff $libdir $prefix/lib$kdelibsuff $exec_prefix/lib$kdelibsuff $kde_extra_libs" + if test ! "$ac_ssl_libraries" = "NO"; then + ssl_libdirs="$ac_ssl_libraries $ssl_libdirs" + fi + + test=NONE + ssl_libdir=NONE + for dir in $ssl_libdirs; do + try="ls -1 $dir/libssl*" + if test=`eval $try 2> /dev/null`; then ssl_libdir=$dir; break; else echo "tried $dir" >&AC_FD_CC ; fi + done + + ac_ssl_libraries="$ssl_libdir" + + ac_ldflags_safe="$LDFLAGS" + ac_libs_safe="$LIBS" + + LDFLAGS="$LDFLAGS -L$ssl_libdir $all_libraries" + LIBS="$LIBS $LIBSSL -lRSAglue -lrsaref" + + AC_TRY_LINK(,void RSAPrivateEncrypt(void);RSAPrivateEncrypt();, + ac_ssl_rsaref="yes" + , + ac_ssl_rsaref="no" + ) + + LDFLAGS="$ac_ldflags_safe" + LIBS="$ac_libs_safe" + + if test "$ac_ssl_includes" = NO || test "$ac_ssl_libraries" = NO; then + have_ssl=no + else + have_ssl=yes; + fi + + ]) + + eval "$ac_cv_have_ssl" + + AC_MSG_RESULT([libraries $ac_ssl_libraries, headers $ac_ssl_includes]) + + AC_MSG_CHECKING([whether OpenSSL uses rsaref]) + AC_MSG_RESULT($ac_ssl_rsaref) + + AC_MSG_CHECKING([for easter eggs]) + AC_MSG_RESULT([none found]) + +else + have_ssl=no +fi + +if test "$have_ssl" = yes; then + AC_MSG_CHECKING(for OpenSSL version) + dnl Check for SSL version + AC_CACHE_VAL(ac_cv_ssl_version, + [ + + cat >conftest.$ac_ext < +#include + int main() { + +#ifndef OPENSSL_VERSION_NUMBER + printf("ssl_version=\\"error\\"\n"); +#else + if (OPENSSL_VERSION_NUMBER < 0x00906000) + printf("ssl_version=\\"old\\"\n"); + else + printf("ssl_version=\\"ok\\"\n"); +#endif + return (0); + } +EOF + + ac_save_CPPFLAGS=$CPPFLAGS + if test "$ac_ssl_includes" != "/usr/include"; then + CPPFLAGS="$CPPFLAGS -I$ac_ssl_includes" + fi + + if AC_TRY_EVAL(ac_link); then + + if eval `./conftest 2>&5`; then + if test $ssl_version = error; then + AC_MSG_ERROR([$ssl_incdir/openssl/opensslv.h doesn't define OPENSSL_VERSION_NUMBER !]) + else + if test $ssl_version = old; then + AC_MSG_WARN([OpenSSL version too old. Upgrade to 0.9.6 at least, see http://www.openssl.org. SSL support disabled.]) + have_ssl=no + fi + fi + ac_cv_ssl_version="ssl_version=$ssl_version" + else + AC_MSG_ERROR([Your system couldn't run a small SSL test program. + Check config.log, and if you can't figure it out, send a mail to + David Faure , attaching your config.log]) + fi + + else + AC_MSG_ERROR([Your system couldn't link a small SSL test program. + Check config.log, and if you can't figure it out, send a mail to + David Faure , attaching your config.log]) + fi + CPPFLAGS=$ac_save_CPPFLAGS + + ]) + + eval "$ac_cv_ssl_version" + AC_MSG_RESULT($ssl_version) +fi + +if test "$have_ssl" != yes; then + LIBSSL=""; +else + AC_DEFINE(HAVE_SSL, 1, [If we are going to use OpenSSL]) + ac_cv_have_ssl="have_ssl=yes \ + ac_ssl_includes=$ac_ssl_includes ac_ssl_libraries=$ac_ssl_libraries ac_ssl_rsaref=$ac_ssl_rsaref" + + + ssl_libraries="$ac_ssl_libraries" + ssl_includes="$ac_ssl_includes" + + if test "$ac_ssl_rsaref" = yes; then + LIBSSL="-lssl -lcrypto -lRSAglue -lrsaref" + fi + + if test $ssl_version = "old"; then + AC_DEFINE(HAVE_OLD_SSL_API, 1, [Define if you have OpenSSL < 0.9.6]) + fi +fi + +SSL_INCLUDES= + +if test "$ssl_includes" = "/usr/include"; then + if test -f /usr/kerberos/include/krb5.h; then + SSL_INCLUDES="-I/usr/kerberos/include" + fi +elif test "$ssl_includes" != "/usr/local/include" && test -n "$ssl_includes"; then + SSL_INCLUDES="-I$ssl_includes" +fi + +if test "$ssl_libraries" = "/usr/lib" || test "$ssl_libraries" = "/usr/local/lib" || test -z "$ssl_libraries" || test "$ssl_libraries" = "NONE"; then + SSL_LDFLAGS="" +else + SSL_LDFLAGS="-L$ssl_libraries -R$ssl_libraries" +fi + +AC_SUBST(SSL_INCLUDES) +AC_SUBST(SSL_LDFLAGS) +AC_SUBST(LIBSSL) +]) + +AC_DEFUN([KDE_CHECK_STRLCPY], +[ + AC_REQUIRE([AC_CHECK_STRLCAT]) + AC_REQUIRE([AC_CHECK_STRLCPY]) + AC_CHECK_SIZEOF(size_t) + AC_CHECK_SIZEOF(unsigned long) + + AC_MSG_CHECKING([sizeof size_t == sizeof unsigned long]) + AC_TRY_COMPILE(,[ + #if SIZEOF_SIZE_T != SIZEOF_UNSIGNED_LONG + choke me + #endif + ],AC_MSG_RESULT([yes]),[ + AC_MSG_RESULT(no) + AC_MSG_ERROR([ + Apparently on your system our assumption sizeof size_t == sizeof unsigned long + does not apply. Please mail kde-devel@kde.org with a description of your system! + ]) + ]) +]) + +AC_DEFUN([KDE_CHECK_BINUTILS], +[ + AC_MSG_CHECKING([if ld supports unversioned version maps]) + + kde_save_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS -Wl,--version-script=conftest.map" + echo "{ local: extern \"C++\" { foo }; };" > conftest.map + AC_TRY_LINK([int foo;], +[ +#ifdef __INTEL_COMPILER +icc apparently does not support libtools version-info and version-script +at the same time. Dunno where the bug is, but until somebody figured out, +better disable the optional version scripts. +#endif + + foo = 42; +], kde_supports_versionmaps=yes, kde_supports_versionmaps=no) + LDFLAGS="$kde_save_LDFLAGS" + rm -f conftest.map + AM_CONDITIONAL(include_VERSION_SCRIPT, + [test "$kde_supports_versionmaps" = "yes" && test "$kde_use_debug_code" = "no"]) + + AC_MSG_RESULT($kde_supports_versionmaps) +]) + +AC_DEFUN([AM_PROG_OBJC],[ +AC_CHECK_PROGS(OBJC, gcc, gcc) +test -z "$OBJC" && AC_MSG_ERROR([no acceptable objective-c gcc found in \$PATH]) +if test "x${OBJCFLAGS-unset}" = xunset; then + OBJCFLAGS="-g -O2" +fi +AC_SUBST(OBJCFLAGS) +_AM_IF_OPTION([no-dependencies],, [_AM_DEPENDENCIES(OBJC)]) +]) + +AC_DEFUN([KDE_CHECK_PERL], +[ + KDE_FIND_PATH(perl, PERL, [$bindir $exec_prefix/bin $prefix/bin], [ + AC_MSG_ERROR([No Perl found in your $PATH. +We need perl to generate some code.]) + ]) + AC_SUBST(PERL) +]) + +AC_DEFUN([KDE_CHECK_LARGEFILE], +[ +AC_SYS_LARGEFILE +if test "$ac_cv_sys_file_offset_bits" != no; then + CPPFLAGS="$CPPFLAGS -D_FILE_OFFSET_BITS=$ac_cv_sys_file_offset_bits" +fi + +if test "x$ac_cv_sys_large_files" != "xno"; then + CPPFLAGS="$CPPFLAGS -D_LARGE_FILES=1" +fi + +]) + +dnl A small extension to PKG_CHECK_MODULES (defined in pkg.m4.in) +dnl which allows to search for libs that get installed into the KDE prefix. +dnl +dnl Syntax: KDE_PKG_CHECK_MODULES(KSTUFF, libkexif >= 0.2 glib = 1.3.4, action-if, action-not) +dnl defines KSTUFF_LIBS, KSTUFF_CFLAGS, see pkg-config man page +dnl also defines KSTUFF_PKG_ERRORS on error +AC_DEFUN([KDE_PKG_CHECK_MODULES], [ + + PKG_CONFIG_PATH="$prefix/lib${kdelibsuff}/pkgconfig:$PKG_CONFIG_PATH" + if test "$prefix" != "$kde_libs_prefix"; then + PKG_CONFIG_PATH="$kde_libs_prefix/lib${kdelibsuff}/pkgconfig:$PKG_CONFIG_PATH" + fi + export PKG_CONFIG_PATH + PKG_CHECK_MODULES([$1],[$2],[$3],[$4]) +]) + + +dnl Check for PIE support in the compiler and linker +AC_DEFUN([KDE_CHECK_PIE_SUPPORT], +[ + AC_CACHE_CHECK([for PIE support], kde_cv_val_pie_support, + [ + AC_LANG_SAVE + AC_LANG_CPLUSPLUS + safe_CXXFLAGS=$CXXFLAGS + safe_LDFLAGS=$LDFLAGS + CXXFLAGS="$CXXFLAGS -fPIE" + LDFLAGS="$LDFLAGS -pie" + + AC_TRY_LINK([int foo;], [], [kde_cv_val_pie_support=yes], [kde_cv_val_pie_support=no]) + + CXXFLAGS=$safe_CXXFLAGS + LDFLAGS=$safe_LDFLAGS + AC_LANG_RESTORE + ]) + + AC_MSG_CHECKING(if enabling -pie/fPIE support) + + AC_ARG_ENABLE(pie, + AC_HELP_STRING([--enable-pie],[platform supports PIE linking [default=detect]]), + [kde_has_pie_support=$enableval], + [kde_has_pie_support=detect]) + + if test "$kde_has_pie_support" = "detect"; then + kde_has_pie_support=$kde_cv_val_pie_support + fi + + AC_MSG_RESULT([$kde_has_pie_support]) + + KDE_USE_FPIE="" + KDE_USE_PIE="" + + AC_SUBST([KDE_USE_FPIE]) + AC_SUBST([KDE_USE_PIE]) + + if test "$kde_has_pie_support" = "yes"; then + KDE_USE_FPIE="-fPIE" + KDE_USE_PIE="-pie" + fi +]) +# libtool.m4 - Configure libtool for the host system. -*-Autoconf-*- +## Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005 +## Free Software Foundation, Inc. +## Originally by Gordon Matzigkeit , 1996 +## +## 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. + +# serial 48 Debian 1.5.22-4 AC_PROG_LIBTOOL + + +# AC_PROVIDE_IFELSE(MACRO-NAME, IF-PROVIDED, IF-NOT-PROVIDED) +# ----------------------------------------------------------- +# If this macro is not defined by Autoconf, define it here. +m4_ifdef([AC_PROVIDE_IFELSE], + [], + [m4_define([AC_PROVIDE_IFELSE], + [m4_ifdef([AC_PROVIDE_$1], + [$2], [$3])])]) + + +# AC_PROG_LIBTOOL +# --------------- +AC_DEFUN([AC_PROG_LIBTOOL], +[AC_REQUIRE([_AC_PROG_LIBTOOL])dnl +dnl If AC_PROG_CXX has already been expanded, run AC_LIBTOOL_CXX +dnl immediately, otherwise, hook it in at the end of AC_PROG_CXX. + AC_PROVIDE_IFELSE([AC_PROG_CXX], + [AC_LIBTOOL_CXX], + [define([AC_PROG_CXX], defn([AC_PROG_CXX])[AC_LIBTOOL_CXX + ])]) +dnl And a similar setup for Fortran 77 support + AC_PROVIDE_IFELSE([AC_PROG_F77], + [AC_LIBTOOL_F77], + [define([AC_PROG_F77], defn([AC_PROG_F77])[AC_LIBTOOL_F77 +])]) + +dnl Quote A][M_PROG_GCJ so that aclocal doesn't bring it in needlessly. +dnl If either AC_PROG_GCJ or A][M_PROG_GCJ have already been expanded, run +dnl AC_LIBTOOL_GCJ immediately, otherwise, hook it in at the end of both. + AC_PROVIDE_IFELSE([AC_PROG_GCJ], + [AC_LIBTOOL_GCJ], + [AC_PROVIDE_IFELSE([A][M_PROG_GCJ], + [AC_LIBTOOL_GCJ], + [AC_PROVIDE_IFELSE([LT_AC_PROG_GCJ], + [AC_LIBTOOL_GCJ], + [ifdef([AC_PROG_GCJ], + [define([AC_PROG_GCJ], defn([AC_PROG_GCJ])[AC_LIBTOOL_GCJ])]) + ifdef([A][M_PROG_GCJ], + [define([A][M_PROG_GCJ], defn([A][M_PROG_GCJ])[AC_LIBTOOL_GCJ])]) + ifdef([LT_AC_PROG_GCJ], + [define([LT_AC_PROG_GCJ], + defn([LT_AC_PROG_GCJ])[AC_LIBTOOL_GCJ])])])]) +])])# AC_PROG_LIBTOOL + + +# _AC_PROG_LIBTOOL +# ---------------- +AC_DEFUN([_AC_PROG_LIBTOOL], +[AC_REQUIRE([AC_LIBTOOL_SETUP])dnl +AC_BEFORE([$0],[AC_LIBTOOL_CXX])dnl +AC_BEFORE([$0],[AC_LIBTOOL_F77])dnl +AC_BEFORE([$0],[AC_LIBTOOL_GCJ])dnl + +# This can be used to rebuild libtool when needed +LIBTOOL_DEPS="$ac_aux_dir/ltmain.sh" + +# Always use our own libtool. +LIBTOOL='$(SHELL) $(top_builddir)/libtool' +AC_SUBST(LIBTOOL)dnl + +# Prevent multiple expansion +define([AC_PROG_LIBTOOL], []) +])# _AC_PROG_LIBTOOL + + +# AC_LIBTOOL_SETUP +# ---------------- +AC_DEFUN([AC_LIBTOOL_SETUP], +[AC_PREREQ(2.50)dnl +AC_REQUIRE([AC_ENABLE_SHARED])dnl +AC_REQUIRE([AC_ENABLE_STATIC])dnl +AC_REQUIRE([AC_ENABLE_FAST_INSTALL])dnl +AC_REQUIRE([AC_CANONICAL_HOST])dnl +AC_REQUIRE([AC_CANONICAL_BUILD])dnl +AC_REQUIRE([AC_PROG_CC])dnl +AC_REQUIRE([AC_PROG_LD])dnl +AC_REQUIRE([AC_PROG_LD_RELOAD_FLAG])dnl +AC_REQUIRE([AC_PROG_NM])dnl + +AC_REQUIRE([AC_PROG_LN_S])dnl +AC_REQUIRE([AC_DEPLIBS_CHECK_METHOD])dnl +# Autoconf 2.13's AC_OBJEXT and AC_EXEEXT macros only works for C compilers! +AC_REQUIRE([AC_OBJEXT])dnl +AC_REQUIRE([AC_EXEEXT])dnl +dnl + +AC_LIBTOOL_SYS_MAX_CMD_LEN +AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE +AC_LIBTOOL_OBJDIR + +AC_REQUIRE([_LT_AC_SYS_COMPILER])dnl +_LT_AC_PROG_ECHO_BACKSLASH + +case $host_os in +aix3*) + # AIX sometimes has problems with the GCC collect2 program. For some + # reason, if we set the COLLECT_NAMES environment variable, the problems + # vanish in a puff of smoke. + if test "X${COLLECT_NAMES+set}" != Xset; then + COLLECT_NAMES= + export COLLECT_NAMES + fi + ;; +esac + +# Sed substitution that helps us do robust quoting. It backslashifies +# metacharacters that are still active within double-quoted strings. +Xsed='sed -e 1s/^X//' +[sed_quote_subst='s/\([\\"\\`$\\\\]\)/\\\1/g'] + +# Same as above, but do not quote variable references. +[double_quote_subst='s/\([\\"\\`\\\\]\)/\\\1/g'] + +# Sed substitution to delay expansion of an escaped shell variable in a +# double_quote_subst'ed string. +delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' + +# Sed substitution to avoid accidental globbing in evaled expressions +no_glob_subst='s/\*/\\\*/g' + +# Constants: +rm="rm -f" + +# Global variables: +default_ofile=libtool +can_build_shared=yes + +# All known linkers require a `.a' archive for static linking (except MSVC, +# which needs '.lib'). +libext=a +ltmain="$ac_aux_dir/ltmain.sh" +ofile="$default_ofile" +with_gnu_ld="$lt_cv_prog_gnu_ld" + +AC_CHECK_TOOL(AR, ar, false) +AC_CHECK_TOOL(RANLIB, ranlib, :) +AC_CHECK_TOOL(STRIP, strip, :) + +old_CC="$CC" +old_CFLAGS="$CFLAGS" + +# Set sane defaults for various variables +test -z "$AR" && AR=ar +test -z "$AR_FLAGS" && AR_FLAGS=cru +test -z "$AS" && AS=as +test -z "$CC" && CC=cc +test -z "$LTCC" && LTCC=$CC +test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS +test -z "$DLLTOOL" && DLLTOOL=dlltool +test -z "$LD" && LD=ld +test -z "$LN_S" && LN_S="ln -s" +test -z "$MAGIC_CMD" && MAGIC_CMD=file +test -z "$NM" && NM=nm +test -z "$SED" && SED=sed +test -z "$OBJDUMP" && OBJDUMP=objdump +test -z "$RANLIB" && RANLIB=: +test -z "$STRIP" && STRIP=: +test -z "$ac_objext" && ac_objext=o + +# Determine commands to create old-style static archives. +old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs$old_deplibs' +old_postinstall_cmds='chmod 644 $oldlib' +old_postuninstall_cmds= + +if test -n "$RANLIB"; then + case $host_os in + openbsd*) + old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$oldlib" + ;; + *) + old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$oldlib" + ;; + esac + old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib" +fi + +_LT_CC_BASENAME([$compiler]) + +# Only perform the check for file, if the check method requires it +case $deplibs_check_method in +file_magic*) + if test "$file_magic_cmd" = '$MAGIC_CMD'; then + AC_PATH_MAGIC + fi + ;; +esac + +AC_PROVIDE_IFELSE([AC_LIBTOOL_DLOPEN], enable_dlopen=yes, enable_dlopen=no) +AC_PROVIDE_IFELSE([AC_LIBTOOL_WIN32_DLL], +enable_win32_dll=yes, enable_win32_dll=no) + +AC_ARG_ENABLE([libtool-lock], + [AC_HELP_STRING([--disable-libtool-lock], + [avoid locking (might break parallel builds)])]) +test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes + +AC_ARG_WITH([pic], + [AC_HELP_STRING([--with-pic], + [try to use only PIC/non-PIC objects @<:@default=use both@:>@])], + [pic_mode="$withval"], + [pic_mode=default]) +test -z "$pic_mode" && pic_mode=default + +# Use C for the default configuration in the libtool script +tagname= +AC_LIBTOOL_LANG_C_CONFIG +_LT_AC_TAGCONFIG +])# AC_LIBTOOL_SETUP + + +# _LT_AC_SYS_COMPILER +# ------------------- +AC_DEFUN([_LT_AC_SYS_COMPILER], +[AC_REQUIRE([AC_PROG_CC])dnl + +# If no C compiler was specified, use CC. +LTCC=${LTCC-"$CC"} + +# If no C compiler flags were specified, use CFLAGS. +LTCFLAGS=${LTCFLAGS-"$CFLAGS"} + +# Allow CC to be a program name with arguments. +compiler=$CC +])# _LT_AC_SYS_COMPILER + + +# _LT_CC_BASENAME(CC) +# ------------------- +# Calculate cc_basename. Skip known compiler wrappers and cross-prefix. +AC_DEFUN([_LT_CC_BASENAME], +[for cc_temp in $1""; do + case $cc_temp in + compile | *[[\\/]]compile | ccache | *[[\\/]]ccache ) ;; + distcc | *[[\\/]]distcc | purify | *[[\\/]]purify ) ;; + \-*) ;; + *) break;; + esac +done +cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` +]) + + +# _LT_COMPILER_BOILERPLATE +# ------------------------ +# Check for compiler boilerplate output or warnings with +# the simple compiler test code. +AC_DEFUN([_LT_COMPILER_BOILERPLATE], +[ac_outfile=conftest.$ac_objext +printf "$lt_simple_compile_test_code" >conftest.$ac_ext +eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_compiler_boilerplate=`cat conftest.err` +$rm conftest* +])# _LT_COMPILER_BOILERPLATE + + +# _LT_LINKER_BOILERPLATE +# ---------------------- +# Check for linker boilerplate output or warnings with +# the simple link test code. +AC_DEFUN([_LT_LINKER_BOILERPLATE], +[ac_outfile=conftest.$ac_objext +printf "$lt_simple_link_test_code" >conftest.$ac_ext +eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_linker_boilerplate=`cat conftest.err` +$rm conftest* +])# _LT_LINKER_BOILERPLATE + + +# _LT_AC_SYS_LIBPATH_AIX +# ---------------------- +# Links a minimal program and checks the executable +# for the system default hardcoded library path. In most cases, +# this is /usr/lib:/lib, but when the MPI compilers are used +# the location of the communication and MPI libs are included too. +# If we don't find anything, use the default library path according +# to the aix ld manual. +AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX], +[AC_LINK_IFELSE(AC_LANG_PROGRAM,[ +aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } +}'` +# Check for a 64-bit object if we didn't find anything. +if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } +}'`; fi],[]) +if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi +])# _LT_AC_SYS_LIBPATH_AIX + + +# _LT_AC_SHELL_INIT(ARG) +# ---------------------- +AC_DEFUN([_LT_AC_SHELL_INIT], +[ifdef([AC_DIVERSION_NOTICE], + [AC_DIVERT_PUSH(AC_DIVERSION_NOTICE)], + [AC_DIVERT_PUSH(NOTICE)]) +$1 +AC_DIVERT_POP +])# _LT_AC_SHELL_INIT + + +# _LT_AC_PROG_ECHO_BACKSLASH +# -------------------------- +# Add some code to the start of the generated configure script which +# will find an echo command which doesn't interpret backslashes. +AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH], +[_LT_AC_SHELL_INIT([ +# Check that we are running under the correct shell. +SHELL=${CONFIG_SHELL-/bin/sh} + +case X$ECHO in +X*--fallback-echo) + # Remove one level of quotation (which was required for Make). + ECHO=`echo "$ECHO" | sed 's,\\\\\[$]\\[$]0,'[$]0','` + ;; +esac + +echo=${ECHO-echo} +if test "X[$]1" = X--no-reexec; then + # Discard the --no-reexec flag, and continue. + shift +elif test "X[$]1" = X--fallback-echo; then + # Avoid inline document here, it may be left over + : +elif test "X`($echo '\t') 2>/dev/null`" = 'X\t' ; then + # Yippee, $echo works! + : +else + # Restart under the correct shell. + exec $SHELL "[$]0" --no-reexec ${1+"[$]@"} +fi + +if test "X[$]1" = X--fallback-echo; then + # used as fallback echo + shift + cat </dev/null 2>&1 && unset CDPATH + +if test -z "$ECHO"; then +if test "X${echo_test_string+set}" != Xset; then +# find a string as large as possible, as long as the shell can cope with it + for cmd in 'sed 50q "[$]0"' 'sed 20q "[$]0"' 'sed 10q "[$]0"' 'sed 2q "[$]0"' 'echo test'; do + # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ... + if (echo_test_string=`eval $cmd`) 2>/dev/null && + echo_test_string=`eval $cmd` && + (test "X$echo_test_string" = "X$echo_test_string") 2>/dev/null + then + break + fi + done +fi + +if test "X`($echo '\t') 2>/dev/null`" = 'X\t' && + echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + : +else + # The Solaris, AIX, and Digital Unix default echo programs unquote + # backslashes. This makes it impossible to quote backslashes using + # echo "$something" | sed 's/\\/\\\\/g' + # + # So, first we look for a working echo in the user's PATH. + + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for dir in $PATH /usr/ucb; do + IFS="$lt_save_ifs" + if (test -f $dir/echo || test -f $dir/echo$ac_exeext) && + test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' && + echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + echo="$dir/echo" + break + fi + done + IFS="$lt_save_ifs" + + if test "X$echo" = Xecho; then + # We didn't find a better echo, so look for alternatives. + if test "X`(print -r '\t') 2>/dev/null`" = 'X\t' && + echo_testing_string=`(print -r "$echo_test_string") 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + # This shell has a builtin print -r that does the trick. + echo='print -r' + elif (test -f /bin/ksh || test -f /bin/ksh$ac_exeext) && + test "X$CONFIG_SHELL" != X/bin/ksh; then + # If we have ksh, try running configure again with it. + ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh} + export ORIGINAL_CONFIG_SHELL + CONFIG_SHELL=/bin/ksh + export CONFIG_SHELL + exec $CONFIG_SHELL "[$]0" --no-reexec ${1+"[$]@"} + else + # Try using printf. + echo='printf %s\n' + if test "X`($echo '\t') 2>/dev/null`" = 'X\t' && + echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + # Cool, printf works + : + elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` && + test "X$echo_testing_string" = 'X\t' && + echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL + export CONFIG_SHELL + SHELL="$CONFIG_SHELL" + export SHELL + echo="$CONFIG_SHELL [$]0 --fallback-echo" + elif echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` && + test "X$echo_testing_string" = 'X\t' && + echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + echo="$CONFIG_SHELL [$]0 --fallback-echo" + else + # maybe with a smaller string... + prev=: + + for cmd in 'echo test' 'sed 2q "[$]0"' 'sed 10q "[$]0"' 'sed 20q "[$]0"' 'sed 50q "[$]0"'; do + if (test "X$echo_test_string" = "X`eval $cmd`") 2>/dev/null + then + break + fi + prev="$cmd" + done + + if test "$prev" != 'sed 50q "[$]0"'; then + echo_test_string=`eval $prev` + export echo_test_string + exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "[$]0" ${1+"[$]@"} + else + # Oops. We lost completely, so just stick with echo. + echo=echo + fi + fi + fi + fi +fi +fi + +# Copy echo and quote the copy suitably for passing to libtool from +# the Makefile, instead of quoting the original, which is used later. +ECHO=$echo +if test "X$ECHO" = "X$CONFIG_SHELL [$]0 --fallback-echo"; then + ECHO="$CONFIG_SHELL \\\$\[$]0 --fallback-echo" +fi + +AC_SUBST(ECHO) +])])# _LT_AC_PROG_ECHO_BACKSLASH + + +# _LT_AC_LOCK +# ----------- +AC_DEFUN([_LT_AC_LOCK], +[AC_ARG_ENABLE([libtool-lock], + [AC_HELP_STRING([--disable-libtool-lock], + [avoid locking (might break parallel builds)])]) +test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes + +# Some flags need to be propagated to the compiler or linker for good +# libtool support. +case $host in +ia64-*-hpux*) + # Find out which ABI we are using. + echo 'int i;' > conftest.$ac_ext + if AC_TRY_EVAL(ac_compile); then + case `/usr/bin/file conftest.$ac_objext` in + *ELF-32*) + HPUX_IA64_MODE="32" + ;; + *ELF-64*) + HPUX_IA64_MODE="64" + ;; + esac + fi + rm -rf conftest* + ;; +*-*-irix6*) + # Find out which ABI we are using. + echo '[#]line __oline__ "configure"' > conftest.$ac_ext + if AC_TRY_EVAL(ac_compile); then + if test "$lt_cv_prog_gnu_ld" = yes; then + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + LD="${LD-ld} -melf32bsmip" + ;; + *N32*) + LD="${LD-ld} -melf32bmipn32" + ;; + *64-bit*) + LD="${LD-ld} -melf64bmip" + ;; + esac + else + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + LD="${LD-ld} -32" + ;; + *N32*) + LD="${LD-ld} -n32" + ;; + *64-bit*) + LD="${LD-ld} -64" + ;; + esac + fi + fi + rm -rf conftest* + ;; + +x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*|s390*-*linux*|sparc*-*linux*) + # Find out which ABI we are using. + echo 'int i;' > conftest.$ac_ext + if AC_TRY_EVAL(ac_compile); then + case `/usr/bin/file conftest.o` in + *32-bit*) + case $host in + x86_64-*linux*) + LD="${LD-ld} -m elf_i386" + ;; + ppc64-*linux*|powerpc64-*linux*) + LD="${LD-ld} -m elf32ppclinux" + ;; + s390x-*linux*) + LD="${LD-ld} -m elf_s390" + ;; + sparc64-*linux*) + LD="${LD-ld} -m elf32_sparc" + ;; + esac + ;; + *64-bit*) + case $host in + x86_64-*linux*) + LD="${LD-ld} -m elf_x86_64" + ;; + ppc*-*linux*|powerpc*-*linux*) + LD="${LD-ld} -m elf64ppc" + ;; + s390*-*linux*) + LD="${LD-ld} -m elf64_s390" + ;; + sparc*-*linux*) + LD="${LD-ld} -m elf64_sparc" + ;; + esac + ;; + esac + fi + rm -rf conftest* + ;; + +*-*-sco3.2v5*) + # On SCO OpenServer 5, we need -belf to get full-featured binaries. + SAVE_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS -belf" + AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf, + [AC_LANG_PUSH(C) + AC_TRY_LINK([],[],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no]) + AC_LANG_POP]) + if test x"$lt_cv_cc_needs_belf" != x"yes"; then + # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf + CFLAGS="$SAVE_CFLAGS" + fi + ;; +sparc*-*solaris*) + # Find out which ABI we are using. + echo 'int i;' > conftest.$ac_ext + if AC_TRY_EVAL(ac_compile); then + case `/usr/bin/file conftest.o` in + *64-bit*) + case $lt_cv_prog_gnu_ld in + yes*) LD="${LD-ld} -m elf64_sparc" ;; + *) LD="${LD-ld} -64" ;; + esac + ;; + esac + fi + rm -rf conftest* + ;; + +AC_PROVIDE_IFELSE([AC_LIBTOOL_WIN32_DLL], +[*-*-cygwin* | *-*-mingw* | *-*-pw32*) + AC_CHECK_TOOL(DLLTOOL, dlltool, false) + AC_CHECK_TOOL(AS, as, false) + AC_CHECK_TOOL(OBJDUMP, objdump, false) + ;; + ]) +esac + +need_locks="$enable_libtool_lock" + +])# _LT_AC_LOCK + + +# AC_LIBTOOL_COMPILER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, +# [OUTPUT-FILE], [ACTION-SUCCESS], [ACTION-FAILURE]) +# ---------------------------------------------------------------- +# Check whether the given compiler option works +AC_DEFUN([AC_LIBTOOL_COMPILER_OPTION], +[AC_REQUIRE([LT_AC_PROG_SED]) +AC_CACHE_CHECK([$1], [$2], + [$2=no + ifelse([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4]) + printf "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="$3" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + # The option is referenced via a variable to avoid confusing sed. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&AS_MESSAGE_LOG_FD) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&AS_MESSAGE_LOG_FD + echo "$as_me:__oline__: \$? = $ac_status" >&AS_MESSAGE_LOG_FD + if (exit $ac_status) && test -s "$ac_outfile"; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings other than the usual output. + $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then + $2=yes + fi + fi + $rm conftest* +]) + +if test x"[$]$2" = xyes; then + ifelse([$5], , :, [$5]) +else + ifelse([$6], , :, [$6]) +fi +])# AC_LIBTOOL_COMPILER_OPTION + + +# AC_LIBTOOL_LINKER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, +# [ACTION-SUCCESS], [ACTION-FAILURE]) +# ------------------------------------------------------------ +# Check whether the given compiler option works +AC_DEFUN([AC_LIBTOOL_LINKER_OPTION], +[AC_CACHE_CHECK([$1], [$2], + [$2=no + save_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS $3" + printf "$lt_simple_link_test_code" > conftest.$ac_ext + if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then + # The linker can only warn and ignore the option if not recognized + # So say no if there are warnings + if test -s conftest.err; then + # Append any errors to the config.log. + cat conftest.err 1>&AS_MESSAGE_LOG_FD + $echo "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if diff conftest.exp conftest.er2 >/dev/null; then + $2=yes + fi + else + $2=yes + fi + fi + $rm conftest* + LDFLAGS="$save_LDFLAGS" +]) + +if test x"[$]$2" = xyes; then + ifelse([$4], , :, [$4]) +else + ifelse([$5], , :, [$5]) +fi +])# AC_LIBTOOL_LINKER_OPTION + + +# AC_LIBTOOL_SYS_MAX_CMD_LEN +# -------------------------- +AC_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN], +[# find the maximum length of command line arguments +AC_MSG_CHECKING([the maximum length of command line arguments]) +AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl + i=0 + teststring="ABCD" + + case $build_os in + msdosdjgpp*) + # On DJGPP, this test can blow up pretty badly due to problems in libc + # (any single argument exceeding 2000 bytes causes a buffer overrun + # during glob expansion). Even if it were fixed, the result of this + # check would be larger than it should be. + lt_cv_sys_max_cmd_len=12288; # 12K is about right + ;; + + gnu*) + # Under GNU Hurd, this test is not required because there is + # no limit to the length of command line arguments. + # Libtool will interpret -1 as no limit whatsoever + lt_cv_sys_max_cmd_len=-1; + ;; + + cygwin* | mingw*) + # On Win9x/ME, this test blows up -- it succeeds, but takes + # about 5 minutes as the teststring grows exponentially. + # Worse, since 9x/ME are not pre-emptively multitasking, + # you end up with a "frozen" computer, even though with patience + # the test eventually succeeds (with a max line length of 256k). + # Instead, let's just punt: use the minimum linelength reported by + # all of the supported platforms: 8192 (on NT/2K/XP). + lt_cv_sys_max_cmd_len=8192; + ;; + + amigaos*) + # On AmigaOS with pdksh, this test takes hours, literally. + # So we just punt and use a minimum line length of 8192. + lt_cv_sys_max_cmd_len=8192; + ;; + + netbsd* | freebsd* | openbsd* | darwin* | dragonfly*) + # This has been around since 386BSD, at least. Likely further. + if test -x /sbin/sysctl; then + lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` + elif test -x /usr/sbin/sysctl; then + lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` + else + lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs + fi + # And add a safety zone + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` + ;; + + interix*) + # We know the value 262144 and hardcode it with a safety zone (like BSD) + lt_cv_sys_max_cmd_len=196608 + ;; + + osf*) + # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure + # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not + # nice to cause kernel panics so lets avoid the loop below. + # First set a reasonable default. + lt_cv_sys_max_cmd_len=16384 + # + if test -x /sbin/sysconfig; then + case `/sbin/sysconfig -q proc exec_disable_arg_limit` in + *1*) lt_cv_sys_max_cmd_len=-1 ;; + esac + fi + ;; + sco3.2v5*) + lt_cv_sys_max_cmd_len=102400 + ;; + sysv5* | sco5v6* | sysv4.2uw2*) + kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` + if test -n "$kargmax"; then + lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[[ ]]//'` + else + lt_cv_sys_max_cmd_len=32768 + fi + ;; + *) + # If test is not a shell built-in, we'll probably end up computing a + # maximum length that is only half of the actual maximum length, but + # we can't tell. + SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} + while (test "X"`$SHELL [$]0 --fallback-echo "X$teststring" 2>/dev/null` \ + = "XX$teststring") >/dev/null 2>&1 && + new_result=`expr "X$teststring" : ".*" 2>&1` && + lt_cv_sys_max_cmd_len=$new_result && + test $i != 17 # 1/2 MB should be enough + do + i=`expr $i + 1` + teststring=$teststring$teststring + done + teststring= + # Add a significant safety factor because C++ compilers can tack on massive + # amounts of additional arguments before passing them to the linker. + # It appears as though 1/2 is a usable value. + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` + ;; + esac +]) +if test -n $lt_cv_sys_max_cmd_len ; then + AC_MSG_RESULT($lt_cv_sys_max_cmd_len) +else + AC_MSG_RESULT(none) +fi +])# AC_LIBTOOL_SYS_MAX_CMD_LEN + + +# _LT_AC_CHECK_DLFCN +# ------------------ +AC_DEFUN([_LT_AC_CHECK_DLFCN], +[AC_CHECK_HEADERS(dlfcn.h)dnl +])# _LT_AC_CHECK_DLFCN + + +# _LT_AC_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE, +# ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING) +# --------------------------------------------------------------------- +AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF], +[AC_REQUIRE([_LT_AC_CHECK_DLFCN])dnl +if test "$cross_compiling" = yes; then : + [$4] +else + lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 + lt_status=$lt_dlunknown + cat > conftest.$ac_ext < +#endif + +#include + +#ifdef RTLD_GLOBAL +# define LT_DLGLOBAL RTLD_GLOBAL +#else +# ifdef DL_GLOBAL +# define LT_DLGLOBAL DL_GLOBAL +# else +# define LT_DLGLOBAL 0 +# endif +#endif + +/* We may have to define LT_DLLAZY_OR_NOW in the command line if we + find out it does not work in some platform. */ +#ifndef LT_DLLAZY_OR_NOW +# ifdef RTLD_LAZY +# define LT_DLLAZY_OR_NOW RTLD_LAZY +# else +# ifdef DL_LAZY +# define LT_DLLAZY_OR_NOW DL_LAZY +# else +# ifdef RTLD_NOW +# define LT_DLLAZY_OR_NOW RTLD_NOW +# else +# ifdef DL_NOW +# define LT_DLLAZY_OR_NOW DL_NOW +# else +# define LT_DLLAZY_OR_NOW 0 +# endif +# endif +# endif +# endif +#endif + +#ifdef __cplusplus +extern "C" void exit (int); +#endif + +void fnord() { int i=42;} +int main () +{ + void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); + int status = $lt_dlunknown; + + if (self) + { + if (dlsym (self,"fnord")) status = $lt_dlno_uscore; + else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; + /* dlclose (self); */ + } + else + puts (dlerror ()); + + exit (status); +}] +EOF + if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext} 2>/dev/null; then + (./conftest; exit; ) >&AS_MESSAGE_LOG_FD 2>/dev/null + lt_status=$? + case x$lt_status in + x$lt_dlno_uscore) $1 ;; + x$lt_dlneed_uscore) $2 ;; + x$lt_dlunknown|x*) $3 ;; + esac + else : + # compilation failed + $3 + fi +fi +rm -fr conftest* +])# _LT_AC_TRY_DLOPEN_SELF + + +# AC_LIBTOOL_DLOPEN_SELF +# ---------------------- +AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF], +[AC_REQUIRE([_LT_AC_CHECK_DLFCN])dnl +if test "x$enable_dlopen" != xyes; then + enable_dlopen=unknown + enable_dlopen_self=unknown + enable_dlopen_self_static=unknown +else + lt_cv_dlopen=no + lt_cv_dlopen_libs= + + case $host_os in + beos*) + lt_cv_dlopen="load_add_on" + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + ;; + + mingw* | pw32*) + lt_cv_dlopen="LoadLibrary" + lt_cv_dlopen_libs= + ;; + + cygwin*) + lt_cv_dlopen="dlopen" + lt_cv_dlopen_libs= + ;; + + darwin*) + # if libdl is installed we need to link against it + AC_CHECK_LIB([dl], [dlopen], + [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],[ + lt_cv_dlopen="dyld" + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + ]) + ;; + + *) + AC_CHECK_FUNC([shl_load], + [lt_cv_dlopen="shl_load"], + [AC_CHECK_LIB([dld], [shl_load], + [lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-dld"], + [AC_CHECK_FUNC([dlopen], + [lt_cv_dlopen="dlopen"], + [AC_CHECK_LIB([dl], [dlopen], + [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"], + [AC_CHECK_LIB([svld], [dlopen], + [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"], + [AC_CHECK_LIB([dld], [dld_link], + [lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-dld"]) + ]) + ]) + ]) + ]) + ]) + ;; + esac + + if test "x$lt_cv_dlopen" != xno; then + enable_dlopen=yes + else + enable_dlopen=no + fi + + case $lt_cv_dlopen in + dlopen) + save_CPPFLAGS="$CPPFLAGS" + test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" + + save_LDFLAGS="$LDFLAGS" + wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" + + save_LIBS="$LIBS" + LIBS="$lt_cv_dlopen_libs $LIBS" + + AC_CACHE_CHECK([whether a program can dlopen itself], + lt_cv_dlopen_self, [dnl + _LT_AC_TRY_DLOPEN_SELF( + lt_cv_dlopen_self=yes, lt_cv_dlopen_self=yes, + lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross) + ]) + + if test "x$lt_cv_dlopen_self" = xyes; then + wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" + AC_CACHE_CHECK([whether a statically linked program can dlopen itself], + lt_cv_dlopen_self_static, [dnl + _LT_AC_TRY_DLOPEN_SELF( + lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=yes, + lt_cv_dlopen_self_static=no, lt_cv_dlopen_self_static=cross) + ]) + fi + + CPPFLAGS="$save_CPPFLAGS" + LDFLAGS="$save_LDFLAGS" + LIBS="$save_LIBS" + ;; + esac + + case $lt_cv_dlopen_self in + yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; + *) enable_dlopen_self=unknown ;; + esac + + case $lt_cv_dlopen_self_static in + yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; + *) enable_dlopen_self_static=unknown ;; + esac +fi +])# AC_LIBTOOL_DLOPEN_SELF + + +# AC_LIBTOOL_PROG_CC_C_O([TAGNAME]) +# --------------------------------- +# Check to see if options -c and -o are simultaneously supported by compiler +AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O], +[AC_REQUIRE([_LT_AC_SYS_COMPILER])dnl +AC_CACHE_CHECK([if $compiler supports -c -o file.$ac_objext], + [_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)], + [_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)=no + $rm -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + printf "$lt_simple_compile_test_code" > conftest.$ac_ext + + lt_compiler_flag="-o out/conftest2.$ac_objext" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&AS_MESSAGE_LOG_FD) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&AS_MESSAGE_LOG_FD + echo "$as_me:__oline__: \$? = $ac_status" >&AS_MESSAGE_LOG_FD + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp + $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 + if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then + _LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes + fi + fi + chmod u+w . 2>&AS_MESSAGE_LOG_FD + $rm conftest* + # SGI C++ compiler will create directory out/ii_files/ for + # template instantiation + test -d out/ii_files && $rm out/ii_files/* && rmdir out/ii_files + $rm out/* && rmdir out + cd .. + rmdir conftest + $rm conftest* +]) +])# AC_LIBTOOL_PROG_CC_C_O + + +# AC_LIBTOOL_SYS_HARD_LINK_LOCKS([TAGNAME]) +# ----------------------------------------- +# Check to see if we can do hard links to lock some files if needed +AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS], +[AC_REQUIRE([_LT_AC_LOCK])dnl + +hard_links="nottested" +if test "$_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)" = no && test "$need_locks" != no; then + # do not overwrite the value of need_locks provided by the user + AC_MSG_CHECKING([if we can lock with hard links]) + hard_links=yes + $rm conftest* + ln conftest.a conftest.b 2>/dev/null && hard_links=no + touch conftest.a + ln conftest.a conftest.b 2>&5 || hard_links=no + ln conftest.a conftest.b 2>/dev/null && hard_links=no + AC_MSG_RESULT([$hard_links]) + if test "$hard_links" = no; then + AC_MSG_WARN([`$CC' does not support `-c -o', so `make -j' may be unsafe]) + need_locks=warn + fi +else + need_locks=no +fi +])# AC_LIBTOOL_SYS_HARD_LINK_LOCKS + + +# AC_LIBTOOL_OBJDIR +# ----------------- +AC_DEFUN([AC_LIBTOOL_OBJDIR], +[AC_CACHE_CHECK([for objdir], [lt_cv_objdir], +[rm -f .libs 2>/dev/null +mkdir .libs 2>/dev/null +if test -d .libs; then + lt_cv_objdir=.libs +else + # MS-DOS does not allow filenames that begin with a dot. + lt_cv_objdir=_libs +fi +rmdir .libs 2>/dev/null]) +objdir=$lt_cv_objdir +])# AC_LIBTOOL_OBJDIR + + +# AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH([TAGNAME]) +# ---------------------------------------------- +# Check hardcoding attributes. +AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH], +[AC_MSG_CHECKING([how to hardcode library paths into programs]) +_LT_AC_TAGVAR(hardcode_action, $1)= +if test -n "$_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)" || \ + test -n "$_LT_AC_TAGVAR(runpath_var, $1)" || \ + test "X$_LT_AC_TAGVAR(hardcode_automatic, $1)" = "Xyes" ; then + + # We can hardcode non-existant directories. + if test "$_LT_AC_TAGVAR(hardcode_direct, $1)" != no && + # If the only mechanism to avoid hardcoding is shlibpath_var, we + # have to relink, otherwise we might link with an installed library + # when we should be linking with a yet-to-be-installed one + ## test "$_LT_AC_TAGVAR(hardcode_shlibpath_var, $1)" != no && + test "$_LT_AC_TAGVAR(hardcode_minus_L, $1)" != no; then + # Linking always hardcodes the temporary library directory. + _LT_AC_TAGVAR(hardcode_action, $1)=relink + else + # We can link without hardcoding, and we can hardcode nonexisting dirs. + _LT_AC_TAGVAR(hardcode_action, $1)=immediate + fi +else + # We cannot hardcode anything, or else we can only hardcode existing + # directories. + _LT_AC_TAGVAR(hardcode_action, $1)=unsupported +fi +AC_MSG_RESULT([$_LT_AC_TAGVAR(hardcode_action, $1)]) + +if test "$_LT_AC_TAGVAR(hardcode_action, $1)" = relink; then + # Fast installation is not supported + enable_fast_install=no +elif test "$shlibpath_overrides_runpath" = yes || + test "$enable_shared" = no; then + # Fast installation is not necessary + enable_fast_install=needless +fi +])# AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH + + +# AC_LIBTOOL_SYS_LIB_STRIP +# ------------------------ +AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP], +[striplib= +old_striplib= +AC_MSG_CHECKING([whether stripping libraries is possible]) +if test -n "$STRIP" && $STRIP -V 2>&1 | grep "GNU strip" >/dev/null; then + test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" + test -z "$striplib" && striplib="$STRIP --strip-unneeded" + AC_MSG_RESULT([yes]) +else +# FIXME - insert some real tests, host_os isn't really good enough + case $host_os in + darwin*) + if test -n "$STRIP" ; then + striplib="$STRIP -x" + AC_MSG_RESULT([yes]) + else + AC_MSG_RESULT([no]) +fi + ;; + *) + AC_MSG_RESULT([no]) + ;; + esac +fi +])# AC_LIBTOOL_SYS_LIB_STRIP + + +# AC_LIBTOOL_SYS_DYNAMIC_LINKER +# ----------------------------- +# PORTME Fill in your ld.so characteristics +AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER], +[AC_MSG_CHECKING([dynamic linker characteristics]) +library_names_spec= +libname_spec='lib$name' +soname_spec= +shrext_cmds=".so" +postinstall_cmds= +postuninstall_cmds= +finish_cmds= +finish_eval= +shlibpath_var= +shlibpath_overrides_runpath=unknown +version_type=none +dynamic_linker="$host_os ld.so" +sys_lib_dlsearch_path_spec="/lib /usr/lib" +if test "$GCC" = yes; then + sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` + if echo "$sys_lib_search_path_spec" | grep ';' >/dev/null ; then + # if the path contains ";" then we assume it to be the separator + # otherwise default to the standard path separator (i.e. ":") - it is + # assumed that no part of a normal pathname contains ";" but that should + # okay in the real world where ";" in dirpaths is itself problematic. + sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` + else + sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + fi +else + sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" +fi +need_lib_prefix=unknown +hardcode_into_libs=no + +# when you set need_version to no, make sure it does not cause -set_version +# flags to be left without arguments +need_version=unknown + +case $host_os in +aix3*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' + shlibpath_var=LIBPATH + + # AIX 3 has no versioning support, so we append a major version to the name. + soname_spec='${libname}${release}${shared_ext}$major' + ;; + +aix4* | aix5*) + version_type=linux + need_lib_prefix=no + need_version=no + hardcode_into_libs=yes + if test "$host_cpu" = ia64; then + # AIX 5 supports IA64 + library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + else + # With GCC up to 2.95.x, collect2 would create an import file + # for dependence libraries. The import file would start with + # the line `#! .'. This would cause the generated library to + # depend on `.', always an invalid library. This was fixed in + # development snapshots of GCC prior to 3.0. + case $host_os in + aix4 | aix4.[[01]] | aix4.[[01]].*) + if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' + echo ' yes ' + echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then + : + else + can_build_shared=no + fi + ;; + esac + # AIX (on Power*) has no versioning support, so currently we can not hardcode correct + # soname into executable. Probably we can add versioning support to + # collect2, so additional links can be useful in future. + if test "$aix_use_runtimelinking" = yes; then + # If using run time linking (on AIX 4.2 or later) use lib.so + # instead of lib.a to let people know that these are not + # typical AIX shared libraries. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + else + # We preserve .a as extension for shared libraries through AIX4.2 + # and later when we are not doing run time linking. + library_names_spec='${libname}${release}.a $libname.a' + soname_spec='${libname}${release}${shared_ext}$major' + fi + shlibpath_var=LIBPATH + fi + ;; + +amigaos*) + library_names_spec='$libname.ixlibrary $libname.a' + # Create ${libname}_ixlibrary.a entries in /sys/libs. + finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' + ;; + +beos*) + library_names_spec='${libname}${shared_ext}' + dynamic_linker="$host_os ld.so" + shlibpath_var=LIBRARY_PATH + ;; + +bsdi[[45]]*) + version_type=linux + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" + sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" + # the default ld.so.conf also contains /usr/contrib/lib and + # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow + # libtool to hard-code these into programs + ;; + +cygwin* | mingw* | pw32*) + version_type=windows + shrext_cmds=".dll" + need_version=no + need_lib_prefix=no + + case $GCC,$host_os in + yes,cygwin* | yes,mingw* | yes,pw32*) + library_names_spec='$libname.dll.a' + # DLL is installed to $(libdir)/../bin by postinstall_cmds + postinstall_cmds='base_file=`basename \${file}`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i;echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname~ + chmod a+x \$dldir/$dlname' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $rm \$dlpath' + shlibpath_overrides_runpath=yes + + case $host_os in + cygwin*) + # Cygwin DLLs use 'cyg' prefix rather than 'lib' + soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' + sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib" + ;; + mingw*) + # MinGW DLLs use traditional 'lib' prefix + soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' + sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` + if echo "$sys_lib_search_path_spec" | [grep ';[c-zC-Z]:/' >/dev/null]; then + # It is most probably a Windows format PATH printed by + # mingw gcc, but we are running on Cygwin. Gcc prints its search + # path with ; separators, and with drive letters. We can handle the + # drive letters (cygwin fileutils understands them), so leave them, + # especially as we might pass files found there to a mingw objdump, + # which wouldn't understand a cygwinified path. Ahh. + sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` + else + sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + fi + ;; + pw32*) + # pw32 DLLs use 'pw' prefix rather than 'lib' + library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' + ;; + esac + ;; + + *) + library_names_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext} $libname.lib' + ;; + esac + dynamic_linker='Win32 ld.exe' + # FIXME: first we should search . and the directory the executable is in + shlibpath_var=PATH + ;; + +darwin* | rhapsody*) + dynamic_linker="$host_os dyld" + version_type=darwin + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${versuffix}$shared_ext ${libname}${release}${major}$shared_ext ${libname}$shared_ext' + soname_spec='${libname}${release}${major}$shared_ext' + shlibpath_overrides_runpath=yes + shlibpath_var=DYLD_LIBRARY_PATH + shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' + # Apple's gcc prints 'gcc -print-search-dirs' doesn't operate the same. + if test "$GCC" = yes; then + sys_lib_search_path_spec=`$CC -print-search-dirs | tr "\n" "$PATH_SEPARATOR" | sed -e 's/libraries:/@libraries:/' | tr "@" "\n" | grep "^libraries:" | sed -e "s/^libraries://" -e "s,=/,/,g" -e "s,$PATH_SEPARATOR, ,g" -e "s,.*,& /lib /usr/lib /usr/local/lib,g"` + else + sys_lib_search_path_spec='/lib /usr/lib /usr/local/lib' + fi + sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' + ;; + +dgux*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +freebsd1*) + dynamic_linker=no + ;; + +freebsd* | dragonfly*) + # DragonFly does not have aout. When/if they implement a new + # versioning mechanism, adjust this. + if test -x /usr/bin/objformat; then + objformat=`/usr/bin/objformat` + else + case $host_os in + freebsd[[123]]*) objformat=aout ;; + *) objformat=elf ;; + esac + fi + version_type=freebsd-$objformat + case $version_type in + freebsd-elf*) + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + need_version=no + need_lib_prefix=no + ;; + freebsd-*) + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' + need_version=yes + ;; + esac + shlibpath_var=LD_LIBRARY_PATH + case $host_os in + freebsd2*) + shlibpath_overrides_runpath=yes + ;; + freebsd3.[[01]]* | freebsdelf3.[[01]]*) + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + freebsd3.[[2-9]]* | freebsdelf3.[[2-9]]* | \ + freebsd4.[[0-5]] | freebsdelf4.[[0-5]] | freebsd4.1.1 | freebsdelf4.1.1) + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + freebsd*) # from 4.6 on + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + esac + ;; + +gnu*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + hardcode_into_libs=yes + ;; + +hpux9* | hpux10* | hpux11*) + # Give a soname corresponding to the major version so that dld.sl refuses to + # link against other versions. + version_type=sunos + need_lib_prefix=no + need_version=no + case $host_cpu in + ia64*) + shrext_cmds='.so' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.so" + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + if test "X$HPUX_IA64_MODE" = X32; then + sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" + else + sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" + fi + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + hppa*64*) + shrext_cmds='.sl' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.sl" + shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + *) + shrext_cmds='.sl' + dynamic_linker="$host_os dld.sl" + shlibpath_var=SHLIB_PATH + shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + ;; + esac + # HP-UX runs *really* slowly unless shared libraries are mode 555. + postinstall_cmds='chmod 555 $lib' + ;; + +interix3*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +irix5* | irix6* | nonstopux*) + case $host_os in + nonstopux*) version_type=nonstopux ;; + *) + if test "$lt_cv_prog_gnu_ld" = yes; then + version_type=linux + else + version_type=irix + fi ;; + esac + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' + case $host_os in + irix5* | nonstopux*) + libsuff= shlibsuff= + ;; + *) + case $LD in # libtool.m4 will add one of these switches to LD + *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") + libsuff= shlibsuff= libmagic=32-bit;; + *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") + libsuff=32 shlibsuff=N32 libmagic=N32;; + *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") + libsuff=64 shlibsuff=64 libmagic=64-bit;; + *) libsuff= shlibsuff= libmagic=never-match;; + esac + ;; + esac + shlibpath_var=LD_LIBRARY${shlibsuff}_PATH + shlibpath_overrides_runpath=no + sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" + sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" + hardcode_into_libs=yes + ;; + +# No shared lib support for Linux oldld, aout, or coff. +linux*oldld* | linux*aout* | linux*coff*) + dynamic_linker=no + ;; + +# This must be Linux ELF. +linux* | k*bsd*-gnu) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + # This implies no fast_install, which is unacceptable. + # Some rework will be needed to allow for fast_install + # before this can be enabled. + hardcode_into_libs=yes + + # Append ld.so.conf contents to the search path + if test -f /etc/ld.so.conf; then + lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s", \[$]2)); skip = 1; } { if (!skip) print \[$]0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '` + sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" + fi + + # We used to test for /lib/ld.so.1 and disable shared libraries on + # powerpc, because MkLinux only supported shared libraries with the + # GNU dynamic linker. Since this was broken with cross compilers, + # most powerpc-linux boxes support dynamic linking these days and + # people can always --disable-shared, the test was removed, and we + # assume the GNU/Linux dynamic linker is in use. + dynamic_linker='GNU/Linux ld.so' + ;; + +netbsdelf*-gnu) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='NetBSD ld.elf_so' + ;; + +netbsd*) + version_type=sunos + need_lib_prefix=no + need_version=no + if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + dynamic_linker='NetBSD (a.out) ld.so' + else + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + dynamic_linker='NetBSD ld.elf_so' + fi + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + +newsos6) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +nto-qnx*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +openbsd*) + version_type=sunos + sys_lib_dlsearch_path_spec="/usr/lib" + need_lib_prefix=no + # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. + case $host_os in + openbsd3.3 | openbsd3.3.*) need_version=yes ;; + *) need_version=no ;; + esac + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + shlibpath_var=LD_LIBRARY_PATH + if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + case $host_os in + openbsd2.[[89]] | openbsd2.[[89]].*) + shlibpath_overrides_runpath=no + ;; + *) + shlibpath_overrides_runpath=yes + ;; + esac + else + shlibpath_overrides_runpath=yes + fi + ;; + +os2*) + libname_spec='$name' + shrext_cmds=".dll" + need_lib_prefix=no + library_names_spec='$libname${shared_ext} $libname.a' + dynamic_linker='OS/2 ld.exe' + shlibpath_var=LIBPATH + ;; + +osf3* | osf4* | osf5*) + version_type=osf + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" + sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" + ;; + +solaris*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + # ldd complains unless libraries are executable + postinstall_cmds='chmod +x $lib' + ;; + +sunos4*) + version_type=sunos + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + if test "$with_gnu_ld" = yes; then + need_lib_prefix=no + fi + need_version=yes + ;; + +sysv4 | sysv4.3*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + case $host_vendor in + sni) + shlibpath_overrides_runpath=no + need_lib_prefix=no + export_dynamic_flag_spec='${wl}-Blargedynsym' + runpath_var=LD_RUN_PATH + ;; + siemens) + need_lib_prefix=no + ;; + motorola) + need_lib_prefix=no + need_version=no + shlibpath_overrides_runpath=no + sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' + ;; + esac + ;; + +sysv4*MP*) + if test -d /usr/nec ;then + version_type=linux + library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' + soname_spec='$libname${shared_ext}.$major' + shlibpath_var=LD_LIBRARY_PATH + fi + ;; + +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + version_type=freebsd-elf + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + hardcode_into_libs=yes + if test "$with_gnu_ld" = yes; then + sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' + shlibpath_overrides_runpath=no + else + sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' + shlibpath_overrides_runpath=yes + case $host_os in + sco3.2v5*) + sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" + ;; + esac + fi + sys_lib_dlsearch_path_spec='/usr/lib' + ;; + +uts4*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +*) + dynamic_linker=no + ;; +esac +AC_MSG_RESULT([$dynamic_linker]) +test "$dynamic_linker" = no && can_build_shared=no + +variables_saved_for_relink="PATH $shlibpath_var $runpath_var" +if test "$GCC" = yes; then + variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" +fi +])# AC_LIBTOOL_SYS_DYNAMIC_LINKER + + +# _LT_AC_TAGCONFIG +# ---------------- +AC_DEFUN([_LT_AC_TAGCONFIG], +[AC_ARG_WITH([tags], + [AC_HELP_STRING([--with-tags@<:@=TAGS@:>@], + [include additional configurations @<:@automatic@:>@])], + [tagnames="$withval"]) + +if test -f "$ltmain" && test -n "$tagnames"; then + if test ! -f "${ofile}"; then + AC_MSG_WARN([output file `$ofile' does not exist]) + fi + + if test -z "$LTCC"; then + eval "`$SHELL ${ofile} --config | grep '^LTCC='`" + if test -z "$LTCC"; then + AC_MSG_WARN([output file `$ofile' does not look like a libtool script]) + else + AC_MSG_WARN([using `LTCC=$LTCC', extracted from `$ofile']) + fi + fi + if test -z "$LTCFLAGS"; then + eval "`$SHELL ${ofile} --config | grep '^LTCFLAGS='`" + fi + + # Extract list of available tagged configurations in $ofile. + # Note that this assumes the entire list is on one line. + available_tags=`grep "^available_tags=" "${ofile}" | $SED -e 's/available_tags=\(.*$\)/\1/' -e 's/\"//g'` + + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for tagname in $tagnames; do + IFS="$lt_save_ifs" + # Check whether tagname contains only valid characters + case `$echo "X$tagname" | $Xsed -e 's:[[-_ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890,/]]::g'` in + "") ;; + *) AC_MSG_ERROR([invalid tag name: $tagname]) + ;; + esac + + if grep "^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$" < "${ofile}" > /dev/null + then + AC_MSG_ERROR([tag name \"$tagname\" already exists]) + fi + + # Update the list of available tags. + if test -n "$tagname"; then + echo appending configuration tag \"$tagname\" to $ofile + + case $tagname in + CXX) + if test -n "$CXX" && ( test "X$CXX" != "Xno" && + ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) || + (test "X$CXX" != "Xg++"))) ; then + AC_LIBTOOL_LANG_CXX_CONFIG + else + tagname="" + fi + ;; + + F77) + if test -n "$F77" && test "X$F77" != "Xno"; then + AC_LIBTOOL_LANG_F77_CONFIG + else + tagname="" + fi + ;; + + GCJ) + if test -n "$GCJ" && test "X$GCJ" != "Xno"; then + AC_LIBTOOL_LANG_GCJ_CONFIG + else + tagname="" + fi + ;; + + RC) + AC_LIBTOOL_LANG_RC_CONFIG + ;; + + *) + AC_MSG_ERROR([Unsupported tag name: $tagname]) + ;; + esac + + # Append the new tag name to the list of available tags. + if test -n "$tagname" ; then + available_tags="$available_tags $tagname" + fi + fi + done + IFS="$lt_save_ifs" + + # Now substitute the updated list of available tags. + if eval "sed -e 's/^available_tags=.*\$/available_tags=\"$available_tags\"/' \"$ofile\" > \"${ofile}T\""; then + mv "${ofile}T" "$ofile" + chmod +x "$ofile" + else + rm -f "${ofile}T" + AC_MSG_ERROR([unable to update list of available tagged configurations.]) + fi +fi +])# _LT_AC_TAGCONFIG + + +# AC_LIBTOOL_DLOPEN +# ----------------- +# enable checks for dlopen support +AC_DEFUN([AC_LIBTOOL_DLOPEN], + [AC_BEFORE([$0],[AC_LIBTOOL_SETUP]) +])# AC_LIBTOOL_DLOPEN + + +# AC_LIBTOOL_WIN32_DLL +# -------------------- +# declare package support for building win32 DLLs +AC_DEFUN([AC_LIBTOOL_WIN32_DLL], +[AC_BEFORE([$0], [AC_LIBTOOL_SETUP]) +])# AC_LIBTOOL_WIN32_DLL + + +# AC_ENABLE_SHARED([DEFAULT]) +# --------------------------- +# implement the --enable-shared flag +# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. +AC_DEFUN([AC_ENABLE_SHARED], +[define([AC_ENABLE_SHARED_DEFAULT], ifelse($1, no, no, yes))dnl +AC_ARG_ENABLE([shared], + [AC_HELP_STRING([--enable-shared@<:@=PKGS@:>@], + [build shared libraries @<:@default=]AC_ENABLE_SHARED_DEFAULT[@:>@])], + [p=${PACKAGE-default} + case $enableval in + yes) enable_shared=yes ;; + no) enable_shared=no ;; + *) + enable_shared=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_shared=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac], + [enable_shared=]AC_ENABLE_SHARED_DEFAULT) +])# AC_ENABLE_SHARED + + +# AC_DISABLE_SHARED +# ----------------- +# set the default shared flag to --disable-shared +AC_DEFUN([AC_DISABLE_SHARED], +[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl +AC_ENABLE_SHARED(no) +])# AC_DISABLE_SHARED + + +# AC_ENABLE_STATIC([DEFAULT]) +# --------------------------- +# implement the --enable-static flag +# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. +AC_DEFUN([AC_ENABLE_STATIC], +[define([AC_ENABLE_STATIC_DEFAULT], ifelse($1, no, no, yes))dnl +AC_ARG_ENABLE([static], + [AC_HELP_STRING([--enable-static@<:@=PKGS@:>@], + [build static libraries @<:@default=]AC_ENABLE_STATIC_DEFAULT[@:>@])], + [p=${PACKAGE-default} + case $enableval in + yes) enable_static=yes ;; + no) enable_static=no ;; + *) + enable_static=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_static=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac], + [enable_static=]AC_ENABLE_STATIC_DEFAULT) +])# AC_ENABLE_STATIC + + +# AC_DISABLE_STATIC +# ----------------- +# set the default static flag to --disable-static +AC_DEFUN([AC_DISABLE_STATIC], +[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl +AC_ENABLE_STATIC(no) +])# AC_DISABLE_STATIC + + +# AC_ENABLE_FAST_INSTALL([DEFAULT]) +# --------------------------------- +# implement the --enable-fast-install flag +# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. +AC_DEFUN([AC_ENABLE_FAST_INSTALL], +[define([AC_ENABLE_FAST_INSTALL_DEFAULT], ifelse($1, no, no, yes))dnl +AC_ARG_ENABLE([fast-install], + [AC_HELP_STRING([--enable-fast-install@<:@=PKGS@:>@], + [optimize for fast installation @<:@default=]AC_ENABLE_FAST_INSTALL_DEFAULT[@:>@])], + [p=${PACKAGE-default} + case $enableval in + yes) enable_fast_install=yes ;; + no) enable_fast_install=no ;; + *) + enable_fast_install=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_fast_install=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac], + [enable_fast_install=]AC_ENABLE_FAST_INSTALL_DEFAULT) +])# AC_ENABLE_FAST_INSTALL + + +# AC_DISABLE_FAST_INSTALL +# ----------------------- +# set the default to --disable-fast-install +AC_DEFUN([AC_DISABLE_FAST_INSTALL], +[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl +AC_ENABLE_FAST_INSTALL(no) +])# AC_DISABLE_FAST_INSTALL + + +# AC_LIBTOOL_PICMODE([MODE]) +# -------------------------- +# implement the --with-pic flag +# MODE is either `yes' or `no'. If omitted, it defaults to `both'. +AC_DEFUN([AC_LIBTOOL_PICMODE], +[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl +pic_mode=ifelse($#,1,$1,default) +])# AC_LIBTOOL_PICMODE + + +# AC_PROG_EGREP +# ------------- +# This is predefined starting with Autoconf 2.54, so this conditional +# definition can be removed once we require Autoconf 2.54 or later. +m4_ifndef([AC_PROG_EGREP], [AC_DEFUN([AC_PROG_EGREP], +[AC_CACHE_CHECK([for egrep], [ac_cv_prog_egrep], + [if echo a | (grep -E '(a|b)') >/dev/null 2>&1 + then ac_cv_prog_egrep='grep -E' + else ac_cv_prog_egrep='egrep' + fi]) + EGREP=$ac_cv_prog_egrep + AC_SUBST([EGREP]) +])]) + + +# AC_PATH_TOOL_PREFIX +# ------------------- +# find a file program which can recognise shared library +AC_DEFUN([AC_PATH_TOOL_PREFIX], +[AC_REQUIRE([AC_PROG_EGREP])dnl +AC_MSG_CHECKING([for $1]) +AC_CACHE_VAL(lt_cv_path_MAGIC_CMD, +[case $MAGIC_CMD in +[[\\/*] | ?:[\\/]*]) + lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. + ;; +*) + lt_save_MAGIC_CMD="$MAGIC_CMD" + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR +dnl $ac_dummy forces splitting on constant user-supplied paths. +dnl POSIX.2 word splitting is done only on the output of word expansions, +dnl not every word. This closes a longstanding sh security hole. + ac_dummy="ifelse([$2], , $PATH, [$2])" + for ac_dir in $ac_dummy; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$1; then + lt_cv_path_MAGIC_CMD="$ac_dir/$1" + if test -n "$file_magic_test_file"; then + case $deplibs_check_method in + "file_magic "*) + file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` + MAGIC_CMD="$lt_cv_path_MAGIC_CMD" + if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | + $EGREP "$file_magic_regex" > /dev/null; then + : + else + cat <&2 + +*** Warning: the command libtool uses to detect shared libraries, +*** $file_magic_cmd, produces output that libtool cannot recognize. +*** The result is that libtool may fail to recognize shared libraries +*** as such. This will affect the creation of libtool libraries that +*** depend on shared libraries, but programs linked with such libtool +*** libraries will work regardless of this problem. Nevertheless, you +*** may want to report the problem to your system manager and/or to +*** bug-libtool@gnu.org + +EOF + fi ;; + esac + fi + break + fi + done + IFS="$lt_save_ifs" + MAGIC_CMD="$lt_save_MAGIC_CMD" + ;; +esac]) +MAGIC_CMD="$lt_cv_path_MAGIC_CMD" +if test -n "$MAGIC_CMD"; then + AC_MSG_RESULT($MAGIC_CMD) +else + AC_MSG_RESULT(no) +fi +])# AC_PATH_TOOL_PREFIX + + +# AC_PATH_MAGIC +# ------------- +# find a file program which can recognise a shared library +AC_DEFUN([AC_PATH_MAGIC], +[AC_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin$PATH_SEPARATOR$PATH) +if test -z "$lt_cv_path_MAGIC_CMD"; then + if test -n "$ac_tool_prefix"; then + AC_PATH_TOOL_PREFIX(file, /usr/bin$PATH_SEPARATOR$PATH) + else + MAGIC_CMD=: + fi +fi +])# AC_PATH_MAGIC + + +# AC_PROG_LD +# ---------- +# find the pathname to the GNU or non-GNU linker +AC_DEFUN([AC_PROG_LD], +[AC_ARG_WITH([gnu-ld], + [AC_HELP_STRING([--with-gnu-ld], + [assume the C compiler uses GNU ld @<:@default=no@:>@])], + [test "$withval" = no || with_gnu_ld=yes], + [with_gnu_ld=no]) +AC_REQUIRE([LT_AC_PROG_SED])dnl +AC_REQUIRE([AC_PROG_CC])dnl +AC_REQUIRE([AC_CANONICAL_HOST])dnl +AC_REQUIRE([AC_CANONICAL_BUILD])dnl +ac_prog=ld +if test "$GCC" = yes; then + # Check if gcc -print-prog-name=ld gives a path. + AC_MSG_CHECKING([for ld used by $CC]) + case $host in + *-*-mingw*) + # gcc leaves a trailing carriage return which upsets mingw + ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; + *) + ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; + esac + case $ac_prog in + # Accept absolute paths. + [[\\/]]* | ?:[[\\/]]*) + re_direlt='/[[^/]][[^/]]*/\.\./' + # Canonicalize the pathname of ld + ac_prog=`echo $ac_prog| $SED 's%\\\\%/%g'` + while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do + ac_prog=`echo $ac_prog| $SED "s%$re_direlt%/%"` + done + test -z "$LD" && LD="$ac_prog" + ;; + "") + # If it fails, then pretend we aren't using GCC. + ac_prog=ld + ;; + *) + # If it is relative, then search for the first ld in PATH. + with_gnu_ld=unknown + ;; + esac +elif test "$with_gnu_ld" = yes; then + AC_MSG_CHECKING([for GNU ld]) +else + AC_MSG_CHECKING([for non-GNU ld]) +fi +AC_CACHE_VAL(lt_cv_path_LD, +[if test -z "$LD"; then + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then + lt_cv_path_LD="$ac_dir/$ac_prog" + # Check to see if the program is GNU ld. I'd rather use --version, + # but apparently some variants of GNU ld only accept -v. + # Break only if it was the GNU/non-GNU ld that we prefer. + case `"$lt_cv_path_LD" -v 2>&1 &1 /dev/null; then + case $host_cpu in + i*86 ) + # Not sure whether the presence of OpenBSD here was a mistake. + # Let's accept both of them until this is cleared up. + lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[[3-9]]86 (compact )?demand paged shared library' + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` + ;; + esac + else + lt_cv_deplibs_check_method=pass_all + fi + ;; + +gnu*) + lt_cv_deplibs_check_method=pass_all + ;; + +hpux10.20* | hpux11*) + lt_cv_file_magic_cmd=/usr/bin/file + case $host_cpu in + ia64*) + lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|ELF-[[0-9]][[0-9]]) shared object file - IA64' + lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so + ;; + hppa*64*) + [lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - PA-RISC [0-9].[0-9]'] + lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl + ;; + *) + lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|PA-RISC[[0-9]].[[0-9]]) shared library' + lt_cv_file_magic_test_file=/usr/lib/libc.sl + ;; + esac + ;; + +interix3*) + # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here + lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|\.a)$' + ;; + +irix5* | irix6* | nonstopux*) + case $LD in + *-32|*"-32 ") libmagic=32-bit;; + *-n32|*"-n32 ") libmagic=N32;; + *-64|*"-64 ") libmagic=64-bit;; + *) libmagic=never-match;; + esac + lt_cv_deplibs_check_method=pass_all + ;; + +# This must be Linux ELF. +linux* | k*bsd*-gnu) + lt_cv_deplibs_check_method=pass_all + ;; + +netbsd* | netbsdelf*-gnu) + if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then + lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' + else + lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|_pic\.a)$' + fi + ;; + +newos6*) + lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (executable|dynamic lib)' + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=/usr/lib/libnls.so + ;; + +nto-qnx*) + lt_cv_deplibs_check_method=unknown + ;; + +openbsd*) + if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|\.so|_pic\.a)$' + else + lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' + fi + ;; + +osf3* | osf4* | osf5*) + lt_cv_deplibs_check_method=pass_all + ;; + +solaris*) + lt_cv_deplibs_check_method=pass_all + ;; + +sysv4 | sysv4.3*) + case $host_vendor in + motorola) + lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib) M[[0-9]][[0-9]]* Version [[0-9]]' + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` + ;; + ncr) + lt_cv_deplibs_check_method=pass_all + ;; + sequent) + lt_cv_file_magic_cmd='/bin/file' + lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )' + ;; + sni) + lt_cv_file_magic_cmd='/bin/file' + lt_cv_deplibs_check_method="file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB dynamic lib" + lt_cv_file_magic_test_file=/lib/libc.so + ;; + siemens) + lt_cv_deplibs_check_method=pass_all + ;; + pc) + lt_cv_deplibs_check_method=pass_all + ;; + esac + ;; + +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + lt_cv_deplibs_check_method=pass_all + ;; +esac +]) +file_magic_cmd=$lt_cv_file_magic_cmd +deplibs_check_method=$lt_cv_deplibs_check_method +test -z "$deplibs_check_method" && deplibs_check_method=unknown +])# AC_DEPLIBS_CHECK_METHOD + + +# AC_PROG_NM +# ---------- +# find the pathname to a BSD-compatible name lister +AC_DEFUN([AC_PROG_NM], +[AC_CACHE_CHECK([for BSD-compatible nm], lt_cv_path_NM, +[if test -n "$NM"; then + # Let the user override the test. + lt_cv_path_NM="$NM" +else + lt_nm_to_check="${ac_tool_prefix}nm" + if test -n "$ac_tool_prefix" && test "$build" = "$host"; then + lt_nm_to_check="$lt_nm_to_check nm" + fi + for lt_tmp_nm in $lt_nm_to_check; do + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + tmp_nm="$ac_dir/$lt_tmp_nm" + if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then + # Check to see if the nm accepts a BSD-compat flag. + # Adding the `sed 1q' prevents false positives on HP-UX, which says: + # nm: unknown option "B" ignored + # Tru64's nm complains that /dev/null is an invalid object file + case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in + */dev/null* | *'Invalid file or object type'*) + lt_cv_path_NM="$tmp_nm -B" + break + ;; + *) + case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in + */dev/null*) + lt_cv_path_NM="$tmp_nm -p" + break + ;; + *) + lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but + continue # so that we can try to find one that supports BSD flags + ;; + esac + ;; + esac + fi + done + IFS="$lt_save_ifs" + done + test -z "$lt_cv_path_NM" && lt_cv_path_NM=nm +fi]) +NM="$lt_cv_path_NM" +])# AC_PROG_NM + + +# AC_CHECK_LIBM +# ------------- +# check for math library +AC_DEFUN([AC_CHECK_LIBM], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +LIBM= +case $host in +*-*-beos* | *-*-cygwin* | *-*-pw32* | *-*-darwin*) + # These system don't have libm, or don't need it + ;; +*-ncr-sysv4.3*) + AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw") + AC_CHECK_LIB(m, cos, LIBM="$LIBM -lm") + ;; +*) + AC_CHECK_LIB(m, cos, LIBM="-lm") + ;; +esac +])# AC_CHECK_LIBM + + +# AC_LIBLTDL_CONVENIENCE([DIRECTORY]) +# ----------------------------------- +# sets LIBLTDL to the link flags for the libltdl convenience library and +# LTDLINCL to the include flags for the libltdl header and adds +# --enable-ltdl-convenience to the configure arguments. Note that +# AC_CONFIG_SUBDIRS is not called here. If DIRECTORY is not provided, +# it is assumed to be `libltdl'. LIBLTDL will be prefixed with +# '${top_builddir}/' and LTDLINCL will be prefixed with '${top_srcdir}/' +# (note the single quotes!). If your package is not flat and you're not +# using automake, define top_builddir and top_srcdir appropriately in +# the Makefiles. +AC_DEFUN([AC_LIBLTDL_CONVENIENCE], +[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl + case $enable_ltdl_convenience in + no) AC_MSG_ERROR([this package needs a convenience libltdl]) ;; + "") enable_ltdl_convenience=yes + ac_configure_args="$ac_configure_args --enable-ltdl-convenience" ;; + esac + LIBLTDL='${top_builddir}/'ifelse($#,1,[$1],['libltdl'])/libltdlc.la + LTDLINCL='-I${top_srcdir}/'ifelse($#,1,[$1],['libltdl']) + # For backwards non-gettext consistent compatibility... + INCLTDL="$LTDLINCL" +])# AC_LIBLTDL_CONVENIENCE + + +# AC_LIBLTDL_INSTALLABLE([DIRECTORY]) +# ----------------------------------- +# sets LIBLTDL to the link flags for the libltdl installable library and +# LTDLINCL to the include flags for the libltdl header and adds +# --enable-ltdl-install to the configure arguments. Note that +# AC_CONFIG_SUBDIRS is not called here. If DIRECTORY is not provided, +# and an installed libltdl is not found, it is assumed to be `libltdl'. +# LIBLTDL will be prefixed with '${top_builddir}/'# and LTDLINCL with +# '${top_srcdir}/' (note the single quotes!). If your package is not +# flat and you're not using automake, define top_builddir and top_srcdir +# appropriately in the Makefiles. +# In the future, this macro may have to be called after AC_PROG_LIBTOOL. +AC_DEFUN([AC_LIBLTDL_INSTALLABLE], +[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl + AC_CHECK_LIB(ltdl, lt_dlinit, + [test x"$enable_ltdl_install" != xyes && enable_ltdl_install=no], + [if test x"$enable_ltdl_install" = xno; then + AC_MSG_WARN([libltdl not installed, but installation disabled]) + else + enable_ltdl_install=yes + fi + ]) + if test x"$enable_ltdl_install" = x"yes"; then + ac_configure_args="$ac_configure_args --enable-ltdl-install" + LIBLTDL='${top_builddir}/'ifelse($#,1,[$1],['libltdl'])/libltdl.la + LTDLINCL='-I${top_srcdir}/'ifelse($#,1,[$1],['libltdl']) + else + ac_configure_args="$ac_configure_args --enable-ltdl-install=no" + LIBLTDL="-lltdl" + LTDLINCL= + fi + # For backwards non-gettext consistent compatibility... + INCLTDL="$LTDLINCL" +])# AC_LIBLTDL_INSTALLABLE + + +# AC_LIBTOOL_CXX +# -------------- +# enable support for C++ libraries +AC_DEFUN([AC_LIBTOOL_CXX], +[AC_REQUIRE([_LT_AC_LANG_CXX]) +])# AC_LIBTOOL_CXX + + +# _LT_AC_LANG_CXX +# --------------- +AC_DEFUN([_LT_AC_LANG_CXX], +[AC_REQUIRE([AC_PROG_CXX]) +AC_REQUIRE([_LT_AC_PROG_CXXCPP]) +_LT_AC_SHELL_INIT([tagnames=${tagnames+${tagnames},}CXX]) +])# _LT_AC_LANG_CXX + +# _LT_AC_PROG_CXXCPP +# ------------------ +AC_DEFUN([_LT_AC_PROG_CXXCPP], +[ +AC_REQUIRE([AC_PROG_CXX]) +if test -n "$CXX" && ( test "X$CXX" != "Xno" && + ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) || + (test "X$CXX" != "Xg++"))) ; then + AC_PROG_CXXCPP +fi +])# _LT_AC_PROG_CXXCPP + +# AC_LIBTOOL_F77 +# -------------- +# enable support for Fortran 77 libraries +AC_DEFUN([AC_LIBTOOL_F77], +[AC_REQUIRE([_LT_AC_LANG_F77]) +])# AC_LIBTOOL_F77 + + +# _LT_AC_LANG_F77 +# --------------- +AC_DEFUN([_LT_AC_LANG_F77], +[AC_REQUIRE([AC_PROG_F77]) +_LT_AC_SHELL_INIT([tagnames=${tagnames+${tagnames},}F77]) +])# _LT_AC_LANG_F77 + + +# AC_LIBTOOL_GCJ +# -------------- +# enable support for GCJ libraries +AC_DEFUN([AC_LIBTOOL_GCJ], +[AC_REQUIRE([_LT_AC_LANG_GCJ]) +])# AC_LIBTOOL_GCJ + + +# _LT_AC_LANG_GCJ +# --------------- +AC_DEFUN([_LT_AC_LANG_GCJ], +[AC_PROVIDE_IFELSE([AC_PROG_GCJ],[], + [AC_PROVIDE_IFELSE([A][M_PROG_GCJ],[], + [AC_PROVIDE_IFELSE([LT_AC_PROG_GCJ],[], + [ifdef([AC_PROG_GCJ],[AC_REQUIRE([AC_PROG_GCJ])], + [ifdef([A][M_PROG_GCJ],[AC_REQUIRE([A][M_PROG_GCJ])], + [AC_REQUIRE([A][C_PROG_GCJ_OR_A][M_PROG_GCJ])])])])])]) +_LT_AC_SHELL_INIT([tagnames=${tagnames+${tagnames},}GCJ]) +])# _LT_AC_LANG_GCJ + + +# AC_LIBTOOL_RC +# ------------- +# enable support for Windows resource files +AC_DEFUN([AC_LIBTOOL_RC], +[AC_REQUIRE([LT_AC_PROG_RC]) +_LT_AC_SHELL_INIT([tagnames=${tagnames+${tagnames},}RC]) +])# AC_LIBTOOL_RC + + +# AC_LIBTOOL_LANG_C_CONFIG +# ------------------------ +# Ensure that the configuration vars for the C compiler are +# suitably defined. Those variables are subsequently used by +# AC_LIBTOOL_CONFIG to write the compiler configuration to `libtool'. +AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG], [_LT_AC_LANG_C_CONFIG]) +AC_DEFUN([_LT_AC_LANG_C_CONFIG], +[lt_save_CC="$CC" +AC_LANG_PUSH(C) + +# Source file extension for C test sources. +ac_ext=c + +# Object file extension for compiled C test sources. +objext=o +_LT_AC_TAGVAR(objext, $1)=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code="int some_variable = 0;\n" + +# Code to be used in simple link tests +lt_simple_link_test_code='int main(){return(0);}\n' + +_LT_AC_SYS_COMPILER + +# save warnings/boilerplate of simple test code +_LT_COMPILER_BOILERPLATE +_LT_LINKER_BOILERPLATE + +## CAVEAT EMPTOR: +## There is no encapsulation within the following macros, do not change +## the running order or otherwise move them around unless you know exactly +## what you are doing... +AC_LIBTOOL_PROG_COMPILER_NO_RTTI($1) +AC_LIBTOOL_PROG_COMPILER_PIC($1) +AC_LIBTOOL_PROG_CC_C_O($1) +AC_LIBTOOL_SYS_HARD_LINK_LOCKS($1) +AC_LIBTOOL_PROG_LD_SHLIBS($1) +AC_LIBTOOL_SYS_DYNAMIC_LINKER($1) +AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH($1) +AC_LIBTOOL_SYS_LIB_STRIP +AC_LIBTOOL_DLOPEN_SELF + +# Report which library types will actually be built +AC_MSG_CHECKING([if libtool supports shared libraries]) +AC_MSG_RESULT([$can_build_shared]) + +AC_MSG_CHECKING([whether to build shared libraries]) +test "$can_build_shared" = "no" && enable_shared=no + +# On AIX, shared libraries and static libraries use the same namespace, and +# are all built from PIC. +case $host_os in +aix3*) + test "$enable_shared" = yes && enable_static=no + if test -n "$RANLIB"; then + archive_cmds="$archive_cmds~\$RANLIB \$lib" + postinstall_cmds='$RANLIB $lib' + fi + ;; + +aix4* | aix5*) + if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then + test "$enable_shared" = yes && enable_static=no + fi + ;; +esac +AC_MSG_RESULT([$enable_shared]) + +AC_MSG_CHECKING([whether to build static libraries]) +# Make sure either enable_shared or enable_static is yes. +test "$enable_shared" = yes || enable_static=yes +AC_MSG_RESULT([$enable_static]) + +AC_LIBTOOL_CONFIG($1) + +AC_LANG_POP +CC="$lt_save_CC" +])# AC_LIBTOOL_LANG_C_CONFIG + + +# AC_LIBTOOL_LANG_CXX_CONFIG +# -------------------------- +# Ensure that the configuration vars for the C compiler are +# suitably defined. Those variables are subsequently used by +# AC_LIBTOOL_CONFIG to write the compiler configuration to `libtool'. +AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG], [_LT_AC_LANG_CXX_CONFIG(CXX)]) +AC_DEFUN([_LT_AC_LANG_CXX_CONFIG], +[AC_LANG_PUSH(C++) +AC_REQUIRE([AC_PROG_CXX]) +AC_REQUIRE([_LT_AC_PROG_CXXCPP]) + +_LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no +_LT_AC_TAGVAR(allow_undefined_flag, $1)= +_LT_AC_TAGVAR(always_export_symbols, $1)=no +_LT_AC_TAGVAR(archive_expsym_cmds, $1)= +_LT_AC_TAGVAR(export_dynamic_flag_spec, $1)= +_LT_AC_TAGVAR(hardcode_direct, $1)=no +_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)= +_LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)= +_LT_AC_TAGVAR(hardcode_libdir_separator, $1)= +_LT_AC_TAGVAR(hardcode_minus_L, $1)=no +_LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=unsupported +_LT_AC_TAGVAR(hardcode_automatic, $1)=no +_LT_AC_TAGVAR(module_cmds, $1)= +_LT_AC_TAGVAR(module_expsym_cmds, $1)= +_LT_AC_TAGVAR(link_all_deplibs, $1)=unknown +_LT_AC_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds +_LT_AC_TAGVAR(no_undefined_flag, $1)= +_LT_AC_TAGVAR(whole_archive_flag_spec, $1)= +_LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=no + +# Dependencies to place before and after the object being linked: +_LT_AC_TAGVAR(predep_objects, $1)= +_LT_AC_TAGVAR(postdep_objects, $1)= +_LT_AC_TAGVAR(predeps, $1)= +_LT_AC_TAGVAR(postdeps, $1)= +_LT_AC_TAGVAR(compiler_lib_search_path, $1)= + +# Source file extension for C++ test sources. +ac_ext=cpp + +# Object file extension for compiled C++ test sources. +objext=o +_LT_AC_TAGVAR(objext, $1)=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code="int some_variable = 0;\n" + +# Code to be used in simple link tests +lt_simple_link_test_code='int main(int, char *[[]]) { return(0); }\n' + +# ltmain only uses $CC for tagged configurations so make sure $CC is set. +_LT_AC_SYS_COMPILER + +# save warnings/boilerplate of simple test code +_LT_COMPILER_BOILERPLATE +_LT_LINKER_BOILERPLATE + +# Allow CC to be a program name with arguments. +lt_save_CC=$CC +lt_save_LD=$LD +lt_save_GCC=$GCC +GCC=$GXX +lt_save_with_gnu_ld=$with_gnu_ld +lt_save_path_LD=$lt_cv_path_LD +if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then + lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx +else + $as_unset lt_cv_prog_gnu_ld +fi +if test -n "${lt_cv_path_LDCXX+set}"; then + lt_cv_path_LD=$lt_cv_path_LDCXX +else + $as_unset lt_cv_path_LD +fi +test -z "${LDCXX+set}" || LD=$LDCXX +CC=${CXX-"c++"} +compiler=$CC +_LT_AC_TAGVAR(compiler, $1)=$CC +_LT_CC_BASENAME([$compiler]) + +# We don't want -fno-exception wen compiling C++ code, so set the +# no_builtin_flag separately +if test "$GXX" = yes; then + _LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' +else + _LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= +fi + +if test "$GXX" = yes; then + # Set up default GNU C++ configuration + + AC_PROG_LD + + # Check if GNU C++ uses GNU ld as the underlying linker, since the + # archiving commands below assume that GNU ld is being used. + if test "$with_gnu_ld" = yes; then + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir' + _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' + + # If archive_cmds runs LD, not CC, wlarc should be empty + # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to + # investigate it a little bit more. (MM) + wlarc='${wl}' + + # ancient GNU ld didn't support --whole-archive et. al. + if eval "`$CC -print-prog-name=ld` --help 2>&1" | \ + grep 'no-whole-archive' > /dev/null; then + _LT_AC_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + else + _LT_AC_TAGVAR(whole_archive_flag_spec, $1)= + fi + else + with_gnu_ld=no + wlarc= + + # A generic and very simple default shared library creation + # command for GNU C++ for the case where it uses the native + # linker, instead of GNU ld. If possible, this setting should + # overridden to take advantage of the native linker features on + # the platform it is being used on. + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' + fi + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"' + +else + GXX=no + with_gnu_ld=no + wlarc= +fi + +# PORTME: fill in a description of your system's C++ link characteristics +AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) +_LT_AC_TAGVAR(ld_shlibs, $1)=yes +case $host_os in + aix3*) + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + aix4* | aix5*) + if test "$host_cpu" = ia64; then + # On IA64, the linker does run time linking by default, so we don't + # have to do anything special. + aix_use_runtimelinking=no + exp_sym_flag='-Bexport' + no_entry_flag="" + else + aix_use_runtimelinking=no + + # Test if we are trying to use run time linking or normal + # AIX style linking. If -brtl is somewhere in LDFLAGS, we + # need to do runtime linking. + case $host_os in aix4.[[23]]|aix4.[[23]].*|aix5*) + for ld_flag in $LDFLAGS; do + case $ld_flag in + *-brtl*) + aix_use_runtimelinking=yes + break + ;; + esac + done + ;; + esac + + exp_sym_flag='-bexport' + no_entry_flag='-bnoentry' + fi + + # When large executables or shared objects are built, AIX ld can + # have problems creating the table of contents. If linking a library + # or program results in "error TOC overflow" add -mminimal-toc to + # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not + # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. + + _LT_AC_TAGVAR(archive_cmds, $1)='' + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=':' + _LT_AC_TAGVAR(link_all_deplibs, $1)=yes + + if test "$GXX" = yes; then + case $host_os in aix4.[[012]]|aix4.[[012]].*) + # We only want to do this on AIX 4.2 and lower, the check + # below for broken collect2 doesn't work under 4.3+ + collect2name=`${CC} -print-prog-name=collect2` + if test -f "$collect2name" && \ + strings "$collect2name" | grep resolve_lib_name >/dev/null + then + # We have reworked collect2 + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + else + # We have old collect2 + _LT_AC_TAGVAR(hardcode_direct, $1)=unsupported + # It fails to find uninstalled libraries when the uninstalled + # path is not listed in the libpath. Setting hardcode_minus_L + # to unsupported forces relinking + _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)= + fi + ;; + esac + shared_flag='-shared' + if test "$aix_use_runtimelinking" = yes; then + shared_flag="$shared_flag "'${wl}-G' + fi + else + # not using gcc + if test "$host_cpu" = ia64; then + # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release + # chokes on -Wl,-G. The following line is correct: + shared_flag='-G' + else + if test "$aix_use_runtimelinking" = yes; then + shared_flag='${wl}-G' + else + shared_flag='${wl}-bM:SRE' + fi + fi + fi + + # It seems that -bexpall does not export symbols beginning with + # underscore (_), so it is better to generate a list of symbols to export. + _LT_AC_TAGVAR(always_export_symbols, $1)=yes + if test "$aix_use_runtimelinking" = yes; then + # Warning - without using the other runtime loading flags (-brtl), + # -berok will link without error, but may produce a broken library. + _LT_AC_TAGVAR(allow_undefined_flag, $1)='-berok' + # Determine the default libpath from the value encoded in an empty executable. + _LT_AC_SYS_LIBPATH_AIX + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" + + _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" + else + if test "$host_cpu" = ia64; then + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib' + _LT_AC_TAGVAR(allow_undefined_flag, $1)="-z nodefs" + _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" + else + # Determine the default libpath from the value encoded in an empty executable. + _LT_AC_SYS_LIBPATH_AIX + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" + # Warning - without using the other run time loading flags, + # -berok will link without error, but may produce a broken library. + _LT_AC_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok' + _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok' + # Exported symbols can be pulled into shared objects from archives + _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='$convenience' + _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=yes + # This is similar to how AIX traditionally builds its shared libraries. + _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' + fi + fi + ;; + + beos*) + if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported + # Joseph Beckenbach says some releases of gcc + # support --undefined. This deserves some investigation. FIXME + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + else + _LT_AC_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + chorus*) + case $cc_basename in + *) + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + + cygwin* | mingw* | pw32*) + # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, + # as there is no search path for DLLs. + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported + _LT_AC_TAGVAR(always_export_symbols, $1)=no + _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + + if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + # If the export-symbols file already is a .def file (1st line + # is EXPORTS), use it as is; otherwise, prepend... + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then + cp $export_symbols $output_objdir/$soname.def; + else + echo EXPORTS > $output_objdir/$soname.def; + cat $export_symbols >> $output_objdir/$soname.def; + fi~ + $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + else + _LT_AC_TAGVAR(ld_shlibs, $1)=no + fi + ;; + darwin* | rhapsody*) + case $host_os in + rhapsody* | darwin1.[[012]]) + _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-undefined ${wl}suppress' + ;; + *) # Darwin 1.3 on + if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then + _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' + else + case ${MACOSX_DEPLOYMENT_TARGET} in + 10.[[012]]) + _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' + ;; + 10.*) + _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-undefined ${wl}dynamic_lookup' + ;; + esac + fi + ;; + esac + _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_AC_TAGVAR(hardcode_direct, $1)=no + _LT_AC_TAGVAR(hardcode_automatic, $1)=yes + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=unsupported + _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='' + _LT_AC_TAGVAR(link_all_deplibs, $1)=yes + + if test "$GXX" = yes ; then + lt_int_apple_cc_single_mod=no + output_verbose_link_cmd='echo' + if $CC -dumpspecs 2>&1 | $EGREP 'single_module' >/dev/null ; then + lt_int_apple_cc_single_mod=yes + fi + if test "X$lt_int_apple_cc_single_mod" = Xyes ; then + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring' + else + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -r -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring' + fi + _LT_AC_TAGVAR(module_cmds, $1)='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' + # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds + if test "X$lt_int_apple_cc_single_mod" = Xyes ; then + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + else + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -r -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + fi + _LT_AC_TAGVAR(module_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + else + case $cc_basename in + xlc*) + output_verbose_link_cmd='echo' + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj ${wl}-single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $verstring' + _LT_AC_TAGVAR(module_cmds, $1)='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' + # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj ${wl}-single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + _LT_AC_TAGVAR(module_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + ;; + *) + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + esac + fi + ;; + + dgux*) + case $cc_basename in + ec++*) + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + ghcx*) + # Green Hills C++ Compiler + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + *) + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + freebsd[[12]]*) + # C++ shared libraries reported to be fairly broken before switch to ELF + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + freebsd-elf*) + _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no + ;; + freebsd* | dragonfly*) + # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF + # conventions + _LT_AC_TAGVAR(ld_shlibs, $1)=yes + ;; + gnu*) + ;; + hpux9*) + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, + # but as the default + # location of the library. + + case $cc_basename in + CC*) + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + aCC*) + _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | grep "[[-]]L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' + ;; + *) + if test "$GXX" = yes; then + _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/$soname~$CC -shared -nostdlib -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + else + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + ;; + hpux10*|hpux11*) + if test $with_gnu_ld = no; then + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: + + case $host_cpu in + hppa*64*|ia64*) + _LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='+b $libdir' + ;; + *) + _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + ;; + esac + fi + case $host_cpu in + hppa*64*|ia64*) + _LT_AC_TAGVAR(hardcode_direct, $1)=no + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + *) + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, + # but as the default + # location of the library. + ;; + esac + + case $cc_basename in + CC*) + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + aCC*) + case $host_cpu in + hppa*64*) + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + ia64*) + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + *) + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + esac + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | grep "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' + ;; + *) + if test "$GXX" = yes; then + if test $with_gnu_ld = no; then + case $host_cpu in + hppa*64*) + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + ia64*) + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + *) + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + esac + fi + else + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + ;; + interix3*) + _LT_AC_TAGVAR(hardcode_direct, $1)=no + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. + # Instead, shared libraries are loaded at an image base (0x10000000 by + # default) and relocated if they conflict, which is a slow very memory + # consuming and fragmenting process. To avoid this, we pick a random, + # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link + # time. Moving up from 0x10000000 also allows more sbrk(2) space. + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + ;; + irix5* | irix6*) + case $cc_basename in + CC*) + # SGI C++ + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' + + # Archives containing C++ object files must be created using + # "CC -ar", where "CC" is the IRIX C++ compiler. This is + # necessary to make sure instantiated templates are included + # in the archive. + _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -ar -WR,-u -o $oldlib $oldobjs' + ;; + *) + if test "$GXX" = yes; then + if test "$with_gnu_ld" = no; then + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + else + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` -o $lib' + fi + fi + _LT_AC_TAGVAR(link_all_deplibs, $1)=yes + ;; + esac + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: + ;; + linux* | k*bsd*-gnu) + case $cc_basename in + KCC*) + # Kuck and Associates, Inc. (KAI) C++ Compiler + + # KCC will only create a shared library if the output file + # ends with ".so" (or ".sl" for HP-UX), so rename the library + # to its proper name (with version) after linking. + _LT_AC_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib' + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | grep "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' + + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath,$libdir' + _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' + + # Archives containing C++ object files must be created using + # "CC -Bstatic", where "CC" is the KAI C++ compiler. + _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' + ;; + icpc*) + # Intel C++ + with_gnu_ld=yes + # version 8.0 and above of icpc choke on multiply defined symbols + # if we add $predep_objects and $postdep_objects, however 7.1 and + # earlier do not add the objects themselves. + case `$CC -V 2>&1` in + *"Version 7."*) + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + ;; + *) # Version 8.0 or newer + tmp_idyn= + case $host_cpu in + ia64*) tmp_idyn=' -i_dynamic';; + esac + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + ;; + esac + _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' + _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' + ;; + pgCC*) + # Portland Group C++ compiler + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' + + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir' + _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' + _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive' + ;; + cxx*) + # Compaq C++ + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib ${wl}-retain-symbols-file $wl$export_symbols' + + runpath_var=LD_RUN_PATH + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' + ;; + esac + ;; + lynxos*) + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + m88k*) + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + mvs*) + case $cc_basename in + cxx*) + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + *) + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + netbsd* | netbsdelf*-gnu) + if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags' + wlarc= + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + fi + # Workaround some broken pre-1.5 toolchains + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"' + ;; + openbsd2*) + # C++ shared libraries are fairly broken + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + openbsd*) + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib' + _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + _LT_AC_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + fi + output_verbose_link_cmd='echo' + ;; + osf3*) + case $cc_basename in + KCC*) + # Kuck and Associates, Inc. (KAI) C++ Compiler + + # KCC will only create a shared library if the output file + # ends with ".so" (or ".sl" for HP-UX), so rename the library + # to its proper name (with version) after linking. + _LT_AC_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' + + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: + + # Archives containing C++ object files must be created using + # "CC -Bstatic", where "CC" is the KAI C++ compiler. + _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' + + ;; + RCC*) + # Rational C++ 2.4.1 + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + cxx*) + _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && echo ${wl}-set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' + + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld" | grep -v "ld:"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' + ;; + *) + if test "$GXX" = yes && test "$with_gnu_ld" = no; then + _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"' + + else + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + ;; + osf4* | osf5*) + case $cc_basename in + KCC*) + # Kuck and Associates, Inc. (KAI) C++ Compiler + + # KCC will only create a shared library if the output file + # ends with ".so" (or ".sl" for HP-UX), so rename the library + # to its proper name (with version) after linking. + _LT_AC_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' + + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: + + # Archives containing C++ object files must be created using + # the KAI C++ compiler. + _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -o $oldlib $oldobjs' + ;; + RCC*) + # Rational C++ 2.4.1 + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + cxx*) + _LT_AC_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~ + echo "-hidden">> $lib.exp~ + $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname -Wl,-input -Wl,$lib.exp `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib~ + $rm $lib.exp' + + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld" | grep -v "ld:"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' + ;; + *) + if test "$GXX" = yes && test "$with_gnu_ld" = no; then + _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"' + + else + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + ;; + psos*) + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + sunos4*) + case $cc_basename in + CC*) + # Sun C++ 4.x + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + lcc*) + # Lucid + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + *) + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + solaris*) + case $cc_basename in + CC*) + # Sun C++ 4.2, 5.x and Centerline C++ + _LT_AC_TAGVAR(archive_cmds_need_lc,$1)=yes + _LT_AC_TAGVAR(no_undefined_flag, $1)=' -zdefs' + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ + $CC -G${allow_undefined_flag} ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp' + + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + case $host_os in + solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; + *) + # The C++ compiler is used as linker so we must use $wl + # flag to pass the commands to the underlying system + # linker. We must also pass each convience library through + # to the system linker between allextract/defaultextract. + # The C++ compiler will combine linker options so we + # cannot just pass the convience library names through + # without $wl. + # Supported since Solaris 2.6 (maybe 2.5.1?) + _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}-z ${wl}defaultextract' + ;; + esac + _LT_AC_TAGVAR(link_all_deplibs, $1)=yes + + output_verbose_link_cmd='echo' + + # Archives containing C++ object files must be created using + # "CC -xar", where "CC" is the Sun C++ compiler. This is + # necessary to make sure instantiated templates are included + # in the archive. + _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' + ;; + gcx*) + # Green Hills C++ Compiler + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' + + # The C++ compiler must be used to create the archive. + _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC $LDFLAGS -archive -o $oldlib $oldobjs' + ;; + *) + # GNU C++ compiler with Solaris linker + if test "$GXX" = yes && test "$with_gnu_ld" = no; then + _LT_AC_TAGVAR(no_undefined_flag, $1)=' ${wl}-z ${wl}defs' + if $CC --version | grep -v '^2\.7' > /dev/null; then + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ + $CC -shared -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp' + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd="$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep \"\-L\"" + else + # g++ 2.7 appears to require `-G' NOT `-shared' on this + # platform. + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ + $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp' + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd="$CC -G $CFLAGS -v conftest.$objext 2>&1 | grep \"\-L\"" + fi + + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $wl$libdir' + fi + ;; + esac + ;; + sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) + _LT_AC_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' + _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + runpath_var='LD_RUN_PATH' + + case $cc_basename in + CC*) + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + ;; + sysv5* | sco3.2v5* | sco5v6*) + # Note: We can NOT use -z defs as we might desire, because we do not + # link with -lc, and that would cause any symbols used from libc to + # always be unresolved, which means just about no library would + # ever link correctly. If we're not using GNU ld we use -z text + # though, which does catch some bad symbols but isn't as heavy-handed + # as -z defs. + # For security reasons, it is highly recommended that you always + # use absolute paths for naming shared libraries, and exclude the + # DT_RUNPATH tag from executables and libraries. But doing so + # requires that you compile everything twice, which is a pain. + # So that behaviour is only enabled if SCOABSPATH is set to a + # non-empty value in the environment. Most likely only useful for + # creating official distributions of packages. + # This is a hack until libtool officially supports absolute path + # names for shared libraries. + _LT_AC_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' + _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs' + _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=':' + _LT_AC_TAGVAR(link_all_deplibs, $1)=yes + _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport' + runpath_var='LD_RUN_PATH' + + case $cc_basename in + CC*) + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + ;; + tandem*) + case $cc_basename in + NCC*) + # NonStop-UX NCC 3.20 + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + *) + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + vxworks*) + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + *) + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; +esac +AC_MSG_RESULT([$_LT_AC_TAGVAR(ld_shlibs, $1)]) +test "$_LT_AC_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no + +_LT_AC_TAGVAR(GCC, $1)="$GXX" +_LT_AC_TAGVAR(LD, $1)="$LD" + +## CAVEAT EMPTOR: +## There is no encapsulation within the following macros, do not change +## the running order or otherwise move them around unless you know exactly +## what you are doing... +AC_LIBTOOL_POSTDEP_PREDEP($1) +AC_LIBTOOL_PROG_COMPILER_PIC($1) +AC_LIBTOOL_PROG_CC_C_O($1) +AC_LIBTOOL_SYS_HARD_LINK_LOCKS($1) +AC_LIBTOOL_PROG_LD_SHLIBS($1) +AC_LIBTOOL_SYS_DYNAMIC_LINKER($1) +AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH($1) + +AC_LIBTOOL_CONFIG($1) + +AC_LANG_POP +CC=$lt_save_CC +LDCXX=$LD +LD=$lt_save_LD +GCC=$lt_save_GCC +with_gnu_ldcxx=$with_gnu_ld +with_gnu_ld=$lt_save_with_gnu_ld +lt_cv_path_LDCXX=$lt_cv_path_LD +lt_cv_path_LD=$lt_save_path_LD +lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld +lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld +])# AC_LIBTOOL_LANG_CXX_CONFIG + +# AC_LIBTOOL_POSTDEP_PREDEP([TAGNAME]) +# ------------------------------------ +# Figure out "hidden" library dependencies from verbose +# compiler output when linking a shared library. +# Parse the compiler output and extract the necessary +# objects, libraries and library flags. +AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP],[ +dnl we can't use the lt_simple_compile_test_code here, +dnl because it contains code intended for an executable, +dnl not a library. It's possible we should let each +dnl tag define a new lt_????_link_test_code variable, +dnl but it's only used here... +ifelse([$1],[],[cat > conftest.$ac_ext < conftest.$ac_ext < conftest.$ac_ext < conftest.$ac_ext <> "$cfgfile" +ifelse([$1], [], +[#! $SHELL + +# `$echo "$cfgfile" | sed 's%^.*/%%'` - Provide generalized library-building support services. +# Generated automatically by $PROGRAM (GNU $PACKAGE $VERSION$TIMESTAMP) +# NOTE: Changes made to this file will be lost: look at ltmain.sh. +# +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001 +# Free Software Foundation, Inc. +# +# This file is part of GNU Libtool: +# Originally by Gordon Matzigkeit , 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 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, 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. + +# A sed program that does not truncate output. +SED=$lt_SED + +# Sed that helps us avoid accidentally triggering echo(1) options like -n. +Xsed="$SED -e 1s/^X//" + +# The HP-UX ksh and POSIX shell print the target directory to stdout +# if CDPATH is set. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +# The names of the tagged configurations supported by this script. +available_tags= + +# ### BEGIN LIBTOOL CONFIG], +[# ### BEGIN LIBTOOL TAG CONFIG: $tagname]) + +# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: + +# Shell to use when invoking shell scripts. +SHELL=$lt_SHELL + +# Whether or not to build shared libraries. +build_libtool_libs=$enable_shared + +# Whether or not to build static libraries. +build_old_libs=$enable_static + +# Whether or not to add -lc for building shared libraries. +build_libtool_need_lc=$_LT_AC_TAGVAR(archive_cmds_need_lc, $1) + +# Whether or not to disallow shared libs when runtime libs are static +allow_libtool_libs_with_static_runtimes=$_LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1) + +# Whether or not to optimize for fast installation. +fast_install=$enable_fast_install + +# The host system. +host_alias=$host_alias +host=$host +host_os=$host_os + +# The build system. +build_alias=$build_alias +build=$build +build_os=$build_os + +# An echo program that does not interpret backslashes. +echo=$lt_echo + +# The archiver. +AR=$lt_AR +AR_FLAGS=$lt_AR_FLAGS + +# A C compiler. +LTCC=$lt_LTCC + +# LTCC compiler flags. +LTCFLAGS=$lt_LTCFLAGS + +# A language-specific compiler. +CC=$lt_[]_LT_AC_TAGVAR(compiler, $1) + +# Is the compiler the GNU C compiler? +with_gcc=$_LT_AC_TAGVAR(GCC, $1) + +# An ERE matcher. +EGREP=$lt_EGREP + +# The linker used to build libraries. +LD=$lt_[]_LT_AC_TAGVAR(LD, $1) + +# Whether we need hard or soft links. +LN_S=$lt_LN_S + +# A BSD-compatible nm program. +NM=$lt_NM + +# A symbol stripping program +STRIP=$lt_STRIP + +# Used to examine libraries when file_magic_cmd begins "file" +MAGIC_CMD=$MAGIC_CMD + +# Used on cygwin: DLL creation program. +DLLTOOL="$DLLTOOL" + +# Used on cygwin: object dumper. +OBJDUMP="$OBJDUMP" + +# Used on cygwin: assembler. +AS="$AS" + +# The name of the directory that contains temporary libtool files. +objdir=$objdir + +# How to create reloadable object files. +reload_flag=$lt_reload_flag +reload_cmds=$lt_reload_cmds + +# How to pass a linker flag through the compiler. +wl=$lt_[]_LT_AC_TAGVAR(lt_prog_compiler_wl, $1) + +# Object file suffix (normally "o"). +objext="$ac_objext" + +# Old archive suffix (normally "a"). +libext="$libext" + +# Shared library suffix (normally ".so"). +shrext_cmds='$shrext_cmds' + +# Executable file suffix (normally ""). +exeext="$exeext" + +# Additional compiler flags for building library objects. +pic_flag=$lt_[]_LT_AC_TAGVAR(lt_prog_compiler_pic, $1) +pic_mode=$pic_mode + +# What is the maximum length of a command? +max_cmd_len=$lt_cv_sys_max_cmd_len + +# Does compiler simultaneously support -c and -o options? +compiler_c_o=$lt_[]_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1) + +# Must we lock files when doing compilation? +need_locks=$lt_need_locks + +# Do we need the lib prefix for modules? +need_lib_prefix=$need_lib_prefix + +# Do we need a version for libraries? +need_version=$need_version + +# Whether dlopen is supported. +dlopen_support=$enable_dlopen + +# Whether dlopen of programs is supported. +dlopen_self=$enable_dlopen_self + +# Whether dlopen of statically linked programs is supported. +dlopen_self_static=$enable_dlopen_self_static + +# Compiler flag to prevent dynamic linking. +link_static_flag=$lt_[]_LT_AC_TAGVAR(lt_prog_compiler_static, $1) + +# Compiler flag to turn off builtin functions. +no_builtin_flag=$lt_[]_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) + +# Compiler flag to allow reflexive dlopens. +export_dynamic_flag_spec=$lt_[]_LT_AC_TAGVAR(export_dynamic_flag_spec, $1) + +# Compiler flag to generate shared objects directly from archives. +whole_archive_flag_spec=$lt_[]_LT_AC_TAGVAR(whole_archive_flag_spec, $1) + +# Compiler flag to generate thread-safe objects. +thread_safe_flag_spec=$lt_[]_LT_AC_TAGVAR(thread_safe_flag_spec, $1) + +# Library versioning type. +version_type=$version_type + +# Format of library name prefix. +libname_spec=$lt_libname_spec + +# List of archive names. First name is the real one, the rest are links. +# The last name is the one that the linker finds with -lNAME. +library_names_spec=$lt_library_names_spec + +# The coded name of the library, if different from the real name. +soname_spec=$lt_soname_spec + +# Commands used to build and install an old-style archive. +RANLIB=$lt_RANLIB +old_archive_cmds=$lt_[]_LT_AC_TAGVAR(old_archive_cmds, $1) +old_postinstall_cmds=$lt_old_postinstall_cmds +old_postuninstall_cmds=$lt_old_postuninstall_cmds + +# Create an old-style archive from a shared archive. +old_archive_from_new_cmds=$lt_[]_LT_AC_TAGVAR(old_archive_from_new_cmds, $1) + +# Create a temporary old-style archive to link instead of a shared archive. +old_archive_from_expsyms_cmds=$lt_[]_LT_AC_TAGVAR(old_archive_from_expsyms_cmds, $1) + +# Commands used to build and install a shared archive. +archive_cmds=$lt_[]_LT_AC_TAGVAR(archive_cmds, $1) +archive_expsym_cmds=$lt_[]_LT_AC_TAGVAR(archive_expsym_cmds, $1) +postinstall_cmds=$lt_postinstall_cmds +postuninstall_cmds=$lt_postuninstall_cmds + +# Commands used to build a loadable module (assumed same as above if empty) +module_cmds=$lt_[]_LT_AC_TAGVAR(module_cmds, $1) +module_expsym_cmds=$lt_[]_LT_AC_TAGVAR(module_expsym_cmds, $1) + +# Commands to strip libraries. +old_striplib=$lt_old_striplib +striplib=$lt_striplib + +# Dependencies to place before the objects being linked to create a +# shared library. +predep_objects=$lt_[]_LT_AC_TAGVAR(predep_objects, $1) + +# Dependencies to place after the objects being linked to create a +# shared library. +postdep_objects=$lt_[]_LT_AC_TAGVAR(postdep_objects, $1) + +# Dependencies to place before the objects being linked to create a +# shared library. +predeps=$lt_[]_LT_AC_TAGVAR(predeps, $1) + +# Dependencies to place after the objects being linked to create a +# shared library. +postdeps=$lt_[]_LT_AC_TAGVAR(postdeps, $1) + +# The library search path used internally by the compiler when linking +# a shared library. +compiler_lib_search_path=$lt_[]_LT_AC_TAGVAR(compiler_lib_search_path, $1) + +# Method to check whether dependent libraries are shared objects. +deplibs_check_method=$lt_deplibs_check_method + +# Command to use when deplibs_check_method == file_magic. +file_magic_cmd=$lt_file_magic_cmd + +# Flag that allows shared libraries with undefined symbols to be built. +allow_undefined_flag=$lt_[]_LT_AC_TAGVAR(allow_undefined_flag, $1) + +# Flag that forces no undefined symbols. +no_undefined_flag=$lt_[]_LT_AC_TAGVAR(no_undefined_flag, $1) + +# Commands used to finish a libtool library installation in a directory. +finish_cmds=$lt_finish_cmds + +# Same as above, but a single script fragment to be evaled but not shown. +finish_eval=$lt_finish_eval + +# Take the output of nm and produce a listing of raw symbols and C names. +global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe + +# Transform the output of nm in a proper C declaration +global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl + +# Transform the output of nm in a C name address pair +global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address + +# This is the shared library runtime path variable. +runpath_var=$runpath_var + +# This is the shared library path variable. +shlibpath_var=$shlibpath_var + +# Is shlibpath searched before the hard-coded library search path? +shlibpath_overrides_runpath=$shlibpath_overrides_runpath + +# How to hardcode a shared library path into an executable. +hardcode_action=$_LT_AC_TAGVAR(hardcode_action, $1) + +# Whether we should hardcode library paths into libraries. +hardcode_into_libs=$hardcode_into_libs + +# Flag to hardcode \$libdir into a binary during linking. +# This must work even if \$libdir does not exist. +hardcode_libdir_flag_spec=$lt_[]_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1) + +# If ld is used when linking, flag to hardcode \$libdir into +# a binary during linking. This must work even if \$libdir does +# not exist. +hardcode_libdir_flag_spec_ld=$lt_[]_LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1) + +# Whether we need a single -rpath flag with a separated argument. +hardcode_libdir_separator=$lt_[]_LT_AC_TAGVAR(hardcode_libdir_separator, $1) + +# Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the +# resulting binary. +hardcode_direct=$_LT_AC_TAGVAR(hardcode_direct, $1) + +# Set to yes if using the -LDIR flag during linking hardcodes DIR into the +# resulting binary. +hardcode_minus_L=$_LT_AC_TAGVAR(hardcode_minus_L, $1) + +# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into +# the resulting binary. +hardcode_shlibpath_var=$_LT_AC_TAGVAR(hardcode_shlibpath_var, $1) + +# Set to yes if building a shared library automatically hardcodes DIR into the library +# and all subsequent libraries and executables linked against it. +hardcode_automatic=$_LT_AC_TAGVAR(hardcode_automatic, $1) + +# Variables whose values should be saved in libtool wrapper scripts and +# restored at relink time. +variables_saved_for_relink="$variables_saved_for_relink" + +# Whether libtool must link a program against all its dependency libraries. +link_all_deplibs=$_LT_AC_TAGVAR(link_all_deplibs, $1) + +# Compile-time system search path for libraries +sys_lib_search_path_spec=$lt_sys_lib_search_path_spec + +# Run-time system search path for libraries +sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec + +# Fix the shell variable \$srcfile for the compiler. +fix_srcfile_path="$_LT_AC_TAGVAR(fix_srcfile_path, $1)" + +# Set to yes if exported symbols are required. +always_export_symbols=$_LT_AC_TAGVAR(always_export_symbols, $1) + +# The commands to list exported symbols. +export_symbols_cmds=$lt_[]_LT_AC_TAGVAR(export_symbols_cmds, $1) + +# The commands to extract the exported symbol list from a shared archive. +extract_expsyms_cmds=$lt_extract_expsyms_cmds + +# Symbols that should not be listed in the preloaded symbols. +exclude_expsyms=$lt_[]_LT_AC_TAGVAR(exclude_expsyms, $1) + +# Symbols that must always be exported. +include_expsyms=$lt_[]_LT_AC_TAGVAR(include_expsyms, $1) + +ifelse([$1],[], +[# ### END LIBTOOL CONFIG], +[# ### END LIBTOOL TAG CONFIG: $tagname]) + +__EOF__ + +ifelse([$1],[], [ + case $host_os in + aix3*) + cat <<\EOF >> "$cfgfile" + +# AIX sometimes has problems with the GCC collect2 program. For some +# reason, if we set the COLLECT_NAMES environment variable, the problems +# vanish in a puff of smoke. +if test "X${COLLECT_NAMES+set}" != Xset; then + COLLECT_NAMES= + export COLLECT_NAMES +fi +EOF + ;; + esac + + # We use sed instead of cat because bash on DJGPP gets confused if + # if finds mixed CR/LF and LF-only lines. Since sed operates in + # text mode, it properly converts lines to CR/LF. This bash problem + # is reportedly fixed, but why not run on old versions too? + sed '$q' "$ltmain" >> "$cfgfile" || (rm -f "$cfgfile"; exit 1) + + mv -f "$cfgfile" "$ofile" || \ + (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") + chmod +x "$ofile" +]) +else + # If there is no Makefile yet, we rely on a make rule to execute + # `config.status --recheck' to rerun these tests and create the + # libtool script then. + ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'` + if test -f "$ltmain_in"; then + test -f Makefile && make "$ltmain" + fi +fi +])# AC_LIBTOOL_CONFIG + + +# AC_LIBTOOL_PROG_COMPILER_NO_RTTI([TAGNAME]) +# ------------------------------------------- +AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI], +[AC_REQUIRE([_LT_AC_SYS_COMPILER])dnl + +_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= + +if test "$GCC" = yes; then + _LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' + + AC_LIBTOOL_COMPILER_OPTION([if $compiler supports -fno-rtti -fno-exceptions], + lt_cv_prog_compiler_rtti_exceptions, + [-fno-rtti -fno-exceptions], [], + [_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)="$_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) -fno-rtti -fno-exceptions"]) +fi +])# AC_LIBTOOL_PROG_COMPILER_NO_RTTI + + +# AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE +# --------------------------------- +AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE], +[AC_REQUIRE([AC_CANONICAL_HOST]) +AC_REQUIRE([AC_PROG_NM]) +AC_REQUIRE([AC_OBJEXT]) +# Check for command to grab the raw symbol name followed by C symbol from nm. +AC_MSG_CHECKING([command to parse $NM output from $compiler object]) +AC_CACHE_VAL([lt_cv_sys_global_symbol_pipe], +[ +# These are sane defaults that work on at least a few old systems. +# [They come from Ultrix. What could be older than Ultrix?!! ;)] + +# Character class describing NM global symbol codes. +symcode='[[BCDEGRST]]' + +# Regexp to match symbols that can be accessed directly from C. +sympat='\([[_A-Za-z]][[_A-Za-z0-9]]*\)' + +# Transform an extracted symbol line into a proper C declaration +lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^. .* \(.*\)$/extern int \1;/p'" + +# Transform an extracted symbol line into symbol name and symbol address +lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\) $/ {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode \([[^ ]]*\) \([[^ ]]*\)$/ {\"\2\", (lt_ptr) \&\2},/p'" + +# Define system-specific variables. +case $host_os in +aix*) + symcode='[[BCDT]]' + ;; +cygwin* | mingw* | pw32*) + symcode='[[ABCDGISTW]]' + ;; +hpux*) # Its linker distinguishes data from code symbols + if test "$host_cpu" = ia64; then + symcode='[[ABCDEGRST]]' + fi + lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" + lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\) $/ {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"\2\", (lt_ptr) \&\2},/p'" + ;; +linux* | k*bsd*-gnu) + if test "$host_cpu" = ia64; then + symcode='[[ABCDGIRSTW]]' + lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" + lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\) $/ {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"\2\", (lt_ptr) \&\2},/p'" + fi + ;; +irix* | nonstopux*) + symcode='[[BCDEGRST]]' + ;; +osf*) + symcode='[[BCDEGQRST]]' + ;; +solaris*) + symcode='[[BDRT]]' + ;; +sco3.2v5*) + symcode='[[DT]]' + ;; +sysv4.2uw2*) + symcode='[[DT]]' + ;; +sysv5* | sco5v6* | unixware* | OpenUNIX*) + symcode='[[ABDT]]' + ;; +sysv4) + symcode='[[DFNSTU]]' + ;; +esac + +# Handle CRLF in mingw tool chain +opt_cr= +case $build_os in +mingw*) + opt_cr=`echo 'x\{0,1\}' | tr x '\015'` # option cr in regexp + ;; +esac + +# If we're using GNU nm, then use its standard symbol codes. +case `$NM -V 2>&1` in +*GNU* | *'with BFD'*) + symcode='[[ABCDGIRSTW]]' ;; +esac + +# Try without a prefix undercore, then with it. +for ac_symprfx in "" "_"; do + + # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. + symxfrm="\\1 $ac_symprfx\\2 \\2" + + # Write the raw and C identifiers. + lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[ ]]\($symcode$symcode*\)[[ ]][[ ]]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" + + # Check to see that the pipe works correctly. + pipe_works=no + + rm -f conftest* + cat > conftest.$ac_ext < $nlist) && test -s "$nlist"; then + # Try sorting and uniquifying the output. + if sort "$nlist" | uniq > "$nlist"T; then + mv -f "$nlist"T "$nlist" + else + rm -f "$nlist"T + fi + + # Make sure that we snagged all the symbols we need. + if grep ' nm_test_var$' "$nlist" >/dev/null; then + if grep ' nm_test_func$' "$nlist" >/dev/null; then + cat < conftest.$ac_ext +#ifdef __cplusplus +extern "C" { +#endif + +EOF + # Now generate the symbol file. + eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | grep -v main >> conftest.$ac_ext' + + cat <> conftest.$ac_ext +#if defined (__STDC__) && __STDC__ +# define lt_ptr_t void * +#else +# define lt_ptr_t char * +# define const +#endif + +/* The mapping between symbol names and symbols. */ +const struct { + const char *name; + lt_ptr_t address; +} +lt_preloaded_symbols[[]] = +{ +EOF + $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (lt_ptr_t) \&\2},/" < "$nlist" | grep -v main >> conftest.$ac_ext + cat <<\EOF >> conftest.$ac_ext + {0, (lt_ptr_t) 0} +}; + +#ifdef __cplusplus +} +#endif +EOF + # Now try linking the two files. + mv conftest.$ac_objext conftstm.$ac_objext + lt_save_LIBS="$LIBS" + lt_save_CFLAGS="$CFLAGS" + LIBS="conftstm.$ac_objext" + CFLAGS="$CFLAGS$_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)" + if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext}; then + pipe_works=yes + fi + LIBS="$lt_save_LIBS" + CFLAGS="$lt_save_CFLAGS" + else + echo "cannot find nm_test_func in $nlist" >&AS_MESSAGE_LOG_FD + fi + else + echo "cannot find nm_test_var in $nlist" >&AS_MESSAGE_LOG_FD + fi + else + echo "cannot run $lt_cv_sys_global_symbol_pipe" >&AS_MESSAGE_LOG_FD + fi + else + echo "$progname: failed program was:" >&AS_MESSAGE_LOG_FD + cat conftest.$ac_ext >&5 + fi + rm -f conftest* conftst* + + # Do not use the global_symbol_pipe unless it works. + if test "$pipe_works" = yes; then + break + else + lt_cv_sys_global_symbol_pipe= + fi +done +]) +if test -z "$lt_cv_sys_global_symbol_pipe"; then + lt_cv_sys_global_symbol_to_cdecl= +fi +if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then + AC_MSG_RESULT(failed) +else + AC_MSG_RESULT(ok) +fi +]) # AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE + + +# AC_LIBTOOL_PROG_COMPILER_PIC([TAGNAME]) +# --------------------------------------- +AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC], +[_LT_AC_TAGVAR(lt_prog_compiler_wl, $1)= +_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)= +_LT_AC_TAGVAR(lt_prog_compiler_static, $1)= + +AC_MSG_CHECKING([for $compiler option to produce PIC]) + ifelse([$1],[CXX],[ + # C++ specific cases for pic, static, wl, etc. + if test "$GXX" = yes; then + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-static' + + case $host_os in + aix*) + # All AIX code is PIC. + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + fi + ;; + amigaos*) + # FIXME: we need at least 68020 code to build shared libraries, but + # adding the `-m68020' flag to GCC prevents building anything better, + # like `-m68040'. + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' + ;; + beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) + # PIC is the default for these OSes. + ;; + mingw* | os2* | pw32*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT' + ;; + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' + ;; + *djgpp*) + # DJGPP does not support shared libraries at all + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)= + ;; + interix3*) + # Interix 3.x gcc -fpic/-fPIC options generate broken code. + # Instead, we relocate shared libraries at runtime. + ;; + sysv4*MP*) + if test -d /usr/nec; then + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic + fi + ;; + hpux*) + # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but + # not for PA HP-UX. + case $host_cpu in + hppa*64*|ia64*) + ;; + *) + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + esac + ;; + *) + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + esac + else + case $host_os in + aix4* | aix5*) + # All AIX code is PIC. + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + else + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' + fi + ;; + chorus*) + case $cc_basename in + cxch68*) + # Green Hills C++ Compiler + # _LT_AC_TAGVAR(lt_prog_compiler_static, $1)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a" + ;; + esac + ;; + darwin*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + case $cc_basename in + xlc*) + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-qnocommon' + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + ;; + esac + ;; + dgux*) + case $cc_basename in + ec++*) + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + ;; + ghcx*) + # Green Hills C++ Compiler + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + ;; + *) + ;; + esac + ;; + freebsd* | dragonfly*) + # FreeBSD uses GNU C++ + ;; + hpux9* | hpux10* | hpux11*) + case $cc_basename in + CC*) + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' + if test "$host_cpu" != ia64; then + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='+Z' + fi + ;; + aCC*) + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' + case $host_cpu in + hppa*64*|ia64*) + # +Z the default + ;; + *) + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='+Z' + ;; + esac + ;; + *) + ;; + esac + ;; + interix*) + # This is c89, which is MS Visual C++ (no shared libs) + # Anyone wants to do a port? + ;; + irix5* | irix6* | nonstopux*) + case $cc_basename in + CC*) + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + # CC pic flag -KPIC is the default. + ;; + *) + ;; + esac + ;; + linux* | k*bsd*-gnu) + case $cc_basename in + KCC*) + # KAI C++ Compiler + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + icpc* | ecpc*) + # Intel C++ + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-static' + ;; + pgCC*) + # Portland Group C++ compiler. + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + cxx*) + # Compaq C++ + # Make sure the PIC flag is empty. It appears that all Alpha + # Linux and Compaq Tru64 Unix objects are PIC. + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)= + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + *) + ;; + esac + ;; + lynxos*) + ;; + m88k*) + ;; + mvs*) + case $cc_basename in + cxx*) + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-W c,exportall' + ;; + *) + ;; + esac + ;; + netbsd* | netbsdelf*-gnu) + ;; + osf3* | osf4* | osf5*) + case $cc_basename in + KCC*) + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' + ;; + RCC*) + # Rational C++ 2.4.1 + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + ;; + cxx*) + # Digital/Compaq C++ + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + # Make sure the PIC flag is empty. It appears that all Alpha + # Linux and Compaq Tru64 Unix objects are PIC. + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)= + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + *) + ;; + esac + ;; + psos*) + ;; + solaris*) + case $cc_basename in + CC*) + # Sun C++ 4.2, 5.x and Centerline C++ + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' + ;; + gcx*) + # Green Hills C++ Compiler + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' + ;; + *) + ;; + esac + ;; + sunos4*) + case $cc_basename in + CC*) + # Sun C++ 4.x + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + lcc*) + # Lucid + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + ;; + *) + ;; + esac + ;; + tandem*) + case $cc_basename in + NCC*) + # NonStop-UX NCC 3.20 + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + ;; + *) + ;; + esac + ;; + sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) + case $cc_basename in + CC*) + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + esac + ;; + vxworks*) + ;; + *) + _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no + ;; + esac + fi +], +[ + if test "$GCC" = yes; then + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-static' + + case $host_os in + aix*) + # All AIX code is PIC. + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + fi + ;; + + amigaos*) + # FIXME: we need at least 68020 code to build shared libraries, but + # adding the `-m68020' flag to GCC prevents building anything better, + # like `-m68040'. + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' + ;; + + beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) + # PIC is the default for these OSes. + ;; + + mingw* | pw32* | os2*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT' + ;; + + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' + ;; + + interix3*) + # Interix 3.x gcc -fpic/-fPIC options generate broken code. + # Instead, we relocate shared libraries at runtime. + ;; + + msdosdjgpp*) + # Just because we use GCC doesn't mean we suddenly get shared libraries + # on systems that don't support them. + _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no + enable_shared=no + ;; + + sysv4*MP*) + if test -d /usr/nec; then + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic + fi + ;; + + hpux*) + # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but + # not for PA HP-UX. + case $host_cpu in + hppa*64*|ia64*) + # +Z the default + ;; + *) + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + esac + ;; + + *) + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + esac + else + # PORTME Check for flag to pass linker flags through the system compiler. + case $host_os in + aix*) + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + else + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' + fi + ;; + darwin*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + case $cc_basename in + xlc*) + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-qnocommon' + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + ;; + esac + ;; + + mingw* | pw32* | os2*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT' + ;; + + hpux9* | hpux10* | hpux11*) + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but + # not for PA HP-UX. + case $host_cpu in + hppa*64*|ia64*) + # +Z the default + ;; + *) + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='+Z' + ;; + esac + # Is there a better lt_prog_compiler_static that works with the bundled CC? + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' + ;; + + irix5* | irix6* | nonstopux*) + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + # PIC (with -KPIC) is the default. + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + + newsos6) + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + linux* | k*bsd*-gnu) + case $cc_basename in + icc* | ecc*) + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-static' + ;; + pgcc* | pgf77* | pgf90* | pgf95*) + # Portland Group compilers (*not* the Pentium gcc compiler, + # which looks to be a dead project) + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + ccc*) + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + # All Alpha code is PIC. + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + esac + ;; + + osf3* | osf4* | osf5*) + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + # All OSF/1 code is PIC. + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + + solaris*) + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + case $cc_basename in + f77* | f90* | f95*) + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ';; + *) + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,';; + esac + ;; + + sunos4*) + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + sysv4 | sysv4.2uw2* | sysv4.3*) + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + sysv4*MP*) + if test -d /usr/nec ;then + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-Kconform_pic' + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + fi + ;; + + sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + unicos*) + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no + ;; + + uts4*) + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + *) + _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no + ;; + esac + fi +]) +AC_MSG_RESULT([$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)]) + +# +# Check to make sure the PIC flag actually works. +# +if test -n "$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)"; then + AC_LIBTOOL_COMPILER_OPTION([if $compiler PIC flag $_LT_AC_TAGVAR(lt_prog_compiler_pic, $1) works], + _LT_AC_TAGVAR(lt_prog_compiler_pic_works, $1), + [$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)ifelse([$1],[],[ -DPIC],[ifelse([$1],[CXX],[ -DPIC],[])])], [], + [case $_LT_AC_TAGVAR(lt_prog_compiler_pic, $1) in + "" | " "*) ;; + *) _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=" $_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)" ;; + esac], + [_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)= + _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no]) +fi +case $host_os in + # For platforms which do not support PIC, -DPIC is meaningless: + *djgpp*) + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)= + ;; + *) + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)="$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)ifelse([$1],[],[ -DPIC],[ifelse([$1],[CXX],[ -DPIC],[])])" + ;; +esac + +# +# Check to make sure the static flag actually works. +# +wl=$_LT_AC_TAGVAR(lt_prog_compiler_wl, $1) eval lt_tmp_static_flag=\"$_LT_AC_TAGVAR(lt_prog_compiler_static, $1)\" +AC_LIBTOOL_LINKER_OPTION([if $compiler static flag $lt_tmp_static_flag works], + _LT_AC_TAGVAR(lt_prog_compiler_static_works, $1), + $lt_tmp_static_flag, + [], + [_LT_AC_TAGVAR(lt_prog_compiler_static, $1)=]) +]) + + +# AC_LIBTOOL_PROG_LD_SHLIBS([TAGNAME]) +# ------------------------------------ +# See if the linker supports building shared libraries. +AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS], +[AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) +ifelse([$1],[CXX],[ + _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + case $host_os in + aix4* | aix5*) + # If we're using GNU nm, then we don't want the "-C" option. + # -C means demangle to AIX nm, but means don't demangle with GNU nm + if $NM -V 2>&1 | grep 'GNU' > /dev/null; then + _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\[$]2 == "T") || (\[$]2 == "D") || (\[$]2 == "B")) && ([substr](\[$]3,1,1) != ".")) { print \[$]3 } }'\'' | sort -u > $export_symbols' + else + _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\[$]2 == "T") || (\[$]2 == "D") || (\[$]2 == "B")) && ([substr](\[$]3,1,1) != ".")) { print \[$]3 } }'\'' | sort -u > $export_symbols' + fi + ;; + pw32*) + _LT_AC_TAGVAR(export_symbols_cmds, $1)="$ltdll_cmds" + ;; + cygwin* | mingw*) + _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]] /s/.* \([[^ ]]*\)/\1 DATA/;/^.* __nm__/s/^.* __nm__\([[^ ]]*\) [[^ ]]*/\1 DATA/;/^I /d;/^[[AITW]] /s/.* //'\'' | sort | uniq > $export_symbols' + ;; + linux* | k*bsd*-gnu) + _LT_AC_TAGVAR(link_all_deplibs, $1)=no + ;; + *) + _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + ;; + esac +],[ + runpath_var= + _LT_AC_TAGVAR(allow_undefined_flag, $1)= + _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=no + _LT_AC_TAGVAR(archive_cmds, $1)= + _LT_AC_TAGVAR(archive_expsym_cmds, $1)= + _LT_AC_TAGVAR(old_archive_From_new_cmds, $1)= + _LT_AC_TAGVAR(old_archive_from_expsyms_cmds, $1)= + _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)= + _LT_AC_TAGVAR(whole_archive_flag_spec, $1)= + _LT_AC_TAGVAR(thread_safe_flag_spec, $1)= + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)= + _LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)= + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)= + _LT_AC_TAGVAR(hardcode_direct, $1)=no + _LT_AC_TAGVAR(hardcode_minus_L, $1)=no + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=unsupported + _LT_AC_TAGVAR(link_all_deplibs, $1)=unknown + _LT_AC_TAGVAR(hardcode_automatic, $1)=no + _LT_AC_TAGVAR(module_cmds, $1)= + _LT_AC_TAGVAR(module_expsym_cmds, $1)= + _LT_AC_TAGVAR(always_export_symbols, $1)=no + _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + # include_expsyms should be a list of space-separated symbols to be *always* + # included in the symbol list + _LT_AC_TAGVAR(include_expsyms, $1)= + # exclude_expsyms can be an extended regexp of symbols to exclude + # it will be wrapped by ` (' and `)$', so one must not match beginning or + # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', + # as well as any symbol that contains `d'. + _LT_AC_TAGVAR(exclude_expsyms, $1)="_GLOBAL_OFFSET_TABLE_" + # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out + # platforms (ab)use it in PIC code, but their linkers get confused if + # the symbol is explicitly referenced. Since portable code cannot + # rely on this symbol name, it's probably fine to never include it in + # preloaded symbol tables. + extract_expsyms_cmds= + # Just being paranoid about ensuring that cc_basename is set. + _LT_CC_BASENAME([$compiler]) + case $host_os in + cygwin* | mingw* | pw32*) + # FIXME: the MSVC++ port hasn't been tested in a loooong time + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + if test "$GCC" != yes; then + with_gnu_ld=no + fi + ;; + interix*) + # we just hope/assume this is gcc and not c89 (= MSVC++) + with_gnu_ld=yes + ;; + openbsd*) + with_gnu_ld=no + ;; + esac + + _LT_AC_TAGVAR(ld_shlibs, $1)=yes + if test "$with_gnu_ld" = yes; then + # If archive_cmds runs LD, not CC, wlarc should be empty + wlarc='${wl}' + + # Set some defaults for GNU ld with shared library support. These + # are reset later if shared libraries are not supported. Putting them + # here allows them to be overridden if necessary. + runpath_var=LD_RUN_PATH + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir' + _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' + # ancient GNU ld didn't support --whole-archive et. al. + if $LD --help 2>&1 | grep 'no-whole-archive' > /dev/null; then + _LT_AC_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + else + _LT_AC_TAGVAR(whole_archive_flag_spec, $1)= + fi + supports_anon_versioning=no + case `$LD -v 2>/dev/null` in + *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.10.*) ;; # catch versions < 2.11 + *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... + *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... + *\ 2.11.*) ;; # other 2.11 versions + *) supports_anon_versioning=yes ;; + esac + + # See if GNU ld supports shared libraries. + case $host_os in + aix3* | aix4* | aix5*) + # On AIX/PPC, the GNU linker is very broken + if test "$host_cpu" != ia64; then + _LT_AC_TAGVAR(ld_shlibs, $1)=no + cat <&2 + +*** Warning: the GNU linker, at least up to release 2.9.1, is reported +*** to be unable to reliably create shared libraries on AIX. +*** Therefore, libtool is disabling shared libraries support. If you +*** really care for shared libraries, you may want to modify your PATH +*** so that a non-GNU linker is found, and then restart. + +EOF + fi + ;; + + amigaos*) + _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes + + # Samuel A. Falvo II reports + # that the semantics of dynamic libraries on AmigaOS, at least up + # to version 4, is to share data among multiple programs linked + # with the same dynamic library. Since this doesn't match the + # behavior of shared libraries on other platforms, we can't use + # them. + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + + beos*) + if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported + # Joseph Beckenbach says some releases of gcc + # support --undefined. This deserves some investigation. FIXME + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + else + _LT_AC_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + cygwin* | mingw* | pw32*) + # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, + # as there is no search path for DLLs. + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported + _LT_AC_TAGVAR(always_export_symbols, $1)=no + _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]] /s/.* \([[^ ]]*\)/\1 DATA/'\'' | $SED -e '\''/^[[AITW]] /s/.* //'\'' | sort | uniq > $export_symbols' + + if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + # If the export-symbols file already is a .def file (1st line + # is EXPORTS), use it as is; otherwise, prepend... + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then + cp $export_symbols $output_objdir/$soname.def; + else + echo EXPORTS > $output_objdir/$soname.def; + cat $export_symbols >> $output_objdir/$soname.def; + fi~ + $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + else + _LT_AC_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + interix3*) + _LT_AC_TAGVAR(hardcode_direct, $1)=no + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. + # Instead, shared libraries are loaded at an image base (0x10000000 by + # default) and relocated if they conflict, which is a slow very memory + # consuming and fragmenting process. To avoid this, we pick a random, + # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link + # time. Moving up from 0x10000000 also allows more sbrk(2) space. + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + ;; + + linux* | k*bsd*-gnu) + if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + tmp_addflag= + case $cc_basename,$host_cpu in + pgcc*) # Portland Group C compiler + _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive' + tmp_addflag=' $pic_flag' + ;; + pgf77* | pgf90* | pgf95*) # Portland Group f77 and f90 compilers + _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive' + tmp_addflag=' $pic_flag -Mnomain' ;; + ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 + tmp_addflag=' -i_dynamic' ;; + efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 + tmp_addflag=' -i_dynamic -nofor_main' ;; + ifc* | ifort*) # Intel Fortran compiler + tmp_addflag=' -nofor_main' ;; + esac + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared'"$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + + if test $supports_anon_versioning = yes; then + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + $echo "local: *; };" >> $output_objdir/$libname.ver~ + $CC -shared'"$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' + fi + _LT_AC_TAGVAR(link_all_deplibs, $1)=no + else + _LT_AC_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + netbsd* | netbsdelf*-gnu) + if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' + wlarc= + else + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + fi + ;; + + solaris*) + if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then + _LT_AC_TAGVAR(ld_shlibs, $1)=no + cat <&2 + +*** Warning: The releases 2.8.* of the GNU linker cannot reliably +*** create shared libraries on Solaris systems. Therefore, libtool +*** is disabling shared libraries support. We urge you to upgrade GNU +*** binutils to release 2.9.1 or newer. Another option is to modify +*** your PATH or compiler configuration so that the native linker is +*** used, and then restart. + +EOF + elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + _LT_AC_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) + case `$LD -v 2>&1` in + *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.1[[0-5]].*) + _LT_AC_TAGVAR(ld_shlibs, $1)=no + cat <<_LT_EOF 1>&2 + +*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not +*** reliably create shared libraries on SCO systems. Therefore, libtool +*** is disabling shared libraries support. We urge you to upgrade GNU +*** binutils to release 2.16.91.0.3 or newer. Another option is to modify +*** your PATH or compiler configuration so that the native linker is +*** used, and then restart. + +_LT_EOF + ;; + *) + if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='`test -z "$SCOABSPATH" && echo ${wl}-rpath,$libdir`' + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname,\${SCOABSPATH:+${install_libdir}/}$soname,-retain-symbols-file,$export_symbols -o $lib' + else + _LT_AC_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + ;; + + sunos4*) + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' + wlarc= + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + *) + if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + _LT_AC_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + + if test "$_LT_AC_TAGVAR(ld_shlibs, $1)" = no; then + runpath_var= + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)= + _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)= + _LT_AC_TAGVAR(whole_archive_flag_spec, $1)= + fi + else + # PORTME fill in a description of your system's linker (not GNU ld) + case $host_os in + aix3*) + _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported + _LT_AC_TAGVAR(always_export_symbols, $1)=yes + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' + # Note: this linker hardcodes the directories in LIBPATH if there + # are no directories specified by -L. + _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes + if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then + # Neither direct hardcoding nor static linking is supported with a + # broken collect2. + _LT_AC_TAGVAR(hardcode_direct, $1)=unsupported + fi + ;; + + aix4* | aix5*) + if test "$host_cpu" = ia64; then + # On IA64, the linker does run time linking by default, so we don't + # have to do anything special. + aix_use_runtimelinking=no + exp_sym_flag='-Bexport' + no_entry_flag="" + else + # If we're using GNU nm, then we don't want the "-C" option. + # -C means demangle to AIX nm, but means don't demangle with GNU nm + if $NM -V 2>&1 | grep 'GNU' > /dev/null; then + _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\[$]2 == "T") || (\[$]2 == "D") || (\[$]2 == "B")) && ([substr](\[$]3,1,1) != ".")) { print \[$]3 } }'\'' | sort -u > $export_symbols' + else + _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\[$]2 == "T") || (\[$]2 == "D") || (\[$]2 == "B")) && ([substr](\[$]3,1,1) != ".")) { print \[$]3 } }'\'' | sort -u > $export_symbols' + fi + aix_use_runtimelinking=no + + # Test if we are trying to use run time linking or normal + # AIX style linking. If -brtl is somewhere in LDFLAGS, we + # need to do runtime linking. + case $host_os in aix4.[[23]]|aix4.[[23]].*|aix5*) + for ld_flag in $LDFLAGS; do + if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then + aix_use_runtimelinking=yes + break + fi + done + ;; + esac + + exp_sym_flag='-bexport' + no_entry_flag='-bnoentry' + fi + + # When large executables or shared objects are built, AIX ld can + # have problems creating the table of contents. If linking a library + # or program results in "error TOC overflow" add -mminimal-toc to + # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not + # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. + + _LT_AC_TAGVAR(archive_cmds, $1)='' + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=':' + _LT_AC_TAGVAR(link_all_deplibs, $1)=yes + + if test "$GCC" = yes; then + case $host_os in aix4.[[012]]|aix4.[[012]].*) + # We only want to do this on AIX 4.2 and lower, the check + # below for broken collect2 doesn't work under 4.3+ + collect2name=`${CC} -print-prog-name=collect2` + if test -f "$collect2name" && \ + strings "$collect2name" | grep resolve_lib_name >/dev/null + then + # We have reworked collect2 + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + else + # We have old collect2 + _LT_AC_TAGVAR(hardcode_direct, $1)=unsupported + # It fails to find uninstalled libraries when the uninstalled + # path is not listed in the libpath. Setting hardcode_minus_L + # to unsupported forces relinking + _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)= + fi + ;; + esac + shared_flag='-shared' + if test "$aix_use_runtimelinking" = yes; then + shared_flag="$shared_flag "'${wl}-G' + fi + else + # not using gcc + if test "$host_cpu" = ia64; then + # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release + # chokes on -Wl,-G. The following line is correct: + shared_flag='-G' + else + if test "$aix_use_runtimelinking" = yes; then + shared_flag='${wl}-G' + else + shared_flag='${wl}-bM:SRE' + fi + fi + fi + + # It seems that -bexpall does not export symbols beginning with + # underscore (_), so it is better to generate a list of symbols to export. + _LT_AC_TAGVAR(always_export_symbols, $1)=yes + if test "$aix_use_runtimelinking" = yes; then + # Warning - without using the other runtime loading flags (-brtl), + # -berok will link without error, but may produce a broken library. + _LT_AC_TAGVAR(allow_undefined_flag, $1)='-berok' + # Determine the default libpath from the value encoded in an empty executable. + _LT_AC_SYS_LIBPATH_AIX + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" + _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" + else + if test "$host_cpu" = ia64; then + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib' + _LT_AC_TAGVAR(allow_undefined_flag, $1)="-z nodefs" + _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" + else + # Determine the default libpath from the value encoded in an empty executable. + _LT_AC_SYS_LIBPATH_AIX + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" + # Warning - without using the other run time loading flags, + # -berok will link without error, but may produce a broken library. + _LT_AC_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok' + _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok' + # Exported symbols can be pulled into shared objects from archives + _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='$convenience' + _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=yes + # This is similar to how AIX traditionally builds its shared libraries. + _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' + fi + fi + ;; + + amigaos*) + _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes + # see comment about different semantics on the GNU ld section + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + + bsdi[[45]]*) + _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)=-rdynamic + ;; + + cygwin* | mingw* | pw32*) + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + # hardcode_libdir_flag_spec is actually meaningless, as there is + # no search path for DLLs. + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' + _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported + # Tell ltmain to make .lib files, not .a files. + libext=lib + # Tell ltmain to make .dll files, not .so files. + shrext_cmds=".dll" + # FIXME: Setting linknames here is a bad hack. + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `echo "$deplibs" | $SED -e '\''s/ -lc$//'\''` -link -dll~linknames=' + # The linker will automatically build a .lib file if we build a DLL. + _LT_AC_TAGVAR(old_archive_From_new_cmds, $1)='true' + # FIXME: Should let the user specify the lib program. + _LT_AC_TAGVAR(old_archive_cmds, $1)='lib /OUT:$oldlib$oldobjs$old_deplibs' + _LT_AC_TAGVAR(fix_srcfile_path, $1)='`cygpath -w "$srcfile"`' + _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + ;; + + darwin* | rhapsody*) + case $host_os in + rhapsody* | darwin1.[[012]]) + _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-undefined ${wl}suppress' + ;; + *) # Darwin 1.3 on + if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then + _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' + else + case ${MACOSX_DEPLOYMENT_TARGET} in + 10.[[012]]) + _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' + ;; + 10.*) + _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-undefined ${wl}dynamic_lookup' + ;; + esac + fi + ;; + esac + _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_AC_TAGVAR(hardcode_direct, $1)=no + _LT_AC_TAGVAR(hardcode_automatic, $1)=yes + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=unsupported + _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='' + _LT_AC_TAGVAR(link_all_deplibs, $1)=yes + if test "$GCC" = yes ; then + output_verbose_link_cmd='echo' + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring' + _LT_AC_TAGVAR(module_cmds, $1)='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' + # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + _LT_AC_TAGVAR(module_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + else + case $cc_basename in + xlc*) + output_verbose_link_cmd='echo' + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $verstring' + _LT_AC_TAGVAR(module_cmds, $1)='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' + # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + _LT_AC_TAGVAR(module_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + ;; + *) + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + esac + fi + ;; + + dgux*) + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + freebsd1*) + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + + # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor + # support. Future versions do this automatically, but an explicit c++rt0.o + # does not break anything, and helps significantly (at the cost of a little + # extra space). + freebsd2.2*) + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + # Unfortunately, older versions of FreeBSD 2 do not have this feature. + freebsd2*) + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + # FreeBSD 3 and greater uses gcc -shared to do shared libraries. + freebsd* | dragonfly*) + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -o $lib $libobjs $deplibs $compiler_flags' + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + hpux9*) + if test "$GCC" = yes; then + _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + else + _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + fi + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes + _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + ;; + + hpux10*) + if test "$GCC" = yes -a "$with_gnu_ld" = no; then + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + else + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' + fi + if test "$with_gnu_ld" = no; then + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: + + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes + fi + ;; + + hpux11*) + if test "$GCC" = yes -a "$with_gnu_ld" = no; then + case $host_cpu in + hppa*64*) + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + ia64*) + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + else + case $host_cpu in + hppa*64*) + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + ia64*) + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + fi + if test "$with_gnu_ld" = no; then + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: + + case $host_cpu in + hppa*64*|ia64*) + _LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='+b $libdir' + _LT_AC_TAGVAR(hardcode_direct, $1)=no + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + *) + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes + ;; + esac + fi + ;; + + irix5* | irix6* | nonstopux*) + if test "$GCC" = yes; then + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + else + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' + _LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='-rpath $libdir' + fi + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_AC_TAGVAR(link_all_deplibs, $1)=yes + ;; + + netbsd* | netbsdelf*-gnu) + if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out + else + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF + fi + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + newsos6) + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + openbsd*) + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + else + case $host_os in + openbsd[[01]].* | openbsd2.[[0-7]] | openbsd2.[[0-7]].*) + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + ;; + *) + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + ;; + esac + fi + ;; + + os2*) + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes + _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported + _LT_AC_TAGVAR(archive_cmds, $1)='$echo "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$echo "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$echo DATA >> $output_objdir/$libname.def~$echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~$echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' + _LT_AC_TAGVAR(old_archive_From_new_cmds, $1)='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' + ;; + + osf3*) + if test "$GCC" = yes; then + _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + else + _LT_AC_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' + fi + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: + ;; + + osf4* | osf5*) # as osf3* with the addition of -msym flag + if test "$GCC" = yes; then + _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + else + _LT_AC_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; echo "-hidden">> $lib.exp~ + $LD -shared${allow_undefined_flag} -input $lib.exp $linker_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib~$rm $lib.exp' + + # Both c and cxx compiler support -rpath directly + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' + fi + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: + ;; + + solaris*) + _LT_AC_TAGVAR(no_undefined_flag, $1)=' -z text' + if test "$GCC" = yes; then + wlarc='${wl}' + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ + $CC -shared ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$rm $lib.exp' + else + wlarc='' + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ + $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp' + fi + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + case $host_os in + solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; + *) + # The compiler driver will combine linker options so we + # cannot just pass the convience library names through + # without $wl, iff we do not link with $LD. + # Luckily, gcc supports the same syntax we need for Sun Studio. + # Supported since Solaris 2.6 (maybe 2.5.1?) + case $wlarc in + '') + _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' ;; + *) + _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}-z ${wl}defaultextract' ;; + esac ;; + esac + _LT_AC_TAGVAR(link_all_deplibs, $1)=yes + ;; + + sunos4*) + if test "x$host_vendor" = xsequent; then + # Use $CC to link under sequent, because it throws in some extra .o + # files that make .init and .fini sections work. + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' + else + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' + fi + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + sysv4) + case $host_vendor in + sni) + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_AC_TAGVAR(hardcode_direct, $1)=yes # is this really true??? + ;; + siemens) + ## LD is ld it makes a PLAMLIB + ## CC just makes a GrossModule. + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags' + _LT_AC_TAGVAR(reload_cmds, $1)='$CC -r -o $output$reload_objs' + _LT_AC_TAGVAR(hardcode_direct, $1)=no + ;; + motorola) + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_AC_TAGVAR(hardcode_direct, $1)=no #Motorola manual says yes, but my tests say they lie + ;; + esac + runpath_var='LD_RUN_PATH' + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + sysv4.3*) + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='-Bexport' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + runpath_var=LD_RUN_PATH + hardcode_runpath_var=yes + _LT_AC_TAGVAR(ld_shlibs, $1)=yes + fi + ;; + + sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7*) + _LT_AC_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' + _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + runpath_var='LD_RUN_PATH' + + if test "$GCC" = yes; then + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + else + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + fi + ;; + + sysv5* | sco3.2v5* | sco5v6*) + # Note: We can NOT use -z defs as we might desire, because we do not + # link with -lc, and that would cause any symbols used from libc to + # always be unresolved, which means just about no library would + # ever link correctly. If we're not using GNU ld we use -z text + # though, which does catch some bad symbols but isn't as heavy-handed + # as -z defs. + _LT_AC_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' + _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs' + _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=':' + _LT_AC_TAGVAR(link_all_deplibs, $1)=yes + _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport' + runpath_var='LD_RUN_PATH' + + if test "$GCC" = yes; then + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' + else + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' + fi + ;; + + uts4*) + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + *) + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + esac + fi +]) +AC_MSG_RESULT([$_LT_AC_TAGVAR(ld_shlibs, $1)]) +test "$_LT_AC_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no + +# +# Do we need to explicitly link libc? +# +case "x$_LT_AC_TAGVAR(archive_cmds_need_lc, $1)" in +x|xyes) + # Assume -lc should be added + _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=yes + + if test "$enable_shared" = yes && test "$GCC" = yes; then + case $_LT_AC_TAGVAR(archive_cmds, $1) in + *'~'*) + # FIXME: we may have to deal with multi-command sequences. + ;; + '$CC '*) + # Test whether the compiler implicitly links with -lc since on some + # systems, -lgcc has to come before -lc. If gcc already passes -lc + # to ld, don't add -lc before -lgcc. + AC_MSG_CHECKING([whether -lc should be explicitly linked in]) + $rm conftest* + printf "$lt_simple_compile_test_code" > conftest.$ac_ext + + if AC_TRY_EVAL(ac_compile) 2>conftest.err; then + soname=conftest + lib=conftest + libobjs=conftest.$ac_objext + deplibs= + wl=$_LT_AC_TAGVAR(lt_prog_compiler_wl, $1) + pic_flag=$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1) + compiler_flags=-v + linker_flags=-v + verstring= + output_objdir=. + libname=conftest + lt_save_allow_undefined_flag=$_LT_AC_TAGVAR(allow_undefined_flag, $1) + _LT_AC_TAGVAR(allow_undefined_flag, $1)= + if AC_TRY_EVAL(_LT_AC_TAGVAR(archive_cmds, $1) 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) + then + _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no + else + _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=yes + fi + _LT_AC_TAGVAR(allow_undefined_flag, $1)=$lt_save_allow_undefined_flag + else + cat conftest.err 1>&5 + fi + $rm conftest* + AC_MSG_RESULT([$_LT_AC_TAGVAR(archive_cmds_need_lc, $1)]) + ;; + esac + fi + ;; +esac +])# AC_LIBTOOL_PROG_LD_SHLIBS + + +# _LT_AC_FILE_LTDLL_C +# ------------------- +# Be careful that the start marker always follows a newline. +AC_DEFUN([_LT_AC_FILE_LTDLL_C], [ +# /* ltdll.c starts here */ +# #define WIN32_LEAN_AND_MEAN +# #include +# #undef WIN32_LEAN_AND_MEAN +# #include +# +# #ifndef __CYGWIN__ +# # ifdef __CYGWIN32__ +# # define __CYGWIN__ __CYGWIN32__ +# # endif +# #endif +# +# #ifdef __cplusplus +# extern "C" { +# #endif +# BOOL APIENTRY DllMain (HINSTANCE hInst, DWORD reason, LPVOID reserved); +# #ifdef __cplusplus +# } +# #endif +# +# #ifdef __CYGWIN__ +# #include +# DECLARE_CYGWIN_DLL( DllMain ); +# #endif +# HINSTANCE __hDllInstance_base; +# +# BOOL APIENTRY +# DllMain (HINSTANCE hInst, DWORD reason, LPVOID reserved) +# { +# __hDllInstance_base = hInst; +# return TRUE; +# } +# /* ltdll.c ends here */ +])# _LT_AC_FILE_LTDLL_C + + +# _LT_AC_TAGVAR(VARNAME, [TAGNAME]) +# --------------------------------- +AC_DEFUN([_LT_AC_TAGVAR], [ifelse([$2], [], [$1], [$1_$2])]) + + +# old names +AC_DEFUN([AM_PROG_LIBTOOL], [AC_PROG_LIBTOOL]) +AC_DEFUN([AM_ENABLE_SHARED], [AC_ENABLE_SHARED($@)]) +AC_DEFUN([AM_ENABLE_STATIC], [AC_ENABLE_STATIC($@)]) +AC_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)]) +AC_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)]) +AC_DEFUN([AM_PROG_LD], [AC_PROG_LD]) +AC_DEFUN([AM_PROG_NM], [AC_PROG_NM]) + +# This is just to silence aclocal about the macro not being used +ifelse([AC_DISABLE_FAST_INSTALL]) + +AC_DEFUN([LT_AC_PROG_GCJ], +[AC_CHECK_TOOL(GCJ, gcj, no) + test "x${GCJFLAGS+set}" = xset || GCJFLAGS="-g -O2" + AC_SUBST(GCJFLAGS) +]) + +AC_DEFUN([LT_AC_PROG_RC], +[AC_CHECK_TOOL(RC, windres, no) +]) + +############################################################ +# NOTE: This macro has been submitted for inclusion into # +# GNU Autoconf as AC_PROG_SED. When it is available in # +# a released version of Autoconf we should remove this # +# macro and use it instead. # +############################################################ +# LT_AC_PROG_SED +# -------------- +# Check for a fully-functional sed program, that truncates +# as few characters as possible. Prefer GNU sed if found. +AC_DEFUN([LT_AC_PROG_SED], +[AC_MSG_CHECKING([for a sed that does not truncate output]) +AC_CACHE_VAL(lt_cv_path_SED, +[# Loop through the user's path and test for sed and gsed. +# Then use that list of sed's as ones to test for truncation. +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for lt_ac_prog in sed gsed; do + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then + lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext" + fi + done + done +done +lt_ac_max=0 +lt_ac_count=0 +# Add /usr/xpg4/bin/sed as it is typically found on Solaris +# along with /bin/sed that truncates output. +for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do + test ! -f $lt_ac_sed && continue + cat /dev/null > conftest.in + lt_ac_count=0 + echo $ECHO_N "0123456789$ECHO_C" >conftest.in + # Check for GNU sed and select it if it is found. + if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then + lt_cv_path_SED=$lt_ac_sed + break + fi + while true; do + cat conftest.in conftest.in >conftest.tmp + mv conftest.tmp conftest.in + cp conftest.in conftest.nl + echo >>conftest.nl + $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break + cmp -s conftest.out conftest.nl || break + # 10000 chars as input seems more than enough + test $lt_ac_count -gt 10 && break + lt_ac_count=`expr $lt_ac_count + 1` + if test $lt_ac_count -gt $lt_ac_max; then + lt_ac_max=$lt_ac_count + lt_cv_path_SED=$lt_ac_sed + fi + done +done +]) +SED=$lt_cv_path_SED +AC_MSG_RESULT([$SED]) +]) diff --git a/aclocal.m4 b/aclocal.m4 new file mode 100644 index 0000000..dd92cb3 --- /dev/null +++ b/aclocal.m4 @@ -0,0 +1,863 @@ +# generated automatically by aclocal 1.9.6 -*- Autoconf -*- + +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, +# 2005 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. + +# Copyright (C) 2002, 2003, 2005 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. +AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version="1.9"]) + +# AM_SET_CURRENT_AUTOMAKE_VERSION +# ------------------------------- +# Call AM_AUTOMAKE_VERSION so it can be traced. +# This function is AC_REQUIREd by AC_INIT_AUTOMAKE. +AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], + [AM_AUTOMAKE_VERSION([1.9.6])]) + +# AM_AUX_DIR_EXPAND -*- Autoconf -*- + +# Copyright (C) 2001, 2003, 2005 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, 2000, 2001, 2003, 2004, 2005 +# 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. + +# serial 7 + +# AM_CONDITIONAL(NAME, SHELL-CONDITION) +# ------------------------------------- +# Define a conditional. +AC_DEFUN([AM_CONDITIONAL], +[AC_PREREQ(2.52)dnl + ifelse([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], + [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl +AC_SUBST([$1_TRUE]) +AC_SUBST([$1_FALSE]) +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, 2000, 2001, 2002, 2003, 2004, 2005 +# 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. + +# serial 8 + +# 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", "GCJ", or "OBJC". +# 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 + +ifelse([$1], CC, [depcc="$CC" am_compiler_list=], + [$1], CXX, [depcc="$CXX" am_compiler_list=], + [$1], OBJC, [depcc="$OBJC" am_compiler_list='gcc3 gcc'], + [$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'. + 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 + 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 8's {/usr,}/bin/sh. + touch sub/conftst$i.h + done + echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + + case $depmode in + 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 + ;; + none) break ;; + esac + # 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. + if depmode=$depmode \ + source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \ + depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ + $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \ + >/dev/null 2>conftest.err && + grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftest.${OBJEXT-o} 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, +[ --disable-dependency-tracking speeds up one-time build + --enable-dependency-tracking do not reject slow dependency extractors]) +if test "x$enable_dependency_tracking" != xno; then + am_depcomp="$ac_aux_dir/depcomp" + AMDEPBACKSLASH='\' +fi +AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) +AC_SUBST([AMDEPBACKSLASH]) +]) + +# Generate code to set up dependency tracking. -*- Autoconf -*- + +# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005 +# 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. + +#serial 3 + +# _AM_OUTPUT_DEPENDENCY_COMMANDS +# ------------------------------ +AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], +[for mf in $CONFIG_FILES; 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. + # So let's grep whole file. + if grep '^#.*generated by automake' $mf > /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"` + # When using ansi2knr, U may be empty or an underscore; expand it + U=`sed -n 's/^U = //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' -e 's/\$U/'"$U"'/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"]) +]) + +# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005 +# 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. + +# serial 8 + +# AM_CONFIG_HEADER is obsolete. It has been replaced by AC_CONFIG_HEADERS. +AU_DEFUN([AM_CONFIG_HEADER], [AC_CONFIG_HEADERS($@)]) + +# Do all the work for Automake. -*- Autoconf -*- + +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 +# 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. + +# serial 12 + +# 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.58])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 +# test to see if srcdir already configured +if test "`cd $srcdir && pwd`" != "`pwd`" && + test -f $srcdir/config.status; then + AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) +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], +[m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl + AC_SUBST([PACKAGE], [$1])dnl + AC_SUBST([VERSION], [$2])], +[_AM_SET_OPTIONS([$1])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) +AM_PROG_INSTALL_SH +AM_PROG_INSTALL_STRIP +AC_REQUIRE([AM_PROG_MKDIR_P])dnl +# 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)], + [define([AC_PROG_CC], + defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl +AC_PROVIDE_IFELSE([AC_PROG_CXX], + [_AM_DEPENDENCIES(CXX)], + [define([AC_PROG_CXX], + defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl +]) +]) + + +# 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_stamp_count=1 +for _am_header in $config_headers :; do + case $_am_header in + $1 | $1:* ) + break ;; + * ) + _am_stamp_count=`expr $_am_stamp_count + 1` ;; + esac +done +echo "timestamp for $1" >`AS_DIRNAME([$1])`/stamp-h[]$_am_stamp_count]) + +# Copyright (C) 2001, 2003, 2005 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 +install_sh=${install_sh-"$am_aux_dir/install-sh"} +AC_SUBST(install_sh)]) + +# Copyright (C) 2003, 2005 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. + +# serial 2 + +# 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])]) + +# Check to see how 'make' treats includes. -*- Autoconf -*- + +# Copyright (C) 2001, 2002, 2003, 2005 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. + +# serial 3 + +# 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 done +.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 +# We grep out `Entering directory' and `Leaving directory' +# messages which can occur if `w' ends up in MAKEFLAGS. +# In particular we don't look at `^make:' because GNU make might +# be invoked under some other name (usually "gmake"), in which +# case it prints its new name instead of `make'. +if test "`$am_make -s -f confmf 2> /dev/null | grep -v 'ing directory'`" = "done"; then + am__include=include + am__quote= + _am_result=GNU +fi +# Now try BSD make style include. +if test "$am__include" = "#"; then + echo '.include "confinc"' > confmf + if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then + am__include=.include + am__quote="\"" + _am_result=BSD + fi +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, 1999, 2000, 2001, 2003, 2005 +# 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. + +# serial 4 + +# 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 supports --run. +# If it does, set am_missing_run to use it, otherwise, to nothing. +AC_DEFUN([AM_MISSING_HAS_RUN], +[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl +test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing" +# Use eval to expand $SHELL +if eval "$MISSING --run true"; then + am_missing_run="$MISSING --run " +else + am_missing_run= + AC_MSG_WARN([`missing' script is too old or missing]) +fi +]) + +# Copyright (C) 2003, 2004, 2005 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_MKDIR_P +# --------------- +# Check whether `mkdir -p' is supported, fallback to mkinstalldirs otherwise. +# +# Automake 1.8 used `mkdir -m 0755 -p --' to ensure that directories +# created by `make install' are always world readable, even if the +# installer happens to have an overly restrictive umask (e.g. 077). +# This was a mistake. There are at least two reasons why we must not +# use `-m 0755': +# - it causes special bits like SGID to be ignored, +# - it may be too restrictive (some setups expect 775 directories). +# +# Do not use -m 0755 and let people choose whatever they expect by +# setting umask. +# +# We cannot accept any implementation of `mkdir' that recognizes `-p'. +# Some implementations (such as Solaris 8's) are not thread-safe: if a +# parallel make tries to run `mkdir -p a/b' and `mkdir -p a/c' +# concurrently, both version can detect that a/ is missing, but only +# one can create it and the other will error out. Consequently we +# restrict ourselves to GNU make (using the --version option ensures +# this.) +AC_DEFUN([AM_PROG_MKDIR_P], +[if mkdir -p --version . >/dev/null 2>&1 && test ! -d ./--version; then + # We used to keeping the `.' as first argument, in order to + # allow $(mkdir_p) to be used without argument. As in + # $(mkdir_p) $(somedir) + # where $(somedir) is conditionally defined. However this is wrong + # for two reasons: + # 1. if the package is installed by a user who cannot write `.' + # make install will fail, + # 2. the above comment should most certainly read + # $(mkdir_p) $(DESTDIR)$(somedir) + # so it does not work when $(somedir) is undefined and + # $(DESTDIR) is not. + # To support the latter case, we have to write + # test -z "$(somedir)" || $(mkdir_p) $(DESTDIR)$(somedir), + # so the `.' trick is pointless. + mkdir_p='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. + for d in ./-p ./--version; + do + test -d $d && rmdir $d + done + # $(mkinstalldirs) is defined by Automake if mkinstalldirs exists. + if test -f "$ac_aux_dir/mkinstalldirs"; then + mkdir_p='$(mkinstalldirs)' + else + mkdir_p='$(install_sh) -d' + fi +fi +AC_SUBST([mkdir_p])]) + +# Helper functions for option handling. -*- Autoconf -*- + +# Copyright (C) 2001, 2002, 2003, 2005 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. + +# serial 3 + +# _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], +[AC_FOREACH([_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, 1997, 2000, 2001, 2003, 2005 +# 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. + +# serial 4 + +# AM_SANITY_CHECK +# --------------- +AC_DEFUN([AM_SANITY_CHECK], +[AC_MSG_CHECKING([whether build environment is sane]) +# Just in case +sleep 1 +echo timestamp > conftest.file +# 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 ( + 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 + rm -f conftest.file + 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 + + 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)]) + +# Copyright (C) 2001, 2003, 2005 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="\${SHELL} \$(install_sh) -c -s" +AC_SUBST([INSTALL_STRIP_PROGRAM])]) + +# Check how to create a tarball. -*- Autoconf -*- + +# Copyright (C) 2004, 2005 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. + +# serial 2 + +# _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. +AM_MISSING_PROG([AMTAR], [tar]) +m4_if([$1], [v7], + [am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'], + [m4_case([$1], [ustar],, [pax],, + [m4_fatal([Unknown tar format])]) +AC_MSG_CHECKING([how to create a $1 tar archive]) +# Loop over all known methods to create a tar archive until one works. +_am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none' +_am_tools=${am_cv_prog_tar_$1-$_am_tools} +# Do not fold the above two line into one, because Tru64 sh and +# Solaris sh will not grok spaces in the rhs of `-'. +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 + +m4_include([acinclude.m4]) diff --git a/config.guess b/config.guess new file mode 100644 index 0000000..a39437d --- /dev/null +++ b/config.guess @@ -0,0 +1,1686 @@ +#! /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 +# Free Software Foundation, Inc. + +timestamp='2009-04-17' + +# This file is (in principle) common to ALL GNU software. +# The presence of a machine in this file suggests that SOME GNU software +# can handle that machine. It does not imply ALL GNU software can. +# +# 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 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., 51 Franklin Street - Fifth Floor, Boston, MA +# 02110-1301, 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. + + +# Please send patches to . Submit a context +# diff and a properly formatted ChangeLog entry. +# +# 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. + +# 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 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-dietlibc | linux-newlib* | 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/'` + ;; + *) + 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) + os= + basic_machine=$1 + ;; + -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*) + 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 \ + | 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[2345] | armv[345][lb] | avr | avr32 \ + | bfin \ + | c4x | clipper \ + | d10v | d30v | dlx | dsp16xx \ + | fido | fr30 | frv \ + | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ + | i370 | i860 | i960 | ia64 \ + | ip2k | iq2000 \ + | lm32 \ + | m32c | m32r | m32rle | m68000 | m68k | m88k \ + | maxq | mb | microblaze | 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 \ + | nios | nios2 \ + | ns16k | ns32k \ + | or32 \ + | pdp10 | pdp11 | pj | pjl \ + | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \ + | pyramid \ + | 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 | strongarm \ + | tahoe | thumb | tic4x | tic80 | tron \ + | v850 | v850e \ + | we32k \ + | x86 | xc16x | xscale | xscalee[bl] | xstormy16 | xtensa \ + | z8k | z80) + basic_machine=$basic_machine-unknown + ;; + m6811 | m68hc11 | m6812 | m68hc12) + # Motorola 68HC11/12. + basic_machine=$basic_machine-unknown + os=-none + ;; + m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) + ;; + ms1) + basic_machine=mt-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-* \ + | 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-* \ + | bfin-* | bs2000-* \ + | c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \ + | 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-* \ + | i*86-* | i860-* | i960-* | ia64-* \ + | ip2k-* | iq2000-* \ + | lm32-* \ + | m32c-* | m32r-* | m32rle-* \ + | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ + | m88110-* | m88k-* | maxq-* | mcore-* | 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-* \ + | mmix-* \ + | mt-* \ + | msp430-* \ + | nios-* | nios2-* \ + | none-* | np1-* | ns16k-* | ns32k-* \ + | orion-* \ + | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ + | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \ + | pyramid-* \ + | romp-* | rs6000-* \ + | 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-* | strongarm-* | sv1-* | sx?-* \ + | tahoe-* | thumb-* \ + | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* | tile-* \ + | tron-* \ + | v850-* | v850e-* | vax-* \ + | we32k-* \ + | x86-* | x86_64-* | xc16x-* | xps100-* | xscale-* | xscalee[bl]-* \ + | 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 + ;; + 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) + 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'm not sure what "Sysv32" means. Should this be sysv3.2? + 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 + ;; + 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-/'` + ;; + mvs) + basic_machine=i370-ibm + os=-mvs + ;; + 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 + ;; + 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) basic_machine=powerpc-unknown + ;; + ppc-*) 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-*) 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) + 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 + ;; + 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 + ;; + tic54x | c54x*) + basic_machine=tic54x-unknown + os=-coff + ;; + tic55x | c55x*) + basic_machine=tic55x-unknown + os=-coff + ;; + tic6x | c6x*) + basic_machine=tic6x-unknown + os=-coff + ;; + tile*) + basic_machine=tile-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 + ;; + 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. + -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* | -sunos | -sunos[34]*\ + | -hpux* | -unos* | -osf* | -luna* | -dgux* | -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* \ + | -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* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ + | -mingw32* | -linux-gnu* | -linux-newlib* | -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*) + # 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 + ;; + -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 + ;; + # 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 + # This also exists in the configure program, but was not the + # default. + # os=-sunos4 + ;; + 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 + ;; + -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: diff --git a/config.h.in b/config.h.in new file mode 100644 index 0000000..055c089 --- /dev/null +++ b/config.h.in @@ -0,0 +1,244 @@ +/* config.h.in. Generated from configure.in by autoheader. */ + +/* Define to 1 if you have the header file. */ +#undef HAVE_CARBON_CARBON_H + +/* Define if you have the CoreAudio API */ +#undef HAVE_COREAUDIO + +/* Define to 1 if you have the header file. */ +#undef HAVE_CRT_EXTERNS_H + +/* Defines if your system has the crypt function */ +#undef HAVE_CRYPT + +/* Define to 1 if you have the header file. */ +#undef HAVE_DLFCN_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_INTTYPES_H + +/* Define if you have libjpeg */ +#undef HAVE_LIBJPEG + +/* Define if you have libpng */ +#undef HAVE_LIBPNG + +/* Define if you have a working libpthread (will enable threaded code) */ +#undef HAVE_LIBPTHREAD + +/* Define if you have libz */ +#undef HAVE_LIBZ + +/* Define to 1 if you have the header file. */ +#undef HAVE_MEMORY_H + +/* Define if your system needs _NSGetEnviron to set up the environment */ +#undef HAVE_NSGETENVIRON + +/* Define if you have res_init */ +#undef HAVE_RES_INIT + +/* Define if you have the res_init prototype */ +#undef HAVE_RES_INIT_PROTO + +/* Define if you have a STL implementation by SGI */ +#undef HAVE_SGI_STL + +/* Define to 1 if you have the `snprintf' function. */ +#undef HAVE_SNPRINTF + +/* 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 if you have strlcat */ +#undef HAVE_STRLCAT + +/* Define if you have the strlcat prototype */ +#undef HAVE_STRLCAT_PROTO + +/* Define if you have strlcpy */ +#undef HAVE_STRLCPY + +/* Define if you have the strlcpy prototype */ +#undef HAVE_STRLCPY_PROTO + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_BITYPES_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 + +/* Define to 1 if you have the `vsnprintf' function. */ +#undef HAVE_VSNPRINTF + +/* Suffix for lib directories */ +#undef KDELIBSUFF + +/* Define a safe value for MAXPATHLEN */ +#undef KDEMAXPATHLEN + +/* 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 version of this package. */ +#undef PACKAGE_VERSION + +/* The size of `char *', as computed by sizeof. */ +#undef SIZEOF_CHAR_P + +/* The size of `int', as computed by sizeof. */ +#undef SIZEOF_INT + +/* The size of `long', as computed by sizeof. */ +#undef SIZEOF_LONG + +/* The size of `short', as computed by sizeof. */ +#undef SIZEOF_SHORT + +/* The size of `size_t', as computed by sizeof. */ +#undef SIZEOF_SIZE_T + +/* The size of `unsigned long', as computed by sizeof. */ +#undef SIZEOF_UNSIGNED_LONG + +/* Define to 1 if you have the ANSI C header files. */ +#undef STDC_HEADERS + +/* Version number of package */ +#undef VERSION + +/* Defined if compiling without arts */ +#undef WITHOUT_ARTS + +/* Define to 1 if your processor stores words with the most significant byte + first (like Motorola and SPARC, unlike Intel and VAX). */ +#undef WORDS_BIGENDIAN + +/* + * jpeg.h needs HAVE_BOOLEAN, when the system uses boolean in system + * headers and I'm too lazy to write a configure test as long as only + * unixware is related + */ +#ifdef _UNIXWARE +#define HAVE_BOOLEAN +#endif + + + +/* + * AIX defines FD_SET in terms of bzero, but fails to include + * that defines bzero. + */ + +#if defined(_AIX) +#include +#endif + + + +#if defined(HAVE_NSGETENVIRON) && defined(HAVE_CRT_EXTERNS_H) +# include +# include +# define environ (*_NSGetEnviron()) +#endif + + + +#if !defined(HAVE_RES_INIT_PROTO) +#ifdef __cplusplus +extern "C" { +#endif +int res_init(void); +#ifdef __cplusplus +} +#endif +#endif + + + +#if !defined(HAVE_STRLCAT_PROTO) +#ifdef __cplusplus +extern "C" { +#endif +unsigned long strlcat(char*, const char*, unsigned long); +#ifdef __cplusplus +} +#endif +#endif + + + +#if !defined(HAVE_STRLCPY_PROTO) +#ifdef __cplusplus +extern "C" { +#endif +unsigned long strlcpy(char*, const char*, unsigned long); +#ifdef __cplusplus +} +#endif +#endif + + + +/* + * On HP-UX, the declaration of vsnprintf() is needed every time ! + */ + +#if !defined(HAVE_VSNPRINTF) || defined(hpux) +#if __STDC__ +#include +#include +#else +#include +#endif +#ifdef __cplusplus +extern "C" +#endif +int vsnprintf(char *str, size_t n, char const *fmt, va_list ap); +#ifdef __cplusplus +extern "C" +#endif +int snprintf(char *str, size_t n, char const *fmt, ...); +#endif + + + +#if defined(__SVR4) && !defined(__svr4__) +#define __svr4__ 1 +#endif + + +/* type to use in place of socklen_t if not defined */ +#undef kde_socklen_t + +/* type to use in place of socklen_t if not defined (deprecated, use + kde_socklen_t) */ +#undef ksize_t diff --git a/config.log b/config.log new file mode 100644 index 0000000..ac0bd62 --- /dev/null +++ b/config.log @@ -0,0 +1,363 @@ +This file contains any messages produced by compilers while +running configure, to aid debugging if configure makes a mistake. + +It was created by configure, which was +generated by GNU Autoconf 2.61. Invocation command line was + + $ ./configure --disable-rpath --prefix=/opt/kde3 --with-qt-includes=/usr/include/qt3 --host=x86_64-linux-gnu --build=x86_64-linux-gnu --mandir=/opt/kde3/share/man --infodir=/opt/kde3/share/info --with-extra-libs=/opt/kde3/lib --with-extra-includes=/opt/kde3/include/kde + +## --------- ## +## Platform. ## +## --------- ## + +hostname = argus4 +uname -m = x86_64 +uname -r = 2.6.31-16-generic +uname -s = Linux +uname -v = #53-Ubuntu SMP Tue Dec 8 04:02:15 UTC 2009 + +/usr/bin/uname -p = unknown +/bin/uname -X = unknown + +/bin/arch = unknown +/usr/bin/arch -k = unknown +/usr/convex/getsysinfo = unknown +/usr/bin/hostinfo = unknown +/bin/machine = unknown +/usr/bin/oslevel = unknown +/bin/universe = unknown + +PATH: /opt/kde3/bin +PATH: /opt/kde3/games +PATH: /opt/kde3/bin +PATH: /home/eldarion/bin +PATH: /usr/local/sbin +PATH: /usr/local/bin +PATH: /usr/sbin +PATH: /usr/bin +PATH: /sbin +PATH: /bin +PATH: /usr/games + + +## ----------- ## +## Core tests. ## +## ----------- ## + +configure:2140: checking build system type +configure:2158: result: x86_64-pc-linux-gnu +configure:2180: checking host system type +configure:2195: result: x86_64-pc-linux-gnu +configure:2217: checking target system type +configure:2232: result: x86_64-pc-linux-gnu +configure:2293: checking for a BSD-compatible install +configure:2349: result: /usr/bin/install -c +configure:2364: checking for -p flag to install +configure:2377: result: yes +configure:2388: checking whether build environment is sane + +## ---------------- ## +## Cache variables. ## +## ---------------- ## + +ac_cv_build=x86_64-pc-linux-gnu +ac_cv_env_CCC_set= +ac_cv_env_CCC_value= +ac_cv_env_CC_set= +ac_cv_env_CC_value= +ac_cv_env_CFLAGS_set=set +ac_cv_env_CFLAGS_value='-Wall -g -O2' +ac_cv_env_CPPFLAGS_set=set +ac_cv_env_CPPFLAGS_value= +ac_cv_env_CPP_set= +ac_cv_env_CPP_value= +ac_cv_env_CXXCPP_set= +ac_cv_env_CXXCPP_value= +ac_cv_env_CXXFLAGS_set=set +ac_cv_env_CXXFLAGS_value='-g -O2' +ac_cv_env_CXX_set= +ac_cv_env_CXX_value= +ac_cv_env_F77_set= +ac_cv_env_F77_value= +ac_cv_env_FFLAGS_set=set +ac_cv_env_FFLAGS_value='-g -O2' +ac_cv_env_LDFLAGS_set=set +ac_cv_env_LDFLAGS_value=-Wl,-Bsymbolic-functions +ac_cv_env_LIBS_set= +ac_cv_env_LIBS_value= +ac_cv_env_XMKMF_set= +ac_cv_env_XMKMF_value= +ac_cv_env_build_alias_set=set +ac_cv_env_build_alias_value=x86_64-linux-gnu +ac_cv_env_host_alias_set=set +ac_cv_env_host_alias_value=x86_64-linux-gnu +ac_cv_env_target_alias_set= +ac_cv_env_target_alias_value= +ac_cv_host=x86_64-pc-linux-gnu +ac_cv_path_install='/usr/bin/install -c' +ac_cv_target=x86_64-pc-linux-gnu + +## ----------------- ## +## Output variables. ## +## ----------------- ## + +ACLOCAL='' +AMDEPBACKSLASH='' +AMDEP_FALSE='' +AMDEP_TRUE='' +AMTAR='' +AR='' +ARTSCCONFIG='' +AUTOCONF='' +AUTODIRS='' +AUTOHEADER='' +AUTOMAKE='' +AWK='' +CC='' +CCDEPMODE='' +CFLAGS='-Wall -g -O2' +CONF_FILES='' +CPP='' +CPPFLAGS='' +CXX='' +CXXCPP='' +CXXDEPMODE='' +CXXFLAGS='-g -O2' +CYGPATH_W='' +DCOPIDL2CPP='' +DCOPIDL='' +DCOPIDLNG='' +DCOP_DEPENDENCIES='' +DEFS='' +DEPDIR='' +ECHO='echo' +ECHO_C='' +ECHO_N='-n' +ECHO_T='' +EGREP='' +ENABLE_PERMISSIVE_FLAG='' +EXEEXT='' +F77='' +FFLAGS='-g -O2' +FRAMEWORK_COREAUDIO='' +GMSGFMT='' +GREP='' +HAVE_GCC_VISIBILITY='' +INSTALL_DATA='${INSTALL} -m 644' +INSTALL_PROGRAM='${INSTALL} $(INSTALL_STRIP_FLAG)' +INSTALL_SCRIPT='${INSTALL}' +INSTALL_STRIP_PROGRAM='' +KCFG_DEPENDENCIES='' +KCONFIG_COMPILER='' +KDECONFIG='' +KDE_CHECK_PLUGIN='' +KDE_EXTRA_RPATH='' +KDE_INCLUDES='' +KDE_LDFLAGS='' +KDE_MT_LDFLAGS='' +KDE_MT_LIBS='' +KDE_NO_UNDEFINED='' +KDE_PLUGIN='' +KDE_RPATH='' +KDE_USE_CLOSURE_FALSE='' +KDE_USE_CLOSURE_TRUE='' +KDE_USE_FINAL_FALSE='' +KDE_USE_FINAL_TRUE='' +KDE_USE_FPIE='' +KDE_USE_NMCHECK_FALSE='' +KDE_USE_NMCHECK_TRUE='' +KDE_USE_PIE='' +KDE_XSL_STYLESHEET='' +LDFLAGS='-Wl,-Bsymbolic-functions' +LDFLAGS_AS_NEEDED='' +LDFLAGS_NEW_DTAGS='' +LIBCOMPAT='' +LIBCRYPT='' +LIBDL='' +LIBJPEG='' +LIBOBJS='' +LIBPNG='' +LIBPTHREAD='' +LIBRESOLV='' +LIBS='' +LIBSM='' +LIBSOCKET='' +LIBTOOL='' +LIBUCB='' +LIBUTIL='' +LIBZ='' +LIB_KAB='' +LIB_KABC='' +LIB_KDECORE='' +LIB_KDED='' +LIB_KDEPIM='' +LIB_KDEPRINT='' +LIB_KDEUI='' +LIB_KDNSSD='' +LIB_KFILE='' +LIB_KFM='' +LIB_KHTML='' +LIB_KIMPROXY='' +LIB_KIO='' +LIB_KJS='' +LIB_KNEWSTUFF='' +LIB_KPARTS='' +LIB_KSPELL='' +LIB_KSYCOCA='' +LIB_KUNITTEST='' +LIB_KUTILS='' +LIB_POLL='' +LIB_QPE='' +LIB_QT='' +LIB_SMB='' +LIB_X11='' +LIB_XEXT='' +LIB_XRENDER='' +LN_S='' +LTLIBOBJS='' +MAKEINFO='' +MAKEKDEWIDGETS='' +MCOPIDL='' +MEINPROC='' +MOC='' +MSGFMT='' +NOOPT_CFLAGS='' +NOOPT_CXXFLAGS='' +OBJEXT='' +PACKAGE='' +PACKAGE_BUGREPORT='' +PACKAGE_NAME='' +PACKAGE_STRING='' +PACKAGE_TARNAME='' +PACKAGE_VERSION='' +PATH_SEPARATOR=':' +PERL='' +QTE_NORTTI='' +QT_INCLUDES='' +QT_LDFLAGS='' +RANLIB='' +SET_MAKE='' +SHELL='/bin/bash' +STRIP='' +TOPSUBDIRS='' +UIC='' +UIC_TR='' +USER_INCLUDES='' +USER_LDFLAGS='' +USE_EXCEPTIONS='' +USE_RTTI='' +USE_THREADS='' +VERSION='' +WOVERLOADED_VIRTUAL='' +XGETTEXT='' +XMKMF='' +XMLLINT='' +X_EXTRA_LIBS='' +X_INCLUDES='' +X_LDFLAGS='' +X_PRE_LIBS='' +X_RPATH='' +ac_ct_CC='' +ac_ct_CXX='' +ac_ct_F77='' +all_includes='' +all_libraries='' +am__fastdepCC_FALSE='' +am__fastdepCC_TRUE='' +am__fastdepCXX_FALSE='' +am__fastdepCXX_TRUE='' +am__include='' +am__leading_dot='' +am__quote='' +am__tar='' +am__untar='' +bindir='${exec_prefix}/bin' +build='x86_64-pc-linux-gnu' +build_alias='x86_64-linux-gnu' +build_cpu='x86_64' +build_os='linux-gnu' +build_vendor='pc' +datadir='${datarootdir}' +datarootdir='${prefix}/share' +docdir='${datarootdir}/doc/${PACKAGE}' +dvidir='${docdir}' +exec_prefix='NONE' +host='x86_64-pc-linux-gnu' +host_alias='x86_64-linux-gnu' +host_cpu='x86_64' +host_os='linux-gnu' +host_vendor='pc' +htmldir='${docdir}' +include_ARTS_FALSE='' +include_ARTS_TRUE='' +include_libkonq_FALSE='' +include_libkonq_TRUE='' +include_x11_FALSE='' +include_x11_TRUE='' +includedir='${prefix}/include' +infodir='/opt/kde3/share/info' +install_sh='' +kde_appsdir='' +kde_bindir='' +kde_confdir='' +kde_datadir='' +kde_htmldir='' +kde_icondir='' +kde_includes='' +kde_kcfgdir='' +kde_libraries='' +kde_libs_htmldir='' +kde_libs_prefix='' +kde_locale='' +kde_mimedir='' +kde_moduledir='' +kde_qtver='' +kde_servicesdir='' +kde_servicetypesdir='' +kde_sounddir='' +kde_styledir='' +kde_templatesdir='' +kde_wallpaperdir='' +kde_widgetdir='' +kdeinitdir='' +libdir='${exec_prefix}/lib' +libexecdir='${exec_prefix}/libexec' +localedir='${datarootdir}/locale' +localstatedir='${prefix}/var' +mandir='/opt/kde3/share/man' +mkdir_p='' +oldincludedir='/usr/include' +pdfdir='${docdir}' +prefix='/opt/kde3' +program_transform_name='s,x,x,' +psdir='${docdir}' +qt_includes='' +qt_libraries='' +sbindir='${exec_prefix}/sbin' +sharedstatedir='${prefix}/com' +sysconfdir='${prefix}/etc' +target='x86_64-pc-linux-gnu' +target_alias='' +target_cpu='x86_64' +target_os='linux-gnu' +target_vendor='pc' +unsermake_enable_pch_FALSE='' +unsermake_enable_pch_TRUE='' +x_includes='NONE' +x_libraries='NONE' +xdg_appsdir='' +xdg_directorydir='' +xdg_menudir='' + +## ----------- ## +## confdefs.h. ## +## ----------- ## + +#define PACKAGE_NAME "" +#define PACKAGE_TARNAME "" +#define PACKAGE_VERSION "" +#define PACKAGE_STRING "" +#define PACKAGE_BUGREPORT "" + +configure: caught signal 2 +configure: exit 1 diff --git a/config.sub b/config.sub new file mode 100644 index 0000000..a39437d --- /dev/null +++ b/config.sub @@ -0,0 +1,1686 @@ +#! /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 +# Free Software Foundation, Inc. + +timestamp='2009-04-17' + +# This file is (in principle) common to ALL GNU software. +# The presence of a machine in this file suggests that SOME GNU software +# can handle that machine. It does not imply ALL GNU software can. +# +# 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 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., 51 Franklin Street - Fifth Floor, Boston, MA +# 02110-1301, 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. + + +# Please send patches to . Submit a context +# diff and a properly formatted ChangeLog entry. +# +# 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. + +# 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 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-dietlibc | linux-newlib* | 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/'` + ;; + *) + 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) + os= + basic_machine=$1 + ;; + -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*) + 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 \ + | 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[2345] | armv[345][lb] | avr | avr32 \ + | bfin \ + | c4x | clipper \ + | d10v | d30v | dlx | dsp16xx \ + | fido | fr30 | frv \ + | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ + | i370 | i860 | i960 | ia64 \ + | ip2k | iq2000 \ + | lm32 \ + | m32c | m32r | m32rle | m68000 | m68k | m88k \ + | maxq | mb | microblaze | 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 \ + | nios | nios2 \ + | ns16k | ns32k \ + | or32 \ + | pdp10 | pdp11 | pj | pjl \ + | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \ + | pyramid \ + | 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 | strongarm \ + | tahoe | thumb | tic4x | tic80 | tron \ + | v850 | v850e \ + | we32k \ + | x86 | xc16x | xscale | xscalee[bl] | xstormy16 | xtensa \ + | z8k | z80) + basic_machine=$basic_machine-unknown + ;; + m6811 | m68hc11 | m6812 | m68hc12) + # Motorola 68HC11/12. + basic_machine=$basic_machine-unknown + os=-none + ;; + m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) + ;; + ms1) + basic_machine=mt-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-* \ + | 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-* \ + | bfin-* | bs2000-* \ + | c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \ + | 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-* \ + | i*86-* | i860-* | i960-* | ia64-* \ + | ip2k-* | iq2000-* \ + | lm32-* \ + | m32c-* | m32r-* | m32rle-* \ + | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ + | m88110-* | m88k-* | maxq-* | mcore-* | 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-* \ + | mmix-* \ + | mt-* \ + | msp430-* \ + | nios-* | nios2-* \ + | none-* | np1-* | ns16k-* | ns32k-* \ + | orion-* \ + | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ + | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \ + | pyramid-* \ + | romp-* | rs6000-* \ + | 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-* | strongarm-* | sv1-* | sx?-* \ + | tahoe-* | thumb-* \ + | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* | tile-* \ + | tron-* \ + | v850-* | v850e-* | vax-* \ + | we32k-* \ + | x86-* | x86_64-* | xc16x-* | xps100-* | xscale-* | xscalee[bl]-* \ + | 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 + ;; + 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) + 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'm not sure what "Sysv32" means. Should this be sysv3.2? + 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 + ;; + 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-/'` + ;; + mvs) + basic_machine=i370-ibm + os=-mvs + ;; + 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 + ;; + 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) basic_machine=powerpc-unknown + ;; + ppc-*) 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-*) 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) + 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 + ;; + 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 + ;; + tic54x | c54x*) + basic_machine=tic54x-unknown + os=-coff + ;; + tic55x | c55x*) + basic_machine=tic55x-unknown + os=-coff + ;; + tic6x | c6x*) + basic_machine=tic6x-unknown + os=-coff + ;; + tile*) + basic_machine=tile-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 + ;; + 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. + -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* | -sunos | -sunos[34]*\ + | -hpux* | -unos* | -osf* | -luna* | -dgux* | -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* \ + | -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* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ + | -mingw32* | -linux-gnu* | -linux-newlib* | -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*) + # 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 + ;; + -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 + ;; + # 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 + # This also exists in the configure program, but was not the + # default. + # os=-sunos4 + ;; + 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 + ;; + -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: diff --git a/configure.files b/configure.files new file mode 100644 index 0000000..030bce8 --- /dev/null +++ b/configure.files @@ -0,0 +1,2 @@ +./admin/configure.in.min +configure.in.in diff --git a/configure.in b/configure.in new file mode 100644 index 0000000..c8fcd7d --- /dev/null +++ b/configure.in @@ -0,0 +1,166 @@ +dnl ======================================================= +dnl FILE: ./admin/configure.in.min +dnl ======================================================= + +dnl This file is part of the KDE libraries/packages +dnl Copyright (C) 2001 Stephan Kulow (coolo@kde.org) + +dnl This file is free software; you can redistribute it and/or +dnl modify it under the terms of the GNU Library General Public +dnl License as published by the Free Software Foundation; either +dnl version 2 of the License, or (at your option) any later version. + +dnl This library is distributed in the hope that it will be useful, +dnl but WITHOUT ANY WARRANTY; without even the implied warranty of +dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +dnl Library General Public License for more details. + +dnl You should have received a copy of the GNU Library General Public License +dnl along with this library; see the file COPYING.LIB. If not, write to +dnl the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, +dnl Boston, MA 02110-1301, USA. + +# Original Author was Kalle@kde.org +# I lifted it in some mater. (Stephan Kulow) +# I used much code from Janos Farkas + +dnl Process this file with autoconf to produce a configure script. + +AC_INIT(acinclude.m4) dnl a source file from your sub dir + +dnl This is so we can use kde-common +AC_CONFIG_AUX_DIR(admin) + +dnl This ksh/zsh feature conflicts with `cd blah ; pwd` +unset CDPATH + +dnl Checking host/target/build systems, for make, install etc. +AC_CANONICAL_SYSTEM +dnl Perform program name transformation +AC_ARG_PROGRAM + +dnl Automake doc recommends to do this only here. (Janos) +AM_INIT_AUTOMAKE(kdiff3, 0.9.92) dnl searches for some needed programs + +KDE_SET_PREFIX + +dnl generate the config header +AM_CONFIG_HEADER(config.h) dnl at the distribution this done + +dnl Checks for programs. +AC_CHECK_COMPILERS +AC_ENABLE_SHARED(yes) +AC_ENABLE_STATIC(no) +KDE_PROG_LIBTOOL + +dnl for NLS support. Call them in this order! +dnl WITH_NLS is for the po files +AM_KDE_WITH_NLS + +KDE_USE_QT(3.2) +AC_PATH_KDE +dnl ======================================================= +dnl FILE: configure.in.in +dnl ======================================================= + +#MIN_CONFIG(3.2) + +################################################### +# Check for Konqueror (copied from krusader-1.70) +################################################### + +AC_ARG_WITH(konqueror, + AC_HELP_STRING([--without-konqueror],[build KDiff3 without support Konqueror's servicemenus [default=with]]), + [with_konq=$withval], + [with_konq=yes] +) + +if test "$with_konq" != "no"; then + # check for the headers + have_libkonq=yes + KDE_CHECK_HEADER(konq_popupmenu.h, ,[have_libkonq=no] ) + + if test "$have_libkonq" = "no"; then + # if this var is 'yes', the configure-suppery drops a warning. + # see admin/configure.in.bot.end + warn_konq=yes + fi +fi + +if test "$have_libkonq" != "yes"; then + DO_NOT_COMPILE="$DO_NOT_COMPILE kdiff3plugin" +fi + +AM_CONDITIONAL(include_libkonq, test "$have_libkonq" = yes) + +dnl PACKAGE set before +AC_C_BIGENDIAN +AC_CHECK_KDEMAXPATHLEN + +KDE_CREATE_SUBDIRSLIST +AC_CONFIG_FILES([ Makefile ]) +AC_CONFIG_FILES([ doc/Makefile ]) +AC_CONFIG_FILES([ doc/da/Makefile ]) +AC_CONFIG_FILES([ doc/de/Makefile ]) +AC_CONFIG_FILES([ doc/en/Makefile ]) +AC_CONFIG_FILES([ doc/es/Makefile ]) +AC_CONFIG_FILES([ doc/et/Makefile ]) +AC_CONFIG_FILES([ doc/fr/Makefile ]) +AC_CONFIG_FILES([ doc/it/Makefile ]) +AC_CONFIG_FILES([ doc/nl/Makefile ]) +AC_CONFIG_FILES([ doc/pt/Makefile ]) +AC_CONFIG_FILES([ doc/sv/Makefile ]) +AC_CONFIG_FILES([ kdiff3plugin/Makefile ]) +AC_CONFIG_FILES([ kdiff3plugin/po/Makefile ]) +AC_CONFIG_FILES([ po/Makefile ]) +AC_CONFIG_FILES([ src/Makefile ]) +AC_OUTPUT +# Check if KDE_SET_PREFIX was called, and --prefix was passed to configure +if test -n "$kde_libs_prefix" -a -n "$given_prefix"; then + # And if so, warn when they don't match + if test "$kde_libs_prefix" != "$given_prefix"; then + # And if kde doesn't know about the prefix yet + echo ":"`kde-config --path exe`":" | grep ":$given_prefix/bin/:" 2>&1 >/dev/null + if test $? -ne 0; then + echo "" + echo "Warning: you chose to install this package in $given_prefix," + echo "but KDE was found in $kde_libs_prefix." + echo "For this to work, you will need to tell KDE about the new prefix, by ensuring" + echo "that KDEDIRS contains it, e.g. export KDEDIRS=$given_prefix:$kde_libs_prefix" + echo "Then restart KDE." + echo "" + fi + fi +fi + +if test x$GXX = "xyes" -a x$kde_have_gcc_visibility = "xyes" -a x$kde_cv_val_qt_gcc_visibility_patched = "xno"; then + echo "" + echo "Your GCC supports symbol visibility, but the patch for Qt supporting visibility" + echo "was not included. Therefore, GCC symbol visibility support remains disabled." + echo "" + echo "For better performance, consider including the Qt visibility supporting patch" + echo "located at:" + echo "" + echo "http://bugs.kde.org/show_bug.cgi?id=109386" + echo "" + echo "and recompile all of Qt and KDE. Note, this is entirely optional and" + echo "everything will continue to work just fine without it." + echo "" +fi + +if (test $warn_konq); + then echo "NOTICE: Since the Konqueror-headers were not found KDiff3 will be built without support for its service-menus and the KDiff3-service menu will not be built. (Install the package containing konq_popupmenu.h. Possibly kdebase-devel or on Debian libkonq4-dev etc.)" +fi + +if test "$all_tests" = "bad"; then + if test ! "$cache_file" = "/dev/null"; then + echo "" + echo "Please remove the file $cache_file after changing your setup" + echo "so that configure will find the changes next time." + echo "" + fi +else + echo "" + echo "Good - your configure finished. Start make now" + echo "" +fi diff --git a/configure.in.in b/configure.in.in new file mode 100644 index 0000000..a068c91 --- /dev/null +++ b/configure.in.in @@ -0,0 +1,34 @@ +#MIN_CONFIG(3.2) + +################################################### +# Check for Konqueror (copied from krusader-1.70) +################################################### + +AC_ARG_WITH(konqueror, + AC_HELP_STRING([--without-konqueror],[build KDiff3 without support Konqueror's servicemenus [default=with]]), + [with_konq=$withval], + [with_konq=yes] +) + +if test "$with_konq" != "no"; then + # check for the headers + have_libkonq=yes + KDE_CHECK_HEADER(konq_popupmenu.h, ,[have_libkonq=no] ) + + if test "$have_libkonq" = "no"; then + # if this var is 'yes', the configure-suppery drops a warning. + # see admin/configure.in.bot.end + warn_konq=yes + fi +fi + +if test "$have_libkonq" != "yes"; then + DO_NOT_COMPILE="$DO_NOT_COMPILE kdiff3plugin" +fi + +AM_CONDITIONAL(include_libkonq, test "$have_libkonq" = yes) + +AM_INIT_AUTOMAKE(kdiff3, 0.9.92) +AC_C_BIGENDIAN +AC_CHECK_KDEMAXPATHLEN + diff --git a/diff_ext_for_kdiff3/.depend b/diff_ext_for_kdiff3/.depend new file mode 100755 index 0000000..015c8d7 --- /dev/null +++ b/diff_ext_for_kdiff3/.depend @@ -0,0 +1,385 @@ +class_factory.o: class_factory.cpp class_factory.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/shlobj.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/ole2.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/winerror.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/objbase.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/rpc.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/windows.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/include/stdarg.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/windef.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/winnt.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/string.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/_mingw.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/include/stddef.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/basetsd.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/pshpack4.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/poppack.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/wincon.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/winbase.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/wingdi.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/winuser.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/winnls.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/winver.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/winnetwk.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/winreg.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/winsvc.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/cderr.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/dde.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/ddeml.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/dlgs.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/imm.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/lzexpand.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/mmsystem.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/nb30.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/rpcdce.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/basetyps.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/rpcdcep.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/rpcnsi.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/rpcnterr.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/shellapi.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/pshpack2.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/winperf.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/commdlg.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/winspool.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/winsock2.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/rpcndr.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/rpcnsip.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/objfwd.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/stdlib.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/wtypes.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/unknwn.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/objidl.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/cguid.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/olectlid.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/oleauto.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/oaidl.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/oleidl.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/shlguid.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/commctrl.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/prsht.h \ + diff_ext.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/windowsx.h \ + server.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/list \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/bits/functexcept.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/exception_defines.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/bits/stl_algobase.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/mingw32/bits/c++config.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/mingw32/bits/os_defines.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/cstring \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/cstddef \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/climits \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/limits.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/cstdlib \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/new \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/exception \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/iosfwd \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/mingw32/bits/c++locale.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/clocale \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/locale.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/cstdio \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/stdio.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/mingw32/bits/c++io.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/mingw32/bits/gthr.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/mingw32/bits/gthr-default.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/errno.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/cctype \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/ctype.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/bits/stringfwd.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/bits/postypes.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/cwchar \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/ctime \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/time.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/wchar.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/wctype.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/stdint.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/bits/stl_pair.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/bits/type_traits.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/bits/stl_iterator_base_types.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/bits/stl_iterator_base_funcs.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/bits/concept_check.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/bits/stl_iterator.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/debug/debug.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/cassert \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/assert.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/bits/allocator.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/mingw32/bits/c++allocator.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/ext/new_allocator.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/bits/stl_construct.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/bits/stl_uninitialized.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/bits/stl_list.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/bits/list.tcc \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/string \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/bits/char_traits.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/memory \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/bits/stl_raw_storage_iter.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/bits/stl_function.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/bits/basic_string.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/bits/atomicity.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/mingw32/bits/atomic_word.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/algorithm \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/bits/stl_algo.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/bits/stl_heap.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/bits/stl_tempbuf.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/bits/basic_string.tcc +diff_ext.o: diff_ext.cpp \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/assert.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/_mingw.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/stdio.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/include/stddef.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/include/stdarg.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/tchar.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/wchar.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/wctype.h \ + diff_ext.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/windows.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/windef.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/winnt.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/winerror.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/string.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/basetsd.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/pshpack4.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/poppack.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/wincon.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/winbase.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/wingdi.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/winuser.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/winnls.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/winver.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/winnetwk.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/winreg.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/winsvc.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/cderr.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/dde.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/ddeml.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/dlgs.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/imm.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/lzexpand.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/mmsystem.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/nb30.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/rpc.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/rpcdce.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/basetyps.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/rpcdcep.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/rpcnsi.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/rpcnterr.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/shellapi.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/pshpack2.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/winperf.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/commdlg.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/winspool.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/winsock2.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/ole2.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/objbase.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/rpcndr.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/rpcnsip.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/objfwd.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/stdlib.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/wtypes.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/unknwn.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/objidl.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/cguid.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/olectlid.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/oleauto.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/oaidl.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/oleidl.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/windowsx.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/shlobj.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/shlguid.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/commctrl.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/prsht.h \ + server.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/list \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/bits/functexcept.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/exception_defines.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/bits/stl_algobase.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/mingw32/bits/c++config.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/mingw32/bits/os_defines.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/cstring \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/cstddef \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/climits \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/limits.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/cstdlib \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/new \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/exception \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/iosfwd \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/mingw32/bits/c++locale.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/clocale \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/locale.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/cstdio \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/mingw32/bits/c++io.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/mingw32/bits/gthr.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/mingw32/bits/gthr-default.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/errno.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/cctype \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/ctype.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/bits/stringfwd.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/bits/postypes.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/cwchar \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/ctime \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/time.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/stdint.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/bits/stl_pair.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/bits/type_traits.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/bits/stl_iterator_base_types.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/bits/stl_iterator_base_funcs.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/bits/concept_check.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/bits/stl_iterator.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/debug/debug.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/cassert \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/bits/allocator.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/mingw32/bits/c++allocator.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/ext/new_allocator.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/bits/stl_construct.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/bits/stl_uninitialized.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/bits/stl_list.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/bits/list.tcc \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/string \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/bits/char_traits.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/memory \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/bits/stl_raw_storage_iter.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/bits/stl_function.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/bits/basic_string.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/bits/atomicity.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/mingw32/bits/atomic_word.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/algorithm \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/bits/stl_algo.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/bits/stl_heap.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/bits/stl_tempbuf.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/bits/basic_string.tcc \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/map \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/bits/stl_tree.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/bits/cpp_type_traits.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/bits/stl_map.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/bits/stl_multimap.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/vector \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/bits/stl_vector.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/bits/stl_bvector.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/bits/vector.tcc +server.o: server.cpp \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/stdio.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/_mingw.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/include/stddef.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/include/stdarg.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/windows.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/windef.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/winnt.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/winerror.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/string.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/basetsd.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/pshpack4.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/poppack.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/wincon.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/winbase.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/wingdi.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/winuser.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/winnls.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/winver.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/winnetwk.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/winreg.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/winsvc.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/cderr.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/dde.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/ddeml.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/dlgs.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/imm.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/lzexpand.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/mmsystem.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/nb30.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/rpc.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/rpcdce.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/basetyps.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/rpcdcep.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/rpcnsi.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/rpcnterr.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/shellapi.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/pshpack2.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/winperf.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/commdlg.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/winspool.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/winsock2.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/ole2.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/objbase.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/rpcndr.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/rpcnsip.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/objfwd.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/stdlib.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/wtypes.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/unknwn.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/objidl.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/cguid.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/olectlid.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/oleauto.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/oaidl.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/oleidl.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/tchar.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/wchar.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/wctype.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/shlguid.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/olectl.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/ocidl.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/initguid.h \ + server.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/list \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/bits/functexcept.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/exception_defines.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/bits/stl_algobase.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/mingw32/bits/c++config.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/mingw32/bits/os_defines.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/cstring \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/cstddef \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/climits \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/limits.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/cstdlib \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/new \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/exception \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/iosfwd \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/mingw32/bits/c++locale.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/clocale \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/locale.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/cstdio \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/mingw32/bits/c++io.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/mingw32/bits/gthr.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/mingw32/bits/gthr-default.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/errno.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/cctype \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/ctype.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/bits/stringfwd.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/bits/postypes.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/cwchar \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/ctime \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/time.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/stdint.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/bits/stl_pair.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/bits/type_traits.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/bits/stl_iterator_base_types.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/bits/stl_iterator_base_funcs.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/bits/concept_check.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/bits/stl_iterator.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/debug/debug.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/cassert \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/assert.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/bits/allocator.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/mingw32/bits/c++allocator.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/ext/new_allocator.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/bits/stl_construct.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/bits/stl_uninitialized.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/bits/stl_list.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/bits/list.tcc \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/string \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/bits/char_traits.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/memory \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/bits/stl_raw_storage_iter.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/bits/stl_function.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/bits/basic_string.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/bits/atomicity.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/mingw32/bits/atomic_word.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/algorithm \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/bits/stl_algo.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/bits/stl_heap.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/bits/stl_tempbuf.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/bits/basic_string.tcc \ + class_factory.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/shlobj.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/commctrl.h \ + c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/prsht.h diff --git a/diff_ext_for_kdiff3/LICENSE b/diff_ext_for_kdiff3/LICENSE new file mode 100644 index 0000000..c05a18d --- /dev/null +++ b/diff_ext_for_kdiff3/LICENSE @@ -0,0 +1,25 @@ +Diff-Ext: Copyright (c) 2003-2006, Sergey Zorin + 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. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED +TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR +CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; +OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF +ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/diff_ext_for_kdiff3/Makefile b/diff_ext_for_kdiff3/Makefile new file mode 100644 index 0000000..65177aa --- /dev/null +++ b/diff_ext_for_kdiff3/Makefile @@ -0,0 +1,64 @@ +# Project: diff_ext +# Generates diff_ext_for_kdiff3.dll with gcc. +# Can be used for Cygwin and MingW (MingW ignores -mno-cygwin) +# +PROJ := diff_ext_for_kdiff3 + +CXX ?= g++.exe + +ifdef DEBUG + CXXFLAGS ?= -g +else + CXXFLAGS ?= -Os + LDFLAGS += -s +endif +CXXFLAGS += -ansi -pedantic -Wall -W -D_UNICODE -DUNICODE + +LIBS := -luuid -lole32 +DEFFILE = $(PROJ).def +STATICLIB = $(PROJ).a +EXPLIB = $(PROJ).exp + +SRC-CXX = $(wildcard *.cpp) +SRC-RC = $(wildcard *.rc) + +OBJ := $(SRC-CXX:.cpp=.o) +RES := $(SRC-RC:.rc=.res) +OBJ += $(RES) +DLL := $(PROJ).dll + +.PHONY: all clean + +.SUFFIXES: .rc .res + +all: .depend $(DLL) + +debug: + $(MAKE) DEBUG=YES UNICODE=YES + +release: + $(MAKE) + +.depend: Makefile $(SRC-RC) $(SRC-CXX) + $(CXX) -M $(CXXFLAGS) $(SRC-RC) $(SRC-CXX) > .depend + +include .depend + +clean: clean-custom + ${RM} $(OBJ) $(DLL) ${EXPLIB} $(STATICLIB) + +$(DLL): $(OBJ) + dllwrap.exe \ + --mno-cygwin \ + --def $(DEFFILE) \ + --output-exp ${EXPLIB} \ + --driver-name c++ -L/usr/local/lib -L/usr/lib/mingw \ + --implib $(STATICLIB) \ + $(OBJ) $(LDFLAGS) $(LIBS) \ + -o $@ + +.cpp.o: + $(CXX) $(CXXFLAGS) -c $< -o $@ + +.rc.res: + windres.exe $< -J rc -o $@ -O coff -DMING diff --git a/diff_ext_for_kdiff3/README b/diff_ext_for_kdiff3/README new file mode 100644 index 0000000..8adde0c --- /dev/null +++ b/diff_ext_for_kdiff3/README @@ -0,0 +1,41 @@ +Diff-Ext for KDiff3 - Readme +============================ + +Authors: + Sergey Zorin (Author of diff-ext, see http://diff-ext.sourceforge.net) + Joachim Eibl (KDiff3-specific extensions and integration, see http://kdiff3.sourceforge.net) + + +Copyright (c): +Original Diff-Ext: Copyright (c) 2003-2006, Sergey Zorin, All rights reserved. +Extensions for KDiff3: Copyright (c) 2006, Joachim Eibl + + +License: See file LICENSE in this subdirectory + + +Building: +Via MinGW-compiler package (http://www.mingw.org/): Compile via gnu-make (Makefile) +Via MSVC2005: Use vcproj-file. + + +Installation: +For basic testing you can run "regsvr32 diff_ext_for_kdiff3.dll". +To use all features the installation that comes with the KDiff3-setup*.exe is recommended. +See also the nsi-file available on the KDiff3-subversion-repository: +http://svn.sourceforge.net/viewvc/*checkout*/kdiff3/trunk/kdiff3/windows_installer/kdiff3.nsi + + +Translation: +If you would like help translating diff-ext-for-kdiff3 please copy the diff_ext.pot to +diff_ext_xx.po (where xx is the language-shortcut). +Then edit that file and fill in the msgstr-string for each respective msgid-string. +Then place the for in the KDiff3-translations subdirectory. +Use the language selection within KDiff3 to switch the language or set the language shortcut +in the registry HKEY_CURRENT_USER\Software\KDiff3\diff-ext: Language +If everything works, please send me the created file. + + +Have fun, +Joachim + diff --git a/diff_ext_for_kdiff3/class_factory.cpp b/diff_ext_for_kdiff3/class_factory.cpp new file mode 100644 index 0000000..0618862 --- /dev/null +++ b/diff_ext_for_kdiff3/class_factory.cpp @@ -0,0 +1,77 @@ +/* + * Copyright (c) 2003, Sergey Zorin. All rights reserved. + * + * This software is distributable under the BSD license. See the terms + * of the BSD license in the LICENSE file provided with this software. + * + */ + +#include "class_factory.h" +#include "diff_ext.h" +#include "server.h" + +CLASS_FACTORY::CLASS_FACTORY() { + _ref_count = 0L; + + SERVER::instance()->lock(); +} + +CLASS_FACTORY::~CLASS_FACTORY() { + SERVER::instance()->release(); +} + +STDMETHODIMP +CLASS_FACTORY::QueryInterface(REFIID riid, void** ppv) { + HRESULT ret = E_NOINTERFACE; + *ppv = 0; + + if(IsEqualIID(riid, IID_IUnknown) || IsEqualIID(riid, IID_IClassFactory)) { + *ppv = static_cast(this); + + AddRef(); + + ret = NOERROR; + } + + return ret; +} + +STDMETHODIMP_(ULONG) +CLASS_FACTORY::AddRef() { + return InterlockedIncrement((LPLONG)&_ref_count); +} + +STDMETHODIMP_(ULONG) +CLASS_FACTORY::Release() { + ULONG ret = 0L; + + if(InterlockedDecrement((LPLONG)&_ref_count) != 0) + ret = _ref_count; + else + delete this; + + return ret; +} + +STDMETHODIMP +CLASS_FACTORY::CreateInstance(IUnknown* outer, REFIID refiid, void** obj) { + HRESULT ret = CLASS_E_NOAGGREGATION; + *obj = 0; + + // Shell extensions typically don't support aggregation (inheritance) + if(outer == 0) { + DIFF_EXT* ext = new DIFF_EXT(); + + if(ext == 0) + ret = E_OUTOFMEMORY; + else + ret = ext->QueryInterface(refiid, obj); + } + + return ret; +} + +STDMETHODIMP +CLASS_FACTORY::LockServer(BOOL) { + return NOERROR; +} diff --git a/diff_ext_for_kdiff3/class_factory.h b/diff_ext_for_kdiff3/class_factory.h new file mode 100644 index 0000000..da91979 --- /dev/null +++ b/diff_ext_for_kdiff3/class_factory.h @@ -0,0 +1,33 @@ +/* + * Copyright (c) 2003, Sergey Zorin. All rights reserved. + * + * This software is distributable under the BSD license. See the terms + * of the BSD license in the LICENSE file provided with this software. + * + */ + +#ifndef __class_factory_h__ +#define __class_factory_h__ + +#include +#include + +class CLASS_FACTORY : public IClassFactory { + public: + CLASS_FACTORY(); + virtual ~CLASS_FACTORY(); + + //IUnknown members + STDMETHODIMP QueryInterface(REFIID, void**); + STDMETHODIMP_(ULONG) AddRef(); + STDMETHODIMP_(ULONG) Release(); + + //ICLASS_FACTORY members + STDMETHODIMP CreateInstance(IUnknown*, REFIID, void**); + STDMETHODIMP LockServer(BOOL); + + private: + ULONG _ref_count; +}; + +#endif //__class_factory_h__ diff --git a/diff_ext_for_kdiff3/diff_ext.cpp b/diff_ext_for_kdiff3/diff_ext.cpp new file mode 100755 index 0000000..f83f068 --- /dev/null +++ b/diff_ext_for_kdiff3/diff_ext.cpp @@ -0,0 +1,624 @@ +/* + * Copyright (c) 2003-2006, Sergey Zorin. All rights reserved. + * + * This software is distributable under the BSD license. See the terms + * of the BSD license in the LICENSE file provided with this software. + * + */ +#define _CRT_SECURE_NO_DEPRECATE + +#include +#include +#include + +#include "diff_ext.h" +#include +#include + + +#ifdef UNICODE + +static void parseString( const std::wstring& s, size_t& i /*pos*/, std::wstring& r /*result*/ ) +{ + size_t size = s.size(); + ++i; // Skip initial '"' + for( ; i s_translationMap; +static tstring s_translationFileName; + +void readTranslationFile() +{ + s_translationMap.clear(); + FILE* pFile = _tfopen( s_translationFileName.c_str(), TEXT("rb") ); + if ( pFile ) + { + MESSAGELOG( TEXT( "Reading translations: " ) + s_translationFileName ); + std::vector buffer; + try { + if ( fseek(pFile, 0, SEEK_END)==0 ) + { + size_t length = ftell(pFile); // Get the file length + buffer.resize(length); + fseek(pFile, 0, SEEK_SET ); + fread(&buffer[0], 1, length, pFile ); + } + } + catch(...) + { + } + fclose(pFile); + + if (buffer.size()>0) + { + size_t bufferSize = buffer.size(); + int offset = 0; + if ( buffer[0]=='\xEF' && buffer[1]=='\xBB' && buffer[2]=='\xBF' ) + { + offset += 3; + bufferSize -= 3; + } + + size_t sLength = MultiByteToWideChar(CP_UTF8,0,&buffer[offset], (int)bufferSize, 0, 0 ); + std::wstring s( sLength, L' ' ); + MultiByteToWideChar(CP_UTF8,0,&buffer[offset], (int)bufferSize, &s[0], (int)s.size() ); + + // Now analyse the file and extract translation strings + std::wstring msgid; + std::wstring msgstr; + msgid.reserve( 1000 ); + msgstr.reserve( 1000 ); + bool bExpectingId = true; + for( size_t i=0; i5 && wcsncmp( &s[i], L"msgid", 5 )==0 ) + { + if ( !msgid.empty() && !msgstr.empty() ) + { + s_translationMap[msgid] = msgstr; + } + bExpectingId = true; + msgid.clear(); + i+=4; + } + else if ( sLength-i>6 && wcsncmp( &s[i], L"msgstr", 6 )==0 ) + { + bExpectingId = false; + msgstr.clear(); + i+=5; + } + else + { + // Unexpected ? + } + } + } + } + else + { + ERRORLOG( TEXT( "Reading translations failed: " ) + s_translationFileName ); + } +} + +static tstring getTranslation( const tstring& fallback ) +{ + std::map< std::wstring, std::wstring >::iterator i = s_translationMap.find( fallback ); + if (i!=s_translationMap.end()) + return i->second; + return fallback; +} +#else + +static tstring getTranslation( const tstring& fallback ) +{ + return fallback; +} + +#endif + + +static void replaceArgs( tstring& s, const tstring& r1, const tstring& r2=TEXT(""), const tstring& r3=TEXT("") ) +{ + tstring arg1 = TEXT("%1"); + size_t pos1 = s.find( arg1 ); + tstring arg2 = TEXT("%2"); + size_t pos2 = s.find( arg2 ); + tstring arg3 = TEXT("%3"); + size_t pos3 = s.find( arg3 ); + if ( pos1 != size_t(-1) ) + { + s.replace( pos1, arg1.length(), r1 ); + if ( pos2 != size_t(-1) && pos1recent_files() ) +{ + LOG(); + _resource = SERVER::instance()->handle(); + + SERVER::instance()->lock(); +} + +DIFF_EXT::~DIFF_EXT() +{ + LOG(); + if(_resource != SERVER::instance()->handle()) { + FreeLibrary(_resource); + } + + SERVER::instance()->release(); +} + +STDMETHODIMP +DIFF_EXT::QueryInterface(REFIID refiid, void** ppv) +{ + HRESULT ret = E_NOINTERFACE; + *ppv = 0; + + if(IsEqualIID(refiid, IID_IShellExtInit) || IsEqualIID(refiid, IID_IUnknown)) { + *ppv = static_cast(this); + } else if (IsEqualIID(refiid, IID_IContextMenu)) { + *ppv = static_cast(this); + } + + if(*ppv != 0) { + AddRef(); + + ret = NOERROR; + } + + return ret; +} + +STDMETHODIMP_(ULONG) +DIFF_EXT::AddRef() +{ + return InterlockedIncrement((LPLONG)&_ref_count); +} + +STDMETHODIMP_(ULONG) +DIFF_EXT::Release() +{ + ULONG ret = 0L; + + if(InterlockedDecrement((LPLONG)&_ref_count) != 0) { + ret = _ref_count; + } else { + delete this; + } + + return ret; +} + + + +STDMETHODIMP +DIFF_EXT::Initialize(LPCITEMIDLIST /*folder not used*/, IDataObject* data, HKEY /*key not used*/) +{ + LOG(); + +#ifdef UNICODE + tstring installDir = SERVER::instance()->getRegistryKeyString( TEXT(""), TEXT("InstallDir") ); + tstring language = SERVER::instance()->getRegistryKeyString( TEXT(""), TEXT("Language") ); + tstring translationFileName = installDir + TEXT("\\translations\\diff_ext_") + language + TEXT(".po"); + if ( s_translationFileName != translationFileName ) + { + s_translationFileName = translationFileName; + readTranslationFile(); + } +#endif + + FORMATETC format = {CF_HDROP, 0, DVASPECT_CONTENT, -1, TYMED_HGLOBAL}; + STGMEDIUM medium; + medium.tymed = TYMED_HGLOBAL; + HRESULT ret = E_INVALIDARG; + + if(data->GetData(&format, &medium) == S_OK) + { + HDROP drop = (HDROP)medium.hGlobal; + m_nrOfSelectedFiles = DragQueryFile(drop, 0xFFFFFFFF, 0, 0); + + TCHAR tmp[MAX_PATH]; + + //initialize_language(); + + if (m_nrOfSelectedFiles >= 1 && m_nrOfSelectedFiles <= 3) + { + DragQueryFile(drop, 0, tmp, MAX_PATH); + _file_name1 = tmp; + + if(m_nrOfSelectedFiles >= 2) + { + DragQueryFile(drop, 1, tmp, MAX_PATH); + _file_name2 = tmp; + } + + if( m_nrOfSelectedFiles == 3) + { + DragQueryFile(drop, 2, tmp, MAX_PATH); + _file_name3 = tmp; + } + + ret = S_OK; + } + } + else + { + SYSERRORLOG(TEXT("GetData")); + } + + return ret; +} + +static int insertMenuItemHelper( HMENU menu, UINT id, UINT position, const tstring& text, + UINT fState = MFS_ENABLED, HMENU hSubMenu=0 ) +{ + MENUITEMINFO item_info; + ZeroMemory(&item_info, sizeof(item_info)); + item_info.cbSize = sizeof(MENUITEMINFO); + item_info.wID = id; + if (text.empty()) + { // Separator + item_info.fMask = MIIM_TYPE; + item_info.fType = MFT_SEPARATOR; + item_info.dwTypeData = 0; + } + else + { + item_info.fMask = MIIM_ID | MIIM_TYPE | MIIM_STATE | (hSubMenu!=0 ? MIIM_SUBMENU : 0); + item_info.fType = MFT_STRING; + item_info.fState = fState; + item_info.dwTypeData = (LPTSTR)text.c_str(); + item_info.hSubMenu = hSubMenu; + } + if ( 0 == InsertMenuItem(menu, position, TRUE, &item_info) ) + SYSERRORLOG(TEXT("InsertMenuItem")); + return id; +} + + +STDMETHODIMP +DIFF_EXT::QueryContextMenu(HMENU menu, UINT position, UINT first_cmd, UINT /*last_cmd not used*/, UINT flags) +{ + LOG(); + m_id_Diff = UINT(-1); + m_id_DiffWith = UINT(-1); + m_id_DiffLater = UINT(-1); + m_id_MergeWith = UINT(-1); + m_id_Merge3 = UINT(-1); + m_id_Diff3 = UINT(-1); + m_id_DiffWith_Base = UINT(-1); + m_id_ClearList = UINT(-1); + m_id_About = UINT(-1); + + HRESULT ret = MAKE_HRESULT(SEVERITY_SUCCESS, FACILITY_NULL, 0); + + if(!(flags & CMF_DEFAULTONLY)) + { + /* Menu structure: + KDiff3 -> (1 File selected): Save 'selection' for later comparison (push onto history stack) + Compare 'selection' with first file on history stack. + Compare 'selection' with -> choice from history stack + Merge 'selection' with first file on history stack. + Merge 'selection' with last two files on history stack. + (2 Files selected): Compare 's1' with 's2' + Merge 's1' with 's2' + (3 Files selected): Compare 's1', 's2' and 's3' + */ + HMENU subMenu = CreateMenu(); + + UINT id = first_cmd; + m_id_FirstCmd = first_cmd; + + insertMenuItemHelper( menu, id++, position++, TEXT("") ); // begin separator + + tstring menuString; + UINT pos2=0; + if(m_nrOfSelectedFiles == 1) + { + size_t nrOfRecentFiles = m_recentFiles.size(); + tstring menuStringCompare = i18n("Compare with %1"); + tstring menuStringMerge = i18n("Merge with %1"); + tstring firstFileName; + if( nrOfRecentFiles>=1 ) + { + tstring firstFileName = TEXT("'") + cut_to_length( m_recentFiles.front() ) + TEXT("'"); + } + replaceArgs( menuStringCompare, firstFileName ); + replaceArgs( menuStringMerge, firstFileName ); + m_id_DiffWith = insertMenuItemHelper( subMenu, id++, pos2++, menuStringCompare, nrOfRecentFiles >=1 ? MFS_ENABLED : MFS_DISABLED ); + m_id_MergeWith = insertMenuItemHelper( subMenu, id++, pos2++, menuStringMerge, nrOfRecentFiles >=1 ? MFS_ENABLED : MFS_DISABLED ); + + //if( nrOfRecentFiles>=2 ) + //{ + // tstring firstFileName = cut_to_length( m_recentFiles.front() ); + // tstring secondFileName = cut_to_length( *(++m_recentFiles.begin()) ); + //} + m_id_Merge3 = insertMenuItemHelper( subMenu, id++, pos2++, i18n("3-way merge with base"), + nrOfRecentFiles >=2 ? MFS_ENABLED : MFS_DISABLED ); + + menuString = i18n("Save '%1' for later"); + replaceArgs( menuString, _file_name1 ); + m_id_DiffLater = insertMenuItemHelper( subMenu, id++, pos2++, menuString ); + + HMENU file_list = CreateMenu(); + std::list::iterator i; + m_id_DiffWith_Base = id; + int n = 0; + for( i = m_recentFiles.begin(); i!=m_recentFiles.end(); ++i ) + { + tstring s = cut_to_length( *i ); + insertMenuItemHelper( file_list, id++, n, s ); + ++n; + } + + insertMenuItemHelper( subMenu, id++, pos2++, i18n("Compare with ..."), + nrOfRecentFiles > 0 ? MFS_ENABLED : MFS_DISABLED, file_list ); + + m_id_ClearList = insertMenuItemHelper( subMenu, id++, pos2++, i18n("Clear list"), nrOfRecentFiles >=1 ? MFS_ENABLED : MFS_DISABLED ); + } + else if(m_nrOfSelectedFiles == 2) + { + //= "Diff " + cut_to_length(_file_name1, 20)+" and "+cut_to_length(_file_name2, 20); + m_id_Diff = insertMenuItemHelper( subMenu, id++, pos2++, i18n("Compare") ); + } + else if ( m_nrOfSelectedFiles == 3 ) + { + m_id_Diff3 = insertMenuItemHelper( subMenu, id++, pos2++, i18n("3 way comparison") ); + } + else + { + // More than 3 files selected? + } + m_id_About = insertMenuItemHelper( subMenu, id++, pos2++, i18n("About Diff-Ext ...") ); + + insertMenuItemHelper( menu, id++, position++, TEXT("KDiff3"), MFS_ENABLED, subMenu ); + + insertMenuItemHelper( menu, id++, position++, TEXT("") ); // final separator + + ret = MAKE_HRESULT(SEVERITY_SUCCESS, FACILITY_NULL, id-first_cmd); + } + + return ret; +} + +STDMETHODIMP +DIFF_EXT::InvokeCommand(LPCMINVOKECOMMANDINFO ici) +{ + HRESULT ret = NOERROR; + + _hwnd = ici->hwnd; + + if(HIWORD(ici->lpVerb) == 0) + { + UINT id = m_id_FirstCmd + LOWORD(ici->lpVerb); + if(id == m_id_Diff) + { + LOG(); + diff( TEXT("\"") + _file_name1 + TEXT("\" \"") + _file_name2 + TEXT("\"") ); + } + else if(id == m_id_Diff3) + { + LOG(); + diff( TEXT("\"") + _file_name1 + TEXT("\" \"") + _file_name2 + TEXT("\" \"") + _file_name3 + TEXT("\"") ); + } + else if(id == m_id_Merge3) + { + LOG(); + std::list< tstring >::iterator iFrom = m_recentFiles.begin(); + std::list< tstring >::iterator iBase = iFrom; + ++iBase; + diff( TEXT("-m \"") + *iBase + TEXT("\" \"") + *iFrom + TEXT("\" \"") + _file_name1 + TEXT("\"") ); + } + else if(id == m_id_DiffWith) + { + LOG(); + diff_with(0, false); + } + else if(id == m_id_MergeWith) + { + LOG(); + diff_with(0, true); + } + else if(id == m_id_ClearList) + { + LOG(); + m_recentFiles.clear(); + } + else if(id == m_id_DiffLater) + { + MESSAGELOG(TEXT("Diff Later: ")+_file_name1); + m_recentFiles.remove( _file_name1 ); + m_recentFiles.push_front( _file_name1 ); + } + else if(id >= m_id_DiffWith_Base && id < m_id_DiffWith_Base+m_recentFiles.size()) + { + LOG(); + diff_with(id-m_id_DiffWith_Base, false); + } + else if(id == m_id_About) + { + LOG(); + MessageBox( _hwnd, (i18n("Diff-Ext Copyright (c) 2003-2006, Sergey Zorin. All rights reserved.\n") + + i18n("This software is distributable under the BSD license.\n") + + i18n("Some extensions for KDiff3 by Joachim Eibl.\n") + + i18n("Homepage for Diff-Ext: http://diff-ext.sourceforge.net\n") + + i18n("Homepage for KDiff3: http://kdiff3.sourceforge.net")).c_str() + , i18n("About Diff-Ext for KDiff3").c_str(), MB_OK ); + } + else + { + ret = E_INVALIDARG; + TCHAR verb[80]; + _sntprintf(verb, 79, TEXT("Command id: %d"), LOWORD(ici->lpVerb)); + verb[79]=0; + ERRORLOG(verb); + } + } + + return ret; +} + +STDMETHODIMP +DIFF_EXT::GetCommandString(UINT idCmd, UINT uFlags, UINT*, LPSTR pszName, UINT cchMax) +{ + // LOG(); // Gets called very often + HRESULT ret = NOERROR; + + if(uFlags == GCS_HELPTEXT) { + tstring helpString; + if( idCmd == m_id_Diff ) + { + helpString = i18n("Compare selected files"); + } + else if( idCmd == m_id_DiffWith ) + { + if(!m_recentFiles.empty()) + { + helpString = i18n("Compare '%1' with '%2'"); + replaceArgs( helpString, _file_name1, m_recentFiles.front() ); + } + } + else if(idCmd == m_id_DiffLater) + { + helpString = i18n("Save '%1' for later operation"); + replaceArgs( helpString, _file_name1 ); + } + else if((idCmd >= m_id_DiffWith_Base) && (idCmd < m_id_DiffWith_Base+m_recentFiles.size())) + { + if( !m_recentFiles.empty() ) + { + unsigned int num = idCmd - m_id_DiffWith_Base; + std::list::iterator i = m_recentFiles.begin(); + for(unsigned int j = 0; j < num && i != m_recentFiles.end(); j++) + i++; + + if ( i!=m_recentFiles.end() ) + { + helpString = i18n("Compare '%1' with '%2'"); + replaceArgs( helpString, _file_name1, *i ); + } + } + } + lstrcpyn( (LPTSTR)pszName, helpString.c_str(), cchMax ); + } + + return ret; +} + +void +DIFF_EXT::diff( const tstring& arguments ) +{ + LOG(); + STARTUPINFO si; + PROCESS_INFORMATION pi; + bool bError = true; + tstring command = SERVER::instance()->getRegistryKeyString( TEXT(""), TEXT("diffcommand") ); + tstring commandLine = TEXT("\"") + command + TEXT("\" ") + arguments; + if ( ! command.empty() ) + { + ZeroMemory(&si, sizeof(si)); + si.cb = sizeof(si); + if (CreateProcess(command.c_str(), (LPTSTR)commandLine.c_str(), 0, 0, FALSE, 0, 0, 0, &si, &pi) == 0) + { + SYSERRORLOG(TEXT("CreateProcess") + command); + } + else + { + bError = false; + CloseHandle( pi.hProcess ); + CloseHandle( pi.hThread ); + } + } + + if (bError) + { + tstring message = i18n("Could not start KDiff3. Please rerun KDiff3 installation."); + message += TEXT("\n") + i18n("Command") + TEXT(": ") + command; + message += TEXT("\n") + i18n("CommandLine") + TEXT(": ") + commandLine; + MessageBox(_hwnd, message.c_str(), i18n("Diff-Ext For KDiff3").c_str(), MB_OK); + } +} + +void +DIFF_EXT::diff_with(unsigned int num, bool bMerge) +{ + LOG(); + std::list::iterator i = m_recentFiles.begin(); + for(unsigned int j = 0; j < num && i!=m_recentFiles.end(); j++) { + i++; + } + + if ( i!=m_recentFiles.end() ) + _file_name2 = *i; + + diff( (bMerge ? TEXT("-m \"") : TEXT("\"") ) + _file_name2 + TEXT("\" \"") + _file_name1 + TEXT("\"") ); +} + + +tstring +DIFF_EXT::cut_to_length(const tstring& in, size_t max_len) +{ + tstring ret; + if( in.length() > max_len) + { + ret = in.substr(0, (max_len-3)/2); + ret += TEXT("..."); + ret += in.substr( in.length()-(max_len-3)/2 ); + } + else + { + ret = in; + } + + return ret; +} diff --git a/diff_ext_for_kdiff3/diff_ext.h b/diff_ext_for_kdiff3/diff_ext.h new file mode 100755 index 0000000..2f89d34 --- /dev/null +++ b/diff_ext_for_kdiff3/diff_ext.h @@ -0,0 +1,67 @@ +/* + * Copyright (c) 2003-2004, Sergey Zorin. All rights reserved. + * + * This software is distributable under the BSD license. See the terms + * of the BSD license in the LICENSE file provided with this software. + * + */ + +#ifndef __diff_ext_h__ +#define __diff_ext_h__ + +#include +#include +#include + +#include "server.h" + + +// this is the actual OLE Shell context menu handler +class DIFF_EXT : public IContextMenu, IShellExtInit { + public: + DIFF_EXT(); + virtual ~DIFF_EXT(); + + //IUnknown members + STDMETHODIMP QueryInterface(REFIID interface_id, void** result); + STDMETHODIMP_(ULONG) AddRef(); + STDMETHODIMP_(ULONG) Release(); + + //IShell members + STDMETHODIMP QueryContextMenu(HMENU menu, UINT index, UINT cmd_first, UINT cmd_last, UINT flags); + STDMETHODIMP InvokeCommand(LPCMINVOKECOMMANDINFO info); + STDMETHODIMP GetCommandString(UINT cmd, UINT flags, UINT* reserved, LPSTR name, UINT name_length); + + //IShellExtInit methods + STDMETHODIMP Initialize(LPCITEMIDLIST folder, IDataObject* subj, HKEY key); + + private: + void diff( const tstring& arguments ); + void diff_with(unsigned int num, bool bMerge); + tstring cut_to_length(const tstring&, size_t length = 64); + void initialize_language(); + + private: + UINT m_nrOfSelectedFiles; + tstring _file_name1; + tstring _file_name2; + tstring _file_name3; + HINSTANCE _resource; + HWND _hwnd; + + ULONG _ref_count; + + std::list< tstring >& m_recentFiles; + UINT m_id_FirstCmd; + UINT m_id_Diff; + UINT m_id_DiffWith; + UINT m_id_DiffLater; + UINT m_id_MergeWith; + UINT m_id_Merge3; + UINT m_id_Diff3; + UINT m_id_DiffWith_Base; + UINT m_id_About; + UINT m_id_ClearList; +}; + +#endif // __diff_ext_h__ diff --git a/diff_ext_for_kdiff3/diff_ext.pot b/diff_ext_for_kdiff3/diff_ext.pot new file mode 100644 index 0000000..6cc829c --- /dev/null +++ b/diff_ext_for_kdiff3/diff_ext.pot @@ -0,0 +1,96 @@ +# Diff-ext-for-KDiff3 +# Copyright (C) 2006 Joachim Eibl +# This file is distributed under the same license as the diff-ext-for-KDiff3 package. +# PO-Template created by Joachim Eibl , 2006. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2006-10-03 06:05+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=CHARSET\n" +"Content-Transfer-Encoding: 8bit\n" + +#: diff_ext.cpp:368 diff_ext.cpp:402 +msgid "Compare with" +msgstr "" + +#: diff_ext.cpp:369 +msgid "Merge with" +msgstr "" + +#: diff_ext.cpp:384 +msgid "3-way merge with base" +msgstr "" + +#: diff_ext.cpp:387 +msgid "Save '%1' for later comparison or merge" +msgstr "" + +#: diff_ext.cpp:408 +msgid "Compare" +msgstr "" + +#: diff_ext.cpp:412 +msgid "3 way comparison" +msgstr "" + +#: diff_ext.cpp:418 +msgid "About Diff-Ext ..." +msgstr "" + +#: diff_ext.cpp:482 +msgid "Diff-Ext Copyright (c) 2003-2006, Sergey Zorin. All rights reserved.\n" +msgstr "" + +#: diff_ext.cpp:483 +msgid "This software is distributable under the BSD license.\n" +msgstr "" + +#: diff_ext.cpp:484 +msgid "Some extensions for KDiff3 by Joachim Eibl.\n" +msgstr "" + +#: diff_ext.cpp:485 +msgid "Homepage for Diff-Ext: http://diff-ext.sourceforge.net\n" +msgstr "" + +#: diff_ext.cpp:486 +msgid "Homepage for KDiff3: http://kdiff3.sourceforge.net" +msgstr "" + +#: diff_ext.cpp:487 +msgid "About Diff-Ext for KDiff3" +msgstr "" + +#: diff_ext.cpp:512 +msgid "Compare selected files" +msgstr "" + +#: diff_ext.cpp:518 diff_ext.cpp:538 +msgid "Compare '%1' with '%2'" +msgstr "" + +#: diff_ext.cpp:524 +msgid "Save '%1' for later operation" +msgstr "" + +#: diff_ext.cpp:576 +msgid "Could not start KDiff3. Please rerun KDiff3 installation." +msgstr "" + +#: diff_ext.cpp:577 +msgid "Command" +msgstr "" + +#: diff_ext.cpp:578 +msgid "CommandLine" +msgstr "" + +#: diff_ext.cpp:579 +msgid "Diff-Ext For KDiff3" +msgstr "" diff --git a/diff_ext_for_kdiff3/diff_ext_de.po b/diff_ext_for_kdiff3/diff_ext_de.po new file mode 100755 index 0000000..f50ad71 --- /dev/null +++ b/diff_ext_for_kdiff3/diff_ext_de.po @@ -0,0 +1,102 @@ +# 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: \n" +"POT-Creation-Date: 2006-09-04 15:35+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=CHARSET\n" +"Content-Transfer-Encoding: 8bit\n" + +#: diff_ext.cpp:363 +msgid "Compare with %1" +msgstr "Vergleichen mit %1" + +#: diff_ext.cpp:364 +msgid "Merge with %1" +msgstr "Zusammenführen mit %1" + +#: diff_ext.cpp:379 +msgid "3-way merge with base" +msgstr "3-Wege Zusammenführung mit Basis" + +#: diff_ext.cpp:382 +msgid "Save '%1' for later" +msgstr "Speichere '%1' für später" + +#: diff_ext.cpp:404 +msgid "Compare with ..." +msgstr "Vergleichen mit ..." + +#: diff_ext.cpp:403 +msgid "Compare" +msgstr "Vergleichen" + +#: diff_ext.cpp:403 +msgid "Clear list" +msgstr "Liste löschen" + + +#: diff_ext.cpp:407 +msgid "3 way comparison" +msgstr "Vergleiche 3 Dateien" + +#: diff_ext.cpp:413 +msgid "About Diff-Ext ..." +msgstr "Ãœber Diff-Ext ..." + +#: diff_ext.cpp:474 +msgid "Diff-Ext Copyright (c) 2003-2006, Sergey Zorin. All rights reserved.\n" +msgstr "Diff-Ext Copyright (c) 2003-2006, Sergey Zorin. Alle Rechte vorbehalten.\n" + +#: diff_ext.cpp:475 +msgid "This software is distributable under the BSD license.\n" +msgstr "Weitergabe dieses Programms unter den Bedingungen der BSD Lizenz.\n" + +#: diff_ext.cpp:476 +msgid "Some extensions for KDiff3 by Joachim Eibl.\n" +msgstr "Einige Erweiterungen für KDiff3 von Joachim Eibl.\n" + +#: diff_ext.cpp:477 +msgid "See the homepage http://diff-ext.sourceforge.net" +msgstr "Siehe die Homepage http://diff-ext.sourceforge.net" + +#: diff_ext.cpp:478 +msgid "About Diff-Ext for KDiff3" +msgstr "Ãœber Diff-Ext für KDiff3" + +#: diff_ext.cpp:503 +msgid "Compare selected files" +msgstr "Vergleiche markierte Dateien" + +#: diff_ext.cpp:509 diff_ext.cpp:529 +msgid "Compare '%1' with '%2'" +msgstr "Vergleiche '%1' mit '%2'" + +#: diff_ext.cpp:515 +msgid "Merke '%1' für spätere Aktion" +msgstr "" + +#: diff_ext.cpp:567 +msgid "Could not start KDiff3. Please rerun KDiff3 installation." +msgstr "Konnte KDiff3 nicht starten. Bitte wiederholen Sie die KDiff3 Installation." + +#: diff_ext.cpp:568 +msgid "Command" +msgstr "Kommando" + +#: diff_ext.cpp:569 +msgid "CommandLine" +msgstr "Kommandozeile" + +#: diff_ext.cpp:570 +msgid "Diff-Ext For KDiff3" +msgstr "Diff-Ext für KDiff3" diff --git a/diff_ext_for_kdiff3/diff_ext_for_kdiff3.def b/diff_ext_for_kdiff3/diff_ext_for_kdiff3.def new file mode 100644 index 0000000..51a257a --- /dev/null +++ b/diff_ext_for_kdiff3/diff_ext_for_kdiff3.def @@ -0,0 +1,6 @@ +LIBRARY "diff_ext_for_kdiff3" +EXPORTS + DllCanUnloadNow=DllCanUnloadNow@0 + DllGetClassObject=DllGetClassObject@12 + DllRegisterServer=DllRegisterServer@0 + DllUnregisterServer=DllUnregisterServer@0 diff --git a/diff_ext_for_kdiff3/diff_ext_for_kdiff3.exp b/diff_ext_for_kdiff3/diff_ext_for_kdiff3.exp new file mode 100644 index 0000000..d40969a Binary files /dev/null and b/diff_ext_for_kdiff3/diff_ext_for_kdiff3.exp differ diff --git a/diff_ext_for_kdiff3/diff_ext_for_kdiff3.rc b/diff_ext_for_kdiff3/diff_ext_for_kdiff3.rc new file mode 100644 index 0000000..12269d9 --- /dev/null +++ b/diff_ext_for_kdiff3/diff_ext_for_kdiff3.rc @@ -0,0 +1,47 @@ +/* + * Copyright (c) 2003-2006, Sergey Zorin. All rights reserved. + * + * This software is distributable under the BSD license. See the terms + * of the BSD license in the LICENSE file provided with this software. + * + */ + +#include + +LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US + +VS_VERSION_INFO VERSIONINFO + FILEVERSION 1,6,1,145 + PRODUCTVERSION 1,6,1,145 + FILEFLAGSMASK 0x3fL +#ifdef _DEBUG + FILEFLAGS VS_FF_DEBUG +#else + FILEFLAGS 0L +#endif + FILEOS VOS_NT_WINDOWS32 + FILETYPE VFT_DLL + FILESUBTYPE VFT_UNKNOWN +{ + BLOCK "StringFileInfo" + { + BLOCK "040904b0" + { + VALUE "Comments", "" + VALUE "CompanyName", "" + VALUE "FileDescription", "diff shell extension" + VALUE "FileVersion", "Release 1.6.1" + VALUE "InternalName", "diff shell extension" + VALUE "LegalCopyright", "Copyright © 2003-2005 Sergey Zorin" + VALUE "LegalTrademarks", "" + VALUE "OriginalFilename", "diff_ext.dll" + VALUE "PrivateBuild", "" + VALUE "ProductName", "Diff Context Menu Extension" + VALUE "ProductVersion", "Release 1.6.1" + } + } + BLOCK "VarFileInfo" + { + VALUE "Translation", 0x409, 1200 + } +} diff --git a/diff_ext_for_kdiff3/diff_ext_for_kdiff3.vcproj b/diff_ext_for_kdiff3/diff_ext_for_kdiff3.vcproj new file mode 100644 index 0000000..6ce9ade --- /dev/null +++ b/diff_ext_for_kdiff3/diff_ext_for_kdiff3.vcproj @@ -0,0 +1,230 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/diff_ext_for_kdiff3/diff_ext_for_kdiff3_msvc.def b/diff_ext_for_kdiff3/diff_ext_for_kdiff3_msvc.def new file mode 100644 index 0000000..bc75265 --- /dev/null +++ b/diff_ext_for_kdiff3/diff_ext_for_kdiff3_msvc.def @@ -0,0 +1,6 @@ +LIBRARY "diff_ext_for_kdiff3" +EXPORTS + DllCanUnloadNow PRIVATE + DllGetClassObject PRIVATE + DllRegisterServer PRIVATE + DllUnregisterServer PRIVATE diff --git a/diff_ext_for_kdiff3/diffextstring.h b/diff_ext_for_kdiff3/diffextstring.h new file mode 100644 index 0000000..132512e --- /dev/null +++ b/diff_ext_for_kdiff3/diffextstring.h @@ -0,0 +1,157 @@ +/* + * Copyright (c) 2003, Sergey Zorin. All rights reserved. + * + * This software is distributable under the BSD license. See the terms of the + * BSD license in the LICENSE file provided with this software. + * + */ + +#ifndef __string_h__ +#define __string_h__ + +#include +#include + +#include +#include + +class STRING; +inline STRING operator+( const STRING& s1, const STRING& s2); + +class STRING { + public: + static const int begin = 0; + static const int end = -1; + + public: + STRING(const STRING& s) { + _str = new TCHAR[s.length()+1]; + lstrcpy(_str, s); + } + + STRING(const TCHAR* str = TEXT("")) { + _str = new TCHAR[lstrlen(str)+1]; + lstrcpy(_str, str); + } + + ~STRING() { + delete[] _str; + } + + void resize( size_t newLength ) + { + size_t oldLength = length(); + if ( newLength < oldLength ) { + _str[newLength] = 0; // Just truncate the string + } else if( newLength>oldLength) { + TCHAR* p = new TCHAR[ newLength + 1 ]; + lstrcpy(p, _str); + for( size_t i=oldLength; i + +#include +#include + +#include +#include +#include + +#include +#include + +//#include +//#include +//#include +//#include + +#include "server.h" +#include "class_factory.h" + +#define DllExport __declspec( dllexport ) + +// registry key util struct +struct REGSTRUCT { + LPTSTR subkey; + LPTSTR name; + LPTSTR value; +}; + +SERVER* SERVER::_instance = 0; +static HINSTANCE server_instance; // Handle to this DLL itself. + +//DEFINE_GUID(CLSID_DIFF_EXT, 0xA0482097, 0xC69D, 0x4DEC, 0x8A, 0xB6, 0xD3, 0xA2, 0x59, 0xAC, 0xC1, 0x51); +// New class id for DIFF_EXT for KDiff3 +DEFINE_GUID( CLSID_DIFF_EXT, 0x9f8528e4, 0xab20, 0x456e, 0x84, 0xe5, 0x3c, 0xe6, 0x9d, 0x87, 0x20, 0xf3 ); + + +tstring SERVER::getRegistryKeyString( const tstring& subKey, const tstring& value ) +{ + tstring keyName = m_registryBaseName; + if (!subKey.empty()) + keyName += TEXT("\\")+subKey; + + HKEY key; + HKEY baseKey = HKEY_CURRENT_USER; + tstring result; + for(;;) + { + if( RegOpenKeyEx( baseKey, keyName.c_str(), 0, KEY_READ, &key ) == ERROR_SUCCESS ) + { + DWORD neededSizeInBytes = 0; + if (RegQueryValueEx(key, value.c_str(), 0, 0, 0, &neededSizeInBytes) == ERROR_SUCCESS) + { + DWORD length = neededSizeInBytes / sizeof( TCHAR ); + result.resize( length ); + if ( RegQueryValueEx( key, value.c_str(), 0, 0, (LPBYTE)&result[0], &neededSizeInBytes ) == ERROR_SUCCESS) + { + //Everything is ok, but we want to cut off the terminating 0-character + result.resize( length - 1 ); + RegCloseKey(key); + return result; + } + else + { + result.resize(0); + } + } + + RegCloseKey(key); + } + if (baseKey==HKEY_LOCAL_MACHINE) + break; + baseKey = HKEY_LOCAL_MACHINE; + } + + // Error + { + LPTSTR message; + FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM, 0, + GetLastError(), MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPTSTR) &message, 0, 0); + ERRORLOG( (tstring(TEXT("RegOpenKeyEx: ")+keyName+TEXT("->")+value) + TEXT(": ")) + message ); \ + LocalFree(message); + } + return result; +} + + +STDAPI +DllCanUnloadNow(void) { + HRESULT ret = S_FALSE; + + if(SERVER::instance()->reference_count() == 0) { + ret = S_OK; + } + + return ret; +} + +extern "C" int APIENTRY +DllMain(HINSTANCE instance, DWORD reason, LPVOID /* reserved */) { +// char str[1024]; +// char* reason_string[] = {"DLL_PROCESS_DETACH", "DLL_PROCESS_ATTACH", "DLL_THREAD_ATTACH", "DLL_THREAD_DETACH"}; +// sprintf(str, "instance: %x; reason: '%s'", instance, reason_string[reason]); +// MessageBox(0, str, TEXT("Info"), MB_OK); + switch (reason) { + case DLL_PROCESS_ATTACH: + server_instance = instance; + SERVER::instance()->save_history(); + MESSAGELOG(TEXT("DLL_PROCESS_ATTACH")); + break; + + case DLL_PROCESS_DETACH: + MESSAGELOG(TEXT("DLL_PROCESS_DETACH")); + SERVER::instance()->save_history(); + break; + } + + return 1; +} + +STDAPI +DllGetClassObject(REFCLSID rclsid, REFIID riid, void** class_object) { + HRESULT ret = CLASS_E_CLASSNOTAVAILABLE; + *class_object = 0; + + if (IsEqualIID(rclsid, CLSID_DIFF_EXT)) { + CLASS_FACTORY* pcf = new CLASS_FACTORY(); + + ret = pcf->QueryInterface(riid, class_object); + } + + return ret; +} + +/*extern "C" HRESULT STDAPICALLTYPE*/ STDAPI +DllRegisterServer() { + return SERVER::instance()->do_register(); +} + +STDAPI +DllUnregisterServer() { + return SERVER::instance()->do_unregister(); +} + +SERVER* SERVER::instance() +{ + if(_instance == 0) + { + _instance = new SERVER(); + _instance->initLogging(); + MESSAGELOG(TEXT("New Server instance")); + } + + return _instance; +} + +SERVER::SERVER() : _reference_count(0) +{ + m_registryBaseName = TEXT("Software\\KDiff3\\diff-ext"); + m_pRecentFiles = 0; + m_pLogFile = 0; +} + +void SERVER::initLogging() +{ + tstring logFileName = getRegistryKeyString( TEXT(""), TEXT("LogFile") ); + if ( !logFileName.empty() ) + { + m_pLogFile = _tfopen( logFileName.c_str(), TEXT("a+, ccs=UTF-8") ); + if (m_pLogFile) + { + _ftprintf( m_pLogFile, TEXT("\nSERVER::SERVER()\n") ); + } + } +} + +SERVER::~SERVER() +{ + if ( m_pLogFile ) + { + _ftprintf( m_pLogFile, TEXT("SERVER::~SERVER()\n\n") ); + fclose( m_pLogFile ); + } + + delete m_pRecentFiles; +} + +HINSTANCE +SERVER::handle() const +{ + return server_instance; +} + +void +SERVER::lock() { + InterlockedIncrement(&_reference_count); +} + +void +SERVER::release() { + InterlockedDecrement(&_reference_count); + + //if(InterlockedDecrement((LPLONG)&_reference_count) == 0) + // delete this; +} + +void SERVER::logMessage( const char* function, const char* file, int line, const tstring& msg ) +{ + SERVER* pServer = SERVER::instance(); + if ( pServer && pServer->m_pLogFile ) + { + SYSTEMTIME st; + GetSystemTime( &st ); + _ftprintf( pServer->m_pLogFile, TEXT("%04d/%02d/%02d %02d:%02d:%02d ") +#ifdef UNICODE + TEXT("%S (%S:%d) %s\n"), // integrate char-string into wchar_t string +#else + TEXT("%s (%s:%d) %s\n"), +#endif + st.wYear, st.wMonth, st.wDay, st.wHour, st.wMinute, st.wSecond, function, file, line, msg.c_str() ); + fflush(pServer->m_pLogFile); + } +} + +std::list& +SERVER::recent_files() +{ + LOG(); + if ( m_pRecentFiles==0 ) + { + MESSAGELOG(TEXT("Reading history from registry...")); + m_pRecentFiles = new std::list; + for( int i=0; i<32; ++i ) // Max history size + { + TCHAR numAsString[10]; + _sntprintf( numAsString, 10, TEXT("%d"), i ); + tstring historyItem = getRegistryKeyString( TEXT("history"), numAsString ); + if ( ! historyItem.empty() ) + m_pRecentFiles->push_back( historyItem ); + } + } + return *m_pRecentFiles; +} + +void +SERVER::save_history() const +{ + if( m_pRecentFiles && !m_pRecentFiles->empty() ) + { + HKEY key; + if( RegCreateKeyEx(HKEY_CURRENT_USER, (m_registryBaseName + TEXT("\\history")).c_str(), 0, 0, + REG_OPTION_NON_VOLATILE, KEY_WRITE, 0, &key, 0) == ERROR_SUCCESS ) + { + LOG(); + //DWORD len = MAX_PATH; + int n = 0; + + std::list::const_iterator i; + + for(i = m_pRecentFiles->begin(); i!=m_pRecentFiles->end(); ++i, ++n ) + { + tstring str = *i; + TCHAR numAsString[10]; + _sntprintf( numAsString, 10, TEXT("%d"), n ); + if(RegSetValueEx(key, numAsString, 0, REG_SZ, (const BYTE*)str.c_str(), (DWORD)(str.size()+1)*sizeof(TCHAR) ) != ERROR_SUCCESS) + { + LPTSTR message; + FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM, 0, + GetLastError(), MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language + (LPTSTR) &message, 0, 0); + MessageBox(0, message, TEXT("Save history failed"), MB_OK | MB_ICONINFORMATION); + LocalFree(message); + } + } + + RegCloseKey(key); + } + else + { + SYSERRORLOG(TEXT("RegOpenKeyEx")); + } + } +} + +HRESULT +SERVER::do_register() { + LOG(); + TCHAR class_id[MAX_PATH]; + LPWSTR tmp_guid; + HRESULT ret = SELFREG_E_CLASS; + + if (StringFromIID(CLSID_DIFF_EXT, &tmp_guid) == S_OK) { +#ifdef UNICODE + _tcsncpy(class_id, tmp_guid, MAX_PATH); +#else + wcstombs(class_id, tmp_guid, MAX_PATH); +#endif + CoTaskMemFree((void*)tmp_guid); + + TCHAR subkey[MAX_PATH]; + TCHAR server_path[MAX_PATH]; + HKEY key; + LRESULT result = NOERROR; + DWORD dwDisp; + + GetModuleFileName(SERVER::instance()->handle(), server_path, MAX_PATH); + + REGSTRUCT entry[] = { + {TEXT("Software\\Classes\\CLSID\\%s"), 0, TEXT("diff-ext-for-kdiff3")}, + {TEXT("Software\\Classes\\CLSID\\%s\\InProcServer32"), 0, TEXT("%s")}, + {TEXT("Software\\Classes\\CLSID\\%s\\InProcServer32"), TEXT("ThreadingModel"), TEXT("Apartment")} + }; + + for(unsigned int i = 0; (i < sizeof(entry)/sizeof(entry[0])) && (result == NOERROR); i++) { + _sntprintf(subkey, MAX_PATH, entry[i].subkey, class_id); + result = RegCreateKeyEx(HKEY_CURRENT_USER, subkey, 0, 0, REG_OPTION_NON_VOLATILE, KEY_WRITE, 0, &key, &dwDisp); + + if(result == NOERROR) { + TCHAR szData[MAX_PATH]; + + _sntprintf(szData, MAX_PATH, entry[i].value, server_path); + szData[MAX_PATH-1]=0; + + result = RegSetValueEx(key, entry[i].name, 0, REG_SZ, (LPBYTE)szData, DWORD(_tcslen(szData)*sizeof(TCHAR))); + } + + RegCloseKey(key); + } + + if(result == NOERROR) { + result = RegCreateKeyEx(HKEY_CURRENT_USER, TEXT("Software\\Classes\\*\\shellex\\ContextMenuHandlers\\diff-ext-for-kdiff3"), 0, 0, REG_OPTION_NON_VOLATILE, KEY_WRITE, 0, &key, &dwDisp); + + if(result == NOERROR) { + + result = RegSetValueEx(key, 0, 0, REG_SZ, (LPBYTE)class_id, DWORD(_tcslen(class_id)*sizeof(TCHAR))); + + RegCloseKey(key); + + //If running on NT, register the extension as approved. + OSVERSIONINFO osvi; + + osvi.dwOSVersionInfoSize = sizeof(osvi); + GetVersionEx(&osvi); + + // NT needs to have shell extensions "approved". + if (osvi.dwPlatformId == VER_PLATFORM_WIN32_NT) { + result = RegCreateKeyEx(HKEY_CURRENT_USER, + TEXT("Software\\Microsoft\\Windows\\CurrentVersion\\Shell Extensions\\Approved"), + 0, 0, REG_OPTION_NON_VOLATILE, KEY_WRITE, 0, &key, &dwDisp); + + if(result == NOERROR) { + TCHAR szData[MAX_PATH]; + + lstrcpy(szData, TEXT("diff-ext")); + + result = RegSetValueEx(key, class_id, 0, REG_SZ, (LPBYTE)szData, DWORD(_tcslen(szData)*sizeof(TCHAR))); + + RegCloseKey(key); + + ret = S_OK; + } else if (result == ERROR_ACCESS_DENIED) { + TCHAR msg[] = TEXT("Warning! You have unsufficient rights to write to a specific registry key.\n") + TEXT("The application may work anyway, but it is advised to register this module ") + TEXT("again while having administrator rights."); + + MessageBox(0, msg, TEXT("Warning"), MB_ICONEXCLAMATION); + + ret = S_OK; + } + } + else { + ret = S_OK; + } + } + } + } + + return ret; +} + +HRESULT +SERVER::do_unregister() { + LOG(); + TCHAR class_id[MAX_PATH]; + LPWSTR tmp_guid; + HRESULT ret = SELFREG_E_CLASS; + + if (StringFromIID(CLSID_DIFF_EXT, &tmp_guid) == S_OK) { +#ifdef UNICODE + _tcsncpy(class_id, tmp_guid, MAX_PATH); +#else + wcstombs(class_id, tmp_guid, MAX_PATH); +#endif + CoTaskMemFree((void*)tmp_guid); + + LRESULT result = NOERROR; + TCHAR subkey[MAX_PATH]; + + REGSTRUCT entry[] = { + {TEXT("Software\\Classes\\CLSID\\%s\\InProcServer32"), 0, 0}, + {TEXT("Software\\Classes\\CLSID\\%s"), 0, 0} + }; + + for(unsigned int i = 0; (i < sizeof(entry)/sizeof(entry[0])) && (result == NOERROR); i++) { + _stprintf(subkey, entry[i].subkey, class_id); + result = RegDeleteKey(HKEY_CURRENT_USER, subkey); + } + + if(result == NOERROR) { + result = RegDeleteKey(HKEY_CURRENT_USER, TEXT("Software\\Classes\\*\\shellex\\ContextMenuHandlers\\diff-ext-for-kdiff3")); + + if(result == NOERROR) { + //If running on NT, register the extension as approved. + OSVERSIONINFO osvi; + + osvi.dwOSVersionInfoSize = sizeof(osvi); + GetVersionEx(&osvi); + + // NT needs to have shell extensions "approved". + if(osvi.dwPlatformId == VER_PLATFORM_WIN32_NT) { + HKEY key; + + RegOpenKeyEx(HKEY_CURRENT_USER, TEXT("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Shell Extensions\\Approved"), 0, KEY_ALL_ACCESS, &key); + + result = RegDeleteValue(key, class_id); + + RegCloseKey(key); + + if(result == ERROR_SUCCESS) { + ret = S_OK; + } + } + else { + ret = S_OK; + } + } + } + } + + return ret; +} diff --git a/diff_ext_for_kdiff3/server.h b/diff_ext_for_kdiff3/server.h new file mode 100644 index 0000000..ffaf90b --- /dev/null +++ b/diff_ext_for_kdiff3/server.h @@ -0,0 +1,81 @@ +/* + * Copyright (c) 2003-2005, Sergey Zorin. All rights reserved. + * + * This software is distributable under the BSD license. See the terms + * of the BSD license in the LICENSE file provided with this software. + * + */ +#ifndef __server_h__ +#define __server_h__ +#include // std::list +//#include +#include + +#if 1 +#include // std::wstring +#ifdef UNICODE +typedef std::wstring tstring; +#else +typedef std::string tstring; +#endif +#define i18n(x) getTranslation( TEXT(x) ) +#else +#include "diffextstring.h" +typedef STRING tstring; +#define i18n(x) TEXT(x) +#endif + +#define MESSAGELOG( msg ) SERVER::logMessage( __FUNCTION__, __FILE__, __LINE__, msg ) +#define LOG() MESSAGELOG( TEXT("") ) +#define ERRORLOG( msg ) MESSAGELOG( TEXT("Error: ")+tstring(msg) ) +#define SYSERRORLOG( msg ) \ + { \ + LPTSTR message; \ + FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM, 0, \ + GetLastError(), MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPTSTR) &message, 0, 0); \ + ERRORLOG( (tstring(msg) + TEXT(": ")) + message ); \ + LocalFree(message); \ + } + + +class SERVER { + public: + static SERVER* instance(); + void initLogging(); + + public: + virtual ~SERVER(); + + tstring getRegistryKeyString( const tstring& subKey, const tstring& value ); + + HINSTANCE handle() const; + + HRESULT do_register(); + HRESULT do_unregister(); + + void lock(); + void release(); + + ULONG reference_count() const { + return _reference_count; + } + + std::list< tstring >& recent_files(); + + void save_history() const; + + static void logMessage( const char* function, const char* file, int line, const tstring& msg ); + + private: + SERVER(); + SERVER(const SERVER&) {} + + private: + LONG _reference_count; + std::list* m_pRecentFiles; + static SERVER* _instance; + tstring m_registryBaseName; + FILE* m_pLogFile; +}; + +#endif // __server_h__ diff --git a/doc/Makefile.am b/doc/Makefile.am new file mode 100644 index 0000000..e82a913 --- /dev/null +++ b/doc/Makefile.am @@ -0,0 +1,6 @@ +# the SUBDIRS is filled automatically by am_edit. If files are +# in this directory they are installed into the english dir + +KDE_LANG = en da de es et fr it nl pt sv +KDE_DOCS = kdiff3 +SUBDIRS = $(AUTODIRS) diff --git a/doc/README b/doc/README new file mode 100644 index 0000000..8c28a9a --- /dev/null +++ b/doc/README @@ -0,0 +1,80 @@ +README for the Documentation +============================ +Author: Joachim Eibl, 2004-02-22 + +The following text contains some info about how the docs are created. +It helps me remember certain details. Most users probably aren't +interested in these things. + +Docbook references: +http://i18n.kde.org/doc/markup/index.html +http://opensource.bureau-cornavin.com/crash-course/index.html + +Each directory contains the documentation for a different translation. +The textual information is in the index.docbook of every subdirectory. + +I wrote the English version in en/index.docbook. The other translations +were done by the KDE-Internationalization-Team. They are doing a great +job! + + +The command meinproc (which is part of KDE) can be used to convert this +file into HTML. + +meinproc index.docbook + +If you prefer everything in one big HTML/Postscript/PDF-file: + LANG=de_DE meinproc --check index.docbook --stylesheet /opt/kde3/share/apps/ksgmltools2/customization/kde-nochunk.xsl + (The LANG=de_DE prevents that meinproc writes the file in UTF-8 encoding, which isn't understood by html2ps.) +Create ps-file: + html2ps -D -u -n index.html >index.ps + (For the -D to work add the line "Ghostscript: 1;" in the "package"-section of file /usr/lib/html2ps/html2psrc.) +Create pdf-file: + ps2pdf index.ps index.pdf + +The script createpdfdoc does these steps for all subdirectories. + +During normal installation on KDE a compressed file is generated: +meinproc --check --cache index.cache.bz2 index.docbook + + +As a service for non-KDE-users the en-directory also contains the +HTML-version of the English documentation. + +After running meinproc the HTML-files contain some references to files +in help:/common/ which contains stylesheets and KDE-graphics which make +the result look much prettier. Because on non-KDE-systems this is not +available, I placed a copy of these files in doc/en/common. +To correct the references, I run the following command, which removes +the "help:/"-part of the references, and only the "common/"-part remains. + +for i in *.html; do sed -i "s/help:\///g" $i; done + +(sed-option "-i" means in-place, "s/orig/repl/" is the replacement-command, +"g" replaces every occurance in the line, not only the first.) + +The screenshots were made with the English KDE-version and therefore are +placed in the en-directory. But since for the other translations no new +screenshots were made yet, they only contain links to the English +screenshots. These links are created en-bloc with this command. (But +first you must cd into each subdirectory.) + +for i in `ls ../en | grep png`; do ln -s ../en/$i $i; done + +Command to retrieve other translations from cvs: + +cvs co kde-i18n/subdirs +#for i in `cat kde-i18n/subdirs`; do cvs co kde-i18n/$i/docs/kdeextragear-1/kdiff3/index.docbook; done +for i in `cat subdirs`; do wget http://websvn.kde.org/*checkout*/trunk/l10n/$i/docs/extragear-utils/kdiff3/index.docbook -O $i.docbook; done + +If a new translation is available, +- create a new directory, +- copy the index.docbook file there, +- copy a Makefile.am there and correct it, +- edit the doc/Makefile.am to include the new subdir, +- create the links for the graphics, +- and don't forget to run make -f Makefile.cvs in the top directory. + + + + diff --git a/doc/createpdfdoc b/doc/createpdfdoc new file mode 100644 index 0000000..c72ef6f --- /dev/null +++ b/doc/createpdfdoc @@ -0,0 +1,8 @@ +for i in `find * -maxdepth 0 -type d`; do +cd $i +echo $i +LANG=de_DE meinproc --check index.docbook --stylesheet /opt/kde3/share/apps/ksgmltools2/customization/kde-nochunk.xsl +html2ps -D -u -n index.html >index.ps +ps2pdf index.ps ../kdiff3_$i.pdf +cd .. +done diff --git a/doc/da/Makefile.am b/doc/da/Makefile.am new file mode 100644 index 0000000..28f9520 --- /dev/null +++ b/doc/da/Makefile.am @@ -0,0 +1,4 @@ +KDE_DOCS = kdiff3 +KDE_LANG = da + + diff --git a/doc/da/dirbrowser.png b/doc/da/dirbrowser.png new file mode 100644 index 0000000..d3c63b2 Binary files /dev/null and b/doc/da/dirbrowser.png differ diff --git a/doc/da/dirmergebig.png b/doc/da/dirmergebig.png new file mode 100644 index 0000000..b26b65c Binary files /dev/null and b/doc/da/dirmergebig.png differ diff --git a/doc/da/index.docbook b/doc/da/index.docbook new file mode 100644 index 0000000..10c0757 --- /dev/null +++ b/doc/da/index.docbook @@ -0,0 +1,2918 @@ + +KDiff3"> + + + + +]> + + + + + + +&kdiff3;-hÃ¥ndbogen + + +Joachim Eibl
joachim.eibl snabela gmx.de +
+
+&erik.kjaer.pedersen.role; +
+ + +2002-2006 +Joachim Eibl + + + +&FDLNotice; + + + +2006-05-14 +0.9.90 + + + +&kdiff3; er et værktøj til sammenligning og sammenfletning af filer og mapper, som +sammenligner og fletter to eller tre tekst-inddatafiler eller mapper sammen, +viser forskellen linje-for-linje og tegn-for-tegn(!), +sørger for en automatisk sammenfletningsfunktion, +har en editor til behagelig løsning af sammenfletningskonflikter, +tilbyder netværksgennemsigtighed via KIO, +har valgmuligheder til at fremhæve eller skjule ændringer i blanke tegn eller kommentarer, +understøtter Unicode, UTF-8 og andre tegnsæt, +udskriver forskelle, +understøtter versionshåndteringsnøgleord og historiksammenfletning. + +Dette dokument beskriver &kdiff3; version 0.9.98. + + + + + +KDE +kdeextragear +kdiff3 +diff +sammenflet +CVS +trippelsammenligning +sammenlign +filer +mapper +versionskontrol +trevejs sammenfletning +forskelle i linje +synkronisér +kpart +kio +netværksgennemsigtighed +editor +blanke tegn +kommentarer + + +
+ +Indledning +Endnu en sammenligningsgrænseflade? +Der eksisterer flere grafiske sammenligningsværktøjer. Hvorfor skal du vælge &kdiff3;? Lad mig fortælle dig hvorfor jeg skrev det. &kdiff3; blev pÃ¥begyndt fordi jeg var tvunget til at lave en svær sammenfletning. At sammensætte er nødvendigt nÃ¥r flere personer arbejder med samme fil i et projekt. En sammenfletning kan være delvis automatiseret, nÃ¥r sammenfletningsværktøjet ikke kun har adgang til de nye ændrede filer (som kaldes "grene"), men ogsÃ¥ originalfilen (som kaldes "basis"). Sammenfletningsværktøjet vælger automatisk en ændring som kun er udført i en gren. NÃ¥r flere bidragydere ændrer samme linjer, detekterer sammenfletningsværktøjet en konflikt som skal løses manuelt. Sammenfletningen var svær eftersom en bidragyder havde ændret meget og rettet indrykningen mange steder. Den anden bidragydere havde ogsÃ¥ ændret meget tekst i samme fil, hvilket forÃ¥rsagede flere konflikter ved sammenfletningen. Værktøjet som jeg dengang brugte viste kun ændrede linjer, men ikke hvad der var ændret indenfor linjen. Der fandtes heller ikke nogen information om hvor kun indrykningen var ændret. Sammenfletningen var et mindre mareridt. Det var altsÃ¥ begyndelsen. Den første version kunne vise forskelle pÃ¥ en linje, og viste forskelle i blanke tegn. Senere kom mange andre funktioner til for at øge brugbarheden. Hvis du for eksempel hurtigt vil sammenligne en tekst, kan du kopiere den til klippebordet og indsætte den i et af sammenligningsvinduerne. En funktion som krævede en stor anstrengelse var funktionen for mappesammenligning og sammenfletning, som gjorde programmet til en næsten fuldstændig filsøger. Jeg hÃ¥ber at &kdiff3; ogsÃ¥ virker for dig. Hav det sjovt! Joachim Eibl (2003) + + +Skærmaftryk og funktioner +Dette skærmaftryk viser forskellen mellem to tekstfiler +(Med en tidlig version af &kdiff3;): + + + + +Trevejs sammenfletning understøttes fuldstændigt. Dette er nyttigt hvis to personer ændrer kode uafhængig af hinanden. Originalfilen (basen) bruges til at hjælpe &kdiff3; med automatisk at vælge de rigtige ændringer. Sammenfletningseditoren under diff-vinduerne lader dig løse konflikter, mens uddata du vil fÃ¥ vises. Skærmbilledet viser tre inddatafiler som er ved at blive flettet sammen: + + + + + +&kdiff3; hjælper dig ogsÃ¥ med at sammenligne og sammenflette hele mapper. Dette skærmaftryk viser &kdiff3; under en mappesammenfletning: + + + + + + +Flere funktioner +Linje-for-linje og tegn-for-tegn sammenligningsvisning +Ved at bruge mulighederne en grafisk farveskærm har, viser &kdiff3; nøjagtigt hvad forskellene er. NÃ¥r du skal lave mange kodegennemgange, vil du kunne lide dette. + + + + + +Se forskelle i blanke tegn med et blik +Mellemrum og tabulatorer som er forskellige ses. NÃ¥r linjer kun er forskellige i mængden af blanke tegn ses det med et blik i sammendragssøjlen til venstre. (Ikke flere problemer hvis nogen ændrer indrykningen.) + + + + + +Trevejssammenligninger +Analysér tre filer og se hvor de adskiller sig. Venstre/midt/højre vindue kaldes A/B/C og har blÃ¥/grøn/magenta farve. Hvis en fil er den samme og en anden anderledes for en linje, sÃ¥ viser farverne hvilken fil der er anderledes. Den røde farve betyder at begge de andre filer er forskellige. + + + + + +Bekvem sammenfletning af to eller tre inddatafiler +&kdiff3; kan bruges til at sammenflette to eller tre inddatafiler og sammenfletter automatisk sÃ¥ meget som muligt. Resultatet vises i et redigerbart vindue hvor de fleste konflikter kan løses med et enkelt museklik. Vælg knapperne A/B/C i værktøjslinjen for at vælge kilden som skal bruges. Du kan ogsÃ¥ vælge mere end en kilde. Eftersom udskriftsvinduet er en editor, kan til og med konflikter som behøver yderligere korrigering løses her uden at kræve et andet værktøj. + + +Og ... + + Hurtig navigering via knapper. + Et museklik i sammendragssøjlen synkroniserer alle vinduer sÃ¥ samme position vises. + Markér og kopiér fra hvilket som helst vindue, og indsæt i resultatvinduet for sammenfletning. + Oversigtssøjle som viser hvor ændringer og konflikter er. + Farverne kan justeres efter dine specifikke ønsker. + Justerbar fanebladsstørrelse. + Valgmulighed for at indsætte mellemrum i stedet for tabulatortegn. + Ã…bn filer bekvemt via dialoger, eller angiv filnavn pÃ¥ kommandolinjen. + Søg efter strenge i alle tekstvinduer. Find (Ctrl-F) og Find næste (F3). + Vis linjenummer for hver linje. + Indsæt klippebordet eller træk tekst til et inddatavindue for sammenligning + Netværksgennemsigtighed via KIO. + Kan bruges som en forskelsviser i KDevelop 3. + Tekstombrydning af lange linjer. + Støtte for Unicode, UTF-8 og andre kodninger. + Støtte for sprog som læses fra højre til venstre. + ... + + + + + +Filsammenligning og fletning + +Kommandolinjeflag + +Sammenlign to filer: +kdiff3 fil1 fil2 + + + +Sammenflet to filer: +kdiff3 fil1 fil2 -m +kdiff3 fil1 fil2 -o uddatafil + + + +Sammenlign tre filer: +kdiff3 fil1 fil2 fil3 + + + +sammenflet tre filer: +kdiff3 fil1 fil2 fil3 -m +kdiff3 fil1 fil2 fil3-o uddatafil + +Bemærk at fil1 behandles som basis for fil2 og fil3. + + +Specialtilfælde: Filer med samme navn +Hvis alle filer har samme navn men er i forskellige mapper, kan du reducere hvor meget du skal skrive ved kun at angive filnavnet for den første fil. ⪚: +kdiff3 kat1/filnavn kat2 kat3 + + + +Kommandolinje for at starte en mappesammenligning eller sammenfletning: +Dette er meget lignende, men nu drejer det sig om mapper. +kdiff3 kat1 kat2 +kdiff3 kat1 kat2 -o mÃ¥lkat +kdiff3 kat1 kat2 kat3 +kdiff3 kat1 kat2 kat3-o mÃ¥lkat + +For mappesammenligning og sammenfletning kan du fortsætte med at læse her. + + +Andre kommandolinjeflag +For at se alle tilgængelige kommandolinjeflag, skriv +kdiff3 --help + +Eksempeluddata: +Vælgare: + -m, --merge Sammenflet inddata. + -b, --base file Eksplicit basisfil. For at virke sammen med visse værktøjer. + -o, --output file Uddatafil. Betyder underforstÃ¥et -m. F.eks.: -o ny_fil.txt + --out file Uddatafil, igen. (for at virke med visse værktøjer.) + --auto Ingen grafisk grænseflade hvis alle konflikter kan løses automatisk (kræver -o fil) + --qall Løs ikke konflikter automatisk. (For at virke med andre værktøjer...) + --L1 alias1 Synlig erstatning af navn for inddatafil 1 (basis). + --L2 alias2 Synlig erstatning af navn for inddatafil 2. + --L3 alias3 Synlig erstatning af navn for inddatafil 3. + -L, --fname alias Alternativ synlig erstatning af navn. Angiv dette en gang for al inddata. + --cs string Sæt en indstilling ud af kraft. Anvend en gang for hver indstilling, f.eks. --cs "AutoAdvance=1" + --confighelp Vis liste med indstillinger og nuværende værdier. + --config file Anvend en anden indstillingsfil. + +Flaget lader dig justere et indstillingstilvalg som ellers kun kan justeres via indstillingsdialogerne. Men vær klar over at nÃ¥r &kdiff3; afsluttes opbevares den ændrede værdi sammen med andre indstillinger. Med kan du finde ud af navnene pÃ¥ tilgængelige tilvalg og nuværende værdier. +Via kan du angive en anden indstillingsfil. Hvis du ofte bruger &kdiff3; med helt forskellige indstillinger tillader dette dig nemt at skifte mellem dem. + +Kommandolinjeflag som ignoreres +Mange personer vil bruge &kdiff3; sammen med et versionshÃ¥ndteringssystem, men nÃ¥r versionshÃ¥ndteringssystemet kalder &kdiff3; med kommandolinjeflag som &kdiff3; ikke genkender, afsluttes &kdiff3; med en fejl. Integrationsindstillingerne gør det muligt at angive kommandolinjeflag som skal ignoreres af &kdiff3;. De vises i brugshjælpen som i dette eksempel: +--foo Ignoreres. (brugerdefineret) + + + Kommandolinjeflag at ignorere:En liste med flag, adskilte med semikolon ';'. NÃ¥r et af disse flag findes pÃ¥ kommandolinjen, ignorerer &kdiff3; det og kører uden at rapportere en fejl. (Standard er "u;query;html;abort"). + +Hvis dette ikke er nok, anbefales du at skrive et skalscript som udfører oversættelsen af flag. + + + + +Dialogen Ã…bn +Eftersom mange inddatafiler skal kunne vælges, har programmet en særlig Ã¥bningsdialog: + + + +Ã…bningsdialogen tillader at filnavnene redigeres i hÃ¥nden, at en fil vælges via filsøgeren ("Fil...") eller at nyligt brugte filer vælges i dropned-feltet. Hvis du Ã¥bner dialogen igen, eksisterer de nuværende navne stadigvæk der. Den tredje inddatafil kræves ikke. Hvis feltet for "C" forbliver tomt, udføres kun en tovejs sammenligninganalyse. Du kan ogsÃ¥ vælge en mappe med "Mappe...". Hvis en mappe angives for A, starter en mappesammenligning og sammenfletning. Hvis A angiver en fil, men B, C eller udskriften angiver en mappe, bruger &kdiff3; filnavnet fra A i de angivne mapper. Hvis "Sammenflet" er valgt, bliver linjen "Udskrift" redigerbar. Det kræves dog ikke at uddatafilens navn angives med det samme. Du kan ogsÃ¥ vente med dette til du gemmer. Knappen "Indstil.." viser indstillingsdialogen, sÃ¥ du kan indstille tilvalgene inden analysen udføres. + + +Indsæt eller slip inddata +Sommetider vil du sammenligne dele af en tekst som ikke er en egen fil. &kdiff3; lader dig ogsÃ¥ indsætte tekst fra klippebordet i det inddatavindue for sammenligning som har fokus. Sammenligningsanalysen sker sÃ¥ med det samme. I Ã¥bningsdialogen behøver du sÃ¥ ikke at angive filer, men kun at lukke den via "Annullér". Du kan ogsÃ¥ bruge træk og slip: Træk en fil fra en filhÃ¥ndtering eller markeret tekst fra en editor og slip den pÃ¥ et inddatavindue til sammenligning. Hvad er idéen? Sommetider indeholder en fil to lignende funktioner, men at kontrollere hvor ens de virkelig er bliver en stor anstrengelse hvis du først skal oprette to filer og derefter indlæse dem. Nu kan du helt enkelt kopiere, indsætte og sammenligne de relevante afsnit. Bemærk: For øjeblikket kan du ikke trække noget fra &kdiff3;. Det understøttes kun at slippe inddata i sammenligningvinduet. Advarsel: Visse editorer tolker stadigvæk træk og slip til et andet program som klip ud (i stedet for kopiér) og indsæt. De oprindelige data kan derfor gÃ¥ tabt. + + +Sammenlign filer og tolke informationen i inddatavinduerne + + + +InformationslinjeLængst oppe i hvert tekstvindue er dets "informationslinje". Informationslinjerne i inddatavinduet indeholder bogstaven "A", "B" eller "C", filnavnet og linjenummeret for den første synlige linje i vinduet. (Bemærk at vinduet "C" er valgfrit.) Hver informationslinje vises i en egen farve. NÃ¥r du vælger en anden fil ved at bladre eller afslutter at redigere filnavnet her ved at trykke pÃ¥ returtasten, indlæses den nye fil og sammenlignes med filen eller filerne som allerede er indlæste. FarvelægningDe tre inddatavinduer tildeles bogstaverne "A", "B" og "C". "A" har blÃ¥ farve, "B" har grøn farve og "C" har magenta. (Dette er standardfarver, men de kan ændres via menuen Opsætning.) NÃ¥r en forskel opdages viser farven hvilken inddatafil som adskiller sig. NÃ¥r begge de øvrige inddatafiler adskiller sig, er farven som bruges for at udtrykke dette normalt rød ("Konfliktfarve" i indstillingerne). Dette farvelægningsmønster er særlig nyttigt i tilfældet med tre inddatafiler, som ses i næste afsnit (Sammenfletning). SammenfatningssøjleTil venstre for hver tekst er "sammendragssøjlen". Hvis forskelle opstod pÃ¥ en linje, viser sammendragssøjlen tilsvarende farve. For en forskel som kun bestÃ¥r af blanke tegn er sammendraget afkrydset. For programmeringssprog, hvor blanke tegn ikke er sÃ¥ vigtige er det nyttigt at se med et blik om noget af vigtighed er ændret. (For C/C++ er blanke tegn kun interessante inde i strenge, i kommentarer, for præprocessoren og i nogle meget esoteriske situationer.) Den lodrette linje som adskiller sammendragssøjlen og teksten er afbrudt hvis inddatafilen ikke har nogen linjer der. NÃ¥r tekstombrydning er aktiveret sÃ¥ vil denne linje se prikket ud for ombrudte linjer. OversigtssøjlePÃ¥ højre side er en "oversigtssøjle" synlig til venstre for den lodrette rullebjælke. Den viser et komprimeret sammendrag af inddata "A". Alle forskelle og konflikter er synlige med et blik. NÃ¥r kun to inddatavinduer bruges, ses alle forskelle i rødt her, eftersom alle forskelle ogsÃ¥ er konflikter. Et sort rektangel indrammer den synlige del af inddata. For meget lange inddatafiler, hvor antallet af inddatalinjer er større end højden pÃ¥ oversigten i billedpunkter, deler flere inddatalinjer en oversigtslinje. En konflikt har prioritet over enkle forskelle, som har prioritet over ingen ændringer, sÃ¥ ingen forskelle eller konflikter gÃ¥r tabte her. Ved at klikke pÃ¥ oversigtssøjlen vises den tilsvarende tekst. Justér linjer manueltSommetider placerer algoritmen forkerte linjer ved siden af hinanden, eller du vil sammenligne et stykke tekst med tekst pÃ¥ en helt anden position i den anden fil. I disse tilfælde kan du manuelt fortælle &kdiff3; at visse linjer skal arrangeres i bestemte linjer linje. Markér teksten som du vil arrangere med musen, som du ville gøre ved kopi og indsæt, i det første diff-vindue og vælg derefter "Tilføj manuel justering af sammenligning" i menuen "Sammenligning" (genvejstasten "Ctrl+Y"). En orange linje vises i sammenfatningssøjlen udfor den markerede tekst. Gentag det for den anden og (hvis tilgængelig) tredje sammenligningsvisning. &kdiff3; genberegner med det samme sammenligningen hver gang du gør det, og justerer de markerede linjer. Naturligvis matcher nogle af linjerne tidligere matchede ikke længere. For øjeblikket understøttes ikke sammenfletning ved brug af manuel hjælp til sammenligning. + + + +Sammenfletning og editorvinduet for sammenfletning af uddata + + + +Editorvinduet for sammenfletning af uddata (under inddatavinduet for sammenligning) har ogsÃ¥ en informationslinje længst oppe som viser "Uddata", filnavnet og "[Ændret]" hvis du har redigeret noget. Oftest indeholder det en tekst fra de automatiske sammenfletningsfunktioner, men det indeholder ogsÃ¥ ofte konflikter. Gem er deaktiveret indtil alle konflikter er løst!!! (Brug knapperne "GÃ¥ til foregÃ¥ende/næste uløste konflikt" for at finde de tilbageværende konflikter.) Med kun to filer er hver forskel ogsÃ¥ en konflikt, som skal løses manuelt. Med tre inddatafiler behandles den første som basis, mens den anden og tredje inddatafil indeholder ændringer. Hvis kun inddata B eller C er ændret for en vis linje, men ikke begge vælges den ændrede kilde automatisk. Kun hvis B og C er ændret pÃ¥ samme linjer, detekterer værktøjet en konflikt som skal løses manuelt. NÃ¥r B og C er ens, men ikke det samme som A, vælges C.  SammenfatningssøjlenEditorvinduet for sammenfletning af uddata har ogsÃ¥ en sammendragssøjle til venstre. Den viser bogstaverne for inddata fra hvilken linjen valgtes, eller ingenting hvis alle tre kilder var ens for linjen. Ved konflikter viser den et spørgsmÃ¥lstegn "?" og linjen viser "< Konflikter ved sammenfletning >", alt med rødt. Eftersom det ville tage meget lang tid at løse konflikter linje for linje, grupperes linjer i grupper som har samme forskelle og konfliktkarakter. Konflikter med kun blanke tegn adskilles dog fra andre konflikter for at forbedre sammenfletningen af filer hvor indrykningen er ændret pÃ¥ mange linjer. Indstil nuværende gruppe og synkronisér sammenfletnings- og sammenligningsvisningen positionNÃ¥r du klikker pÃ¥ sammenfatningssøjlen med venstre museknap i et af vinduerne, sÃ¥ markeres gruppen som hører til den linje i alle vinduer og gruppens begyndelse vises. (Dette kan indebære et automatisk skift af position i vinduerne hvis gruppens begyndelse ikke ses.) Gruppen bliver sÃ¥ til den "nuværende gruppe". Den markeres med "Baggrundsfarven for nuværende sammenligningsomrÃ¥de" og en sort linje vises til venstre for teksten. Vælg inddata A, B eller C for nuværende konflikt og redigeringKnaplinjen under menulinjen indeholder tre knapper for inddatavalg som indeholder bogstaverne "A", "B" og "C". Klik pÃ¥ knappen for inddatavalg for at indsætte linjer (eller fjerne dem hvis de allerede er indsat) fra de respektive kildefil. For at vælge linjer fra flere inddatafiler klikkes pÃ¥ de respektive knapper i den nødvendige rækkefølge. Hvis du for eksempel ønsker at linjer fra "B" skal havne før linjer fra "A" i uddata, klikkes først pÃ¥ "B" og derefter pÃ¥ "A". Hvis du bruger tilvalget automatisk at gÃ¥ videre (GÃ¥ automatisk til næste uløste konflikt efter valg af kilde), skal du deaktivere dette inden du vælger linjer fra flere inddatafiler eller hvis du vil redigere linjerne efter du valgt dem. Ellers gÃ¥r &kdiff3; til næste konflikt efter den første inddatafil er valgt. Det er ofte nyttigt direkte at redigere sammenflettet uddata. Sammenfatningssøjlen viser "m" for hver linje som er ændret manuelt. NÃ¥r forskellene for eksempel justeres pÃ¥ en mÃ¥de sÃ¥ et enkelt valg af inddata ikke er tilfredsstillende, kan du markere teksten som behøves og bruge normal kopiér og indsæt for at placere den i sammenflettet uddata. Sommetider, nÃ¥r en linje fjernes enten pÃ¥ grund af automatisk fletning eller ved redigering og ingen andre linjer er tilbage i gruppen, vises teksten <No src line> pÃ¥ linjen. Det er kun en pladsmarkør for gruppen hvis du ændrer mening og vælger en kilde igen. Teksten ses ikke i gemte filer eller i nogen markeringer som du vil kopiere og indsætte. Teksten "<Merge Conflict>" vises i klippebordet hvis du kopierer og indsætter noget tekst som indeholder en sÃ¥dan linje. Men vær satdig forsigtig med at gøre det. Vælg inddata A, B eller C for alle konflikterDen normale sammenfletning vil starte med at løse simple konflikter automatisk. Men "Flet"-menu sørger for handlinger for andre almindelige behov. Hvis du skal vælge samme kilde for de fleste konflikter, sÃ¥ kan du vælge"A", "B" eller "C" overalt, eller kun for de tiloversblevne uløste konflikter, eller for uløste konflikter med blanke tegn. Hvis du ønsker at afgøre hver lille forskel selv, kan du "Sætte lille forskel til konflikt". Eller hvis du ønsker at vende tilbage de automatiske valg udført af &kdiff3; sÃ¥ vælg "Løs simple konflikter automatisk". &kdiff3; starter sÃ¥ sammenfletningen forfra. For handlinger der ændrer dine tidligere ændringer vil &kdiff3; bede om bekræftelse før den gÃ¥r videre. Bemærk: NÃ¥r en af kilderne for uløste konflikter med blanke tegn vælges og tilvalgene "Ignorér tal" eller "Ignorér C/C++ kommentarer" bruges sÃ¥ bliver ændringer i tal eller kommentarer ogsÃ¥ behandlet som blanke tegn. Sammenflet automatisk nøgleord for versionshÃ¥ndtering og historik (log)Mange versionskontrolsystemer understøtter specielle nøgleord i filen. (f.eks. "$Date:$", "$Header$", "$Author$", "$$" osv.) Ved check-in ændrer versionskontrolsystemet (VCS) disse linjer. For eksempel bliver "$Date:$" til "$ Date:2005/03/22 18:45:01 $". Idet denne linje vil være forskellig i hver version af filen, ville det kræve manuel interaktion under sammenfletningen. &kdiff3; tilbyder automatisk sammenfletning af disse indgange. For enkle linjer som matcher tilvalget "Regulært udtryk for automatisk sammenfletning" i alle inddatafiler vælger &kdiff3; linjen fra B, eller om tilgængelig, den fra C. (Desuden er det nødvendigt at linjerne det drejer sig om linjes op i sammenligningen og at foregÃ¥ende linje ikke indeholder en konflikt.) Den automatiske sammenfletning kan enten udføres med det samme nÃ¥r sammenfletningen startes (aktivér tilvalget "Kør automatisk sammenfletning med regulært udtryk nÃ¥r sammenfletning starter") eller senere via "Kør automatisk sammenfletning med regulært udtryk" i menuen Sammenflet. Automatisk sammenfletning for versionshÃ¥ndteringshistorik (ogsÃ¥ kaldet "log") understøttes ogsÃ¥. Automatisk sammenfletning af historik kan enten udføres med det samme nÃ¥r sammenfletningen startes ved at aktivere tilvalget "Sammenfletning ifølge versionshÃ¥ndteringshistorik nÃ¥r sammenfletning starter" eller senere via "Løs automatisk historikkonflikter" i menuen Sammenflet. Oftest begynder versionshÃ¥ndteringshistorikken med en linje som indeholder nøgleordet "$Log$". Den skal matches af tilvalget "Regulært udtryk for historikkens begyndelse". &kdiff3; detekterer hvilke efterfølgende linjer som indgÃ¥r i historikken ved at analysere de indledende tegn som fandtes før nøgleordet "$Log$". Hvis samme "indledende kommentar" ogsÃ¥ findes pÃ¥ følgende linjer inkluderes de ogsÃ¥ i historikken. Ved hver arkivering skriver VCS en entydig linje som angiver version, dato- og tidsinformation fulgt af linjer med brugerens kommentarer. Disse linjer udgør en historikindgang. Historikafsnittet vokser ved hver arkivering og de seneste indgange vises længst oppe (efter historikkens startlinje). NÃ¥r to udvikler arkiverer grene af en fil under parallel udvikling, kommer historikken for sammenfletning til at indeholde flere indgange som vises som konflikter under sammefletning af grenene. Eftersom sammenfletning af dem kan blive meget trættende, tilbyder &kdiff3; understøttelse for den med to mulige strategier: Blot indsætte historikinformationen fra begge bidragsyderne længst oppe, eller sortere historikinformationen ifølge en brugerdefineret nøgle. Metoden kun at indsætte alle indgange er nemmest at indstille. &kdiff3; behøver kun en metode til at detektere hvilke linjer som hører til en historikindgang. De fleste VCS indsætter en tom linje efter hver historikindgang. Hvis der ikke findes andre tomme linjer, er det en tilstrækkelig betingelse for &kdiff3;. Angiv blot et tomt "Regulært udtryk for historikkens begyndelse". Hvis kriteriet med en tom linje ikke er tilstrækkeligt kan du angive et regulært udtryk for at detektere historikindgangen begyndelse. Bemærk at &kdiff3; fjerner duplikerede historikindgange. Hvis en historikindgang blev fundet flere gange i en inddatafils historik, forbliver kun en indgang i uddataen. Hvis du vil sortere historikken skal du angive hvordan sorteringsnøglen skal bygges. Brug parenteser som i "Regulært udtryk for historikindgangens begyndelse" for at gruppere dele af det regulære udtryk som senere skal bruges i sorteringsnøglen. Angiv derefter "Sorteringsnøglernes rækkefølge fra historikindgangens begyndelse" med en liste af tal som refererer til gruppens position i det regulære udtryk adskilt af kommategn ",". Eftersom det ikke er sÃ¥ enkelt at fÃ¥ det rigtigt med det samme, kan du teste og forbedre det regulære udtryk og nøglegenereringen i en særlig dialog ved at klikke pÃ¥ knappen "Test dine regulære udtryk". Antag at historikken ser ud sÃ¥ her: +/************************************************************************** +** HISTORIK: $Log: \toms_sammenfletning_hovedvisning\Mit_program\kode\komplexalgoritm.cpp $ +** +** \head\integreringsgren_12 2 Apr 2001 10:45:41 tom +** Sammenflettede grenen simongren_15. +** +** \main\henry_felretningsgren_7\1 30 Mar 2001 19:22:05 henry +** Forbedrede hastigheden for delrutinen forvandleTil(). +** Ordnede sammenbrud. +**************************************************************************/ + Historikkens indledende linje matcher det regulære udtryk ".*\$Log.*\$.*". Derefter følger historikindgangene. Linjen med nøgleordet "$Log$" begynder med to "*" og derefter følger et mellemrum. &kdiff3; bruger den første streng uden blanke tegn som "indledende kommentar" og antager at historikken slutter med den første linje uden denne indledende kommentar. I eksemplet slutter den sidste linje med en streng som ogsÃ¥ begynder med to "*", men i stedet for et mellemrum følger flere "*". Derfor afslutter denne linje historikken. Hvis sortering af historikken ikke kræves kan det regulære udtryk for historikindgangens begyndelsen se sÃ¥dan her ud. (Linjen er delt i to eftersom den ikke ville fÃ¥ plads ellers.) +\s*\\main\\\S+\s+[0-9]+ (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) + [0-9][0-9][0-9][0-9] [0-9][0-9]:[0-9][0-9]:[0-9][0-9]\s+.* + For detaljer om regulære udtryk se Trolltechs dokumentation af regulære udtryk. Bemærk at "\s" (med et lille "s") matcher alle blanke tegn og "\S" (med et stort "S") matcher alle tegn som ikke er blanke. I vort eksempel indeholder historikindgangens begyndelse først versionsinformation med det regulære udtryk "\\main\\\S+", datoen som bestÃ¥r af dagen "[0-9]+", mÃ¥naden "(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)" og Ã¥ret "[0-9][0-9][0-9][0-9]", tiden "[0-9][0-9]:[0-9][0-9]:[0-9][0-9]" og til sidst udviklerens brugernavn ".*". Bemærk at den indledende kommentar (i eksemplet "**") allerede er fjernet af &kdiff3; inden matcheforsøget, derfor begynder det regulære udtryk med at matche et eller flere blanke tegn "\s*". Hvis du kræver sorteret historik skal sorteringsnøglen beregnes. For at gøre dette skal relevante dele i det regulære udtryk grupperes med parenteser. (De ekstra parenteser kan ogsÃ¥ forblive hvis historiksortering deaktiveres.) +\s*\\main\\(\S+)\s+([0-9]+) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) + ([0-9][0-9][0-9][0-9]) ([0-9][0-9]:[0-9][0-9]:[0-9][0-9])\s+(.*) + Parenteserne indeholder nu 1. versionsinformation, 2. dag, 3. mÃ¥ned, 4. Ã¥r, 5. tid, 6. navn. Men hvis vi vil sortere efter dato og tid skal vi oprette en nøgle med elementerne synlige i en anden rækkefølge: Først Ã¥ret, fulgt af mÃ¥ned, dag, tid, versionsinformation og navn. Derfor skal sorteringsnøglens rækkefølge som angives være "4,3,2,5,1,6". Eftersom mÃ¥nednavne ikke er gode at sortere efter ("Apr" ville være først) detekterer &kdiff3; hvilken rækkefølge mÃ¥nednavnene angives og bruger dette nummer i stedet for ("Apr"->"04"). Og hvis et rent nummer findes forvandles det til en fireciffers værdi med indledende nuller for sortering. Endelig bliver den resulterende sorteringsnøgle for den første historikindgangens indledende linje: 2001 04 0002 10:45:41 integreringsgren_12 tom + +For mere information, se ogsÃ¥ Opsætning af sammenlign og sammenflet. + + + +Navigering og redigering +Meget navigering gøres med rullelisterne og musen, men du kan ogsÃ¥ navigere med tastaturet. Hvis du klikker pÃ¥ et vindue kan du bruge markørtasterne venstrepil, højrepil, opadpil, nedadpil, Page Up, Page Down, Home, End, Ctrl+Home og Ctrl+End ligesom du kan i andre programmer. Sammenfatningssøjlen ved siden af inddatafilernes lodrette rulleliste kan ogsÃ¥ bruges til at navigere ved at klikke i den. Du kan ogsÃ¥ bruge musehjulet til at rulle opad og nedad. I editoren for fletning kan du ogsÃ¥ bruge andre taster til redigering. Du kan skifte mellem indsætnings- og erstatningstilstand med Insert-tasten. (Normaltilstanden er at indsætte.) Et klik med venstre museknap i en sammenfatningssøjle synkroniserer alle vinduer til at vise begyndelsen af samme gruppe af linjer (som forklaret i afsnittet Indstil nuværende gruppe og synkronisér sammenfletnings- og sammenligningsvisningens position). Værktøjslinjen indeholder ogsÃ¥ ni navigeringsknapper som du kan bruge til at gÃ¥ til nuværendel/førsea/sidste forskel, til næste/foregÃ¥ende forskel (Ctrl+Nedadpil eller Ctrl+Opadpil), til næste/foregÃ¥ende konflikt (Ctrl+Page Down eller Ctrl+Page Up) eller til næste/foregÃ¥ende uløste konflikt. Bemærk at for &kdiff3; forbliver en "konflikt" som ikke automatisk blev løst ved start af sammenfletningen altid en "konflikt" ogsÃ¥ selvom den er løst. Deraf nødvendigheden af at skelne "uløste konflikter". +Automatisk fortsættelse +Der er ogsÃ¥ en knap som hedder "GÃ¥ automatisk til næste uløste konflikt efter valg af kilde" (automatisk fortsættelse). Hvis du aktiverer dette, sÃ¥ gÃ¥r &kdiff3; automatisk til næste uløste konflikt nÃ¥r en kilde vælges. Dette kan hjælpe til nÃ¥r du kun vil vælge en kilde. NÃ¥r du behøver begge kilder, eller du vil redigere efter valget, bør du formodentlig slÃ¥ dette fra. Inden &kdiff3; fortsætter til næste uløste konflikt, vises effekten af valget en kort tid. Denne forsinkelse kan justeres i indstillingerne under Sammenlign og sammenflet. Du kan angive Forsinkelse ved automatisk fortsættelse i millisekunder mellem 0 og 2000. + + + +Markér, kopiér og indsæt +Inddatavinduerne viser ikke nogen markør, sÃ¥ markeringer skal udføres med musen, ved at klikke med venstre museknap pÃ¥ begyndelsen, holde museknappen nede og gÃ¥ til slutningen, hvor museknappen slippes igen. Du kan ogsÃ¥ markere et ord ved at dobbeltklikke pÃ¥ det. I editoren for sammenfletningsuddata kan du ogsÃ¥ markere med tastaturet, ved at holde shift-tasten nede og navigere med piletasterne. Hvis markeringen overstiger det synlige omrÃ¥de, kan du flytte musen over vindueskanterne, hvilket gør at &kdiff3; ruller i den retning. For meget store markeringer kan du ogsÃ¥ bruge navigationstasterne mens museknappen holdes nede. Brug f.eks. Page Up og Page Down for hurtigt at gÃ¥ til en bestemt position. Slip museknappen pÃ¥ slutpositionen. For at markere alt i det nuværende vindue, bruges menuen "Redigér" -> Markér alt" (Ctrl+A). For at kopiere til klippebordet skal du trykke pÃ¥ knappen "Kopiér" (Ctrl+C eller Ctrl+Insert). Men der er et tilvalg som hedder "Kopiér automatisk markering". Hvis det er aktiveret, kopieres hvad du end vælger med det samme, og du behøver aldrig eksplicit kopiere. Men vær forsigtig nÃ¥r du bruger dette, eftersom klippebordets indhold kan ødelægges ved en fejl. "Klip" (Ctrl+X eller Shift+Delete) kopierer til klippebordet og fjerner den markerede tekst. "Indsæt" (Ctrl+V eller Shift+Insert) indsætter teksten pÃ¥ klippebordet ved markørens position eller i stedet for den nuværende markeringen. Hvis du indsætter i et af sammenligningsvinduerne vises klippebordets indhold i vinduet og sammenligningen genstartes med det samme. Dette er nyttigt hvis du hurtigt vil hente et stykke tekst et sted og sammenligne det med noget andet uden først at oprette filer. + + +Gemmer +At gemme tillades kun nÃ¥r alle konflikter er løste. Hvis filen allerede findes og tilvalget "Sikkerhedskopiér filer" er markeret, ændres originalversionens navn med tilføjelse af filendelsen .orig, og hvis en sÃ¥dan fil allerede findes fjernes den. NÃ¥r du afslutter eller starter en ny sammenligningsanalyse og data ikke er gemt endnu, spørger &kdiff3; om du vil gemme, annullere eller fortsætte uden at gemme. (&kdiff3; fanger ingen signaler, sÃ¥ hvis du "dræber" &kdiff3; gÃ¥r data tabt.) Linjeslut gemmes ifølge den normale metoden i det underliggende operativsystem. For Unix slutter hver linje med et nylinjetegn "\n", mens for Windows-baserede systemer slutter hvert linje med et returtegn og et nylinjetegn "\r\n". &kdiff3; beholder ikke linjeslut for inddatafilerne, hvilket ogsÃ¥ betyder at du ikke skal bruge &kdiff3; med binære filer. + + +Søg efter strenge +Du kan søge efter en streng i et hvilket som helst tekstvindue i &kdiff3;. Kommandoen "Søg..." (Ctrl+F) i menuen Redigér, viser en dialog som lader dig angive strengen at søge efter. Du kan ogsÃ¥ vælge de vinduer som skal søges. Søgning starter altid fra begyndelsen. Brug kommandoen "Søg igen" (F3) for at fortsætte til næste forekomst. Hvis du vælger at søge i flere vinduer, gennemsøges det første vindue fra begyndelsen til slutningen inden søgningen fortsætter fra begyndelsen i næste vindue, osv. + + +Udskrift +&kdiff3; understøtter udskrift af forskelle mellem tekstfiler. Kommandoen "Skriv ud..." (Ctrl+P) i menuen Fil viser en dialog som lader dig vælge printer og justere andre tilvalg. Der er flere muligheder for at justere omrÃ¥det. Afhængig af forskellige udskriftsdialoger pÃ¥ forskellige operativsystemer, varierer metoden for at opnÃ¥ valg af et vist omrÃ¥de. + + Alle:Udskriv alt. + Nuværende:Udskriv en side som begynder pÃ¥ den første synlige linje i vinduet. (PÃ¥ systemer uden dette tilvalg kan dette opnÃ¥s ved at angive sidenummeret 10000 for udskrift.) + Markering:Inden du vælger at udskrive, markeres tekst med musen (som for kopiere og indsætte) i et af sammenligningsvinduerne for at definere start- og slutlinje. Hvis ingen tekst er markeret i et af sammenligningsvinduerne, er dette tilvalg ikke tilgængeligt. (PÃ¥ systemer uden dette tilvalg kan dette opnÃ¥s ved at angive sidenummeret 9999 for udskrift.) + OmrÃ¥de:Angiv første og sidste side. + +Andre vigtige indstillinger for udskrift tages fra de normale indstillinger: + Skrifttype, tegnstørrelse + Vis linjenummer + Linjebrud + Farver + osv. + +Landskabsformatering anbefales ogsÃ¥ for udskrift. + + +Tilvalg +Tilvalg og listen med nylige filer gemmes nÃ¥r du afslutter programmet, og indlæses igen nÃ¥r du starter det. (Menuen Opsætning->Indstil KDiff3 ...) +Skrifttype +Vælg en skrifttype med fast bredde. (PÃ¥ visse systemer viser dialogen ogsÃ¥ skrifttyper med variabel bredde, men du bør ikke bruge dem.) + + Kursiv stil for forskelle:Hvis du markerer dette, vises tekstforskelle med kursiv versionen af den valgte skrifttype. Hvis skrifttypen ikke understøtter kursiv stil, gør dette ingenting. + + + + +Farver + + Forgrundsfarve:Oftest sort. + Baggrundsfarve:Oftest hvid. + Baggrundsfarve for sammenligning:Oftest lysegrÃ¥. + Farve A:Oftest mørkeblÃ¥. + Farve B:Oftest mørkegrøn. + Farve C:Oftest mørk magenta. + Konfliktfarve:Oftest rød. + Baggrundsfarve for nuværende omrÃ¥de:Oftest lysegul. + Baggrundsfarve for nuværende sammenligningsomrÃ¥de:Oftest mørkegul. + Farve for manuelt valgte sammenligningsomrÃ¥der:Oftest orange. + Farve for nyeste fil i mappesammenligning:Oftest grøn. + Farve for ældste fil i en mappesammenligning:Oftest rød. + Farve for middelgamle filer i en mappesammenligning:Oftest mørkegul. + Farve for manglende filer i et mappesammenligning:Oftest sort. + +At ændre farverne for mappesammenligninger fÃ¥r ikke nogen virkning før end næste mappesammenligning startes. +For systemer med kun 16 eller 256 farver er visse rene farver ikke tilgængelige. For sÃ¥danne systemer vælger knappen "Standard" en ren farve. + + +Opsætning af editor + + Tabulator indsætter mellemrum:Hvis dette ikke er markeret, og du trykker pÃ¥ tabulatortasten, indsættes en tabulator, ellers indsættes et passende antal mellemrum. + Tabulatorbredde:Kan justeres efter dine specielle behov. Normalværdien er 8. + Automatisk indrykning:NÃ¥r du trykker pÃ¥ Enter eller returtasten, bruges foregÃ¥ende linjes indrykning for den nye linje. + Kopiere markering automatisk:Hver markering kopieres med det samme til klippebordet nÃ¥r dette aktiveres, og du behøver ikke kopiere den eksplicit. + Stil for linjeafslutning:NÃ¥r du gemmer kan du vælge den stil for linjeafslutning du foretrækker. Standardindstillingen er det almindelige valg for det operativsystem der bruges. + + + +Opsætning af sammenligning og fletning +NÃ¥r filer sammenlignes forsøger &kdiff3; først at matche linjer som er ens i alle inddatafiler. Det er kun under dette skridt at blanke tegn kan ignoreres. Det næste skridt sammenligner hver linje. Under dette skridt ignoreres blanke tegn ikke. Under sammenfletning ignoreres blanke tegn heller ikke. + + + Behold returtegn:Visse editorer (pÃ¥ visse systemer) gemmer returtegn '\r' og nylinjetegn '\n' i slutningen pÃ¥ linjen, mens andre kun gemmer nylinjetegnet '\n'. Oftest ignorerer &kdiff3; returtegnet, men sÃ¥ ser filer som ikke har samme størrelse ens ud ved sammenligning side for side. NÃ¥r dette tilvalg er markeret, gøres returtegn synlige, men behandles som blanke tegn. Dette tilvalg skal være slÃ¥et fra under en sammenfletning. Standardværdien er fra. + Ignorér cifre:Standardværdien er fra. Ciffertegn ('0'-'9','.','-') ignoreres under første del af analysen nÃ¥r linjematchningen udføres. Forskellene for resultatet vises alligevel, men de behandles som blanke tegn. + Ignorér C/C++ kommentarer:Normalværdien er fra. Ændringer i kommentarer vil blive behandlet ligesom ændringer i blanke tegn. + Ignorér versaltype:Standardværdien er fra. Ændringer i versaltilstand for tegn (sÃ¥som 'A' eller 'a') hÃ¥ndteres som ændringer i blanke tegn. + Præprocessorkommando:Se næste afsnit. + Præprocessorkommando for linjematchning:Se næste afsnit. + Prøv hÃ¥rdt:Prøv hÃ¥rdt at finde selv smÃ¥ fejl. (Normalt slÃ¥et til.) Det er formodentlig effektivt for komplicerede og store filer, og langsomt for meget store filer. + Forsinkelse ved automatisk fortsættelse (ms):I automatisk fortsættelsestilstand angiver denne indstilling hvor længe resultatet for gruppen skal vises inden der hoppes til næste uløste konflikt. + Blanke tegn 2/3-fil fletningsstandard:Løs automatisk alle konflikter for blanke tegn ved at vælge angiven fil. (Standardværdien er manuelt valg.) Nyttigt hvis blanke tegn virkelig ikke er vigtige i mange filer. Hvis du kun behøver det ind iblandt, er det bedre at bruge "Vælg A/B/C for uløste konflikter med blanke tegn" i menuen "Sammenflet". Bemærk at hvis du enten aktiverer Ignorér cifre eller "Ignorere C/C++ kommentarer" gælder det automatiske valg ogsÃ¥ ved konflikter for cifre eller kommentarer. + Regulært udtryk for automatisk sammenfletning:Regulært udtryk for linjer hvor &kdiff3; automatisk skal vælge en kilde. Se ogsÃ¥ Automatisk sammenfletning ... + Kør automatisk sammenfletning med regulært udtryk nÃ¥r sammenfletning starter:Hvis aktiveret udfører &kdiff3; den automatiske sammenfletning med "Regulært udtryk for automatisk sammenfletning" nÃ¥r en sammenfletning startes. + Regulært udtryk for historikkens begyndelse:Regulært udtryk for begyndelsen af historikindgangen for sammenfletning. Som oftest indeholder linjen nøgleordet "$Log$". Standardværdi: ".*\$Log.*\$.*" + Regulært udtryk for historikindgangens begyndelse:En historikindgang for sammenfletning bestÃ¥r af flere linjer. Angiv det regulære udtryk for at detektere den første linje (uden indledende kommentar). Brug parenteser for at gruppere nøglerne du vil bruge til sortering. Hvis det efterlades tomt, antager &kdiff3; at tomme linjer skiller historikindgangene ad. Se ogsÃ¥ Automatisk sammenfletning ... + Sortering af historiksammenfletning:Aktivér sortering af versionshÃ¥ndteringshistorik. + Sorteringsnøglernes rækkefølge fra historikindgangens begyndelse:Hver parentes som bruges i det regulære udtrykket for historikkens startindgang grupperer en nøgle som kan bruges til sortering. Angiv listen med nøgler (som nummereres i rækkefølge de optræder med begyndelsen pÃ¥ 1) med ',' som skilletegn (f.eks. "4,5,6,1,2,3,7"). Hvis det efterlades tomt udføres ingen sortering. Se ogsÃ¥ Automatisk sammenfletning ... + Sammenfletning ifølge versionshÃ¥ndteringshistorik nÃ¥r sammenfletningen starter:Hvis aktiveret udfører &kdiff3; den automatiske sammefletning af historik med tidligere nævnte tilvalg nÃ¥r en sammenfletning startes. + Test dine regulære udtrykDenne knap viser en dialog som lader dig forbedre og teste det regulære udtryk ovenfor. Kopiér blot de respektive data fra dine filer til eksempellinjerne. "Matcheresultaterne" viser med det samme om det lykkes at matche eller ej. "Sorteringsnøgleresultat" viser nøglen som bruges til sortering ved sammenfletning af historik. + Irrelevant sammenfletningskommando:Angiv en egen kommando som skal kaldes nÃ¥r &kdiff3; detekterer at filen fra B ikke bidrager med relevant data som ikke allerede findes i filen fra C. Denne kommando kaldes med de tre filnavne som parametre. Data som matches af "Regulært udtryk for automatisk sammenfletning" eller i historikken anses ikke for at være relevant. + + + + +Mappefletning +Disse valgmulighederne har at gøre med gennemsøgning af mappen og hÃ¥ndtering af sammenfletningen: Se Mappesammenligning og sammenfletning for detaljer. Der er endnu en valgmulighed her som ogsÃ¥ er relevant for at gemme enkelte filer: + + Sikkerhedskopiér filer:NÃ¥r en fil gemmes og en ældre version allerede eksisterer, ændres originalversionens navn med tilføjelse af filendelsen ".orig". Hvis en gammel sikkerhedskopi med ".orig" allerede eksisterer slettes den uden sikkerhedskopiering. + + + +Indstillinger for region og sprog + + Sprog:Justér brugergrænsefladens sprog. At ændre dette pÃ¥virker ikke programmet som kører. Du skal afslutte og genstarte &kdiff3; for at ændre sprog. (Dette er ikke tilgængeligt i &kde;-versionen af &kdiff3;, eftersom sproget kan justeres i de generelle &kde;-indstillinger.) + Brug samme kodning til alt:Følgende kodningstilvalg kan justeres separat for hvert objekt, eller hvis tilvalget er sandt, indstilles alle værdier til den første værdi. + Lokal kodning:Ovenfor kodningsvælgerne vises en note som fortæller dig hvad den lokale kodning er (Den kan ikke justeres, men er kun til information hvis du ikke ved hvad den lokale kodning er, men har brug for at kunne vælge den.) + Filkodning for A/B/C:Justér filkodningen for inddatafiler. Dette har en effekt pÃ¥ hvordan specialtegn tolkes. Eftersom du kan justere hvert kodning separat, kan du til og med sammenligne og sammenflette filer som blev gemt med forskellige kodninger. + Filkodning for sammenflettet uddata og ved at gemme:NÃ¥r du har redigeret en fil, kan du justere hvilken kodning som bruges nÃ¥r den gemmes til disk. + Filkodning for præprocessorfiler:NÃ¥r du definerer præprocessorer, kan de mÃ¥ske ikke hÃ¥ndtere din kodning (eksempelvis hvis dine filer bruger 16-bit Unicode og præprocessoren kun kan hÃ¥ndtere 8-bit ASCII). Med dette kan du definere kodningen for præprocessorens uddata. + Sprog som læses fra højre til venstreVisse sprog skrives fra højre til venstre. NÃ¥r dette er aktiveret, tegner &kdiff3; tekst fra højre til venstre i sammenligningsvinduerne og i sammenfletningsvinduet. Bemærk at hvis du starter &kdiff3; med kommandolinjeflaget "--reverse" sÃ¥ vises al layout ogsÃ¥ fra højre til venstre. (Dette er en funktion som &Qt; sørger for.) Denne dokumentation er skrevet under antagelse af at "Sprog som læses fra højre til venstre" eller omvendt layout ikke er aktiverede. Visse referencer til "venstre" eller "højre" skal erstattes af det modsatte hvis du bruger disse valgmuligheder. + + + + +Diverse +(Disse tilvalg og handlinger er tilgængelige i menuerne eller værktøjslinjen.) + + Vis linjenummer:Du kan vælge om linjenummer skal vises for inddatafilerne. + Vis mellemrum og tabulatortegn i sammenligning:Sommetider er synlige mellemrum og tabulatortegn forstyrrende. Du kan slÃ¥ dette fra. + Vis blanke tegn:Luk af for dette for ikke at vise ændringer af kun blanke tegn i teksten eller oversigtssøjlerne. (Bemærk at dette ogsÃ¥ gælder ændringer af cifre eller kommentarer hvis valgmulighederne "Ignorér cifre" eller "Ignorér C/C++ kommentarer" er aktive.) + Overblikstilvalg:Disse tilvalg er kun tilgængelige nÃ¥r du sammenligner tre filer. I standardtilstand vises alle forskelle i en farvekodet oversigtssøjle, men sommetider er du især interesseret i forskellene mellem to af de tre filer. Ved at vælge oversigten "A mod B", "A mod C" eller "B mod C" vises en anden oversigtssøjle med den forespurgte information ved siden af den almindelige oversigt. + Tekstombrydning af diff-vinduer:Ombryd linjer nÃ¥r deres længde ville have været større end vinduets bredde. + Vis vindue A/B/C:Sommetider vil du gerne bruge skærmpladsen bedre for lange linjer. Skjul vinduer som ikke er vigtige. (I menuen Vinduer.) + Skift opdelingsorientering:Skift mellem sammenligningsvinduer som vises ved siden af hinanden (A til venstre for B til venstre for C) eller ovenfor hinanden (A over B over C). Dette bør ogsÃ¥ hjælpe med lange linjer. (I menuen Vinduer.) + Start sammenfletning hurtigt:Sommetider kigger du pÃ¥ forskelle, og bestemmer dig for at sammenflette. "Sammenflet denne fil" i menuen Mappe virker ogsÃ¥ hvis du kun sammenligner to filer. Et enkelklik starter sammenfletningen og bruger filnavnet pÃ¥ den sidste inddatafil som standarduddatafilnavn. (NÃ¥r dette bruges til at genstarte en sammenfletning, beholdes uddatafilnavnet.) + + + +Indstil genvejstaster +For øjeblikket understøtter kun &kde;-versionen indstillelige genvejstaster (Menuen Opsætning->Indstil genveje...) + + + +Præprocessorkommandoer +&kdiff3; understøtter to præprocessortilvalg. + + Præprocessorkommando:NÃ¥r en fil læses, sendes den via denne eksterne kommando. Uddata fra denne kommando vises i stedet for den oprindelige fil. Du kan skrive din egen præprocessor som opfylder dine specielle behov. Brug dette til at fjerne forstyrrende dele af filen, eller for automatisk at korrigere indrykning, osv. + Præprocessorkommando for linjematchning:NÃ¥r en fil læses, sendes den via denne eksterne kommando. Hvis en præprocessorkommando (se ovenfor) ogsÃ¥ angives er udskriften fra præprocessoren input til kommandoen for linjematchning. Udskriften bruges kun under linjematchningsfasen af analysen. Du kan skrive din egen præprocessor som opfylder dine specielle behov. Hvert inddatalinje skal have en tilsvarende uddatalinje. + + +Idéen er at tillade brugeren større fleksibilitet mens diff-resultatet indstilles. Men dette kræver et eksternt program, og mange brugere ønsker ikke selv at skrive et sÃ¥dant. Heldigvis er det meget ofte sÃ¥dan at sed or perl vil kunne klare det. +For eksempel et enkelt tilfælde at teste: Betragt filen a.txt (6 linjer): + aa + ba + ca + da + ea + fa + Og filen b.txt (3 linjer): + cg + dg + eg + Uden en præprocessor ville følgende linjer placeres ud for hinanden: + aa - cg + ba - dg + ca - eg + da + ea + fa + Det er formodentlig ikke det der ønskes eftersom det første bogstav indeholder den interessante information. For at hjælpe matchealgoritmen med at ignorere det andet bogstav kan man bruge en linjematchende præprocessorkommando som erstatter 'g' med 'a': + sed 's/g/a/' + Med den kommando bliver resultatet af at matche: + aa + ba + ca - cg + da - dg + ea - eg + fa + Internt ser matchealgoritmen filerne efter den linjematchende præprocessor er kørt, men pÃ¥ skærmen er filen uforandret. (Den normale præprocessor ville ogsÃ¥ ændre data pÃ¥ skærmen.) + +Basal <command +>sed</command +> +Dette afsnit introducerer blot nogle meget grundlæggende funktioner i sed. For mere information se info:/sed eller http://www.gnu.org/software/sed/manual/html_mono/sed.html. En forkompileret version for &Windows; eksisterer pÃ¥ http://unxutils.sourceforge.net. Bemærk at følgende eksempel antager at sed eksisterer i en mappe i miljøvariablen PATH. Hvis dette ikke er tilfældet, skal du angive fuldstændig absolut søgesti til kommandoen. +Bemærk ogsÃ¥ at følgende eksempel bruger enkle citationstegn ('), hvilket ikke virker i Windows. I Windows skal du i stedet bruge dobbelte citationstegn ("). +I denne sammenhæng bruges kun erstatningskommandoen i sed: + sed 's/REGUDTRYK/ERSTATNING/FLAG' + Inden du bruger en ny kommando inde i &kdiff3;, bør du først teste den i en terminal. Her er kommandoen echo nyttig. For eksempel: + echo abrakadabra | sed 's/a/o/' + -> obrakadabra + Dette eksempel viser en meget enkel sed-kommando som erstatter den første forekomst af "a" med "o". Hvis du vil erstatte alle forekomster behøver du flaget "g": + echo abrakadabra | sed 's/a/o/g' + -> obrokodobro + Symbolet "|" er en pipe-kommando som overfører uddata fra foregÃ¥ende kommando til inddata i efterfølgende kommando. Hvis du vil teste med en længere fil kan du bruge cat pÃ¥ Unix-lignende systemer eller type pÃ¥ Windows-lignende systemer. sed udfører erstatningen for hver linje. cat filnavn | sed flag + + + +Eksempel pÃ¥ brug af <command +>sed</command +> i &kdiff3; +Ignorering af andre typer kommentarer +For øjeblikket forstÃ¥r &kdiff3; kun C/C++ kommentarer. Ved at bruge en linjematchende præprocessorkommando kan du ogsÃ¥ ignorere andre typer af kommentarer ved at konvertere dem til C/C++ kommentarer. For eksempel for at ignorere kommentarer som begynder med "#", skulle du ville konvertera dem til "//". Bemærk at du ogsÃ¥ skal aktivere tilvalget "Ignorér C/C++ kommentarer" for at fÃ¥ nogen virkning. En passende linjematchende præprocessorkommando ville være: + sed 's/#/\/\//' + Eftersom tegnet "/" har en særlig betydning i sed, er det nødvendigt at tilføje tegnet "\" inden hver "/" i erstatningsstrengen. Sommetider behøves "\" for at tilføje eller fjerne en særlig betydning for visse tegn. De enkle citationstegn (') inden og efter erstatningskommandoen er nu vigtige, eftersom skallen ellers ville forsøge at tolke visse specialtegn som '#', '$' eller '\' inden de sendes til sed. Bemærk at i Windows behøver du dobbelte citationstegn (") her. Windows erstatter andre tegn som '%', sÃ¥ du kan fÃ¥ brug for at eksperimentere noget. + +Ikke versalfølsom Diff +Brug følgende linjematchende præprocessorkommando til at forvandle al inddata til store bogstaver: + sed 's/\(.*\)/\U\1/' + Her er ".*" et regulært udtryk som matcher alle strenge, og i denne sammenhæng matcher alle tegn pÃ¥ linjen. Tegnet "\1" i erstatningsstrengen svarer til den matchede tekst mellem det første par "\(" og "\)". "\U" konverterer den indsatte tekst til store bogstaver. + + +Ignorering af nøgleord for versionskontrol +CVS og andre versionshÃ¥ndteringssystemer bruger flere nøgleord til at indsætte automatisk genererede strenge (info:/cvs/Keyword substitution). Alle følger mønstret "$NØGLEORD genereret tekst$". Nu behøver vi en linjematchende præprocessorkommando som kun fjerner den genererede tekst: + sed 's/\$\(Revision\|Author\|Log\|Header\|Date\).*\$/\$\1\$/' + Strengen "\|" skiller de mulige nøgleord ad. Du vil mÃ¥ske ændre listen ifølge dine behov. Tegnet "\" ud for "$" behøves eftersom "$" ellers matcher linjeslut. +Mens du eksperimenterer med sed kommer du mÃ¥ske til at forstÃ¥ og endog at kunne lide disse regulære udtryk. De er nyttige fordi der er mange andre programmer der ogsÃ¥ understøtter lignende ting. + + +Ignorér cifre +At ignorere tal er i virkeligheden et indbygget tilvalg, men som et andet eksempel, vises hvordan det ville se ud som en linjematchende præprocessorkommando. + sed 's/[0123456789.-]//g' + Alle tegn indenfor '[' og ']' matcher og vil blive erstattet af ingenting. + + +Ignorering af visse søjler +Sommetider er teksten meget strengt formateret, og indeholder søjler som du altid vil ignorere, mens der er andre søjler du vil bevare for analyse. I følgende eksempel ignoreres de fem første søjler (tegn), de følgende ti søjler bevares, derefter ignoreres igen fem søjler og resten af linjen bevares. + sed 's/.....\(..........\).....\(.*\)/\1\2/' + Hvert punktum '.' svarer til et hvilket som helst enkelt tegn. Strengene "\1" og "\2" i erstatningsstrengen refererer til den matchende tekst indenfor det første og andre par af "\(" og "\)" som angiver teksten at bevare. + + +Kombination af flere substitutioner +Sommetider vil du tilpasse flere erstatninger samtidigt. SÃ¥ kan du bruge semikolon ';' for at skille dem fra hinanden. For eksempel: echo abrakadabra | sed 's/a/o/g;s/\(.*\)/\U\1/' + -> OBROKODOBRO + + + + +Brug af <command +>perl</command +> i stedet for <command +>sed</command +> +I stællet for sed mÃ¥ske du vil bruge noget andet som perl. + perl -p -e 's/REGUTTRYCK/ERSÆTTNING/FLAGGOR' + Men visse detaljer er anderledes i perl. Bemærk at hvor sed behøver "\(" og "\)" kræver perl det enklare "(" og ")" uden indledende '\'. Till eksempel: sed 's/\(.*\)/\U\1/' + perl -p -e 's/(.*)/\U\1/' + + + + + +Rækkefølge for præprocessor-udførsel +Data sendes gennem alle interne og eksterne præprocessorer i følgende rækkefølge: + +Normal præprocessor, +Præprocessor for linjematchning, +Ignorér versaler (konvertér til store bogstaver), +Detektion af C/C++ kommentarer, +Ignorér cifre, +Ignorér blanke tegn + +Data efter den normale præprocessor vil blive bevaret til visning og indfletning. De andre operationer ændrer kun de data som den linjematchende diff-algoritme ser. I de sjældne tilfælde hvor du bruger en normal præprocessor, bemærk at den linjematchende præprocessor ser uddata fra den normale præprocessor som inddata. + + +Advarsel +Forbehandlingskommandoer er ofte meget nyttige, men som med alle tilvalg som ændrer teksten eller skjuler visse forskelle automatisk, kan du ved en fejl springe over visse forskelle og i værste fald ødelægge vigtige data. Af denne grund, hvis en normal præprocessorkommando bruges under en sammenfletning, fortæller &kdiff3; dig om det og spørger om det skal deaktiveres eller ej. Men du fÃ¥r ingen advarsel hvis en linjematchende præprocessorkommando er aktiv. Sammenfletningen sker ikke førend alle konflikter er løste. Hvis du deaktiverede "Vis blanke tegn" bliver ogsÃ¥ forskellene som blev fjernet med den linjematchende præprocessorkommando usynlige. Hvis knappen Gem forbliver inaktiv under en sammenfletning (pÃ¥ grund af tilbageværende konflikter), sÃ¥ sørg for at aktivere "Vis blanke tegn". Hvis du ikke vil sammenflette disse mindre vigtige forskelle manuelt kan du vælge "Vælg [A|B|C] for uløste konflikter med blanke tegn" i menuen "Sammenflet". + + + + + +Mappesammenligning og sammenfletning med &kdiff3; +Introduktion til mappesammenligning og sammenfletning +Ofte skal programmører ændre mange filer i en mappe for at opnÃ¥ deres formÃ¥l. For at opnÃ¥ dette lader &kdiff3; dig ogsÃ¥ sammenligne og sammenflette hele mapper rekursivt! Selvom sammenligning og sammenfletning af mapper synes at være ganske selvklart, er der flere detaljer som du bør kende til. Det vigtigste er naturligvis det faktum at mange filer nu kan pÃ¥virkes af hver handling. Hvis du ikke har sikkerhedskopier af originale data, kan det være meget svært eller til og med umuligt at komme tilbage til originaltilstanden. SÃ¥ inden du pÃ¥begynder en sammenfletning, skal du sørge for at data er sikret, og at det er muligt at nulstille. Om du laver et arkiv, eller bruger et versionskontrolsystem er din egen beslutning, men til og med erfarne programmører og integratører behøver sommetider gammel kildekode. Bemærk ogsÃ¥ at ogsÃ¥ selvom jeg (forfatteren til &kdiff3;) forsøger at gøre mit bedste, kan jeg ikke garantere at der ikke er fejl. Ifølge GNU GPL er der INGEN GARANTI af nogen slags for dette program. SÃ¥ hvor ydmyg, og husk altid: +
+ At fejle er menneskeligt, men for at virkelig lave rod i det behøves en maskine. +
+Så dette er hvad programmet kan gøre for dig: &kdiff3; ... + + ... læser og sammenligner to eller tre mapper rekursivt, + ... håndterer symbolske link særskilt, + ... lader dig bladre gennem filer med et dobbeltklik, + ... foreslår en sammenfletningsmulighed for hvert objekt, som du kan ændre inden mappesammenfletningen startes, + ... lader dig simulere sammenfletningen og giver en liste af handlingerne som ville ske, uden at virkelig gøre dem, + ... lader dig udføre sammenfletningen, og lader dig bestemme hvornår manuel interaktion behøves, + ... lader dig udføre valgt handling for alle punkter (tasten F7) eller markeret punkt (tasten F6), + ... lader dig fortsætte sammenfletningen efter manuel interaktion med tasten F7, + ... laver valgfrie sikkerhedskopier, med filendelsen ".orig". + ... + +
+ +Start mappesammenligning eller sammenfletning +Dette ligner meget sammenfletning og sammenligning af en enkelt fil. Du skal kun angive mapper på kommandolinjen eller i dialogen for filåbning. +Sammenlign eller sammenflet to mapper: +kdiff3 kat1 kat2 + kdiff3 kat1 kat2 -o målkat + +Hvis ingen målmappe angives, bruger &kdiff3; kat2. + + +Sammenlign eller sammenflet tre mapper: +kdiff3 kat1 kat2 kat3 + kdiff3 kat1 kat2 kat3 -o målkat + +Når tre mapper sammenflettes, bruges kat1 som basen for sammenfletningen. Hvis ingen målmappe angives, bruger &kdiff3; kat3 som målmappe for sammenfletningen. + +Bemærk at kun sammenligningen startes automatisk, ikke sammenfletningen. For det skal du først vælge et menupunkt eller tasten F7. (Mere information kommer senere.) + + + +Katalogsammenfletning af synlig information +Mens mapperne læses vises et meddelelsesfelt som informerer dig om forløbet. Hvis du afbryder mappesøgningen, vises kun filer som hidtil er sammenlignet. Når mappegennemsøgningen er færdig, viser &kdiff3; et listefelt med tilbageværende resultater, ... + + + +... og detaljer om det markerede punkt til højre: + + + + + +Navnesøjlen +Hver fil og mappe som blev fundet under søgningen vises her i et træ. Du kan vælge et punkt ved at klikke en gang på det med musen. Mapperne er normalt sammentrukket. Du kan ekspandere og trække dem sammen ved at klikke på "+"/"-", ved at dobbeltklikke på punktet eller ved at bruge tasterne "venstrepil" og "højrepil". Menuen "Mappe" indeholder også to tilvalg "Træk alle undermapper sammen" og "Ekspandér alle undermapper" som du kan bruge til at trække sammen eller ekspandere alle mapper på én gang. Hvis du dobbeltklikker på et filpunkt, udføres filsammenligning og sammenligningvinduet for filer vises. +Ikonen i navnesøjlen svarer til filtypen i den første mappe ("A"). Den kan være en af disse: + + Normal fil + Normal mappe (mappeikon) + Link til en fil (filikon med en link-pil) + Link til en mappe (mappeikon med en link-pil) + +Hvis filtypen er anderledes i de øvrige mapper, ses det i søjlerne A/B/C og i vinduet som viser detaljerne om det markerede punkt. Bemærk at i disse tilfælde kan ingen sammenfletningshandling vælges automatisk. Når sammenfletningen startes, informeres brugeren om denne slags problemer. + + +Søjlerne A/B/C og farvesammensætninger +Som det ses i billedet ovenfor, bruges farverne rød, grøn, gul og sort i søjlerne A/B/C. + + Sort: Dette punkt eksisterer ikke i denne mappe. + Grøn: Nyeste punkt. + Gul: Ældre end grøn, nyere end rød. + Rød: Ældst punkt. + +Men for punkter som er identiske i sammenligningen, er farven også identisk selvom alderen ikke er det. Mapper anses for at være ens hvis alle objekter de indeholder er ens. Så har de også samme farve. Alderen på en mappe spiller ingen rolle for dens farve. Idéen til denne farvesammensætning fandt jeg i dirdiff. Farverne svarer til farverne for et blad, som er grønt i begyndelsen, derefter bliver gult og til sidst rødt når det er gammelt. + +Handlingssøjlen +Efter at have sammenlignet mapperne evaluerer &kdiff3; også et forslag til sammenfletningshandling. Den vises i søjlen "Handling". Du kan ændre den ved at klikke på handlingen du vil ændre. En lille menu dukker op og lader dig vælge en handling for dette punkt. (Du kan også vælge den oftest bruge handling via tastaturet. Ctrl+1/2/3/4/Delete vælger A/B/C/Sammenflet/Slet hvis de er tilgængelige.) Denne handling udføres under sammenfletningen. Hvilke handlinger som er tilgængelige afhænger af punktet og sammenfletningstilstanden som bruges. Sammenfletningstilstanden er en af: + + Sammenfletning af tre mapper ("A" behandles som ældste basis for begge). + Sammenfletning af to mapper. + To-mappes synkroniseringstilstand (aktiveres med tilvalget "Synkronisér mapper"). + +Ved tremappers-sammenfletning er den handling der foreslås: Hvis for et objekt... + + ... alle tre mapper er ens: Kopiér fra C + ... A og C er ens med B er det ikke: Kopiér fra B (eller hvis B ikke eksisterer, slet målet hvis det eksisterer) + ... A og B er ens men C er det ikke: Kopiér fra C (eller hvis C ikke eksisterer, slet målet hvis det eksisterer) + ... B og C er ens med A er det ikke: Kopiér fra C (eller hvis C ikke eksisterer, slet målet hvis det eksisterer) + ... kun A eksisterer: Slet målet (hvis det eksisterer) + ... kun B eksisterer: Kopiér fra B + ... kun C eksisterer: Kopiér fra C + ... A, B og C er ikke ens: Sammenflet + A, B og C har ikke samme filtype (f.eks. A er en mappe, B er en fil): "Fejl: Konflikt i filtyper". Så længe sådanne punkter eksisterer, kan mappesammenfletningen ikke startes. + +Ved tomappers sammenfletning er den foreslåede handling: Hvis for et objekt... + + ... begge mapper er ens: Kopiér fra B + ...A eksisterer men ikke B: Kopiér fra A + ... B eksisterer men ikke A: Kopiér fra B + ... A og B eksisterer men er ikke ens: Sammenflet + A og B har ikke samme filtype (f.eks. A er en mappe, B er en fil): "Fejl: Konflikt i filtyper". Så længe sådanne punkter eksisterer, kan mappesammenfletningen ikke startes. + +Synkroniseringstilstand er kun aktiv hvis to mapper og ingen eksplicit målmappe angives, og hvis tilvalget "Synkronisér mapper" er aktivt. &kdiff3; vælger så en standardhandling så begge mapper er ens bagefter. Hvis for et punkt ... + + ... begge mapper er ens: Ingenting gøres. + ... A eksisterer, men ikke B: Kopiér A til B + ... B eksisterer, men ikke A: Kopiér B til A + ... A og B eksisterer, men er ikke ens: Sammenflet og opbevar resultatet i begge mapper. (For brugeren er det synlige filnavn for at gemme B, men derefter kopierer &kdiff3; også B til A.) + A og B har ikke samme filtype (f.eks. A er en mappe, B er en fil): "Fejl: Konflikt i filtyper". Så længe sådanne punkter eksisterer, kan mappesammenfletningen ikke startes. + +Når to mapper sammenflettes og tilvalget "Kopiér nyere i stedet for at sammenflette" er markeret, kigger &kdiff3; på datoen og foreslår at vælge den nyere fil. Hvis filerne ikke er ens men har samme dato, indeholder handlingen "Fejl: Dato er ens men filerne er det ikke." Så længe sådanne punkter eksisterer, kan mappesammenfletningen ikke startes. + + +Statussøjlen +Under sammenfletningen behandles en fil af gangen. Statussøjlen viser "Færdig" for punkter hvor sammenfletningshandlingen er lykkedes, og en anden tekst hvis noget uventet indtraf. Når en sammenfletning er færdig, bør du udføre en sidste kontrol for at se at status for alle punkter er acceptabel. + + +Statistiske søjler +Når filsammenligningtilstanden "Fuldstændig analyse" er aktiveret i valgmulighederne, viser &kdiff3; ekstra søjler som indeholder antal uløste, løste, ikke blanke og blanke konflikter. (Søjlen løste vises kun når mapper sammenlignes eller sammenflettes.) + + +Vælg listede filer +Flere tilvalg påvirker hvilke filer som listes her. Nogle er tilgængelige i indstillingsdialogen. Menuen Mappe indeholder punkterne: + "Vis identiske filer": Filer som er detekteret som ens i alle inddatamapper. + "Vis forskellige filer": Filer som findes i to eller flere mapper men ikke er ens. + "Vis kun filer i A": Filer som kun findes i A, men ikke i B eller C. + "Vis kun filer i B": Filer som kun findes i B, men ikke i A eller C. + "Vis kun filer i C": Filer som kun findes i C, men ikke i A eller B. + +Aktivér kun valgmulighederne "Vis" for de punkter du vil liste. Hvis du for eksempel kun vil liste alle punkter som enten findes i A eller i B men ikke i begge, skal du aktivere "Vis kun filer i A" og "Vis kun filer i B" og deaktivere alle andre ("Vis identiske filer", "Vis forskellige filer", "Vis kun filer i C"). Listen opdateres med det samme for at svare til ændringen. Disse tilvalg gælder også for mapper med en undtagelse: At deaktivere "Vis forskellige filer" skjuler ikke hele mapper. Dette fungerer kun for filer inde i dem. Bemærk at af disse er det kun tilvalget "Vis identiske filer" som er bestående. De øvrige aktiveres når &kdiff3; startes. + + + + + +Udfør en mappesammenfletning +Du kan enten sammenflette det valgte punkt (fil eller mappe), eller alle punkter. Når du har lavet alle valg af handlinger (også i alle undermapper), kan du udføre sammenfletningen. Vær klar over at hvis du ikke eksplicit angav en målmappe, bliver målet "C" i tre-mappetilstand, "B" i to-mappetilstand, og i synkroniseringstilstand er det "A" og/eller "B". Hvis du også har angivet en målmappe, kontrollér at alle objekter som skal eksisterer i udskriften eksisterer i træet. Der er nogle valgmuligheder som får visse objekter til at blive udeladt fra mappesammenligningen og sammenfletningen. Kontrollér disse valgmuligheder for at undgå ubehagelige overraskelser: + + "Rekursive mapper": Hvis det er fra, er der ikke punkter i undermapper. + "Mønster" eller "Undtagelsesmønster": Inkludér eller undtag punkter som matcher. + "Undtag gemte filer" + "Vis"-tilvalg (Vis identiske/forskellige filer, kun filer i A/B/C) + +Hvis du ændrer indstillingerne for at vise flere filer, skal du gøre en omsøgning via menuen "Mappe" -> "Skan igen". (Grunden til dette er at &kdiff3; udelader sammenligning for filer ifølge kriterierne for at få hurtigere sammenligningshastighed.) Hvis du ændrede fil- og mappemønstre for at undtage filer, opdateres fillisten med det samme når indstillingsdialogen lukkes. Bemærk at når du skriver til en helt ny mappe vil du oftest også kopiere de identiske filer. Aktivér "Vis identiske filer" i dette tilfælde. Hvis din målmappe er en af inddatamapperne, er dette ikke nødvendigt eftersom filerne allerede findes der. Hvis du er tilfreds indtil videre, er resten enkelt. For at sammenflette alle punkter: Vælg "Start eller fortsæt mappesammenfletning" i menuen "Mappe" eller tryk på F7 (som er standardgenvejstasten). For kun at sammenflette nuværende punkt: Vælg "Udfør handling for nuværende punkt" eller tryk på F6. Hvis visse objekter med ugyldige filtyper stadigvæk eksisterer, på grund af filtyper med konflikter, vises et meddelelsefelt og objektet udpeges, så du kan vælge en gyldig handling for objektet. Hvis du sammenfletter alle punkter vises en dialog som giver dig valgmulighederne "Gør det", "Simulér det" og "Annullér". + + Vælg "Simulér det" hvis du vil se hvad der ville blive gjort uden virkelig at gøre det. En udførlig liste med alle handlinger vises. + Vælg ellers "Gør det" for virkelig at udføre sammenfletningen. + +Derefter udfører &kdiff3; den angivne handling for alle punkter. Hvis manuel interaktion kræves (sammenfletning af enkelt fil), vises et sammenfletningsvindue (se det store skærmaftryk). Når du er færdig med manuel indfletning af en fil, vælges igen "Start eller fortsæt mappesammenfletning" eller tryk på F7. Hvis du ikke har gemt endnu, beder en dialog dig om at gøre det. Derefter fortsætter &kdiff3; til næste punkt. Når &kdiff3; støder på en fejl, meddeles det og udførlig statusinformation vises. Længst nede i listen er der nogen fejlmeddelelser som bør hjælpe dig til at forstå problemets grund. Når du fortsætter sammenfletningen (tasten F7), giver &kdiff3; dig valget at forsøge igen eller springe over punktet som forårsagede problemet. Dette betyder at du kan vælge en anden handling, eller løse problemet på anden måde, inden du fortsætter. Når sammenfletningen er færdig, informerer &kdiff3; dig med et meddelelsesfelt. Hvis visse punkter sammenflettedes individuelt før mappefletning bruges, husker &kdiff3; det (mens sammenfletningssessionen er i gang), og sammenfletter dem ikke igen når sammenfletningen for alle punkter udføres. Selv når sammenfletningen springes over eller ingenting gemmes regnes disse punkter som færdige. Kun når sammenfletningshandlingen ændres, vil "Færdig"-status for punktet blive fjernet så det kan sammenflettes igen. + + +Tilvalg for at sammenligne og sammenflette mapper +Indstilling af &kdiff3; (menuen "Opsætning"->"Indstil KDiff3") har en side som hedder "Mappesammenfletning" med følgende tilvalg: + + + Rekursive mapper:Vælg om mapper skal gennemsøges rekursivt. + Mønster for filer:Kun filer som matcher et mønster her tilføjes i træet. Mere end et mønster kan angives ved at bruge semikolon ";" som skilletegn. Gyldige jokertegn: "*" og "?". (f.eks. "*.cpp;*.h"). Standardværdien er "*". Dette mønster bruges ikke for mapper. + Anti-mønster for filer:Filer som matcher et mønster undtages fra træet. Mere end et mønster kan angives ved at bruge semikolon ";" som skilletegn. Gyldige jokertegn: '*' og '?'. Standardværdien er "*.orig;*.o;"*.obj". + Mappeundtagelsesmønster for filer:Mapper som matcher et mønster undtages fra træet. Mere end et mønster kan angives ved at bruge semikolon ";" som skilletegn. Gyldige jokertegn: '*' og '?'. Standardværdien er "CVS;deps;.svn". + Brug .cvsignore:Ignorér filer og mapper som også ville blive ignoreret af CVS. Mange automatisk genererede filer ignoreres af CVS. Den store fordel er at dette kan være mappespecifikt via en lokal ".cvsignore" fil. (Se info:/cvs/cvsignore.) + Find efter skjulte filer og mapper:For visse filsystemer har filer egenskaben "Skjult". For andre systemer skjules et filnavn som begynder med et punktum ("."). Dette lader dig bestemme om disse filer skal indgå i træet eller ej. Standardværdien er til. + Følg fillink:For link til filer: Hvis deaktiveret, sammenlignes de symbolske link. Hvis aktiveret, sammenlignes filerne bagved linkene. Normalværdien er fra. + Følg mappelink:For link til mapper: Hvis deaktiveret, sammenlignes symbolske link. Hvis aktiveret behandles linket som et mappe og gennemsøges rekursivt. (Bemærk at programmet ikke kontrollerer om linket er "rekursivt". En mappe som indeholder et link til samme mappe vil forårsage en uendelig løkke, og efter en vis tid når stakken bliver fuld eller hukommelsen løber ud, bryder programmet sammen.) Standardværdien er fra. + Versaltilstandsfølsom filnavnesammenligning:Standardværdi er falsk på Windows, og sand for andre operativsystemer. + Filsammenligningstilstand: + + Binær sammenligning:Dette er standardsammenligningstilstanden. + Fuld analyse:Udfør en fuld analyse for hver fil og vis de statistiske informationssøjler. (Antal løste, uløste, ikke blanke og blanke konflikter.) Den fulde analyse er langsommere end en simpel binær analyse, og meget langsommere når den bruges på filer der ikke indeholder tekst. (Angiv de passende fil-antimønstre.) + Stol på ændringsdato:Hvis du sammenligner store mapper via et langsomt netværk, kan det gå hurtigere kun at sammenligne ændringsdato og fillængde. Men hastighedsforbedringen kommer med prisen af en lille usikkerhed. Brug dette med forsigtighed. Normalværdien er fra. + Stol på størrelsen:Ligesom at stile på ændringsdatoen. Ingen egentlig sammenligning foregår. To filer betragtes som ens hvis deres filstørrelser er ens. Dette er nyttigt når filkopieringsoperationen ikke bevarer ændringsdatoen. Brug dette med forsigtighed. Normalværdien er fra. + + + Synkronisér mapper:Aktiverer "synkroniseringstilstand" når to mapper sammenlignes og ingen eksplicit målmappe angives. I denne tilstand vælges de foreslåede handlinger så begge kildemapperne er ens bagefter. Sammenfletningsresultatet skrives også til begge mapper. Normalværdien er fra. + Kopiér nyere i stedet for at sammenflette:I stedet for at sammenflette kopieres den foreslåede handling den nyere kilden hvis der er sket om ændringer. (Anses for at være usikkert, eftersom det betyder at du ved at den anden fil ikke også er redigeret. Tjek for at være sikker i hvert enkelt tilfælde.) Normalværdien er fra. + Sikkerhedskopiér filer:Hvis en fil eller hel mappe erstattes med en anden eller slettes, så ændres originalversionens navn med tilføjelse af filendelsen ".orig". Hvis en gammel sikkerhedskopi med filendelsen ".orig" allerede eksisterer slettes den uden sikkerhedskopiering. Dette gælder også normal sammenfletning af enkelte filer, ikke kun sammenfletningstilstand for mapper. Standardværdien er til. + + + +Andre funktioner i mappesammenfletningsvinduet +Opdelt eller fuldskærmstilstand +Sædvanligvis forbliver listevinduet for mappesammenfletning synligt mens en enkelt fil sammenlignes eller sammenflettes. Du kan flytte linjen som opdeler fillisten fra vinduerne til tekstsammenligning med musen. Hvis du ikke vil gøre dette, kan du deaktivere "Opdelt skærmvisning" i menuen "Mappe". Derefter kan du bruge "Skift visning" i menuen "Mappe" til at skifte mellem fillisten og vinduerne til tekstsammenligning, som så optager hele vinduet. + +Sammenlign og sammenflette en enkelt fil +Du foretrækker formodentlig et almindeligt dobbeltklik på musen for at sammenligne en fil. Ikke desto mindre er der også en indgang i menuen "Mappe". Du kan også direkte sammenflette en enkelt fil, uden at starte mappesammenfletning via "Sammenflet markerede filer" i menuen "Mappe". Når resultatet gemmes, sættes status til færdig, og filen sammenflettes ikke igen hvis en mappesammenfletning startes. Men observér at statusinformationen går tabt når du kører en mappegennemsøgning igen: "Mappe"-menuen "Skan igen". + +Sammenlign og sammenflet filer med forskellige navne +Sommetider behøver du at sammenligne eller sammenflette filer med forskellige navne (f.eks. nuværende fil og sikkerhedskopi i samme mappe). Markér den nøjagtige fil ved at klikke på ikonen i søjlen A, B eller C. Filen som først markeres på den måde markeres med "A", den anden og tredje med "B" og "C" uafhængig af hvilken søjle de findes i. Kun op til tre filer kan markeres på denne måde. Fortsæt ved at vælge "Sammenlign eksplicit markerede filer" eller "Sammenflet eksplicit markerede filer" fra menuen "Mappe". Af bekvemmelighedsgrunder findes også menuvalgmulighederne som en sammenhængsafhængig menu som vises når du klikker på den senest markerede fil. Sammenligningen eller sammenfletningen af en fil sker i samme vindue. Hvis denne metode bruges for mapper åbnes et nyt vindue. + +
+ + +Diverse emner + +Netværksgennemsigtighed via KIO +I/O-slaver +&kde; understøtter netværkstransparens via I/O-slaver. &kdiff3; bruger dem til at indlæse datafiler og gennemsøge mapper. Det betyder at du kan angive filer og mapper pÃ¥ lokal- og fjern-ressourcer via &URL;'er. Eksempel: +kdiff3 test.cpp ftp://ftp.langtbortistan.org/test.cpp + kdiff3 tar:/home/hakker/arkiv.tar.gz/kat ./kat + + +Den første linje sammenligner en lokal fil med en fil pÃ¥ en &FTP;-server. Den anden linje sammenligner en mappe i et komprimerat arkiv med en lokal mappe. Andre I/O-slaver som er interessante er: + +Filer fra WWW (http:), +Filer fra FTP (ftp:), +Krypteret filoverførsel (fish:, sftp:), +Ressourcer fra Windows (smb:), +Lokale filer (file:), + +Andre ting som er mulige, men formodentlig mindre nyttige, er: + +Manualsider (man:), +Infosider (info:), + + + +Hvordan man skriver &URL;'er +En &URL; har en anderledes syntaks sammenlignet med søgestier til lokale filer og mapper. Visse ting skal der tages hensyn til: + +En søgesti kan være relativ, og kan indeholde "." eller "..". Dette er ikke muligt for &URL;'er, som altid er absolutte. Specialtegn skal skrives med særlige "escape". ("#"->"%23", mellemrum bliver til "%20", osv.) For eksempel ville en fil med navnet "/#foo#" have &URL; "file:/%23foo%23". NÃ¥r &URL;'er ikke virker som ventet, sÃ¥ forsøg at Ã¥bne dem i &konqueror; først. + + + + +Muligheder med I/O-slaver +Netværkstransparens har en bagdel: Ikke alle ressourcer har samme muligheder. Sommetider skyldes det serverens filsystem, sommetider protokollen. Her er en kort liste med begrænsninger: + +Sommetider er der ikke støtte for link. Eller der er ingen mÃ¥de at skelne mellem om et link peger pÃ¥ en fil eller mappe, der antages altid en fil (ftp:, sftp:). Kan ikke altid afgøre filstørrelsen. Begrænset støtte for rettigheder. Ingen mulighed at ændre rettigheder eller ændringstid, sÃ¥ rettigheder eller tiden for en kopi adskiller sig fra originalen. (Se tilvalget "Stol pÃ¥ størrelse".) (At ændre af tilladelser eller ændringstidspunkt er kun muligt for lokale filer.) + + + + + +Brug &kdiff3; som en Kpart +&kdiff3; er en Kpart. For øjeblikket implementeres grænsefladen KParts::ReadOnlyPart. Hovedanvendelsen er til forskelsvisning i KDevelop. KDevelop starter altid den interne forskelsvisning først. For at bruge &kdiff3;, klik med højre museknap i forskelsvisningens vindue og vælg "Vis i KDiff3-part" i den sammenhængsafhængige menuen. &kdiff3; kræver normalt to fuldstændige filer som inddata. NÃ¥r det bruges som en part, antager &kdiff3; at inddatafilen er en programrettelsesfil i forenet format. &kdiff3; henter derefter originalfilernes navn i programrettelsesfilen. I det mindste en af de to filer skal være tilgængelig. &kdiff3; starter sÃ¥ kommandoen patch for at genoprette den anden fil. Du kan vælge en programrettelsesfil i &konqueror; og vælge "ForhÃ¥ndsvis i"-"&kdiff3;-part"i den sammenhængsafhængige menu. Vær klar over at dette ikke virker hvis ingen af originalfilerne er tilgængelige, og er ikke tilforladeligt hvis originalfilen eller filerne er ændret siden programrettelsesfilen blev oprettet. NÃ¥r det kører som en Kpart sørger &kdiff3; kun for sammenligning mellem to filer, en meget lille værktøjslinje og menu. Sammenfletning eller mappesammenligning understøttes ikke. + + + + +SpørgsmÃ¥l og svar +&reporting.bugs; &updating.documentation; + +Hvorfor kaldes det &kdiff3;? Værktøjer som hedder "KDiff" og "KDiff2" (som nu kaldes &kompare;) fandtes allerede. Desuden skal &kdiff3; antyde at programmet kan sammenflette ligesom værktøjet "diff3" fra samlingen med diff-værktøjer. + +Hvorfor udgives det under GPL? Jeg har brugt GPL-programmer i meget lang tid nu, og lært mig meget ved at kigge pÃ¥ en hel del af kildekoden. AltsÃ¥ er dette min "tak" til alle programmører som ogsÃ¥ gjorde eller kommer til at gøre det samme. + +Visse knapper og funktioner mangler. Hvad er galt? Du kompilerede fra kildekode, men angav formodentlig ikke rigtigt &kde;-præfiks med 'configure'. Som standard vil configure installere i /usr/local, men sÃ¥ kan &kde; ikke finde ressourcefilerne for brugergrænsefladen (dvs. kdiff3ui.rc). README-filen indeholder mere information om rigtig præfiks. + +Ofte vises linjer som ligner men ikke er identiske med hinanden, men ikke altid. Hvorfor? Linjer hvor kun antal blanke tegn er forskellige behandles først som "ens", mens kun et andet slags blankt tegn gør at linjerne er "forskellige". Hvis lignende linjer er ved siden af hinanden, er dette i virkeligheden et tilfælde men det er heldigvis ofte noget der sker. Se ogsÃ¥ manualen Diff Help. + +Hvorfor skal alle konflikter være løste inden sammenfletningsresultatet kan gemmes? For hver ens eller forskelligt afsnit husker editoren i vinduet med sammenfletningsresultatet hvor det begynder og slutter. Det er nødvendigt eftersom konflikter kan løses op manuelt ved helt enkelt at vælge kildeknappen (A, B eller C). Informationen gÃ¥r tabt nÃ¥r filen gemmes som tekst, og det er for besværligt at oprette et specielt filformat som understøtter at gemme og genoprette al nødvendig information. + +Hvordan kan jeg synkronisere sammenligningsvisningen og sammenfletningsvisningen sÃ¥ alle visninger viser samme tekstposition? Klik pÃ¥ sammenfatningssøjlen til venstre for teksten. (Se ogsÃ¥ her.) + +Hvorfor har editoren i resultatvinduet for sammenfletning ikke en "fortryde"-funktion? Hidtil har det været for besværligt. Du kan altid genoprette en version fra en kilde (A, B eller C) ved at klikke pÃ¥ den tilsvarende knap. For større redigering, anbefales brug af en anden editor alligevel. + +NÃ¥r jeg fjernede en del tekst, vistes pludselig "<Ingen kildelinje>" og dette kan ikke slettes. Hvad betyder det og hvordan kan man fjerne det? For hvert afsnit der er ligedan eller anderledes husker editoren i vinduet med sammenfletningsresultatet hvor det begynder og slutter. "<Ingen kildelinje>" betyder at der ikke er noget tilbage i et afsnit, ikke engang et nylinjetegn. Dette kan indtræffe enten ved automatisk sammenfletning eller efter redigering. Det er intet problem, eftersom denne information ikke eksisterer i den gemte fil. Hvis du vil have originalkilden igen, markeres kilden blot (klikke pÃ¥ sammenfatningssøjlen til venstre) og klik derefter pÃ¥ kildeknappen med indholdet som ønskes (A, B eller C). + +Hvorfor understøtter &kdiff3; ikke syntaksfremhævning? &kdiff3; bruger allerede mange farver til fremhævning af sammenligninger. Yderligere frem,hævning ville være forvirrende. Burg en anden editor til dette. + +Kan jeg bruge &kdiff3; til at sammenligne filer fra OpenOffice.Org, Word, Excel, PDF, og sÃ¥ videre? Selvom &kdiff3; kan analysere alle slags filer, vil resultatet formodentlig ikke være særligt tilfredsstillende for dig. &kdiff3; blev lavet til at sammenligne rene tekstfiler. OpenOffice, Word, Excel, og sÃ¥ videre, opbevarer meget mere information i filerne (om skrifttype, billeder, sider, farver, osv.), som &kdiff3; ikke kender til. AltsÃ¥ viser &kdiff3; dig indholdet i filen tolket som ren tekst, men dette kan være ulæseligt eller i det mindste se meget mærkeligt ud. Eftersom de fleste programmer nu om dage opbevarer deres indhold i XML-format, kan du mÃ¥ske læse det som ren tekst. Hvis ændringen kun var lille, kan &kdiff3; mÃ¥ske stadigvæk hjælpe dig. Den bedste løsning hvis du kun vil sammenligne teksten (uden indlejrede objekter sÃ¥som billeder) er at bruge "Markér alt" og "Kopiér" i programmet for at kopiere den interessante tekst til klippebordet og derefter indsætte teksten i et af sammenligningsvinduerne i &kdiff3;. (Se ogsÃ¥ Markér, kopiér og indsæt.) + +Hvorfor er mappetilvalget "List kun forskelle" blevet fjernet? Der er nu flere forskellige "Vis"-tilvalg i mappemenuen. At deaktivere "Vis identiske filer" afstedkommer hvad aktivering af "List kun forskelle" plejede at gøre. + +Hvordan kan man lave en stor markering i sammenligningsvinduet nÃ¥r det tager sÃ¥ lang tid at rulle teksten? Start markeringen som sædvanligt (klik og hold venstre museknap nede). Brug derefter navigationstasterne (f.eks. Page Up, Page Down) mens venstre museknap holdes nede. (Se ogsÃ¥ Markér, kopiér og indsæt.) + +Der er en stor mængde information her, men dit spørgsmÃ¥l er alligevel ikke besvaret? Send gerne dit spørgsmÃ¥l til mig. Jeg sætter pris pÃ¥ alle kommentarer. + + + + + + +Medvirkende og licens + +&kdiff3;: Værktøj til sammenligning og sammenfletning af filer og mapper +Program ophavsret 2002-2006 Joachim Eibl joachim.eibl at gmx.de +Flere fede idéer og fejlrapporter kom fra kolleger og mange personer ude pÃ¥ www. Tak! + +Dokumentation ophavsret © 2002-2006 Joachim Eibl joachim.eibl at gmx.de + +&erik.kjaer.pedersen.credit; +&underFDL; &underGPL; + + +Installation + + +Hvordan fÃ¥r man fat pÃ¥ &kdiff3; + +Du kan hente seneste version af &kdiff3; fra hjemmesiden http://kdiff3.sourceforge.net. &kdiff3; er ogsÃ¥ tilgængelig for andre platforme. Se hjemmesiden for detaljer. + + + + + +Krav + +For at bruge alle funktioner i &kdiff3; med godt resultat har du brug for &kde; 3.1 eller nyere. For information om hvordan &kdiff3; kan køres pÃ¥ andre platforme uden &kde;, se hjemmesiden. Du finder en liste med ændringer pÃ¥ http://kdiff3.sourceforge.net/ChangeLog eller i filen "ChangeLog" i kildekodepakken. + + + +Kompilering og installation + +For at kompilere og installere &kdiff3; pÃ¥ et system med KDE, skriv følgende i basismappen for distributionen af &kdiff3;: + +% ./configure --prefix=kde-mappe +% make +% make install + +kde-mappe angiver mappen som indeholder KDE pÃ¥ dit system. Hvis du ikke er sikker, læs filen README for detaljer. +Hvis du ikke bruger KDE, sÃ¥ brug ikke configure men følg instruktionerne for systemer som kun bruger Qt i filen README. +Eftersom &kdiff3; bruger autoconf og automake skulle du ikke have problemer med at kompilere det. Skulle du støde pÃ¥ problemer, sÃ¥ rapportér dem gerne til &kde;'s e-mail-lister. + + + + + +&documentation.index; +
+ + diff --git a/doc/da/iteminfo.png b/doc/da/iteminfo.png new file mode 100644 index 0000000..0b81443 Binary files /dev/null and b/doc/da/iteminfo.png differ diff --git a/doc/da/letter_by_letter.png b/doc/da/letter_by_letter.png new file mode 100644 index 0000000..8ddd48a Binary files /dev/null and b/doc/da/letter_by_letter.png differ diff --git a/doc/da/merge_current.png b/doc/da/merge_current.png new file mode 100644 index 0000000..3f2e341 Binary files /dev/null and b/doc/da/merge_current.png differ diff --git a/doc/da/new.png b/doc/da/new.png new file mode 100644 index 0000000..df3fd25 Binary files /dev/null and b/doc/da/new.png differ diff --git a/doc/da/open_dialog.png b/doc/da/open_dialog.png new file mode 100644 index 0000000..029f8d4 Binary files /dev/null and b/doc/da/open_dialog.png differ diff --git a/doc/da/screenshot_diff.png b/doc/da/screenshot_diff.png new file mode 100644 index 0000000..d2865d5 Binary files /dev/null and b/doc/da/screenshot_diff.png differ diff --git a/doc/da/screenshot_merge.png b/doc/da/screenshot_merge.png new file mode 100644 index 0000000..1eb935b Binary files /dev/null and b/doc/da/screenshot_merge.png differ diff --git a/doc/da/triple_diff.png b/doc/da/triple_diff.png new file mode 100644 index 0000000..c635d14 Binary files /dev/null and b/doc/da/triple_diff.png differ diff --git a/doc/da/white_space.png b/doc/da/white_space.png new file mode 100644 index 0000000..e40a1c7 Binary files /dev/null and b/doc/da/white_space.png differ diff --git a/doc/de/Makefile.am b/doc/de/Makefile.am new file mode 100644 index 0000000..f75e9de --- /dev/null +++ b/doc/de/Makefile.am @@ -0,0 +1,4 @@ +KDE_DOCS = kdiff3 +KDE_LANG = de + + diff --git a/doc/de/dirbrowser.png b/doc/de/dirbrowser.png new file mode 100644 index 0000000..d3c63b2 Binary files /dev/null and b/doc/de/dirbrowser.png differ diff --git a/doc/de/dirmergebig.png b/doc/de/dirmergebig.png new file mode 100644 index 0000000..b26b65c Binary files /dev/null and b/doc/de/dirmergebig.png differ diff --git a/doc/de/index.docbook b/doc/de/index.docbook new file mode 100644 index 0000000..e34e9f3 --- /dev/null +++ b/doc/de/index.docbook @@ -0,0 +1,2430 @@ + +KDiff3"> + + + + +]> + + + + + + +Das Handbuch zu &kdiff3; + + +Joachim Eibl
joachim.eibl at gmx.de +
+
+
+ +ThomasReitelbach
tr@erdfunkstelle.de
Deutsche Ãœbersetzung
+ + +2002-2005 +Joachim Eibl + + + +&FDLNotice; + + + +2005-01-30 +0.9.87 + + + + +&kdiff3; ist ein Programm zum Anzeigen von Unterschieden und zum Zusammenführen von Dateien und Ordnern. &kdiff3; +vergleicht zwei oder drei Textdateien bzw. Ordner und führt sie zusammen, +kann Unterschiede zeilenweise und sogar Zeichen für Zeichen anzeigen, +hat eine Funktion zum automatischen Zusammenführen, +enthält einen speziellen komfortablen Editor zum Auflösen von Konflikten beim Zusammenführen, +ist mit Hilfe von KIO Netzwerktransparent, +kann Unterschiede in "weißen" Zeichen oder Kommentaren besonders hervorheben oder verstecken. +unterstützt Unicode, UTF-8 und weitere Dateikodierungen. + +Dieses Dokument beschreibt &kdiff3; in der Version 0.9.87. + + + + + +KDE +kdeextragear +kdiff3 +vergleichen +zusammenführen +CVS +dreifach-vergleichen +vergleichen +Dateien +Ordner +Versionskontrolle +Drei-Wege-Zusammenführen +Unterschiede innerhalb einer Zeile +synchronisieren +kpart +kio +netzwerktransparent +Editor +"weißes" Zeichen +Kommentare + + +
+ +Einführung +Noch eine Oberfläche zu Diff? +Es gibt viele graphische Werkzeuge zum Vergleichen. Warum also &kdiff3;? Lassen Sie mich kurz erklären, warum ich &kdiff3; ins Leben gerufen habe. &kdiff3; wurde programmiert, weil ich eine sehr komplizierte Zusammenführung durchzuführen hatte. Zusammenführen wird dann nötig, wenn mehrere Personen an der gleichen Datei in einem Projekt arbeiten. Wenn das verwendete Werkzeug zum Zusammenführen nicht nur die geänderten Dateien ("Branch" genannt), sondern auch die Originale ("Basis") zur Verfügung hat, kann das Zusammenführen gewissermaßen automatisiert werden. Das Programm wird dann automatisch die in der Branch gemachten Änderungen auswählen. Doch wenn mehrere Beitragende die gleichen Zeilen ändern, wird ein Konflikt erkannt. Solch ein Konflikt muss dann von Hand aufgelöst werden. Die Zusammenführung war sehr kompliziert, weil einer der Beitragenden viele Änderungen vorgenommen und gleichzeitig an vielen Stellen die Einrückung korrigiert hatte. Ein weiterer Programmierer hatte in der gleichen Datei viel Text verändert. Das Ergebnis waren zahlreiche Konflikte beim Zusammenführen. Das von mir benutzte Programm zeigte mir nur die geänderten Zeilen an, ich konnte aber nicht sehen, was genau sich innerhalb dieser Zeilen geändert hatte. Und es gab keinerlei Hinweise auf die Stellen, wo sich vielleicht nur die Einrückung geändert hatte. Das Zusammenführen dieser Änderungen war ein kleiner Albtraum. Das war also der Beginn. Die erste Version von &kdiff3; konnte Unterschiede innerhalb einer Zeile und Änderungen an "weißen" Zeichen darstellen. Später wurden noch jede Menge weiterer nützlicher Funktionen hinzugefügt. Wenn Sie zum Beispiel schnell Text vergleichen möchten, kopieren Sie ihn einfach in die Zwischenablage und fügen ihn in eines der Vergleichsfenster ein. Eine Funktion die viel Arbeit machte, war das Vergleichen und Zusammenführen von Ordnern. Diese Funktion verwandelte &kdiff3; beinahe in einen vollwertigen Datei-Browser. Ich hoffe, dass Sie viel Nutzen an &kdiff3; haben und wünsche Ihnen viel Freude! Joachim Eibl (2003) + + +Bildschirmphotos und Funktionen +Dieses Bildschirmphoto zeigt die Unterschiede zwischen zwei Textdateien +(Unter Verwendung einer frühen Version von &kdiff3;): + + + + +Auch 3-Wege-Zusammenführen wird vollständig unterstützt. Dies ist nützlich, wenn zwei Personen unabhängig voneinander an einem Stück Kode arbeiten und Änderungen vornehmen. Die Originaldatei (die Basis) hilft &kdiff3; beim automatischen Auswählen der jeweils korrekten Änderungen. Der Zusammenführungs-Editor unter den Unterschiede-Fenstern ermöglicht das Auflösen von Konflikten und zeigt gleichzeitig das zu erwartende Ergebnis an. In diesem Editor können Sie das Ergebnis sogar direkt bearbeiten. Das Bildschirmphoto zeigt drei Quell-Dateien beim Zusammenführen: + + + + + +&kdiff3; hilft Ihnen auch beim Vergleichen und Zusammenführen kompletter Ordner. Dieses Bildschirmphoto zeigt &kdiff3; beim Ordner-Zusammenführen: + + + + + + +Weitere Funktionen +Zeilen- und sogar Zeichenweises Darstellen von Unterschieden +&kdiff3; zeigt die exakten Unterschiede an und bediehnt sich dazu der Möglichkeiten heutiger Farbmonitore. Wenn Sie häufig Kode überprüfen müssen, werden Sie diese Funktion mögen. + + + + + +Erkennen von Unterschieden in "weißen" Zeichen auf einen Blick +Unterschiede in "weißen" Zeichen und Tabulatoren werden sichtbar dargestellt. Wenn sich Zeilen nur in einer gewissen Anzahl an "weißen" Zeichen unterscheiden, kann man das auf einen Blick an der Zusammenfassung in der Spalte an der linken Seite sehen. (Kein Ärger mehr, wenn Jemand die Einrückung ändert.) + + + + + +3-Wege-Vergleichen +Man kann drei Dateien analysieren und sehen, an wo sie sich unterscheiden. Das linke/mittlere/rechte Fenster hat den Namen A/B/C und ist entsprechend blau/grün/magenta eingefärbt. Wenn eine Datei gleich ist, und die andere sich in einer Zeile unterscheidet, dann zeigt die Farbe an, welche Datei unterschiedlich ist. Rote Farbe bedeutet, dass beide sich Dateien unterscheiden. + + + + + +Komfortables zusammenführen von zwei oder drei Dateien +Mit &kdiff3; kann man zwei oder drei Dateien zusammenführen. Dabei führt &kdiff3; so viel wie möglich automatisch zusammen. Das Ergebnis wird in einem editierbaren Fenster angezeigt; dort können die meisten Konflikte schon mit einem einfachen Mausklick gelöst werden: Wählen Sie zwischen den Knöpfen A/B/C um die zu benutzende Quelle auszuwählen. Sie können auch mehr als eine Quelle wählen. Weil das Fenster im Grunde ein Editor ist, können hier selbst Konflikte, die eine weitere Bearbeitung erfordern, einfach aufgelöst werden. Sie benötigen dazu keine weiteren Hilfsmittel. + + +Und ... + + Schnelle Navigation über Knöpfe. + Ein Mausklick in die Zusammenfassungs-Spalte gleicht alle Fenster ab, so dass alle die gleiche Stelle anzeigen. + Kopieren Sie eine Auswahl aus irgendeinem Fenster einfach in das Ergebnisfenster. + Die Übersichtsspalte zeigt an, wo sich Änderungen und Konflikte befinden. + Die Farben sind an Ihre Bedürfnisse anpassbar. + Die Größe von Unterfenstern ist veränderbar. + Es gibt die Option, anstelle von Tabulatoren Leerzeichen einzufügen. + Bequemes Öffnen von Dateien über einen Dialog oder über die Kommandozeile. + Suchen (Strg-F) und Weitersuchen (F3) nach bestimmten Zeichenketten in allen Textfenstern. + Anzeigen der Zeilennummer zu jeder Zeile. + Einfügen aus der Zwischenablage oder das Ziehen von Text in ein Vergleichsfenster. + Netzwerktransparenz durch KIO. + &kdiff3; kann als Anzeigemodul in KDevelop 3 genutzt werden um Unterschiede anzuzeigen. + Zeilenumbruch für lange Zeilen + Unterstützung für Unicode, UTF-8 und weitere Kodierungen. + Unterstützung für Sprachen, die von rechts nach links geschrieben werden. + ... + + + + + +Dokumentation zum Vergleichen und Zusammenführen von Dateien + +Kommandozeilen-Optionen + +Vergleichen von zwei Dateien: +kdiff3 datei1 datei2 + + + +Zusammenführen von zwei Dateien: +kdiff3 datei1 datei2 -m + kdiff3 datei1 datei2 -o ausgabedatei + + + +Vergleichen von drei Dateien: +kdiff3 datei1 datei2 datei3 + + + +Zusammenführen von drei Dateien: +kdiff3 datei1 datei2 datei3 -m + kdiff3 datei1 datei2 datei3 -o ausgabedatei + +Beachten Sie, dass datei1 als Basis für datei2 und datei3 verwendet wird. + + +Spezialfall: Dateien mit gleichem Namen +Wenn alle Dateien den gleichen Namen haben, aber in verschiedenen Ordnern liegen, dann können Sie sich die Tipparbeit erleichtern indem Sie nur den Dateinamen der ersten Datei vollständig ausschreiben. Beispiel: +kdiff3 Ordner1/Dateiname Ordner2 Ordner3 + + + +Kommandozeile zum Vergleichen bzw. Zusammenführen von Ordnern: +Das Vorgehen ist hier sehr ähnlich, doch nun geht es um Ordner. +kdiff3 Ordner1 Ordner2 + kdiff3 Ordner1 Ordner2 -o Zielordner + kdiff3 Ordner1 Ordner2 Ordner3 + kdiff3 Ordner1 Ordner2 Ordner3 -o Zielordner + +Zum Vergleichen bzw. Zusammenführen von Ordnern lesen Sie bitte hier weiter. + + +Mehr Informationen zu den Kommandozeilen-Optionen erhalten Sie mit diesem Befehl: +kdiff3 --help +Options: + -m, --merge Quellen zusammenführen. + -b, --base file Explizite Basisdatei. Für Kompatibilität mit anderen Programmen. + -o, --output datei Ausgabe-Datei. Impliziert -m. Z. B.: -o neueDatei.txt + --out file Ausgabe-Datei. (Für Kompatibilität mit anderen Programmen.) + --auto Keine graphische Oberfläche, wenn alle Konflikte automatisch aufgelöst werden können. (Benötigt -o datei) + --qall Konflikte nicht automatisch auflösen. (Aus Kompatibilitätsgründen.) + --L1 alias1 Sichtbarer Namensersatz für Quelldatei 1 (Basis). + --L2 alias2 Sichtbarer Namensersatz für Quelldatei 2. + --L3 alias3 Sichtbarer Namensersatz für Quelldatei 3. + -L, --fname alias Alternativer sichtbarer Namensersatz. Für jede Quelldatei einmal angeben. + -u Hat keine Wirkung. Für Kompatibilität mit anderen Programmen. + + + + + +Öffnen-Dialog +Weil mehrere Dateien auszuwählen sind, hat &kdiff3; einen besonderen Dialog zum Öffnen von Dateien: + + + +Der Öffnen-Dialog ermöglicht das manuelle Eintippen von Dateinamen, die Auswahl über den Datei-Browser ("Datei...") oder das Auswählen einer zuletzt geöffneten Datei aus der Aufklappliste. Der Öffnen-Dialog merkt sich Ihre Auswahl und zeigt sie beim nächsten Mal wieder an. Sie müssen keine dritte Datei angeben; wenn Sie den Eintrag für "C" leer lassen, wird die Analyse der Unterschiede mit zwei Dateien durchgeführt. Über den Knopf "Ordner..." können Sie auch einen Ordner auswählen. Wenn Sie einen Ordner wählen, wird das Vergleichen bzw. Zusammenführen von Ordnern eingeleitet. Wenn für "A" eine Datei ausgewählt wird, für "B" und "C" jedoch ein Ordner, dann benutzt &kdiff3; den Dateinamen aus "A" in den beiden anderen Ordnern. Wenn "Zusammenführen" angekreuzt ist, wird das Eingabefeld für "Ziel" aktiv und lässt sich bearbeiten. Es ist allerdings nicht unbedingt erforderlich, sofort eine Ausgabedatei festzulegen. Sie können diesen Schritt auch später beim Speichern erledigen. Der "Einrichten"-Knopf öffnet einen Dialog mit Einstellungen. Hier können Sie Optionen festlegen bevor Sie mit dem Vergleichen/Zusammenführen beginnen. + + +Einfügen und Ablegen von Text +Manchmal möchte man nicht eine ganze Datei, sondern nur Teile eines Textes vergleichen. &kdiff3; ermöglicht Ihnen, Textteile aus der Zwischenablage in das aktive Vergleichsfenster zu ziehen. Der Vergleich beginnt dann sofort. Im Öffnen-Dialog müssen Sie keine Dateien auswählen, Sie können den Dialog einfach mit dem "Abbrechen"-Knopf schließen. Sie können auch "Ziehen und Ablegen" benutzen: Ziehen Sie einfach eine Datei aus einem Dateimanager oder ausgewählten Text aus einem Editor und lassen Sie ihn über einem Vergleichsfenster fallen. Welcher Gedanke steckt dahinter? Manchmal enthält eine Datei z. B. mehrere ähnliche Funktionen. Wenn Sie herausfinden möchten, wie ähnlich sich diese Funktionen sind, wäre das ein relativ großer Aufwand. Sie müssten erst zwei entsprechende Dateien erstellen, sie in &kdiff3; laden und diese dann vergleichen. Jetzt können Sie die relevanten Abschnitte einfach kopieren, einfügen und dann vergleichen. Anmerkung: Zur Zeit können Sie nichts aus &kdiff3; herausziehen. Nur das Fallenlassen von Text in ein Vergleichsfenster wird unterstützt. Warnung: Einige Editoren interpretieren das Ziehen und Ablegen von Text in ein anderes Programm als Ausschneiden und Einfügen (anstelle von Kopieren und Einfügen). In einem solchen Fall könnten Ihre Originaldaten verloren gehen. + + +Interpretieren der angezeigten Informationen in den Quellfenstern + + + +Im oberen Teil jedes Textfensters befindet sich die Info-Zeile. Die Info-Zeile der Quellfenster enthält die Zeichen "A", "B" oder "C", den Dateinamen und die Zeilennummer der ersten sichtbaren Zeile im Fenster. (Beachten Sie, dass Fenster "C" optional ist.) Jede Info-Zeile hat eine unterschiedliche Farbe. (Wenn der Pfad zu einer Datei zu lang ist, lassen Sie die Maus eine Weile über der Zeile ruhen. Dann wird ein kleines Hilfsfenster den vollständigen Namen anzeigen.) Den drei Quellfenstern sind die Buchstaben "A", "B" und "C" zugeordnet. "A" hat die Farbe Blau, "B" die Farbe Grün und "C" ist magenta. (Diese Voreinstellungen können über das Einstellungen-Menü geändert werden.) Wenn ein Unterschied erkannt wird, sieht man an der Farbe, welche Datei sich unterscheidet. Wenn sich beide Dateien unterscheiden, ist die Voreingestellte Farbe dafür Rot. ("Farbe für Konflikte" in den Einstellungen). Das Farbschema ist besonders nützlich, wenn Sie drei Dateien vergleichen. Das ist im nächsten Abschnitt (Zusammenführen) gut zu sehen. Links neben dem Text befindet sich die Zusammenfassungs-Spalte. Wenn Unterschiede gefunden wurden, zeigt die Spalte die entsprechende Farbe an. Bei Unterschieden in "weißen" Zeichen wird die Farbe gerastert angezeigt. Bei einigen Programmiersprachen wo "weiße" Zeichen nicht so wichtig sind, ist es nützlich, nur die relevanten Änderungen zu sehen. (Bei C/C++ z. B. sind "weiße" Zeichen nur in Zeichenketten und Kommentaren, für den Preprozessor und in wenigen, seltenen Einzelfällen relevant.) Die vertikale Linie, die die Zusammenfassungs-Spalte vom Text trennt, wird an den Stellen unterbrochen, wo die jeweilige Quelldatei keine Zeilen hat. Wenn der Zeilenumbruch aktiviert ist, wird die Linie an umgebrochenen Zeilen gepunktet dargestellt. An der rechten Seite befindet sich eine Übersichts-Spalte, direkt links neben der vertikalen Bildlaufleiste. Sie zeigt eine komprimierte Zusammenfassung des gesamten Fenster "A". Alle Unterschiede und Konflikte sind hier auf einen Blick erkennbar. Wenn nur zwei Quellfenster genutzt werden, dann erscheinen alle Unterschiede rot, denn dann ist jeder Unterschied gleichzeitig auch ein Konflikt. Der aktuell sichtbare Bereich der Quelltexte wird durch ein schwarzes Rechteck umrandet. Bei sehr langen Quelldateien mit mehr Zeilen als die Übersichts-Spalte in Pixeln anzeigen kann, teilen sich mehrere Zeilen jeweils eine Zeile in der Übersichts-Spalte. Ein Konflikt hat gegenüber einfacher Unterschiede die höchste Priorität. Unterschiede wiederum haben eine höhere Priorität als "keine Änderungen". So gehen keine Konflikte oder Unterschiede verloren. Durch einen Klick in die Übersichts-Spalte wird der zugehörige Text angezeigt. + + + +Zusammenführen und das editierbare Ergebnisfenster + + + +Das Ergebnisfenster (unter den Vergleichsfenstern) hat auch eine Info-Zeile mit der Aufschrift "Ausgabe:", dem Dateinamen und "[Geändert]" wenn Sie das Ergebnis bearbeitet haben. Üblicherweise enthält es durch das automatische Zusammenführen bereits Text, aber oft enthält es auch Konflikte. !!! Bis alle Konflikte aufgelöst sind, ist das Speichern deaktiviert !!! (Benutzen Sie die Knöpfe "Springe zu nächstem gelösten/ungelösten Konflikt" um die noch verbleibenden Konflikte zu finden.) Wenn nur zwei Vergleichsfenstern benutzt werden, ist jeder Unterschied gleichzeitig auch ein Konflikt der manuell gelöst werden muss. Bei drei Vergleichsfenstern wird die erste Datei als Basis verwendet, und die zweite und dritte Datei enthalten die Änderungen. Wenn eine Zeile nur in Datei B oder C geändert wurde, aber nicht in beiden, dann wird automatisch die richtige Änderung ausgewählt. Wenn B und C allerdings Änderungen in der gleichen Zeile enthalten, erkennt &kdiff3; einen manuell zu lösenden Konflikt. Wenn B und C identisch sind, sich aber von A unterscheiden, dann wird C als Quelle ausgewählt. Das Ergebnisfenster hat auch eine Zusammenfassungs-Spalte an der linken Seite. Sie zeigt entweder den Buchstaben des Vergleichsfensters an von dem eine Zeile stammt, oder sie ist leer, wenn alle drei Quellen an der Stelle identisch sind. Konflikte werden mit einem roten Fragezeichen "?" und dem Text <Zusammenführungskonflikt> dargestellt. Weil das zeilenweise Auflösen von Konflikten sehr lange dauern würde, werden Zeilen mit gleichem Unterschied und Charakteristika gruppiert. Konflikte mit "weißen" Zeichen und Konflikte mit "nicht-weißen" Zeichen werden getrennt dargestellt, um das Zusammenführen von Dateien mit vielen Einrückungsänderungen zu vereinfachen. Durch einen Klick mit der linken Maustaste in die Zusammenfassungs-Spalte in einem der Fenster wird die zu der Zeile gehörende Gruppe in allen Fenstern markiert und die erste Zeile der Gruppe wird angezeigt. (Dadurch wird auch ein Sprung der Position in den Fenstern verursacht, wo der Anfang der Gruppe sonst nicht sichtbar wäre.) Diese Gruppe wird dann die "aktuelle Gruppe". Sie wird mit der Farbe "Hintergrundfarbe für aktuellen Bereich" hervorgehoben und jeweils zur Linken erscheint ein schwarzer Balken. Beachten Sie die Knöpfe zur Auswahl der Quelle mit der Beschriftung "A", "B" und "C" unterhalb der Menüleiste. Wenn Sie auf einen der Knöpfe klicken, werden die Zeilen aus dem entsprechenden Fenster an das Ende der ausgewählten Gruppe im Ergebnisfenster angehängt (wenn sie nicht bereits vorhanden sind). Falls die Zeilen bereits vorhanden sind, werden sie beim Klicken auf den Knopf entsprechend wieder entfernt. Hinweis: Sie können auch jede Zeile manuell bearbeiten. Die Zusammenfassungs-Spalte zeigt dann ein "m" in jeder Zeile, die Sie von Hand bearbeitet haben. Manchmal bleibt durch das automatische Zusammenführen oder durch manuelles Bearbeiten keine weitere Zeile mehr in der Gruppe übrig; dann wird in diesen Zeilen der Text <Keine Zeile in der Quelle> angezeigt. Das ist nur ein Platzhalter für den Fall, dass Sie Ihre Meinung ändern und vielleicht doch wieder eine andere Quelle wählen. Dieser Text erscheint weder in der endgültigen gespeicherten Datei, noch in einer Markierung die Sie vielleicht kopieren und woanders einfügen. Der Text <Zusammenführungskonflikt> erscheint allerdings in der Zwischenablage, wenn Sie solchen Text aus dem Ergebnisfenster kopieren. Gehen Sie vorsichtig mit dieser Funktion um. Das normale Zusammenführen startet mit dem automatischen Lösen einfacher Konflikte. Das "Zusammenführen"-Menü enthält einige häufig verwendete Funktionen. Wenn Sie bei den meisten Konflikten die gleiche Quelle auswählen müssen, können Sie z. B. überall "A", "B" oder "C" auswählen. Die gleiche Möglichkeit gibt es auch für die noch verbleibenden ungelösten Konflikte oder sogar für die noch verbleibenden ungelösten Konflikte in "weißen" Zeichen. Wenn Sie solche Entscheidungen nicht zusammengefasst für eine Gruppe, sondern sogar für jeden einzelnen Unterschied im Detail treffen möchten, dann wählen Sie "Alle Unterschiede zu Konflikten machen". Sie können wieder zur automatischen Auswahl von &kdiff3; zurück, indem Sie "Automatisch einfache Konflikte lösen" wählen. &kdiff3; startet das Zusammenführen dann erneut. &kdiff3; fragt nach, bevor Ihre eventuell gemachten Änderungen verloren gehen. Hinweis: Wenn beim Auswählen der Quellen die Optionen "Zahlen ignorieren" oder "Ignoriere C/C++ Kommentare" aktiviert sind, werden Änderungen in Zahlen oder Kommentaren auch wie "weiße" Zeichen behandelt. + + +Navigieren und Bearbeiten +Navigiert wird hauptsächlich mit den Bildlaufleisten und der Maus, aber Sie können dazu auch die Tastatur benutzen. Wenn Sie in eines der Fenster klicken, können Sie die Pfeiltasten links, rechts, hoch, runter, Seite auf, Seite ab, Anfang, Ende, Strg-Anfang und Strg-Ende benutzen, siw wie Sie es auch von anderen Programmen gewohnt sind. Die Übersichts-Spalte neben der vertikalen Bildlaufleiste kann durch hineinklicken auch zum Navigieren benutzt werden. Ausserdem können Sie das Rädchen Ihrer Maus zum hoch- und runterblättern benutzen. Im Augabefenster können Sie auch die anderen Tasten zum Bearbeiten verwenden. Mit der "Einfügen"-Taste können Sie zwischen Einfüge- und Überschreibmodus wechseln. (Voreingestellt ist der Einfügemodus.) Ein Klick mit der linken Maustaste in eine der Zusammenfassungs-Spalten synchronisiert die Ansicht aller Fenster auf den Anfang der jeweiligen Gruppe (wie bereits im Abschnitt "Zusammenführen und das editierbare Ausgabefenster" erklärt wurde). Die Werkzeugleiste enthält sieben Knöpfe zur Navigation mit denen Sie zum aktuellen/ersten/letzten Unterschied, zum nächsten/vorigen Unterschied (Strg-unten/Strg-oben), zum nächsten/vorigen Konflikt (Strg-Bild Aufwärts/Strg-Bild Abwärts) oder zum nächsten/vorigen ungelösten Konflikt springen können. Beachten Sie, dass &kdiff3; alle nicht automatisch gelösten Konflikte auch nach dem manuellen lösen weiterhin als Konflikt betrachtet. Daher muss zwischen gelösten und ungelösten Konflikten unterschieden werden. Es gibt auch einen Knopf "Automatisch zum nächsten ungelösten Konflikt weiterspringen". Wenn Sie dies aktivieren, wird &kdiff3; nach der ersten Auswahl der Quelle automatisch zum nächsten ungelösten Konflikt weiterspringen und ihn lösen. Das ist hilfreich, wenn Sie immer nur eine Quelle wählen möchten. Wenn Sie beide Quellen brauchen, oder das Ergebnis nach der Auswahl noch bearbeiten möchten, dann sollten Sie diese Funktion ausschalten. Bevor &kdiff3; zum nächsten ungelösten Konflikt weiterspringt, wird das Ergebnis der Auswahl für eine Kurze Zeit angezeigt. Die Verzögerungszeit kann im Abschnitt "Vergleich und Zusammenführung" in den Einstellungen eingestellt werden: Geben Sie für "Automatisch-Weiterspringen-Verzögerung" einen Wert zwischen 0 und 2000 Millisekunden an. Tipp: Wenn Sie sich viele Mausklicks sparen möchten, dann benutzen Sie eine kurze Verzögerungszeit und die Tastenkürzel Strg-1/2/3 uum Auswählen der Quelle A/B/C. + + +Markieren, Kopieren und Einfügen +In den Vergleichsfenstern wird kein Cursor angezeigt, daher müssen Markierungen mit der Maus gemacht werden. Drücken Sie am Beginn der Markierung die linke Maustaste und halten Sie sie gedrückt, ziehen Sie die Maus dann bis zum Ende der Markierung und lassen Sie hier die Maustaste wieder los. Ein einzelnes Wort kann auch einfach durch einen Doppelklick darauf markiert werden. Im Ergebnisfenster können Sie zum Markieren auch die Tastatur benutzen. Drücken Sie dazu die Umschalt-Taste und verändern Sie die Markierung mit den Pfeiltasten. Um die Markierung in die Zwischenablage zu kopieren, müssen Sie den "Kopieren"-Knopf (Strg-C oder Strg-Einfügen) drücken. Es gibt auch die Option "Auswahl automatisch kopieren". Wenn diese aktiviert ist, wird, was immer Sie markieren, automatisch in die Zwischenablage kopiert und das manuelle Kopieren entfällt. Seien Sie mit dieser Option aber vorsichtig, denn Sie könnten so den Inhalt der Zwischenablage versehentlich überschreiben. "Ausschneiden" (Strg-X oder Umschalt-Entfernen) kopiert in die Zwischenablage und löscht den markierten Text. "Einfügen" (Strg-V oder Umschalt-Einfügen) fügt den Text aus der Zwischenablage an der aktuellen Cursorposition ein bzw. ersetzt die aktuelle Markierung. + + +Speichern +Speichern ist erst möglich, wenn alle Konflikte gelöst sind. Falls die Datei bereits existiert und die Option "Sicherungskopie erstellen" aktiviert ist, dann erhält die bestehende Datei die Endung ".orig". Wenn bereits eine ".orig"-Datei existiert, wird diese überschrieben. Wenn Sie einen weiteren Vergleich starten bzw. beenden und noch nicht gespeichert haben, dann fragt &kdiff3;, ob Sie Speichern, Abbrechen oder ohne zu speichern fortfahren möchten. (KDiff3 fängt allerdings keine System-Signale ab. Wenn Sie &kdiff3; also mit dem Signal "kill" beenden, gehen Ihre ungespeicherten Daten verloren.) Zeilenenden werden entsprechend dem zugrundeliegenden Betriebssystem gespeichert. Unix-Varianten verwenden ein Zeilenvorschub-Zeichen "\n", und Win32-basierte Systeme benutzen Wagenrücklauf + Zeilenvorschub "\r\n". KDiff3 behält die Zeilenenden der Quelldateien nicht bei, darum sollten Sie &kdiff3; auch nicht mit Binärdateien verwenden. + + +Suchen und Finden von Zeichenketten +Sie können in jedem Textfenster von &kdiff3; nach einer Zeichenkette suchen. Die "Suchen..."-Funktion (Strg-F) im Bearbeiten-Menü öffnet einen Dialog, in dem Sie die zu suchende Zeichenkette eingeben können. Eine Suche beginnt immer am Anfang. Mit der Funktion "Weitersuchen" (F3) können Sie zum nächsten Vorkommen der gesuchten Zeichenkette springen. Wenn Sie eine Suche über mehrere Fenster aktiviert haben, wird erst das erste Fenster vom Beginn bis zum Ende durchsucht, danach das nächste Fenster, u. s. w. + + + +Optionen +Die Optionen und die Liste der zuletzt verwendeten Dateien wird beim Beenden automatisch gespeichert und beim nächsten Start wiederhergestellt. (Menü Einstellungen->KDiff3 einrichten...) +Schriftart +Wählen Sie eine Schrift mit fester Breite. (Auf einigen Systemen stellt der Dialog auch Schriften mit variabler Breite zur Auswahl, Sie sollten diese aber nicht benutzen.) + + Kursivschrift bei Unterschieden:Wenn Sie diese Option aktivieren, werden Unterschiede in kursiver Schrift dargestellt. Wenn die gewählte Schrift diese Darstellung nicht unterstützt, passiert gar nichts. + + + + +Farbe + + Vordergrundfarbe:Üblicherweise Schwarz. + Hintergrundfarbe:Üblicherweise Weiß. + Hintergrundfarbe bei Unterschieden:Üblicherweise helles Grau. + Farbe für A:Üblicherweise dunkles Blau. + Farbe für B:Üblicherweise dunkles Grün. + Farbe für C:Üblicherweise dunkles Magenta. + Farbe für Konflikte:Üblicherweise Rot. + Hintergrundfarbe für aktuellen Bereich:Üblicherweise helles Gelb. + Hintergrundfarbe für Unterschiede im aktuellen Bereich:Üblicherweise dunkles Gelb. + +An Systemen mit nur 16 oder 256 Farben könnten einige Farben nicht in ihrer reinen Form verfügbar sein sondern würden gerastert dargestellt werden. An diesen Systemen stellt der Knopf "Voreinstellungen" automatisch eine ungerasterte Farbe ein. + + +Editor + + Tabulator fügt Leerzeichen ein:Wenn diese Option aktiviert ist, wird beim Drücken der Tabulator-Taste die entsprechende Anzahl an Leerzeichen eingefügt. Ansonsten wird ein Tabulator-Zeichen eingefügt. + Tabulator Länge:Kann nach Ihren persönlichen Vorstellungen eingestellt werden. Voreingestellt ist 8. + Automatisch einrücken:Wenn Sie Eingabe oder Return drücken, wird die Einrückung der vorangehenden Zeile automatisch auch für die nächste Zeile verwendet. + Auswahl automatisch kopieren:Wenn diese Option aktiviert ist, wird jede Auswahl automatisch in die Zwischenablage kopiert. Das manuelle kopieren in die Zwischenablage entfällt dann. + Zeilenende-Typ:Sie können auswählen, welchen Zeilenende-Typ Sie zum Speichern bevorzugen. Der voreingestellte Wert ist die allgemein übliche Auswahl auf dem verwendeten Betriebssystem. + Verwendung der lokalen Codetabelle:Zum Anzeigen ausländischer Zeichen. Ändern Sie diese Option, wenn ausländische Zeichen nicht korrekt angezeigt werden. + + + +Vergleich und Zusammenführung +Beim Vergleichen von Dateien versucht &kdiff3; zuerst, alle vollständig identischen Zeilen in den Quelldateien zu finden. Nur während diesem ersten Schritt können "weiße" Zeichen ignoriert werden. Der zweite Schritt vergleicht jede Zeile. In diesem Schritt werden "weiße" Zeichen nicht ignoriert. Auch beim Zusammenführen werden "weiße" Zeichen nicht ignoriert. + + + Wagenrücklaufzeichen anzeigen:Manche Editoren (auf manchen Systemen) speichern ein Wagenrücklaufzeichen '\r' und einen Zeilenvorschub '\n' am Ende einer Zeile, andere wiederum speichern nur einen Zeilenvorschub '\n'. Üblicherweise ignoriert &kdiff3; das Wagenrücklaufzeichen, aber dann könnten Dateien mit unterschiedlichen Größen im Seite-an-Seite-Vergleich identisch aussehen, obwohl sie unterschiedlich sind. Wenn diese Option aktiviert ist, werden Wagenrücklaufzeichen sichtbar gemacht, jedoch wie ein "weißes" Zeichen behandelt. Während dem Zusammenführen muss diese Option deaktiviert sein. In der Voreinstellung ist dies deaktiviert. + Zahlen ignorieren:In der Voreinstellung ist diese Option deaktiviert. Im ersten Teil der Analyse werden Zahlen und zugehörige Zeichen ('0'-'9', '.', '-') ignoriert. Im Ergebnis werden die Unterschiede dennoch angezeigt, aber sie werden wie "weiße" Zeichen behandelt. + Ignoriere C/C++ Kommentare:In der Voreinstellung ist diese Option deaktiviert. Änderungen in Kommentaren werden wie Änderungen in "weißen" Zeichen behandelt. + Groß-/Kleinschreibung ignorieren:In der Voreinstellung ist diese Option deaktiviert. Underschiede in einzelnen Zeichen (wie z. B. 'A' und 'a') werden wie Unterschiede in "weißen" Zeichen behandelt. + Vorverarbeitungsbefehl:Siehe nächster Abschnitt. + Vorverarbeitungsbefehl nur für Zeilenabgleich:Siehe nächster Abschnitt. + Aufwändig suchen (langsamer):Intensiv nach noch kleineren Unterschieden suchen. Die Option ist in der Voreinstellung aktiviert. Sie ist effektiv bei komplizierten und großen Dateien, aber langsam bei sehr großen Dateien. + Automatisch-Weiterspringen-Verzögerung (ms):Im Automatisch-Weiterspringen-Modus bestimmt diese Einstellung, wie lange das Ergebnis der Auswahl angezeigt wird, bevor zum nächsten ungelösten Konflikt weitergesprungen wird. + "Weiße" Zeichen Autoauswahl bei 2/3 Dateien:Löst automatische alle Konflikte in "weißen" Zeichen indem die gewählte Datei als Quelle benutzt wird. (Voreingestellt ist manuelle Auswahl.) Das ist nützlich, wenn "weiße" Zeichen in vielen Dateien weniger wichtig sind. Wenn Sie dies nur von Zeit zu Zeit benötigen, dann nutzen Sie besser die Funktionen "Wähle A/B/C für alle ungelösten "weißen" Konflikte" aus dem Zusammenführen-Menü. Beachten Sie, dass die Automatische Auswahl auch Konflikte in Zahlen oder Kommentaren betrifft, wenn die Optionen "Zahlen ignorieren" oder "Ignoriere C/C++-Kommentare" aktiviert sind. + + + + +Verzeichnis-Zusammenführung +Diese Optionen werden im Kapitel zum Scannen von Ordnern und Durchführen einer Zusammenführung behandelt. Schauen Sie für Details unter Dokumentation zum Verzeichnis-Vergleich und Zusammenführung nach. Es gibt hier dennoch eine Option die auch beim Speichern von einzelnen Dateien relevant ist: + + Sicherungskopie erstellen (.orig):Wenn eine Datei gespeichert wird und bereits eine ältere Version existiert, dann wird der Originalversion das Suffix ".orig" angehängt. Wenn bereits eine solche Backupdatei mit dem Suffix ".orig" existiert, wird diese ohne weitere Sicherung gelöscht. + + + +Regional- und Spracheinstellungen + + Sprache:Passt die Sprache der Benutzeroberfläche an. Das Ändern dieser Option betrifft nicht das aktuell laufende Programm. Sie müssen &kdiff3; beenden und neu starten, damit die Änderung aktiv wird. (Diese Option ist in der KDE-Version von &kdiff3; nicht verfügbar, weil die Sprache dort global über das Kontrollzentrum eingestellt wird.) + Die gleiche Kodierung für alles verwenden:Die folgenden Kodierungseinstellungen können für jeden Eintrag separat eingestellt werden. Wenn man diese Option aktiviert, wird für alle Einträge die obere Einstellung verwendet. + Lokale kodierung:Über den Auswahlfeldern für die Kodierung erscheint ein kurzer Hinweis, was die lokale Kodierung ist. (Dies kann hier nicht geändert werden und hat für Sie rein informellen Charakter.) + Datei-Kodierung für A/B/C:Passen Sie die Datei-Kodierung für Quelldateien an. Dies beeinflusst, wie Sonderzeichen behandelt und interpretiertwerden. Da die Kodierung für jede Datei einzeln einstellbar ist, können selbst Dateien mit unterschiedlicher Kodierung verglichen und zusammengeführt werden. + Datei-Kodierung für die Zusammenführen-Ausgaben und zum Speichern:Wenn Sie eine Datei bearbeitet haben, können Sie hier festlegen, welche Kodierung zum Speichern verwendet werden soll. + Datei-Kodierung für Preprozessor-Dateien:Wenn Sie Vorverarbeitungsbefehle definieren, könnten sie eventuell nicht mit Ihrem Codec funktionieren. (Z. B. könnten Ihre Dateien 16-Bit Unicode sein, aber der Vorverarbeitungsbefehl kann nur mit 8-Bit ASCII umgehen.) Mit dieser Option kann man die Kodierung der Ausgabe von Vorverarbeitungsbefehelen festlegen. + Rechts-nach-Links-Sprache:Einige Sprachen werden von Rechts nach Links geschrieben. Wenn diese Option aktiviert ist, zeigt &kdiff3; den Text in Vergleichs- und Zusammenführen-Fenstern von Rechts nach Links an. Wenn Sie &kdiff3; mit der Option "--reverse" starten, wird das gesamte Layout der Programmoberfläche von Rechts nach Links angezeigt. (Dies ist eine Funktion von Qt.) Diese Dokumentation wurde unter der Annahme geschrieben, dass "Rechts-nach-Links Sprache" und umgedrehtes Layout abgeschaltet sind. Wenn Sie diese Optionen verwenden, müssen Sie also Referenzen auf "Rechts" und "Links" entsprechend umkehren. + + + + +Verschiedenes +(Diese Optionen und Aktionen sind in den Menüs oder den Werkzeugleisten zu finden.) + + Zeige Zeilennummern:Sie können wählen, ob in den Quelldateien die Zeilennummern angezeigt werden sollen. + Zeige Leerzeichen und Tabulator-Zeichen in Unterschieden:Manchmal sind sichtbare Leerzeichen und Tabulatoren störend. Sie können die Anzeige dieser Zeichen abschalten. + Zeige "weiße" Zeichen:Schalten Sie dies ab, um Hervorhebungen von Änderungen in "weißen" Zeichen in den Text- oder Übersichtsspalten zu unterdrücken. (Hinweis: Dies gilt auch für Änderungen in Zahlen oder Kommentaren, wenn die Optionen "Zahlen ignorieren" oder "Ignoriere C/C++-Kommentare" aktiviert sind.) + Übersichts-Optionen:Dieses Auswahl ist nur verfügbar, wenn Sie drei Dateien vergleichen. Im normalen Modus werden alle Unterschiede in einer farblich kodierten Übersichts-Spalte angezeigt. Aber manchmal möchten Sie vielleicht nur die Unterschiede zwischen zwei von drei Dateien sehen. Nach Auswahl von "A <-> B", "A <-> C" oder "B <-> C" wird neben der normalen noch eine zweite Übersichts-Spalte mit den benötigten Informationen angezeigt. + Zeilenumbruch in Diff-Fenstern:Aktiviert den Zeilenumbruch in Diff-Fenstern, wenn die Länge einer Zeile die Breite des Fensters überschreitet. + Zeige Fenster A/B/C:Manchmal möchte man den verfügbaren Platz auf dem Bildschirm lieber für lange Zeilen benutzen. Verstecken Sie einfach die weniger wichtigen Fenster. (Diese Option befindet sich im Fenster-Menü.) + Ausrichtung der Fensterteilung wechseln:Ordnet die Vergleichfenster nebeneinander oder übereinander an. Dies kann auch zum Anzeigen von langen Zeilen nützlich sein. (Diese Option befindet sich im Fenster-Menü.) + Aktuelle Datei zusammenführen:Manchmal betrachten Sie die Unterschiede und entscheiden sich dann unvermittelt, die Dateien zusammenzuführen. "Aktuelle Datei zusammenführen" im Zusammenführen-Menü funktioniert auch dann, wenn Sie nur zwei Dateien vergleichen. Ein einfacher Klick startet die Zusammenführung und benutzt den Dateinamen der letzten Quelldatei als voreingestellten Namen für die Ausgabedatei. (Wenn diese Funktion benutzt wird, um das Zusammenführen erneut zu starten, dann wird der Name der zuletzt benutzten Ausgabedatei beibehalten.) + + + +Kurzbefehle festlegen +Zur Zeit unterstützt nur die KDE-Version benutzerdefinierbare Kurzbefehle (Menü Einstellungen->Kurzbefehle festlegen...) + + + +Vorverarbeitungsbefehle: +KDiff3 unterstützt zwei Vorverarbeitungsbefehle. + + Vorverarbeitungsbefehl:Beim Lesen einer Datei wird sie zuerst diesem externen Kommando übergeben. In &kdiff3; wird dann die Ausgabe des Kommandos sichtbar, und nicht die Datei selbst. Sie können Ihren eigenen Präprozessor schreiben, der genau Ihren Ansprüchen entspricht. Sie können diese Funktion z. B. zum herausschneiden störender Teile oder zum korrigieren der Einrückung verwenden. + Vorverarbeitungsbefehl nur für Zeilenabgleich:Beim Lesen einer Datei wird sie zuerst diesem externen Kommando übergeben. Wenn auch ein normaler Vorverarbeitungsbefehl angegeben wurde (siehe oben), dann ist die Ausgabe des Befehls die Eingabe dieses Vorverarbeitungsbefehls. Die Ausgabe des Kommandos wird nur beim Zeilenabgleich verwendet. Sie können Ihren eigenen Präprozessor schreiben, der genau Ihren Ansprüchen entspricht. Jede Eingabe-Zeile muss eine zugehörige Ausgabe-Zeile haben. + + +Der Gedanke dahinter ist, dem Anwender mehr Flexibilität beim Einrichten der Diff-Ergebnisse zu ermöglichen. Doch dafür wird ein externes Programm benötigt, und die meisten Anwender möchten das nicht selbst programmieren. Die Gute Nachricht ist allerdings, dass in dem meisten Fällen sed oder perl vollkommen ausreichen. +Beispiel: Ein einfacher Testfall. Wie nehmen eine Datei a.txt (6 Zeilen): + aa + ba + ca + da + ea + fa + Und eine Datei b.txt (3 Zeilen): + cg + dg + eg + Ohne Preprozessor würden die folgenden Zeilen nebeneinander stehen: + aa - cg + ba - dg + ca - eg + da + ea + fa + Dies ist allerdings nicht das gewünschte Ergebnis, weil der erste Buchstabe die interessante Information darstellt. Um den Suchalgorythmus beim Abgleich zu unterstützen, ignorieren wir den zweiten Buchstaben. Dazu kann folgender Zeilen-Preprozessor verwendet werden, der "g" durch "a" ersetzt: + sed 's/g/a/' + Mit diesem Kommando würde das Ergebnis so aussehen: + aa + ba + ca - cg + da - dg + ea - eg + fa + Programmintern "sieht" der Vergleichsalgorythmus die Dateien erst nach dem Durchlauf des Zeilen-Preprozessors, auf dem Bildschirm jedoch erscheinen die Dateien unverändert. (Der normale Preprozessor würde auch die Daten auf dem Bildschirm ändern.) + +<command +>sed</command +>-Grundlagen +Dieser Abschnitt führt Sie nur in einige sehr grundlegende Funktionen von sed ein. Weiterführende Informationen finden Sie unter info:/sed oder http://www.gnu.org/software/sed/manual/html_mono/sed.html. Eine vorkompilierte Version für Windows finden Sie unter http://unxutils.sourceforge.net. Beachten Sie, dass die folgenden Beispiele voraussetzen, dass das Kommando sed sich in einem Ordner in der PATH-Variable befindet. Falls das nicht der Fall sein sollte, müssen Sie den vollständigen Pfad zu sed angeben. Außerdem nutzen die Beispiele einfache Hochkommas ('), die allerdings unter Windows nicht funktionieren. Unter Windows müssen Sie doppelte Hochkommas (") verwenden. +In diesem Kontext wird nur das sed-Substitute-Kommando benutzt: + sed 's/REGEXP/ERSATZ/SCHALTER' + Bevor Sie in KDiff3 ein neues Kommando benutzen, sollten Sie es zuerst in der Konsole testen. Hier kann der echo-Befehl sehr hilfreich sein. Beispiel: + echo abrakadabra | sed 's/a/o/' + -> obrakadabra + Dieses Beispiel zeigt ein einfaches sed-Kommando, das das erste Vorkommen von "a" durch "o" ersetzt. Wenn Sie alle Vorkommen ersetzen möchten, müssen Sie den Schalter "g" benutzen: + echo abrakadabra | sed 's/a/o/g' + -> obrokodobro + Das "|"-Symbol ist das Pipe-Kommando, es übergibt die Ausgabe des ersten Kommandos an die Eingabe des folgenden Kommando. Wenn Sie Ihr sed-Kommando mit einer längeren Datei testen möchten, dann können Sie unter Unix cat und unter Window type dazu benutzen. sed wird die Ersetzung in jeder Zeile der Datei durchführen. cat dateiname | sed optionen + + + +Beispielanwendungen von <command +>sed</command +> in KDiff3 +Ignorieren weiterer Kommentartypen +Zur Zeit unterstützt KDiff3 nur C/C++-Kommentare. Mit Hilfe des Vorverarbeitungsbefehl nur für Zeilenabgleich können Sie auf andere Kommentar-Arten unterstützen. Dafür wandeln Sie diese in C/C++-Kommentare um. Beispiel: Um Kommentare zu ignorieren, die mit "#" beginnen, würden Sie diese zu "//" umwandeln. Außerdem muss natürlich die Option "C/C++-Kommentare ignorieren" aktiviert sein damit dies etwas bewirkt. Ein passendes Kommando für den Vorverarbeitungsbefehl nur für Zeilenabgleich wäre zum Beispiel: + sed 's/#/\/\//' + Weil das Zeichen "/" für sed ein Sonderzeichen ist, muss jedem "/" ein "\" vorangestellt werden. Manchmal wird dies benötigt, um einem Sonderzeichen die besondere Bedeutung zu "entziehen". Außerdem sind die einfachen Anführungszeichen (') vor und hinter dem Ersetzungskommando wichtig, weil die Shell sonst versucht, einige der Zeichen wie '#', '$' oder '\' zu ersetzen bevor sie an sed weitergereicht werden. Unter Windows müssen Sie doppelte Anführungszeichen verwenden ("). Windows ersetzt Zeichen wie '%' grundsätzlich, hier müssen Sie eventuell ein wenig experimentieren. + +Diff ohne Beachtung der Groß-/ Kleinschreibung +Verwenden Sie diesen Vorverarbeitungsbefehl für Zeilenabgleich um die Eingabe in Großbuchstaben umzuwandeln: + sed 's/\(.*\)/\U\1/' + Das ".*" ist ein ergulärer Ausdruck der auf jede Zeichenkette passt und in diesem Zusammenhang daher alle Zeichen in einer Zeile erfasst. Die "\1" in der Ersetzungs-Zeichenkette bezieht sich auf den gefundenen Text im ersten Klammernpaar. Das "\U" wandelt den gefundenen Text in Großbuchstaben um. + + +Ignorieren von Schlüsselwörtern aus Versionskontrolle-Systemen +CVS und andere Versionskontrolle-Systeme verwenden einige Schlüsselwörter um automatisch erzeugte Zeichenketten einzufügen (info:/cvs/Keyword substitution). Alle folgen dem selben Muster "$SCHLÜSSELWORT erzeugter Text$". Nun wird also ein Vorverarbeitungsbefehl für Zeilenabgleich benötigt, der den automatisch erzeugten Text entfernt: + sed 's/\$\(Revision\|Author\|Log\|Header\|Date\).*\$/\$\1\$/' + Das "\|" trennt die möglichen Schlüsselwörter. Sie können die Liste nach Bedarf ändern. Das "\" vor dem "$" ist nötig, weil "$" ein Sonderzeichen ist und "Ende der Zeile" bedeuten würde. +Während Sie mit sed experimentieren, beginnen Sie vielleicht, es zu verstehen und vielleicht mögen Sie diese regulären Ausdrücke sogar. Sie sind sehr nützlich weil es viele Programme gibt, die sehr ähnliche Dinge unterstützen. + + +Ignorieren von Zahlen +Das Ignorieren von Zahlen ist eigentlich eine bereits eingebaute Funktion in KDiff3. Aber sie ist gut als Beispiel für einen weiteren Vorverarbeitungsbefehl für Zeilenabgleich geeignet. + sed 's/[0123456789.-]//g' + Jedes Zeichen zwischen '[' und ']' ist ein Treffer, und jeder Treffer wird durch nichts ersetzt, also quasi gelöscht. + + +Ignorieren von bestimmten Spalten +Manchmal ist ein Text nach strengen Regeln formatiert und enthält Spalten, die Sie grundsätzlich ignorieren möchten, und andere Spalten, die Sie für die Analyse heranziehen möchten. Im folgenden Beispiel werden die ersten fünf Spalten (Zeichen) ignoriert, dann 10 Spalten beibehalten, dann wieder fünf Spalten ignoriert und der Rest der Zeile wird beibehalten. + sed 's/.....\(..........\).....\(.*\)/\1\2/' + Jeder Punkt '.' passt auf genau ein Zeichen. Die "\1" und "\2" in der Ersetzungs-Zeichenkette beziehen sich auf den gefundenen Text im ersten und zweiten Klammernpaar und markieren so den beizubehaltenden Text. + + +Mehrere Ersetzungen kombinieren +Manchmal möchten Sie vielleicht mehrere Ersetzungen auf einmal durchführen. Dann können Sie das Semikolon ';' benutzen, um die Ersetzungen voneinander zu trennen. Beispiel: echo abrakadabra | sed 's/a/o/g;s/\(.*\)/\U\1/' + -> OBROKODOBRO + + + + +<command +>perl</command +> statt <command +>sed</command +> benutzen +Statt sed können Sie auch etwas anderes wie z. B. perl verwenden. + perl -p -e 's/REGEXP/ERSETZUNG/SCHALTER' + Allerdings sind bei perl einige Details anders. Wo sed "\(" und "\)" benötigt, braucht perl nur noch "(" und ")" ohne das vorangestellte '\'. Beispiel: sed 's/\(.*\)/\U\1/' + perl -p -e 's/(.*)/\U\1/' + + + + + +Reihenfolge der Ausführung von Preprozessoren +Die Daten werden durch interne und externe Preprozessoren in dieser Reihenfolge durchgeschleust: + +Normaler Preprozessor, +Vorverarbeitungsbefehl für Zeilenabgleich, +Groß-/Kleinschreibung ignorieren (Umwandlung in Großbuchstaben), +Erkennung von C/C++ Kommentaren, +Zahlen ignorieren, +"weiße" Zeichen ignorieren + +Die Daten nach dem normalen Preprozessor werden für die Anzeige und zum Zusammenführen beibehalten. Die weiteren Operationen verändern nur die Daten, die der Zeilenabgleich-Algorythmus "sieht". Beachten Sie: In seltenen Fällen wenn Sie einen normalen Preprozessor verwenden, sieht der Zeilenabgleich-Preprozessor die Ausgabe des normalen Preprozessors als Eingabe. + + +Warnung +Die Preprozessor-Kommandos sind sehr nützlich, aber wie bei jeder Funktion, die Text verändert oder Unterschiede versteckt, können Sie versehentlich bestimmte Unterschiede nicht bemerken und im schlimmsten Fall wichtige Daten zerstören. Beim Zusammenführen werden Sie daher von KDiff3 gewarnt, falls ein Preprozessor-Kommando benutzt wurd. Sie werden gefragt, ob dieser deaktiviert werden soll oder nicht. Sie werden allerdings nicht gewarnt, wenn ein Vorverarbeitungsbefehl für den Zeilenabgleich benutzt wird. Das Zusammenführen ist nicht abgeschlossen bevor nicht alle Konflikte aufgelöst wurden. Falls Sie "Weiße" Zeichen anzeigen deaktiviert haben, dann sind die vom Zeilenabgleich-Preprozessor entfernten Unterschiede ebenfalls unsichtbar. Wenn der Knopf "Speichern" während dem Zusammenführen deaktiviert bleibt (durch nicht aufgelöste Konflikte), dann aktivieren Sie "weiße" Zeichen anzeigen. Falls diese weniger wichtigen Unterschiede nicht zusammengeführt werden sollen, können Sie auch "Wähle [A|B|C] für alle ungelöste Konflikte" im Menü Zusammenführen-Menü auswählen. + + + + + +Mit &kdiff3; Ordner Vergleichen und Zusammenführen +Einführung +Oftmals müssen Programmierer in einem Ordner viele Dateien bearbeiten. Aus diesem Grund können Sie mit &kdiff3; komplette Ordner rekursiv vergleichen und zusammenführen. Auch wenn das Vergleichen und Zusammenführen von ganzen Ordnern recht naheliegend und einleuchtend erscheint, gibt es einige Details, die Sie wissen sollten. Der wichtigste Punkt ist natürlich, dass sich jeder Durchlauf dieser Funktion gleich auf viele Dateien auswirkt. Wenn Sie keine Sicherungskopie der Originaldaten haben, könnte es schwer oder gar unmöglich werden, den Originalstand wiederherzustellen. Bevor Sie das Zusammenführen starten, sollten Sie also sicherstellen, dass Ihre Daten gesichert sind und das Sie alles rückgängig machen können. Ob Sie ein Archiv erstellen oder ein System zur Versionskontrolle benutzen, ist Ihre Entscheidung; selbst erfahrene Programmierer und Integratoren benötigen hin und wieder die alten Quelltexte. Bitte beachten Sie auch, dass selbst ich (der Autor von &kdiff3;) keine Garantie geben kann, dass das Programm fehlerlos ist. Entsprechend der GNU-GPL gibt es für dieses Programm KEINE GARANTIE. Also denken Sie daran: +
+ Irren ist menschlich, aber um etwas wirklich durcheinander zu bringen braucht man schon einen Computer ;-) +
+All diese Dinge kann &kdiff3; für Sie erledigen: &kdiff3;... + + ... liest und vergleicht rekursiv zwei oder drei Ordner, + ... behandelt symbolische Links besonders vorsichtig, + ... lässt Sie Ihre Dateien per Mausklick durchsuchen, + ... macht für jedes Objekt einen Vorschlag zum Zusammenführen; Sie können den Vorschlag vor dem Start anpassen, + ... kann das Zusammenführen simulieren und zeigt die simulierten Änderungen an, ohne sie wirklich durchzuführen, + ... führt letztendlich die Zusammenführung durch und lässt Sie (wenn nötig) eingreifen, + ... führt ausgewählte Aktionen entweder mit allen (F7-Taste), oder nur mit den ausgewählten Objekten (F6-Taste) aus, + ... setzt das Zusammenführen nach einem manuellen Eingriff fort (F7-Taste), + ... erzeugt optional Sicherungskopien mit der Erweiterung".orig", + ... + +
+ +Ordnervergleich oder -zusammenführung starten +Dies ist dem Vergleichen und Zusammenführen von einzelnen Dateien sehr ähnlich. Sie müssen nur Ordner auf der Kommandozeile oder im "Datei öffnen"-Dialog angeben. +Vergleichen/Zusammenführen von zwei Ordnern: +kdiff3 Ordner1 Ordner2 + kdiff3 Ordner1 Ordner2 -o Zielordner + +Wenn kein Zielordner angegeben wurde, benutzt &kdiff3; Ordner2. + + +Vergleichen/Zusammenführen von drei Ordnern: +kdiff3 Ordner1 Ordner2 Ordner3 + kdiff3 Ordner1 Ordner2 Ordner3 -o Zielordner + +Wenn drei Ordner zusammengeführt werden, dann wird Ordner1 als Basis benutzt. Wenn kein Zielordner angegeben wurde, verwendet &kdiff3; Ordner3 als Zielordner. + +Beachten Sie, dass nur der Vergleich von Ordnern automatisch startet, nicht das Zusammenführen. Um das Zusammenführen zu starten, müssen Sie den entsprechenden Menüeintrag auswählen oder die F7-Taste drücken. (Weitere Details folgen.) + + + +Sichtbare Informationen +Während dem Einlesen der Ordner informiert Sie ein kleines Nachrichtenfenster über den aktuellen Fortschritt. Wenn Sie das Scannen der Ordner abbrechen, werden nur die Dateien aufgelistet, die bis dahin verglichen wurden. Wenn das Scannen der Ordner abgeschlossen ist, zeigt &kdiff3; ein Listenfenster mit den Ergebnissen auf der linken Seite, ... + + + +... und den Details zu dem jeweils ausgewählten Objekt auf der rechten Seite: + + + + + +Die Spalte "Name" +Jede Datei und jeder Ordner der während dem Scan gefunden wurde, wird hier in einem Baum dargestellt. Sie können ein Objekt mit einem einfachen Mausklick auswählen. Die Ordnerstruktur wird normalerweise zusammengeklappt dargestellt. Sie können einen Ordner aufklappen, indem Sie auf das "+"/"-" klicken, oder auf das Objekt doppelklicken oder indem Sie die Pfeiltasten für links/rechts benutzen. Das "Verzeichnis"-Menü enthält zwei Funktionen "Alle Unterverzeichnisse einklappen" und "Alle Unterverzeichnisse aufklappen" mit denen Sie alle Ordner auf- bzw. zuklappen können. Wenn Sie auf eine Datei doppelklicken, wird der Dateivergleich gestartet und es erscheint ein Vergleichsfenster. +Das Symbol in der Spalte "Name" spiegelt den Dateityp im ersten Ordner ("A") wieder. Diese Typen sind möglich: + + Normale Datei + Normaler Ordner (Ordner-Symbol) + Link auf eine Datei (Datei-Symbol mit einem Link-Pfeil) + Link auf einen Ordner (Ordner-Symbol mit einem Link-Pfeil) + +Wenn der Dateityp in den anderen Ordnern unterschiedlich ist, dann ist dies in den Spalten A/B/C und in dem Detailfenster zu dem ausgewählten Objekt sichtbar. In einem solchen Fall kann die Zusammenführ-Aktion nicht automatisch gewählt werden. Wenn das Zusammenführen gestartet wird, werden Sie über Probleme dieser Art nochmals informiert. + + +Die Spalten A/B/C und das Farbschema +Wie in dem obigen Bild zu sehen ist, werden in den Spalten A/B/C die Farben Rot, Grün, Gelb und Schwarz verwendet. + + Schwarz: Dieser Eintrag existiert nicht in diesem Ordner. + Grün: Neuester Eintrag. + Gelb: Älter als grün, neuer als rot. + Rot: Ältester Eintrag. + +Bei identischen Einträgen ist die Farbe allerdings auch identisch, auch wenn das Alter der Einträge unterschiedlich ist. Ordner werden als identisch betrachtet, wenn ihr gesamter Inhalt identisch ist. Dann haben auch Ordner die gleiche Farbe. Bei Ordnern ist das Alter unerheblich für seine Farbe. Die Idee zu diesem Farbschema basiert auf dirdiff. Die Farben spiegeln die Farben eines Blattes wieder, welches erst grün ist, dann gelb wird und später, wenn es alt ist, rot wird. + +Die Aktions-Spalte +Nach dem Vergleichen der Ordner schlägt &kdiff3; eine Zusammenführ-Aktion vor. Dieser Vorschlag wird in der Aktions-Spalte angezeigt. Sie können den Vorschlag ändern, indem Sie auf den entsprechenden Eintrag klicken. Daraufhin erscheint ein kleines Menü, in dem Sie eine Aktion auswählen können. (Die häufigsten Aktionen können Sie auch mit der Tastatur auswählen. Strg+1/2/3/4/Entf wählt entsprechend A/B/C/Zusammenführen/Löschen aus.) Die Aktion wird dann während dem Zusammenführen ausgeführt. Welche Aktionen möglich sind, hängt von dem Eintrag und dem aktuellen Zusammenführ-Modus ab. Mögliche Zusammenführ-Modi sind + + Drei-Ordner-Zusammenführen ("A" wird als die ältere Basis für die beiden anderen herangezogen). + Zwei-Ordner-Zusammenführen. + Zwei-Ordner-Synchronisieren-Modus (aktivieren Sie diesen Modus mit der Option "Verzeichnisse Synchronisieren"). + +Beim Zusammenführen von drei Ordnern sind diese Aktions-Vorschläge möglich: Wenn für ein Objekt... + + ... alle drei Ordner identisch sind: Kopieren von C + ... A und C identisch sind, aber nicht B: Kopieren von B (oder falls B nicht existiert, löschen des Ziels, falls es existiert) + ... A und B identisch sind, aber nicht C: Kopieren von C (oder falls C nicht existiert, löschen des Ziels, falls es existiert) + ... B und C identisch sind, aber nicht A: Kopieren von A (oder falls A nicht existiert, löschen des Ziels, falls es existiert) + ... nur A existiert: Löschen des Ziels (falls es existiert) + ... nur B existiert: Kopieren von B + ... nur C existiert: Kopieren von C + ... A, B und C nicht identisch sind: Zusammenführen + ... A, B und C nicht den gleichen Dateityp haben (z. B. wenn A ein Ordner und B eine Datei ist): "Fehler: Widersprüchliche Dateitypen". Solange solche fehlerhaften Objekte existieren, kann das Zusammenführen nicht gestartet werden. + +Beim Zusammenführen von zwei Ordnern sind diese Aktions-Vorschläge möglich: Wenn für ein Objekt... + + ... beide Ordner gleich sind: Kopieren von B + ... A existiert, aber nicht B: Kopieren von A + ... B existiert, aber nicht A: Kopieren von B + ... A und B existieren aber nicht identisch sind: Zusammenführen + ... A und B nicht den gleichen Dateityp haben (z. B. wenn A ein Ordner und B eine Datei ist): "Fehler: Widersprüchliche Dateitypen". Solange solche fehlerhaften Objekte existieren, kann das Zusammenführen nicht gestartet werden. + +Der Modus zum Synchronisieren ist aktiv, wenn nur zwei Ordner und kein expliziter Zielordner angegeben wurden und wenn die Option "Verzeichnisse synchronisieren" aktiv ist. Dann wählt &kdiff3; die nötige Aktion aus, damit nachher beide Ordner identisch sind. Wenn für einen Eintrag... + + ... beide Ordner identisch sind: Es wird nichts unternommen. + ... A existiert, aber nicht B: Kopieren von A nach B + ... B existiert, aber nicht A: Kopieren von B nach A + ... A und B existieren, aber nicht identisch sind: Zusammenführen und das Ergebnis in beiden Ordnern speichern. (Der Anwender sieht als sichtbaren Dateinamen für die Ausgabedatei nur B; direkt nach dem Zusammenführen kopiert &kdiff3; B nach A.) + ... A und B nicht den gleichen Dateityp haben (z. B. wenn A ein Ordner und B eine Datei ist): "Fehler: Widersprüchliche Dateitypen". Solange solche fehlerhaften Objekte existieren, kann das Zusammenführen nicht gestartet werden. + +Wenn zwei Ordner zusammengeführt werden und die Option "Neuere Datei statt Zusammenführung auswählen (unsicher)" aktiviert ist, dann untersucht &kdiff3; das Datum der Dateien und schlägt die neuere Datei zum Kopieren vor. Wenn die Dateien unterschiedlich sind, aber das gleiche Datum aufweisen, dann erscheint eine Fehlermeldung "Fehler: Dateien sind unterschiedlich, aber das Datum ist identisch.". Solange solche Fehler nicht beseitigt sind, kann das Zusammenführen der Ordner nicht gestartet werden. + + +Die Status-Spalte +Während dem Zusammenführen wird eine Datei nach der anderen abgearbeitet. Sie Status-Spalte zeigt "Fertig" an, wenn das Zusammenführen erfolgreich war, und entsprechend andere Meldungen, wenn etwas unerwartetes auftrat. Wenn das Zusammenführen abgeschlossen ist, sollten Sie eine letzte Überprüfung vornehmen und nachsehen, ob der Status überall in Ordnung ist. + + +Die Statistik-Spalte +Wenn im Einrichtungsdialog die Dateivergleichsmethode "Vollständige Analyse" gewählt ist, wird KDiff3 weitere Spalten anzeigen. Diese enthalten die Anzahl ungelöster, gelöster, nicht "weißer" und "weißer" Konflikte. (Die Spalte für gelöste Konflikte wird nur angezeigt, wenn drei Ordner verglichen oder zusammengeführt werden.) + + + + + +Eine Zusammenführung durchführen +Sie können entweder den gerade ausgewählten Eintrag (Datei oder Odner) zusammenführen, oder alle Einträge auf einmal. Wenn Sie alle Zusammenführ-Aktionen ausgewählt haben (auch in allen Unterordnern), können Sie das Zusammenführen starten. Beachten Sie bitte: Wenn Sie keinen Zielordner angegeben haben, dann wird im Drei-Ordner-Zusammenführen-Modus "C" als Ziel benutzt, beim Zwei-Ordner-Zusammenführen wird "B" als Ziel gewählt und beim Synchronisieren wird "A" und/oder "B" als Ziel verwendet. Wenn Sie einen Zielordner ausgewählt haben, prüfen Sie bitte nachher, ob alle Einträge die im Zielordner sein sollten, auch in der Ordnerstruktur angezeigt werden. Es gibt einige Optionen durch die bestimmte Einträge übersprungen werden könnten. Überprüfen Sie diese Optionen um unliebsame Überraschungen zu vermeiden: + + "Rekursive Verzeichnisse": Wenn diese Option deaktiviert ist, werden keine Dateien in Unterordnern bearbeitet. + "Datei Muster"/"Datei Anti-Muster": Ein-/ und Ausschließen auf das Muster passender Einträge + "Finde versteckte Dateien und Verzeichnisse" + "Nur Unterschiede anzeigen": Dateien die in allen Ordnern identisch sind erscheinen nicht in der Ordnerstruktur, und folglich auch nicht im Zielordner. + +(In der aktuellen Programmversion müssen Sie nach Änderungen an diesen Optionen den Ordner mit der Funktion "Aktualisieren" neu einlesen.) Wenn Sie soweit zufrieden sind ist der Rest einfach. Um alle Einträge zusammenzuführen: Wählen Sie "Verzeichniszusammenführung starten/fortsetzen" im "Verzeichnis"-Menü oder drücken Sie F7 (das Tastenkürzel). Um nur den aktuellen Eintrag zusammenzuführen: Wählen Sie "Aktion des aktuellen Elements ausführen" oder drücken Sie F6. Wenn durch widersprüchliche Dateitypen immer noch ungültige Zusammenführen-Aktionen existieren, erscheint eine Meldung die auf die fehlerhaften Elemente hinweist. Sie können für sie dann eine gültige Aktion auswählen. Wenn Sie alle Einträge zusammenführen, erscheint ein Dialogfenster mit den Optionen "Durchführen", "Simulieren" und "Abbrechen". + + Wählen Sie "Simulieren" wenn Sie erst sehen möchten was passieren würde, ohne das wirklich Änderungen vorgenommen werden. Sie erhalten dann eine ausführliche Liste aller Aktionen. + Ansonsten klicken Sie auf "Durchführen" um das Zusammenführen wirklich zu starten. + +&kdiff3; führt dann bestimmte Aktionen mit allen Einträgen durch. Wenn ein manueller Eingriff nötig ist (zusammenführen einer einzelnen Datei), dann öffnet sich ein Zusammenführen-Fenster (beachten Sie das Bildschirmphoto). Wenn Sie mit einer Datei fertig sind, wählen Sie erneut "Verzeichniszusammenführung starten/fortsetzen" oder drücken Sie F7. Wenn Sie noch nicht gespeichert haben, erscheint ein entsprechender Dialog. Dann führt &kdiff3; seine Arbeit mit dem nächsten Eintrag fort. Wenn &kdiff3; auf einen Fehler stösst, erscheint eine Nachricht und ausführliche Status-Informationen. Am Schluss der Liste sehen Sie einige Fehlermeldungen, die Ihnen helfen sollen, die Ursache des Problems auszumachen. Wenn Sie das Zusammenführen fortfahren (F7-Taste), lässt &kdiff3; Ihnen die Wahl es erneut zu versuchen, oder den problematischen Eintrag zu überspringen. So haben Sie die Möglichkeit, eine andere Aktion für den Eintrag auszuwählen oder das Problem auf andere Weise zu lösen, bevor Sie mit dem Zusammenführen fortfahren. &kdiff3; informiert Sie mit einem Info-Fenster wenn das Zusammenführen abgeschlossen ist. Falls einige Einträge individuell zusammengeführt wurden, merkt sich &kdiff3; diese Einträge (in der aktuellen Sitzung) und führt sie beim späteren zusammenführen aller Einträge nicht nochmals zusammen. Selbst wenn hier das Zusammenführen übersprungen wurde oder nicht gespeichert wurde, werden diese Einträge als erledigt betrachtet. Nur wenn Sie die Zusammenführen-Aktion ändern, werden diese Einträge erneut zusammengeführt. + + +Optionen zum Vergleichen und Zusammenführen von Ordnern +Das Einstellungen-Menü von &kdiff3; (Menü "Einstellungen"->"KDiff3 einrichten...") hat nun einen Abschnitt namens "Verzeichnis-Zusammenführung" mit diesen Optionen: + + + Rekursive Verzeichnisse:Stellen Sie ein, ob Ordner rekursiv durchsucht werden sollen. + Datei Muster:Nur Dateien, die auf das angegebene Muster passen, werden im Elementbaum angezeigt. Es können mehrere Muster eingegeben werden. Trennen Sie die Muster mit einem Semikolon ";". Gültige Platzhalter: '*' und '?'. (z. B. "*.cpp;*.h"). Die Voreinstellung ist "*". Ordner müssen nicht diesem Muster entsprechen. + Datei Anti-Muster:Dateien und Ordner die diesem Muster entsprechen, werden nicht im Elementbaum angezeigt. Es kann mehr als ein Muster eingegeben werden, benutzen Sie das Semikolon ";" als Trennzeichen . Gültige Platzhalter: '*' und '?'. Voreinstellung ist "*.orig;*.o". + .cvsignore benutzen:Ignoriert Dateien, die auch von CVS ignoriert werden würden. Viele autmatisch erzeugte Dateien werden von CVS ignoriert. Der große Vorteil ist, dass dies Ordnerspezifisch mit einer ".cvsignore"-Datei eingestellt werden kann. (Schauen Sie unter info:/cvs/cvsignore.) + Finde versteckte Dateien und Verzeichnisse:In einigen Dateisystemen haben Dateien ein "Versteckt"-Attribut. In anderen Dateisystemen markiert ein vorangestellter Punkt "." eine Datei als versteckt. Diese Option lässt Sie entscheiden, ob diese Dateien im Elementbaum angezeigt werden sollen oder nicht. Diese Option ist in der Voreinstellung eingeschaltet. + Folge Datei-Verknüpfungen:Bei Links auf Dateien: Wenn die Option abgeschaltet ist, werden symbolische Verknüpfungen verglichen. Wenn die Option eingeschaltet ist, werden die Dateien verglichen, auf die die Links zeigen. Dies ist in der Voreinstellung deaktiviert. + Folge Verzeichnis-Verknüpfungen:Bei Links auf Ordner: Wenn die Option abgeschaltet ist, werden die symbolischen Links verglichen. Wenn die Option eingeschaltet ist, werden die Links wie normale Ordner behandelt und rekursiv durchsucht. (Beachten Sie, dass &kdiff3; nicht auf mögliche Rekursionen prüft. Ein Link auf einen Ordner der einen Link auf sich selbst enthält würde zu einer Endlosschleife führen und &kdiff3; stürzt ab.) Diese Option ist in der Voreinstellung abgeschaltet. + Nur Unterschiede anzeigen:Es werden nur Einträge angezeigt, die Unterschiede aufweisen. Das führt auch dazu, dass identische Dateien beim Zusammenführen nicht in den Zielordner kopiert werden. Falls der Zielordner diese Dateien nicht bereits enthält, fehlen sie nach dem Zusammenführen. (Das Verhalten wird in einer späteren Programmversion wahrscheinlich abgeändert.) Diese Option ist in der Voreinstellung abgeschaltet. + + Dateivergleichsmethode: + + Binärvergleich:Dies ist die voreingestellte Vergleichsmethode. + Vollständige Analyse:Führt eine vollständige Analyse jeder Datei durch und zeigt die Statistik-Spalten an. (Die Anzahl gelöster, ungelöster, nicht-"weißer" und "weißer" Konflikte.) Die vollständige Analyse ist langsamer als eine einfache binäre Analyse, und wesentlich langsamer, wenn sie auf Dateien angewendet wird, die keinen Text enthalten. (Geben Sie ein entsprechendes Anti-Muster ein.) + Vertraue dem Änderungsdatum (unsicher):Wenn Sie große Ordner über ein langsames Netzwerk vergleichen, geht es möglicherweise schneller, nur das Änderungsdatum und die Dateigröße zu vergleichen. Dieser Geschwindigkeitsvorteil kostet Sie allerdings ein gewisses Maß an Sicherheit. Bitte mit Vorsicht benutzen. Diese Option ist in der Voreinstellung abgschaltet. + Vertraue der Größe (unsicher):Ähnlich wie "Vertraue dem Änderungsdatum". Es findet kein echter Vergleich statt. Die Dateien werden als identisch betrachtet, wenn sie gleich groß sind. Das kann z. B. nützlich sein, wenn beim Kopieren das Änderungsdatum verlorengegangen ist. Bitte mit Vorsicht benutzen. Diese Option ist in der Voreinstellung abgschaltet. + + + Verzeichnisse synchronisieren:Aktiviert den "Synchronisieren"-Modus wenn zwei Ordner verglichen werden und kein Zielordner angegeben wurde. In diesem Modus werden die Vorschläge zum Zusammenführen so ausgewählt, dass nachher beide Ordner identisch sind. Auch die Ergebnisse vom Zusammenführen von Dateien werden in beiden Ordnern gespeichert. Diese Option ist in der Voreinstellung abgeschaltet. + Neuere Datei statt Zusammenführung auswählen (unsicher):Falls es Unterschiede gibt, wird statt dem Zusammenführen das Kopieren der neueren Datei als Aktion vorgeschlagen. (Dies wird als unsicher betrachtet, denn es wird das Wissen vorausgesetzt, dass die andere Datei nicht auch verändert wurde. Sie sollten dies in jedem Fall prüfen.) Diese Option ist in der Voreinstellung abgeschaltet. + Sicherungskopie erstellen (.orig):Wenn eine Datei oder ein Ordner durch eine andere ersetzt oder gelöscht wird, dann wird die Originalversion umbenannt und erhält die Erweiterung ".orig". Wenn eine alte Backup-Datei mit der ".orig"-Erweiterung bereits existiert, so wird diese ohne weiteres Backup gelöscht. Das betrifft auch das normale Zusammenführen einzelner Dateien, nicht nur das Zusammenführen ganzer Ordner. Diese Option ist in der Voreinstellung eingeschaltet. + + + +Weitere Funktionen +Verzeichnis & Textfenster teilen sich Hauptfenster +Normalerweise bleibt die Ordner-Zusammenführen-Ansicht währen dem Zusammenführen einzelner Dateien sichtbar; Sie können den Fensterteiler mit der Maus verschieben. Wenn Sie das nicht wollen, können Sie die Option "Verzeichnis & Textfenster teilen sich Hauptfenster" im "Fenster"-Menü abschalten und mittels "Wechsel zwischen Verzeichnis & Textfenster" zwischen den beiden Ansichten umschalten. + +Vergleichen und Zusammenführen einer einzelnen Datei +Wahrscheinlich bevorzugen Sie, eine Datei einfach mittels Doppelklick zu vergleichen. Dennoch gibt es im "Verzeichnis"-Menü auch einen entsprechenden Menüeintrag. Sie können eine einzelne Datei auch direkt zusammenführen, ohne erst das Ordnerzusammenführen starten zu müssen. Dazu benutzen Sie die Funktion "Aktuelle Datei Zusammenführen" aus dem "Zusammenführen"-Menü. Sobald Sie das Ergebnis speichern, wird der Status auf "Erledigt" gesetzt und die Datei wird nicht nochmals zusammengeführt wenn Sie das Ordnerzusammenführen starten. Dieser Status geht allerdings verloren, wenn Sie das Verzeichnis erneut einlesen: "Verzeichnis"-Menü: "Neu einlesen" + + +
+ + +Verschiedene Themen + +Netzwerktransparenz via KIO +KIO-Slaves +KDE unterstützt Netzwerktransparenz mit Hilfe von KIO-Slaves. KDiff3 benutzt dies zum Einlesen von Dateien und Ordnern. Auf diese Weise können Sie Dateien und Ordner zum Öffnen angeben, die sich auf lokalen oder entfernten Rechnern befinden. Beispiel: +kdiff3 test.cpp ftp://ftp.weitweg.org/test.cpp + kdiff3 tar:/home/hacker/archiv.tar.gz/ordner ./ordner + + +Die erste Kommandozeile vergleicht eine lokale Datei mit einer auf einem FTP-Server. Die zweite Kommandozeile vergleicht einen Ordner innerhalb eines komprimierten Archivs mit einem lokalen Ordner. Weitere interessante KIO-Slaves sind: + +Dateien aus dem WWW (http:), +Dateien von FTP (ftp:), +Verschlüsselte Dateiübertragung (fish:, sftp:), +Windows-Ressourcen (smb:), +Lokale Dateien (file:), + +Desweiteren wäre möglich (wenn auch weniger nützlich): + +Man-Pages (man:), +Info-Seiten (info:), + + + +Wie man eine URL schreibt +Eine URL hat eine andere Syntax als lokale Dateien und Ordner. Ein paar Dinge sollten Sie beachten: + +Ein Pfad kann relativ sein und "." oder ".." enthalten. Das ist mit URLs nicht möglich, diese sind immer absolut. Sonderzeichen müssen maskiert werden. ("#"->"%23", Leerzeichen->"%20", u.s.w.). Zum Beispiel hat eine Datei mit dem Namen "/#foo#" die URL "file:/%23foo%23". Wenn eine URL nicht wie erwartet funktioniert, versuchen Sie erstmal, diese im Konqueror zu öffnen. + + + + +Fähigkeiten von KIO-Slaves +Netzwerktransparenz hat auch einen Nachteil: Nicht alle Ressourcen haben die gleichen Fähigkeiten. Manchmal aufgrund des Dateisystems auf dem Server, manchmal durch das verwendete Protokoll. Es folgt eine kurze Liste der Einschränkungen: + +Teilweise werden keine Links unterstützt. Oder es kann nicht unterschieden werden, ob ein Link auf eine Datei oder einen Ordner zeigt. Dann wird immer eine Datei als Link-Ziel angenommen. (ftp:, sftp:). Die Dateigröße kann nicht immer ermittelt werden. Eingeschränkte Unterstützung für Berechtigungen. Es gibt keine Möglichkeit, Berechtigungen oder Veränderungsdatum zu bearbeiten. Daher weichen die Berechtigungen oder das Veränderungsdatum vom Original ab. (Beachten Sie hierzu die Option "Vertraue der Größe".) (Dies ist nur bei lokalen Dateien möglich.) + + + + + +&kdiff3; als KPart benutzen +&kdiff3; ist ein KPart. Zur Zeit ist die KParts::ReadOnlyPart-Schnittstelle eingebaut. Der hauptsächliche Verwendungszweck ist zur Zeit als Unterschiede-Betrachter in KDevelop. KDevelop startet zuerst immer den eingebauten Unterschiede-Betrachter. Um KDiff3 zu starten, drücken Sie die rechte Maustaste über dem Unterschiede-Betrachter und wählen dann "In KDiff3Part anzeigen" aus dem Kontextmenü. Normalerweise benötigt &kdiff3; zwei vollständige Eingabedateien. Wenn es allerdings als KPart angewendet wird, nimmt &kdiff3; an, dass die Eingabedatei eine Patch-Datei im unified-Format ist. Dann entnimmt &kdiff3; die Namen der Originaldateien aus der Patch-Datei. Mindestens eine der beiden Dateien muss existieren. Dann startet &kdiff3; das Programm patch um die fehlende Datei wiederherzustellen. Im Konqueror können Sie auf eine Patch-Datei klicken und aus dem Kontextmenü "Vorschau in"-"KDiff3Part" auswählen. Beachten Sie bitte, dass das nicht funktioniert wenn keine der Originaldateien existiert. Ausserdem ist dies unzuverlässig, wenn sich die Originaldateien seit Erzeugung der Patch-Datei verändert haben. Wenn &kdiff3; als Part ausgeführt wird, unterstützt es nur das Vergleichen von zwei Dateien, eine sehr kleine Werkzeugleiste und Menü. Das Zusammenführen oder das Vergleichen von Ordnern wird im KPart-Modus nicht unterstützt. + + + + +Fragen und Antworten +&reporting.bugs; &updating.documentation; + +Warum heisst das Programm "KDiff3"? Werkzeuge mit dem Namen "KDiff" und "KDiff2" (nun heist es "Kompare") gibt es bereits. Ausserdem weist der Name "KDiff3" bereits darauf hin, dass es Zusammenführen kann wie das Programm "diff3" aus der Diff-Tool-Sammlung. + +Warum wurde KDiff3 unter der GPL lizenziert? Ich verwende GPL-Programme schon sehr lange und habe viel gelernt indem ich in die Quellen anderer Programme geschaut habe. Dies ist mein "Dankeschön" an alle Programmierer die diesen Weg gegangen sind oder ihn mal so gehen werden. + +Einige Knöpfe und Funktionen fehlen. Was ist passiert? Sie haben das Programm aus den Quellen kompiliert und dem configure-Skript vermutlich nicht den richtigen Prefix zu KDE mitgeteilt. In der Voreinstellung installiert configure in /usr/local, aber dann kann KDE die Ressourcen für die Benutzerschnittstellen nicht finden (z. B. kdiff3ui.rc). In der README-Datei finden Sie nähere Informationen zu diesem Thema. + +Häufig werden ähnliche, aber nicht identische Zeilen nebeneinander angezeigt, und manchmal nicht. Warum? Wenn nur die Anzahl an "weißen" Zeichen unterschiedlich ist, werden diese Zeilen erstmal als "identisch" behandelt; wenn jedoch auch nur ein "nicht-weißes" Zeichen unterschiedlich ist, wird die Zeile als "nicht identisch" behandelt. If similar lines appear next to each other, this actually is coincidence but this fortunately is often the case. + +Warum müssen alle Konflikte gelöst sein, bevor das Ergebnis gespeichert werden kann? Der Editor merkt sich für jeden Unterschied in den Dateien wo er beginnt und wo er endet. Das ist nötig, um einen Konflikt einfach durch das Klicken in den Quelltext und Auswählen des Knopfes A/B/C lösen zu können. Diese wichtige Information geht allerdings verloren, wenn das Ergebnis einfach als Textdatei gespeichert wird und es ist zuviel Aufwand, extra ein eigenes Dateiformat zu entwerfen, das diese Informationen speichern könnte. + +Warum hat der Editor im Ergebnisfenster einer Zusammenführung keine "Rückgängig"-Funktion? Der Aufwand dafür war bisher zu groß. Sie können eine bestimmte Version immer durch das Auswählen einer Quelle A/B/C wiederherstellen. Um grössere Mengen an Text zu bearbeiten sollte ein anderer Editor verwendet werden. + +Nach dem entfernen von Text ist plötzlich "<No src line>" erschienen und der Text lässt sich nicht löschen. Was bedeutet das und wie kann das entfernt werden? Der Editor merkt sich für jede gleiche und unterschiedliche Sektion wo sie beginnt und wo sie aufhört. "<No src line>" bedeutet, dass in dieser Sektion nichts mehr existiert, nocht nicht mal mehr das Zeichen für den Zeilenvorschub. Soetwas kann beim automatischen Zusammenführen oder beim Editieren passieren und ist kein Problem, denn der Text erscheint nicht in der gespeicherten Datei. Wenn Sie den Originaltext wiederhaben möchten, klicken Sie in die Sektion und wählen die korrekte Quelle A/B/C aus. + +Warum unterstützt KDiff3 keine Syntax-Hervorhebung? KDiff3 benutzt bereits viele Farben zum hervorheben von Unterschieden. Noch mehr Hervorhebung wäre verwirrend und verfehlt den Zweck. Benutzen Sie dafür bitte einen anderen Editor. + +Wird Ihre Frage hier nicht beantwortet? Bitte senden Sie mir Ihre Frage zu. Ich bin dankbar für jeden Kommentar. + + + + + + +Dank und Lizenz + +&kdiff3; - Ein Programm zum vergleichen und zusammenführen von Dateien und Ordnern +Programm-Copyright 2002-2005 Joachim Eibl joachim.eibl at gmx.de +Viele gute Ideen und Fehlerberichte kamen von Kollegen und vielen Leuten aus dem "Wild Wild Web". Vielen Dank! + +Dokumentations-Copyright © 2002-2005 Joachim Eibl joachim.eibl at gmx.de + +Deutsche Ãœbersetzung: Thomas Reitelbach tr@erdfunkstelle.de +&underFDL; &underGPL; + + +Installation + + +Wie Sie &kdiff3; bekommen können + +Sie können die neueste Version von KDiff3 von der Homepage http://kdiff3.sourceforge.net herunterladen. Kdiff3 gibt es auch für andere Plattformen. Besuchen Sie für Details bitte die Homepage. + + + + + +Voraussetzungen + +Um alle Funktionen von &kdiff3; nutzen zu können, benötigen Sie &kde; 3.1 oder neuer. Informationen, wie Sie KDiff3 auf anderen Plattformen ohne KDE benutzen können finden Sie auf der Homepage. Eine Liste der letzten Änderungen finden Sie unter http://kdiff3.sourceforge.net/ChangeLog oder in der Datei "ChangeLog" im Quell-Paket. + + + +Kompilieren und Installation + +Um &kdiff3; auf einem System mit &kde; zu kompilieren und installieren, benutzen Sie folgendes Kommando im Basisordner der &kdiff3;-Distribution: + +% ./configure --prefix=kde-dir +% make +% make install + +kde-dir gibt den Ordner in Ihrem System an, in dem KDE installiert ist. Wenn Sie unsicher sind, finden Sie weitere Details in der README-Datei. +Da &kdiff3; autoconf und automake verwendet, sollten Sie keine Probleme beim Kompilieren haben. Sollten dennoch Schwierigkeiten auftreten, berichten Sie bitte auf den &kde;-Mailinglisten davon. + + + + + +&documentation.index; +
+ + diff --git a/doc/de/iteminfo.png b/doc/de/iteminfo.png new file mode 100644 index 0000000..0b81443 Binary files /dev/null and b/doc/de/iteminfo.png differ diff --git a/doc/de/letter_by_letter.png b/doc/de/letter_by_letter.png new file mode 100644 index 0000000..8ddd48a Binary files /dev/null and b/doc/de/letter_by_letter.png differ diff --git a/doc/de/merge_current.png b/doc/de/merge_current.png new file mode 100644 index 0000000..3f2e341 Binary files /dev/null and b/doc/de/merge_current.png differ diff --git a/doc/de/new.png b/doc/de/new.png new file mode 100644 index 0000000..df3fd25 Binary files /dev/null and b/doc/de/new.png differ diff --git a/doc/de/open_dialog.png b/doc/de/open_dialog.png new file mode 100644 index 0000000..029f8d4 Binary files /dev/null and b/doc/de/open_dialog.png differ diff --git a/doc/de/screenshot_diff.png b/doc/de/screenshot_diff.png new file mode 100644 index 0000000..d2865d5 Binary files /dev/null and b/doc/de/screenshot_diff.png differ diff --git a/doc/de/screenshot_merge.png b/doc/de/screenshot_merge.png new file mode 100644 index 0000000..1eb935b Binary files /dev/null and b/doc/de/screenshot_merge.png differ diff --git a/doc/de/triple_diff.png b/doc/de/triple_diff.png new file mode 100644 index 0000000..c635d14 Binary files /dev/null and b/doc/de/triple_diff.png differ diff --git a/doc/de/white_space.png b/doc/de/white_space.png new file mode 100644 index 0000000..e40a1c7 Binary files /dev/null and b/doc/de/white_space.png differ diff --git a/doc/en/Makefile.am b/doc/en/Makefile.am new file mode 100644 index 0000000..cd97965 --- /dev/null +++ b/doc/en/Makefile.am @@ -0,0 +1,5 @@ +KDE_DOCS = kdiff3 +KDE_LANG = en +man1_MANS=kdiff3.1 + + diff --git a/doc/en/common/appheader.html b/doc/en/common/appheader.html new file mode 100644 index 0000000..8179348 --- /dev/null +++ b/doc/en/common/appheader.html @@ -0,0 +1,36 @@ + + + + + $title ($projectname) + + +
+ + + + + + +
+ + +

$projectname API Documentation

+
+ + + + + + + + + + + + + +
+
+
+
diff --git a/doc/en/common/artistic-license.html b/doc/en/common/artistic-license.html new file mode 100644 index 0000000..2069b4e --- /dev/null +++ b/doc/en/common/artistic-license.html @@ -0,0 +1,165 @@ + + + + The "Artistic License" + + + + + + + + + +

The "Artistic License"

+ +

Preamble

+ +

The intent of this document is to state the conditions under + which a Package may be copied, such that the Copyright Holder + maintains some semblance of artistic control over the + development of the package, while giving the users of the + package the right to use and distribute the Package in a + more-or-less customary fashion, plus the right to make + reasonable modifications.

+ +

Definitions

+ + +

"Package" refers to the collection of files distributed by the + Copyright Holder, and derivatives of that collection of files + created through textual modification.

+ +

"Standard Version" refers to such a Package if it has not been + modified, or has been modified in accordance with the wishes of + the Copyright Holder as specified below.

+ +

"Copyright Holder" is whoever is named in the copyright or + copyrights for the package.

+ +

"You" is you, if you're thinking about copying or distributing + this Package.

+ +

"Reasonable copying fee" is whatever you can justify on the + basis of media cost, duplication charges, time of people + involved, and so on. (You will not be required to justify it to + the Copyright Holder, but only to the computing community at + large as a market that must bear the fee.)

+ +

"Freely Available" means that no fee is charged for the item + itself, though there may be fees involved in handling the + item. It also means that recipients of the item may redistribute + it under the same conditions they received it.

+ + +
    +
  1. You may make and give away verbatim copies of the source + form of the Standard Version of this Package without + restriction, provided that you duplicate all of the original + copyright notices and associated disclaimers.
  2. + +
  3. You may apply bug fixes, portability fixes and other + modifications derived from the Public Domain or from the + Copyright Holder. A Package modified in such a way shall still + be considered the Standard Version.
  4. + +
  5. You may otherwise modify your copy of this Package in any + way, provided that you insert a prominent notice in each + changed file stating how and when you changed that file, and + provided that you do at least ONE of the following: +
      +
    1. place your modifications in the Public Domain or + otherwise make them Freely Available, such as by posting + said modifications to Usenet or an equivalent medium, or + placing the modifications on a major archive site such as + uunet.uu.net, or by allowing the Copyright Holder to + include your modifications in the Standard Version of the + Package.
    2. + +
    3. use the modified Package only within your corporation or + organization.
    4. + +
    5. rename any non-standard executables so the names do not + conflict with standard executables, which must also be + provided, and provide a separate manual page for each + non-standard executable that clearly documents how it + differs from the Standard Version. d. make other + distribution arrangements with the Copyright Holder.
    6. +
    +
  6. +
+ +

You may distribute the programs of this Package in object code + or executable form, provided that you do at least ONE of the + following:

+ +
    +
  1. distribute a Standard Version of the executables and library + files, together with instructions (in the manual page or + equivalent) on where to get the Standard Version.
  2. + +
  3. accompany the distribution with the machine-readable source + of the Package with your modifications.
  4. + +
  5. give non-standard executables non-standard names, and + clearly document the differences in manual pages (or + equivalent), together with instructions on where to get the + Standard Version.
  6. + +
  7. make other distribution arrangements with the Copyright + Holder.
  8. +
+ +

You may charge a reasonable copying fee for any distribution of + this Package. You may charge any fee you choose for support of + this Package. You may not charge a fee for this Package + itself. However, you may distribute this Package in aggregate + with other (possibly commercial) programs as part of a larger + (possibly commercial) software distribution provided that you do + not advertise this Package as a product of your own. You may + embed this Package's interpreter within an executable of yours + (by linking); this shall be construed as a mere form of + aggregation, provided that the complete Standard Version of the + interpreter is so embedded.

+ +

The scripts and library files supplied as input to or produced + as output from the programs of this Package do not automatically + fall under the copyright of this Package, but belong to whomever + generated them, and may be sold commercially, and may be + aggregated with this Package. If such scripts or library files + are aggregated with this Package via the so-called "undump" or + "unexec" methods of producing a binary executable image, then + distribution of such an image shall neither be construed as a + distribution of this Package nor shall it fall under the + restrictions of Paragraphs 3 and 4, provided that you do not + represent such an executable image as a Standard Version of this + Package.

+ +

C subroutines (or comparably compiled subroutines in other + languages) supplied by you and linked into this Package in order + to emulate subroutines and variables of the language defined by + this Package shall not be considered part of this Package, but + are the equivalent of input as in Paragraph 6, provided these + subroutines do not change the language in any way that would + cause it to fail the regression tests for the language.

+ +

Aggregation of this Package with a commercial distribution is + always permitted provided that the use of this Package is + embedded; that is, when no overt attempt is made to make this + Package's interfaces visible to the end user of the commercial + distribution. Such use shall not be construed as a distribution + of this Package.

+ +

The name of the Copyright Holder may not be used to endorse or + promote products derived from this software without specific + prior written permission.

+ +

THIS PACKAGE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR + IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED + WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR + PURPOSE.

+ +
The End
+ + diff --git a/doc/en/common/bottom-left.png b/doc/en/common/bottom-left.png new file mode 100644 index 0000000..254e4f8 Binary files /dev/null and b/doc/en/common/bottom-left.png differ diff --git a/doc/en/common/bottom-middle.png b/doc/en/common/bottom-middle.png new file mode 100644 index 0000000..eddbc9c Binary files /dev/null and b/doc/en/common/bottom-middle.png differ diff --git a/doc/en/common/bottom-right.png b/doc/en/common/bottom-right.png new file mode 100644 index 0000000..178bf3c Binary files /dev/null and b/doc/en/common/bottom-right.png differ diff --git a/doc/en/common/fdl-license.html b/doc/en/common/fdl-license.html new file mode 100644 index 0000000..cb1f8a0 --- /dev/null +++ b/doc/en/common/fdl-license.html @@ -0,0 +1,353 @@ + + + + GNU Free Documentation License - version 1.1 + + + + + + + + + +

GNU Free Documentation License

+ Version 1.1, March 2000 + +

Copyright (C) 2000 Free Software Foundation, Inc. + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+Everyone is permitted to copy and distribute verbatim copies +of this license document, but changing it is not allowed.

+ +

0. Preamble

+ +

The purpose of this License is to make a manual, textbook, or other +written document "free" in the sense of freedom: to assure everyone +the effective freedom to copy and redistribute it, with or without +modifying it, either commercially or noncommercially. Secondarily, +this License preserves for the author and publisher a way to get +credit for their work, while not being considered responsible for +modifications made by others.

+ +

This License is a kind of "copyleft", which means that derivative +works of the document must themselves be free in the same sense. It +complements the GNU General Public License, which is a copyleft +license designed for free software.

+ +

We have designed this License in order to use it for manuals for free +software, because free software needs free documentation: a free +program should come with manuals providing the same freedoms that the +software does. But this License is not limited to software manuals; +it can be used for any textual work, regardless of subject matter or +whether it is published as a printed book. We recommend this License +principally for works whose purpose is instruction or reference.

+ +

1. Applicability And Definitions

+ +

This License applies to any manual or other work that contains a +notice placed by the copyright holder saying it can be distributed +under the terms of this License. The "Document", below, refers to any +such manual or work. Any member of the public is a licensee, and is +addressed as "you".

+ +

A "Modified Version" of the Document means any work containing the +Document or a portion of it, either copied verbatim, or with +modifications and/or translated into another language.

+ +

A "Secondary Section" is a named appendix or a front-matter section of +the Document that deals exclusively with the relationship of the +publishers or authors of the Document to the Document's overall subject +(or to related matters) and contains nothing that could fall directly +within that overall subject. (For example, if the Document is in part a +textbook of mathematics, a Secondary Section may not explain any +mathematics.) The relationship could be a matter of historical +connection with the subject or with related matters, or of legal, +commercial, philosophical, ethical or political position regarding +them.

+ +

The "Invariant Sections" are certain Secondary Sections whose titles +are designated, as being those of Invariant Sections, in the notice +that says that the Document is released under this License.

+ +

The "Cover Texts" are certain short passages of text that are listed, +as Front-Cover Texts or Back-Cover Texts, in the notice that says that +the Document is released under this License.

+ +

A "Transparent" copy of the Document means a machine-readable copy, +represented in a format whose specification is available to the +general public, whose contents can be viewed and edited directly and +straightforwardly with generic text editors or (for images composed of +pixels) generic paint programs or (for drawings) some widely available +drawing editor, and that is suitable for input to text formatters or +for automatic translation to a variety of formats suitable for input +to text formatters. A copy made in an otherwise Transparent file +format whose markup has been designed to thwart or discourage +subsequent modification by readers is not Transparent. A copy that is +not "Transparent" is called "Opaque".

+ +

Examples of suitable formats for Transparent copies include plain +ASCII without markup, Texinfo input format, LaTeX input format, SGML +or XML using a publicly available DTD, and standard-conforming simple +HTML designed for human modification. Opaque formats include +PostScript, PDF, proprietary formats that can be read and edited only +by proprietary word processors, SGML or XML for which the DTD and/or +processing tools are not generally available, and the +machine-generated HTML produced by some word processors for output +purposes only.

+ +

The "Title Page" means, for a printed book, the title page itself, +plus such following pages as are needed to hold, legibly, the material +this License requires to appear in the title page. For works in +formats which do not have any title page as such, "Title Page" means +the text near the most prominent appearance of the work's title, +preceding the beginning of the body of the text.

+ +

2. Verbatim Copying

+ +

You may copy and distribute the Document in any medium, either +commercially or noncommercially, provided that this License, the +copyright notices, and the license notice saying this License applies +to the Document are reproduced in all copies, and that you add no other +conditions whatsoever to those of this License. You may not use +technical measures to obstruct or control the reading or further +copying of the copies you make or distribute. However, you may accept +compensation in exchange for copies. If you distribute a large enough +number of copies you must also follow the conditions in section 3.

+ +

You may also lend copies, under the same conditions stated above, and +you may publicly display copies.

+ +

3. Copying In Quantity

+ +

If you publish printed copies of the Document numbering more than 100, +and the Document's license notice requires Cover Texts, you must enclose +the copies in covers that carry, clearly and legibly, all these Cover +Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on +the back cover. Both covers must also clearly and legibly identify +you as the publisher of these copies. The front cover must present +the full title with all words of the title equally prominent and +visible. You may add other material on the covers in addition. +Copying with changes limited to the covers, as long as they preserve +the title of the Document and satisfy these conditions, can be treated +as verbatim copying in other respects.

+ +

If the required texts for either cover are too voluminous to fit +legibly, you should put the first ones listed (as many as fit +reasonably) on the actual cover, and continue the rest onto adjacent +pages.

+ +

If you publish or distribute Opaque copies of the Document numbering +more than 100, you must either include a machine-readable Transparent +copy along with each Opaque copy, or state in or with each Opaque copy +a publicly-accessible computer-network location containing a complete +Transparent copy of the Document, free of added material, which the +general network-using public has access to download anonymously at no +charge using public-standard network protocols. If you use the latter +option, you must take reasonably prudent steps, when you begin +distribution of Opaque copies in quantity, to ensure that this +Transparent copy will remain thus accessible at the stated location +until at least one year after the last time you distribute an Opaque +copy (directly or through your agents or retailers) of that edition to +the public.

+ +

It is requested, but not required, that you contact the authors of the +Document well before redistributing any large number of copies, to give +them a chance to provide you with an updated version of the Document.

+ +

4. Modifications

+ +

You may copy and distribute a Modified Version of the Document under +the conditions of sections 2 and 3 above, provided that you release +the Modified Version under precisely this License, with the Modified +Version filling the role of the Document, thus licensing distribution +and modification of the Modified Version to whoever possesses a copy +of it. In addition, you must do these things in the Modified Version:

+ +
    +
  1. Use in the Title Page (and on the covers, if any) a title distinct + from that of the Document, and from those of previous versions + (which should, if there were any, be listed in the History section + of the Document). You may use the same title as a previous + version if the original publisher of that version gives + permission.
  2. + +
  3. List on the Title Page, as authors, one or more persons or + entities responsible for authorship of the modifications in the + Modified Version, together with at least five of the principal + authors of the Document (all of its principal authors, if it has + less than five).
  4. + +
  5. State on the Title page the name of the publisher of the Modified + Version, as the publisher.
  6. + +
  7. Preserve all the copyright notices of the Document.
  8. + +
  9. Add an appropriate copyright notice for your modifications + adjacent to the other copyright notices.
  10. + +
  11. Include, immediately after the copyright notices, a license notice + giving the public permission to use the Modified Version under the + terms of this License, in the form shown in the Addendum + below.
  12. + +
  13. Preserve in that license notice the full lists of Invariant + Sections and required Cover Texts given in the Document's license + notice.
  14. + +
  15. Include an unaltered copy of this License.
  16. + +
  17. Preserve the section entitled "History", and its title, and add to + it an item stating at least the title, year, new authors, and + publisher of the Modified Version as given on the Title Page. If + there is no section entitled "History" in the Document, create one + stating the title, year, authors, and publisher of the Document as + given on its Title Page, then add an item describing the Modified + Version as stated in the previous sentence.
  18. + +
  19. Preserve the network location, if any, given in the Document for + public access to a Transparent copy of the Document, and likewise + the network locations given in the Document for previous versions + it was based on. These may be placed in the "History" section. + You may omit a network location for a work that was published at + least four years before the Document itself, or if the original + publisher of the version it refers to gives permission.
  20. + +
  21. In any section entitled "Acknowledgements" or "Dedications", + preserve the section's title, and preserve in the section all the + substance and tone of each of the contributor acknowledgements + and/or dedications given therein.
  22. + +
  23. Preserve all the Invariant Sections of the Document, unaltered in + their text and in their titles. Section numbers or the equivalent + are not considered part of the section titles.
  24. + +
  25. Delete any section entitled "Endorsements". Such a section may + not be included in the Modified Version.
  26. + +
  27. Do not retitle any existing section as "Endorsements" or to + conflict in title with any Invariant Section.
  28. +
+ +

If the Modified Version includes new front-matter sections or +appendices that qualify as Secondary Sections and contain no material +copied from the Document, you may at your option designate some or all +of these sections as invariant. To do this, add their titles to the +list of Invariant Sections in the Modified Version's license notice. +These titles must be distinct from any other section titles.

+ +

You may add a section entitled "Endorsements", provided it contains +nothing but endorsements of your Modified Version by various +parties--for example, statements of peer review or that the text has +been approved by an organization as the authoritative definition of a +standard.

+ +

You may add a passage of up to five words as a Front-Cover Text, and a +passage of up to 25 words as a Back-Cover Text, to the end of the list +of Cover Texts in the Modified Version. Only one passage of +Front-Cover Text and one of Back-Cover Text may be added by (or +through arrangements made by) any one entity. If the Document already +includes a cover text for the same cover, previously added by you or +by arrangement made by the same entity you are acting on behalf of, +you may not add another; but you may replace the old one, on explicit +permission from the previous publisher that added the old one.

+ +

The author(s) and publisher(s) of the Document do not by this License +give permission to use their names for publicity for or to assert or +imply endorsement of any Modified Version.

+ +

5. Combining Documents

+ +

You may combine the Document with other documents released under this +License, under the terms defined in section 4 above for modified +versions, provided that you include in the combination all of the +Invariant Sections of all of the original documents, unmodified, and +list them all as Invariant Sections of your combined work in its +license notice.

+ +

The combined work need only contain one copy of this License, and +multiple identical Invariant Sections may be replaced with a single +copy. If there are multiple Invariant Sections with the same name but +different contents, make the title of each such section unique by +adding at the end of it, in parentheses, the name of the original +author or publisher of that section if known, or else a unique number. +Make the same adjustment to the section titles in the list of +Invariant Sections in the license notice of the combined work.

+ +

In the combination, you must combine any sections entitled "History" +in the various original documents, forming one section entitled +"History"; likewise combine any sections entitled "Acknowledgements", +and any sections entitled "Dedications". You must delete all sections +entitled "Endorsements."

+ +

6. Collections Of Documents

+ +

You may make a collection consisting of the Document and other documents +released under this License, and replace the individual copies of this +License in the various documents with a single copy that is included in +the collection, provided that you follow the rules of this License for +verbatim copying of each of the documents in all other respects.

+ +

You may extract a single document from such a collection, and distribute +it individually under this License, provided you insert a copy of this +License into the extracted document, and follow this License in all +other respects regarding verbatim copying of that document.

+ +

7. Aggregation With Independent Works

+ +

A compilation of the Document or its derivatives with other separate +and independent documents or works, in or on a volume of a storage or +distribution medium, does not as a whole count as a Modified Version +of the Document, provided no compilation copyright is claimed for the +compilation. Such a compilation is called an "aggregate", and this +License does not apply to the other self-contained works thus compiled +with the Document, on account of their being thus compiled, if they +are not themselves derivative works of the Document.

+ +

If the Cover Text requirement of section 3 is applicable to these +copies of the Document, then if the Document is less than one quarter +of the entire aggregate, the Document's Cover Texts may be placed on +covers that surround only the Document within the aggregate. +Otherwise they must appear on covers around the whole aggregate.

+ +

8. Translation

+ +

Translation is considered a kind of modification, so you may +distribute translations of the Document under the terms of section 4. +Replacing Invariant Sections with translations requires special +permission from their copyright holders, but you may include +translations of some or all Invariant Sections in addition to the +original versions of these Invariant Sections. You may include a +translation of this License provided that you also include the +original English version of this License. In case of a disagreement +between the translation and the original English version of this +License, the original English version will prevail.

+ +

9. Termination

+ +

You may not copy, modify, sublicense, or distribute the Document except +as expressly provided for under this License. Any other attempt to +copy, modify, sublicense or distribute the Document 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.

+ +

10. Future Revisions Of This License

+ +

The Free Software Foundation may publish new, revised versions +of the GNU Free Documentation 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. See +http:///www.gnu.org/copyleft/.

+ +

Each version of the License is given a distinguishing version number. +If the Document specifies that a particular numbered version of this +License "or any later version" applies to it, you have the option of +following the terms and conditions either of that specified version or +of any later version that has been published (not as a draft) by the +Free Software Foundation. If the Document does not specify a version +number of this License, you may choose any version ever published (not +as a draft) by the Free Software Foundation.

+ + diff --git a/doc/en/common/fdl-notice.html b/doc/en/common/fdl-notice.html new file mode 100644 index 0000000..44a1c6c --- /dev/null +++ b/doc/en/common/fdl-notice.html @@ -0,0 +1,15 @@ + + +FDL Notice + + + + +

Permission is granted to copy, distribute and/or modify this document +under the terms of the GNU Free Documentation License, Version 1.1 or any +later version published by the Free Software Foundation; with no Invariant +Sections, with no Front-Cover Texts, and with no Back-Cover Texts. A copy +of the license is included here.

+ + + diff --git a/doc/en/common/footer.html b/doc/en/common/footer.html new file mode 100644 index 0000000..b06dfb8 --- /dev/null +++ b/doc/en/common/footer.html @@ -0,0 +1,65 @@ +
+ + + + + + + + + + + + + + + + + KDE Home | + KDE Accessibility Home | + Description of Access Keys + + + +
+ + + + + + + + diff --git a/doc/en/common/gpl-license.html b/doc/en/common/gpl-license.html new file mode 100644 index 0000000..26ae3af --- /dev/null +++ b/doc/en/common/gpl-license.html @@ -0,0 +1,381 @@ + + + + GNU General Public License + + + + + + + + + +

GNU General Public License

+

Version 2, June 1991

+ +

Copyright (C) 1989, 1991 Free Software Foundation, Inc. +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 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:

+ +
    +
  1. +

    You must cause the modified files to carry prominent notices +stating that you changed the files and the date of any change.

    +
  2. + +
  3. +

    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.

    +
  4. + +
  5. +

    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.)

    +
  6. +
+ +

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:

+ +
    +
  1. +

    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,

    +
  2. + +
  3. +

    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,

    +
  4. + +
  5. +

    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.)

    +
  6. +
+ +

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.

+ + +
    <one line to give the program's name and a brief idea of what it does.>
+    Copyright (C) 19yy  <name of author>
+
+    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., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  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) 19yy 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.
+
+  <signature of Ty Coon>, 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.

+ + + + + diff --git a/doc/en/common/header.html b/doc/en/common/header.html new file mode 100644 index 0000000..df06da8 --- /dev/null +++ b/doc/en/common/header.html @@ -0,0 +1,56 @@ + + + + + + $title ($projectname) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + diff --git a/doc/en/common/headerbg.png b/doc/en/common/headerbg.png new file mode 100644 index 0000000..b72738a Binary files /dev/null and b/doc/en/common/headerbg.png differ diff --git a/doc/en/common/kde-default.css b/doc/en/common/kde-default.css new file mode 100644 index 0000000..35e9d4d --- /dev/null +++ b/doc/en/common/kde-default.css @@ -0,0 +1,327 @@ +/* + KDE-wide default CSS for HTML documentation (all media types). + Copyright (C) 2000 Frederik Fouvry + + 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + + Send comments, suggestions, etc. to Frederik Fouvry + . */ + +/* + Important note: these setting may be overridden by localised CSS. Do not + add here any localization-sensitive style declarations. + + Any updates should be validated, e.g. http://jigsaw.w3.org/css-validator/ */ + +/* Note: "should be inherit" means that in a proper browser inherit should work. + Somehow Netscape manages to interpret "inherit" as bright green. + Yuck. */ + +body { + background: white none; + color: black; + font-family: sans-serif; + padding: 0; + margin: 0; +} + +.legalnotice, .copyright { + padding: 0; + margin: 0; +} + +.abstract { + font-weight: bolder; + padding-right: 1em; +} + +.toc, .list-of-tables { + padding-left: 1em; +} + +.sect1, .chapter, .synopsis, .appendix, .preface, .article, .refsect1, .index, .glossary, .section { + padding: 1em; +} + +.toc .chapter { +padding: 0em 0em 0em 1em; +} + +.author { + color: rgb(82,80,82); + font-weight: bolder; + padding: 0; + margin: 0; +} + +.othercredit { + line-height: 1em; +} + +.chapter .sect1, .chapter .titlepage, .sect1 .titlepage, .article .titlepage { + padding: 0em; +} + +.titlepage { + padding-left: 1em; + padding-right: 1em; +} + +/* Links in Navigation */ + +.navLeft a:link, .navCenter a:link, .navRight a:link, .header a:link, .header a:visited, .bottom-nav a:link, .bottom-nav a:visited { + color: #41597A; + font-weight: bold; +} + + +/* Nice link colors for the main text */ + +:link { + color: #41597A; +} + +:visited { + color: #597ba8; +} + +.navLeft { + position: absolute; + left: 20px; +} + +.navRight { + position: absolute; + right: 20px; +} + +.navCenter { + text-align: center; + align: center; +} + +.bannerBottomLeft { + position: absolute; left: 0px; +} + +.bannerBottomRight { + position: absolute; right: 0px; +} + +.header { + background: #3E91EB none; + border-bottom: 1px solid #206dcd; + border-top: 1px solid white; + color: white; + font-size: small; + height: 1.7em; + line-height: 1em; + margin: 0px; + padding-bottom: 0px; + padding-left: 1em; + padding-right: 0px; + padding-top: 0px; + vertical-align: middle; +} + +.bottom-nav { + background-color: #3E91EB; + border-bottom: 1px solid #206dcd; + border-top: 1px solid white; + color: white; + font-size: small; + height: 1.7em; + line-height: 1em; + margin: 0px; + padding-bottom: 0px; + padding-left: 1em; + padding-right: 0px; + padding-top: 10px; + vertical-align: middle; +} + +#logo { + background: url('kde_logo_bg.png') transparent repeat; +} + +/* A little bit of padding makes the tables for keybindings etc much easier to read */ + +table { + padding: 5px; +} + +dl { + margin-top: 0em; + margin-bottom: 0.5em; +} + +dt { + margin-top: 1em; +} +div.toc dt { + margin-top: 0px; +} +div.screenshot { + margin-bottom: 1em; + margin-top: 1em; +} + +div.informalexample { + border-style: dotted; + padding: 10px; +} + +/* But no padding for navigation elements */ + +.toplogo, .navbackground { + padding: 0px; +} + +table.programlisting +table.screen { + border-style: none; + background-color: rgb(224,224,224); + table-layout: auto; /* 100%? */ + color: rgb(0,0,0); /* should be inherit */ +} + +/* Same as previous block, but more general (previous is HTML only) + Not all browsers understand this yet. + TABLE[class~=programlisting] + TABLE[class~=screen] { border-style: none; + background-color: rgb(224,224,224); + table-layout: auto; + color: inherit; +} +*/ + +p { + text-align: justify; +} + +/* More specific settings */ +/* Temporary patch: browsers break on bad HTML */ +/* P, H1, H2, H3, H4, H5, TD, TH { font-family: Helvetica, Arial, sans-serif; + } */ + +p, h1, h2, h3, h4, h5, h6, td, th { + font-family: sans-serif; +} + +/* Visual cues for GUI elements etc in the text */ + +.guimenu, .guimenuitem, .guisubmenu { + background-color: rgb(250,250,250); + color: rgb(0,0,0); /* should be inherit */ +} + +.guilabel, .interface, .guibutton { + background-color: rgb(250,250,250); + color: rgb(0,0,0); /* should be inherit */ +} + +.shortcut { + background-color: rgb(250,250,250); + color: rgb(0,0,0); /* should be inherit */ +} + +.shortcut .keycap { + background-color: rgb(250,250,250); + color: rgb(0,0,0); /* should be inherit */ +} + +.question { + font-weight: bolder; +} + +.accel { + background-color: rgb(250,250,250); + color: rgb(0,0,0); + text-decoration: underline; +} + +.option, .command { + background-color: rgb(255,255,255); + color: rgb(0,96,160); + font-weight: bold; +} + +h1, h2, h3, h4, h5, h6 { + color: rgb(82,80,82); + background-color: transparent; +} + +.arg, .parameter, .replaceable { + background-color: rgb(255,255,255); + color: rgb(0,128,64); + font-style: italic; +} + +.screen, .programlisting { + background-color: rgb(250,250,250); + color: rgb(0,0,0); /* should be inherit */ + border-style: dotted; + border-color: rgb(0,0,0); + border-width: thin; + padding: 5px; +} + + +/* This one is set in inches because the admonitions are set in inches + and they're more difficult to change. We can live with it in here, + for the meantime, it gives consistent margins */ + +.example { + margin-left: 0.5in; + margin-right: 0.5in; +} + +div.mediaobject { + /* float: right; */ + /* might make it much nicer. although someone has to + understand the rules ;-) You also don't want it to be + surrounded by text it doesn't refer to ... But that + may be among others a question of writing style. */ + text-align: center; /* a bit of a hack: it should + position _images_ */ +} + +.caption { + margin: 0em 2em 3em 2em; + text-align: center; +} + +.inlinemediaobject { + vertical-align: baseline; + padding-right: 1em; + padding-left: 1em; +} + +/* An idea that could be nice: a search engine looking for specific +classes could display them in some conspicuous color. All that is +needed is an on the fly generated style element/style sheet. */ + +/* Only used in the hand-made HTML license texts */ +body.license { + background-color: rgb(255,255,255); + text-align: justify; + color: rgb(0,0,0); +} +pre.license { + background-color: rgb(255,255,255); + font-family: monospace; + color: rgb(0,0,0); +} + diff --git a/doc/en/common/kde-localised.css.template b/doc/en/common/kde-localised.css.template new file mode 100644 index 0000000..abcd1ec --- /dev/null +++ b/doc/en/common/kde-localised.css.template @@ -0,0 +1,32 @@ +/* + KDE CSS for <**languagecountry**> HTML documentation (all media types). + Copyright (C) 2000 <**authorname**> + + 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + + Send comments, suggestions, etc. to <**authorcontactdetails**>. +*/ + +/* + These settings will override kde-default.css. + + Any updates should be validated, e.g. http://jigsaw.w3.org/css-validator/ + + Check out http://www.richinstyle.com/ where many of the declarations and + setup in the KDE CSS are obtained from. In fact, do not change anything + without checking so on those pages whether it is wise to do. +*/ + +:lg(**language**) { } diff --git a/doc/en/common/kde_gear_64.png b/doc/en/common/kde_gear_64.png new file mode 100644 index 0000000..ee74c3b Binary files /dev/null and b/doc/en/common/kde_gear_64.png differ diff --git a/doc/en/common/kde_logo_bg.png b/doc/en/common/kde_logo_bg.png new file mode 100644 index 0000000..5ab7542 Binary files /dev/null and b/doc/en/common/kde_logo_bg.png differ diff --git a/doc/en/common/mainfooter.html b/doc/en/common/mainfooter.html new file mode 100644 index 0000000..a2d753e --- /dev/null +++ b/doc/en/common/mainfooter.html @@ -0,0 +1,68 @@ +
+ + +
+ + + + +
+ +
+This file is part of the documentation for $projectname $projectnumber.
+Documentation copyright © 1996-2005 the KDE developers.
+Generated on $datetime by +doxygen $doxygenversion written +by Dimitri van Heesch, © 1997-2003 +

+KDE's Doxygen guidelines are available online. +Questions about the reference manuals should be sent to +Adriaan de Groot +or +Allen Winter. +

+
+ +
 
+ + + + KDE Home | + KDE Accessibility Home | + Description of Access Keys + + + +
+ + + + + + + + diff --git a/doc/en/common/mainheader.html b/doc/en/common/mainheader.html new file mode 100644 index 0000000..4ea02fe --- /dev/null +++ b/doc/en/common/mainheader.html @@ -0,0 +1,70 @@ + + + + + + $projectname + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + " + +#: optiondialog.cpp:1075 +msgid "" +"Assume that files are equal if the modification date and file length are " +"equal.\n" +"Useful for big directories or slow networks." +msgstr "" + +#: optiondialog.cpp:1078 +msgid "Trust the size (unsafe)" +msgstr "" + +#: optiondialog.cpp:1079 +msgid "" +"Assume that files are equal if their file lengths are equal.\n" +"Useful for big directories or slow networks when the date is modified during " +"download." +msgstr "" + +#: optiondialog.cpp:1083 +#, fuzzy +msgid "Synchronize directories" +msgstr "Ðе вдаєтьÑÑ Ñ€Ð¾Ð·Ð¼Ñ–Ñтити файл; неможливо Ñтворювати теки." + +#: optiondialog.cpp:1086 +msgid "" +"Offers to store files in both directories so that\n" +"both directories are the same afterwards.\n" +"Works only when comparing two directories without specifying a destination." +msgstr "" + +#: optiondialog.cpp:1092 +msgid "White space differences considered equal" +msgstr "" + +#: optiondialog.cpp:1095 +msgid "" +"If files differ only by white space consider them equal.\n" +"This is only active when full analysis is chosen." +msgstr "" + +#: optiondialog.cpp:1101 +msgid "Copy newer instead of merging (unsafe)" +msgstr "" + +#: optiondialog.cpp:1104 +msgid "" +"Don't look inside, just take the newer file.\n" +"(Use this only if you know what you are doing!)\n" +"Only effective when comparing two directories." +msgstr "" + +#: optiondialog.cpp:1109 +#, fuzzy +msgid "Backup files (.orig)" +msgstr "Файли резерву:" + +#: optiondialog.cpp:1112 +msgid "" +"When a file would be saved over an old file, then the old file\n" +"will be renamed with a '.orig'-extension instead of being deleted." +msgstr "" + +#: optiondialog.cpp:1176 +#, fuzzy +msgid "Regional Settings" +msgstr "Регіональні параметри" + +#: optiondialog.cpp:1272 +msgid "Language (restart required)" +msgstr "" + +#: optiondialog.cpp:1304 +msgid "" +"Choose the language of the GUI-strings or \"Auto\".\n" +"For a change of language to take place, quit and restart KDiff3." +msgstr "" + +#: optiondialog.cpp:1322 +msgid "Use the same encoding for everything:" +msgstr "" + +#: optiondialog.cpp:1325 +msgid "" +"Enable this allows to change all encodings by changing the first only.\n" +"Disable this if different individual settings are needed." +msgstr "" + +#: optiondialog.cpp:1330 +msgid "Note: Local Encoding is " +msgstr "" + +#: optiondialog.cpp:1334 +#, fuzzy +msgid "File Encoding for A:" +msgstr "ÐŸÐ¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ Ð¿Ñ€Ð¾ кодуваннÑ" + +#: optiondialog.cpp:1340 +msgid "" +"If enabled then Unicode (UTF-16 or UTF-8) encoding will be detected.\n" +"If the file encoding is not detected then the selected encoding will be used as " +"fallback.\n" +"(Unicode detection depends on the first bytes of a file - the byte order mark " +"\"BOM\".)" +msgstr "" + +#: optiondialog.cpp:1344 optiondialog.cpp:1353 optiondialog.cpp:1362 +msgid "Auto Detect Unicode" +msgstr "" + +#: optiondialog.cpp:1349 +#, fuzzy +msgid "File Encoding for B:" +msgstr "ÐŸÐ¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ Ð¿Ñ€Ð¾ кодуваннÑ" + +#: optiondialog.cpp:1358 +#, fuzzy +msgid "File Encoding for C:" +msgstr "ÐŸÐ¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ Ð¿Ñ€Ð¾ кодуваннÑ" + +#: optiondialog.cpp:1367 +msgid "File Encoding for Merge Output and Saving:" +msgstr "" + +#: optiondialog.cpp:1371 +#, fuzzy +msgid "Auto Select" +msgstr "Щоб вибрати, потÑгніть при натиÑнутій лівій кнопці." + +#: optiondialog.cpp:1374 +msgid "" +"If enabled then the encoding from the input files is used.\n" +"In ambiguous cases a dialog will ask the user to choose the encoding for " +"saving." +msgstr "" + +#: optiondialog.cpp:1378 +msgid "File Encoding for Preprocessor Files:" +msgstr "" + +#: optiondialog.cpp:1389 +msgid "Right To Left Language" +msgstr "" + +#: optiondialog.cpp:1392 +msgid "" +"Some languages are read from right to left.\n" +"This setting will change the viewer and editor accordingly." +msgstr "" + +#: optiondialog.cpp:1402 +msgid "Integration" +msgstr "ІнтеграціÑ" + +#: optiondialog.cpp:1402 +msgid "Integration Settings" +msgstr "Параметри інтеграції" + +#: optiondialog.cpp:1412 +#, fuzzy +msgid "Command line options to ignore:" +msgstr "" +"ВикориÑтовуйте --help щоб отримати ÑпиÑок можливих опцій командної Ñтроки." + +#: optiondialog.cpp:1417 +msgid "" +"List of command line options that should be ignored when KDiff3 is used by " +"other tools.\n" +"Several values can be specified if separated via ';'\n" +"This will suppress the \"Unknown option\"-error." +msgstr "" + +#: optiondialog.cpp:1480 +msgid "" +"You selected a variable width font.\n" +"\n" +"Because this program doesn't handle variable width fonts\n" +"correctly, you might experience problems while editing.\n" +"\n" +"Do you want to continue or do you want to select another font." +msgstr "" + +#: optiondialog.cpp:1484 +#, fuzzy +msgid "Incompatible Font" +msgstr "%1 неÑуміÑне з %2" + +#: optiondialog.cpp:1485 +msgid "Continue at Own Risk" +msgstr "" + +#: optiondialog.cpp:1485 +#, fuzzy +msgid "Select Another Font" +msgstr "Виберіть будь-Ñкі інші втулки:" + +#: optiondialog.cpp:1521 +msgid "This resets all options. Not only those of the current topic." +msgstr "" + +#: pdiff.cpp:258 +#, fuzzy +msgid "PreprocessorCmd: " +msgstr "Перед-переглÑд (тип 1)" + +#: pdiff.cpp:263 +msgid "" +"The following option(s) you selected might change data:\n" +msgstr "" + +#: pdiff.cpp:264 +#, fuzzy +msgid "" +"\n" +"Most likely this is not wanted during a merge.\n" +"Do you want to disable these settings or continue with these settings active?" +msgstr "" +"Ввімкніть цей параметр, Ñкщо не хочете щоб при з'єднанні з машиною Ð’Ð°Ñ " +"запитували про уÑтановки. Ð”Ð»Ñ Ð¼Ð°ÑˆÐ¸Ð½ з Ñ–Ñнуючими профілÑми ці профілі будуть " +"взÑÑ‚Ñ–. Ðові машини будуть налаштовані типовими значеннÑми." + +#: pdiff.cpp:266 +msgid "Option Unsafe for Merging" +msgstr "" + +#: pdiff.cpp:267 +msgid "Use These Options During Merge" +msgstr "" + +#: pdiff.cpp:267 +msgid "Disable Unsafe Options" +msgstr "" + +#: pdiff.cpp:297 +msgid "Loading A" +msgstr "Ð—Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ A" + +#: pdiff.cpp:301 +msgid "Loading B" +msgstr "Ð—Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ B" + +#: pdiff.cpp:318 pdiff.cpp:344 +msgid "Diff: A <-> B" +msgstr "" + +#: pdiff.cpp:324 pdiff.cpp:366 +msgid "Linediff: A <-> B" +msgstr "" + +#: pdiff.cpp:335 +msgid "Loading C" +msgstr "Ð—Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ C" + +#: pdiff.cpp:347 +msgid "Diff: B <-> C" +msgstr "" + +#: pdiff.cpp:350 +msgid "Diff: A <-> C" +msgstr "" + +#: pdiff.cpp:369 +msgid "Linediff: B <-> C" +msgstr "" + +#: pdiff.cpp:372 +msgid "Linediff: A <-> C" +msgstr "" + +#: pdiff.cpp:513 +msgid "All input files contain the same text, but are not binary equal." +msgstr "" + +#: pdiff.cpp:515 pdiff.cpp:517 pdiff.cpp:519 +msgid "" +"Files %1 and %2 are binary equal.\n" +msgstr "" + +#: pdiff.cpp:516 pdiff.cpp:518 pdiff.cpp:520 +msgid "" +"Files %1 and %2 have equal text, but are not binary equal. \n" +msgstr "" + +#: pdiff.cpp:530 +msgid "" +"Some inputfiles don't seem to be pure textfiles.\n" +"Note that the KDiff3-merge was not meant for binary data.\n" +"Continue at your own risk." +msgstr "" + +#: pdiff.cpp:979 +msgid "Abort" +msgstr "Перервати" + +#: pdiff.cpp:985 pdiff.cpp:1073 +msgid "Opening files..." +msgstr "Ð’Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ñ‚Ñ Ñ„Ð°Ð¹Ð»Ñ–Ð²..." + +#: pdiff.cpp:1050 pdiff.cpp:1121 +msgid "File open error" +msgstr "Помилка Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ñ‚Ñ Ñ„Ð°Ð¹Ð»Ð°" + +#: pdiff.cpp:1153 +msgid "Cutting selection..." +msgstr "Ð’Ð¸Ñ€Ñ–Ð·Ð°Ð½Ð½Ñ Ð²Ð¸Ð±Ñ€Ð°Ð½Ð¾Ð³Ð¾..." + +#: pdiff.cpp:1174 +msgid "Copying selection to clipboard..." +msgstr "ÐšÐ¾Ð¿Ñ–ÑŽÐ²Ð°Ð½Ð½Ñ Ð²Ð¸Ð±Ñ€Ð°Ð½Ð¾Ð³Ð¾ до кишені..." + +#: pdiff.cpp:1190 +msgid "Inserting clipboard contents..." +msgstr "Ð’ÑÑ‚Ð°Ð²Ð»ÐµÐ½Ð½Ñ Ð²Ð¼Ñ–Ñту кишені..." + +#: pdiff.cpp:1713 +msgid "Save && Continue" +msgstr "Зберегти й продовжити" + +#: pdiff.cpp:1713 +msgid "Continue Without Saving" +msgstr "Продовжити без збереженнÑ" + +#: pdiff.cpp:1920 +msgid "Search complete." +msgstr "Пошук завершено." + +#: pdiff.cpp:1920 +msgid "Search Complete" +msgstr "Пошук завершено" + +#: pdiff.cpp:2144 +msgid "Nothing is selected in either diff input window." +msgstr "" + +#: pdiff.cpp:2144 +#, fuzzy +msgid "Error while adding manual diff range" +msgstr "Помилка Ð´Ð¾Ð´Ð°Ð²Ð°Ð½Ð½Ñ Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð´Ð¾ теки %1 в KMail" + +#. i18n: file kdiff3_part.rc line 4 +#: rc.cpp:3 +#, no-c-format +msgid "&KDiff3" +msgstr "&KDiff3" + +#. i18n: file kdiff3_part.rc line 13 +#: rc.cpp:6 +#, no-c-format +msgid "Configure KDiff3" +msgstr "Ðалаштувати KDiff3" + +#. i18n: file kdiff3_shell.rc line 7 +#: rc.cpp:15 +#, no-c-format +msgid "&Directory" +msgstr "&Каталог" + +#. i18n: file kdiff3_shell.rc line 30 +#: rc.cpp:18 +#, fuzzy, no-c-format +msgid "Current Item Merge Operation" +msgstr "Припинити поточну дію" + +#. i18n: file kdiff3_shell.rc line 38 +#: rc.cpp:21 +#, fuzzy, no-c-format +msgid "Current Item Sync Operation" +msgstr "Припинити поточну дію" + +#. i18n: file kdiff3_shell.rc line 50 +#: rc.cpp:24 +#, fuzzy, no-c-format +msgid "&Movement" +msgstr "&Мінімальний рух:" + +#. i18n: file kdiff3_shell.rc line 61 +#: rc.cpp:27 +#, no-c-format +msgid "D&iffview" +msgstr "" + +#. i18n: file kdiff3_shell.rc line 73 +#: rc.cpp:30 +#, no-c-format +msgid "&Merge" +msgstr "&Об'єднати" + +#. i18n: file kdiff3_shell.rc line 95 +#: rc.cpp:33 +#, no-c-format +msgid "&Window" +msgstr "&Вікно" + +#: smalldialogs.cpp:53 +msgid "A (Base):" +msgstr "" + +#: smalldialogs.cpp:59 smalldialogs.cpp:75 smalldialogs.cpp:91 +#: smalldialogs.cpp:134 +msgid "File..." +msgstr "Файл..." + +#: smalldialogs.cpp:61 smalldialogs.cpp:77 smalldialogs.cpp:93 +#: smalldialogs.cpp:136 +msgid "Dir..." +msgstr "Каталог..." + +#: smalldialogs.cpp:86 +#, fuzzy +msgid "C (Optional):" +msgstr "Лоток 3 (додатковий)" + +#: smalldialogs.cpp:108 +msgid "Swap/Copy Names ..." +msgstr "" + +#: smalldialogs.cpp:114 smalldialogs.cpp:115 smalldialogs.cpp:116 +msgid "Swap %1<->%2" +msgstr "" + +#: smalldialogs.cpp:117 smalldialogs.cpp:118 smalldialogs.cpp:119 +msgid "Copy %1->Output" +msgstr "" + +#: smalldialogs.cpp:120 smalldialogs.cpp:121 smalldialogs.cpp:122 +msgid "Swap %1<->Output" +msgstr "" + +#: smalldialogs.cpp:129 +#, fuzzy +msgid "Output (optional):" +msgstr "Коментар (не обов'Ñзковий):" + +#: smalldialogs.cpp:158 +msgid "Configure..." +msgstr "Ðалаштувати..." + +#: smalldialogs.cpp:347 +msgid "Search text:" +msgstr "Знайти текÑÑ‚:" + +#: smalldialogs.cpp:354 +#, fuzzy +msgid "Case sensitive" +msgstr "РегіÑтрова чутливіÑÑ‚ÑŒ" + +#: smalldialogs.cpp:357 +msgid "Search A" +msgstr "Пошук в A" + +#: smalldialogs.cpp:362 +msgid "Search B" +msgstr "Пошук в B" + +#: smalldialogs.cpp:367 +msgid "Search C" +msgstr "Пошук в C" + +#: smalldialogs.cpp:372 +msgid "Search output" +msgstr "Пошук у виводі" + +#: smalldialogs.cpp:377 +msgid "&Search" +msgstr "&Пошук" + +#: smalldialogs.cpp:394 +#, fuzzy +msgid "Regular Expression Tester" +msgstr "Помилка Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ Ñ„Ð¾Ñ€Ð¼Ð°Ð»ÑŒÐ½Ð¾Ð³Ð¾ виразу з XML" + +#: smalldialogs.cpp:405 +msgid "Example auto merge line:" +msgstr "" + +#: smalldialogs.cpp:407 +msgid "For auto merge test copy a line as used in your files." +msgstr "" + +#: smalldialogs.cpp:413 smalldialogs.cpp:442 smalldialogs.cpp:479 +#, fuzzy +msgid "Match result:" +msgstr "Результат пошуку: %1" + +#: smalldialogs.cpp:432 +msgid "Example history start line (with leading comment):" +msgstr "" + +#: smalldialogs.cpp:435 +msgid "" +"Copy a history start line as used in your files,\n" +"including the leading comment." +msgstr "" + +#: smalldialogs.cpp:461 +msgid "History sort key order:" +msgstr "" + +#: smalldialogs.cpp:469 +msgid "Example history entry start line (without leading comment):" +msgstr "" + +#: smalldialogs.cpp:471 +msgid "" +"Copy a history entry start line as used in your files,\n" +"but omit the leading comment." +msgstr "" + +#: smalldialogs.cpp:486 +msgid "Sort key result:" +msgstr "" + +#: smalldialogs.cpp:537 smalldialogs.cpp:547 smalldialogs.cpp:568 +msgid "Match success." +msgstr "" + +#: smalldialogs.cpp:541 smalldialogs.cpp:551 smalldialogs.cpp:574 +#, fuzzy +msgid "Match failed." +msgstr "

Ð”Ñ–Ñ Ð·Ð°Ð²ÐµÑ€ÑˆÐ¸Ð»Ð°ÑÑŒ невдало.

%1

" + +#: smalldialogs.cpp:559 +msgid "Opening and closing parentheses don't match in regular expression." +msgstr "" diff --git a/po/zh_CN.po b/po/zh_CN.po new file mode 100644 index 0000000..7b93bb8 --- /dev/null +++ b/po/zh_CN.po @@ -0,0 +1,2499 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2004 Free Software Foundation, Inc. +# zhu-zhy , 2004. +# Mai Haohui , 2004. +# +msgid "" +msgstr "" +"Project-Id-Version: kdiff3\n" +"POT-Creation-Date: 2006-11-05 08:45+0100\n" +"PO-Revision-Date: 2005-02-07 10:03+0800\n" +"Last-Translator: Mai Hao Hui \n" +"Language-Team: zh_CN \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: _translatorinfo.cpp:1 +msgid "" +"_: NAME OF TRANSLATORS\n" +"Your names" +msgstr "å¼€æºè½¯ä»¶å›½é™…化简体中文组(http://i18n.linux.net.cn)" + +#: _translatorinfo.cpp:3 +msgid "" +"_: EMAIL OF TRANSLATORS\n" +"Your emails" +msgstr "i18n-translation@list.linux.net.cn" + +#: diff.cpp:246 +msgid "Writing clipboard data to temp file failed." +msgstr "将剪贴æ¿æ•°æ®å†™å…¥ä¸´æ—¶æ–‡ä»¶å¤±è´¥ã€‚" + +#: diff.cpp:250 +msgid "From Clipboard" +msgstr "从剪贴æ¿" + +#: diff.cpp:491 +msgid "" +"Preprocessing possibly failed. Check this command:\n" +"\n" +" %1\n" +"\n" +"The preprocessing command will be disabled now." +msgstr "" +"预处ç†å¯èƒ½å¤±è´¥äº†ã€‚请检查这个命令:\n" +"\n" +" %1\n" +"\n" +"现在预处ç†å‘½ä»¤ä¼šè¢«ç¦ç”¨ã€‚" + +#: diff.cpp:526 +msgid "" +"The line-matching-preprocessing possibly failed. Check this command:\n" +"\n" +" %1\n" +"\n" +"The line-matching-preprocessing command will be disabled now." +msgstr "" +"行匹é…处ç†å¯èƒ½å¤±è´¥ã€‚请检查这个命令:\n" +"\n" +" %1\n" +"\n" +"现在行匹é…处ç†å‘½ä»¤ä¼šè¢«ç¦ç”¨ã€‚" + +#: diff.cpp:1631 diff.cpp:1645 +msgid "" +"Data loss error:\n" +"If it is reproducable please contact the author.\n" +msgstr "" +"æ•°æ®ä¸¢å¤±é”™è¯¯ï¼š\n" +"如果它是å¯å¤åˆ¶çš„,请è”系作者。\n" + +#: diff.cpp:1633 diff.cpp:1647 +msgid "Severe Internal Error" +msgstr "严é‡å†…部错误" + +#: difftextwindow.cpp:1643 kdiff3.cpp:753 +#, fuzzy +msgid "Top line" +msgstr "顶端行数 %1" + +#: difftextwindow.cpp:1653 +msgid "End" +msgstr "末尾" + +#: directorymergewindow.cpp:142 +msgid "Mix of links and normal files." +msgstr "链接和普通文件混åˆ" + +#: directorymergewindow.cpp:149 +msgid "Link: " +msgstr "链接:" + +#: directorymergewindow.cpp:157 +msgid "Size. " +msgstr "大å°ã€‚" + +#: directorymergewindow.cpp:170 +msgid "Date & Size: " +msgstr "日期和大å°ï¼š" + +#: directorymergewindow.cpp:179 directorymergewindow.cpp:185 +msgid "Creating temp copy of %1 failed." +msgstr "创建临时 %1 副本失败。" + +#: directorymergewindow.cpp:196 directorymergewindow.cpp:204 +msgid "Opening %1 failed." +msgstr "打开 %1 失败。" + +#: directorymergewindow.cpp:208 +msgid "Comparing file..." +msgstr "正在比较文件..." + +#: directorymergewindow.cpp:218 directorymergewindow.cpp:224 +#, c-format +msgid "Error reading from %1" +msgstr "è¯»å– %1 时错误" + +#: directorymergewindow.cpp:282 +msgid "Name" +msgstr "å称" + +#: directorymergewindow.cpp:286 +msgid "Operation" +msgstr "æ“作" + +#: directorymergewindow.cpp:287 +msgid "Status" +msgstr "状æ€" + +#: directorymergewindow.cpp:288 +msgid "Unsolved" +msgstr "未解决的" + +#: directorymergewindow.cpp:289 +msgid "Solved" +msgstr "已解决的" + +#: directorymergewindow.cpp:290 +msgid "Nonwhite" +msgstr "éžç©ºç™½" + +#: directorymergewindow.cpp:291 +msgid "White" +msgstr "空白" + +#: directorymergewindow.cpp:319 +msgid "" +"You are currently doing a directory merge. Are you sure, you want to abort the " +"merge and rescan the directory?" +msgstr "您当å‰æ­£åœ¨åˆå¹¶ç›®å½•ã€‚您确定è¦æ”¾å¼ƒåˆå¹¶ï¼Œé‡æ–°æ‰«æ目录å—?" + +#: directorymergewindow.cpp:320 directorymergewindow.cpp:2868 +msgid "Rescan" +msgstr "é‡æ–°æ‰«æ" + +#: directorymergewindow.cpp:320 kdiff3.cpp:603 pdiff.cpp:979 +msgid "Continue Merging" +msgstr "继续åˆå¹¶" + +#: directorymergewindow.cpp:462 +msgid "Opening of directories failed:" +msgstr "打开目录失败" + +#: directorymergewindow.cpp:465 +msgid "" +"Dir A \"%1\" does not exist or is not a directory.\n" +msgstr "" +"目录 A “%1â€ä¸å­˜åœ¨æˆ–者ä¸æ˜¯ç›®å½•ã€‚\n" + +#: directorymergewindow.cpp:468 +msgid "" +"Dir B \"%1\" does not exist or is not a directory.\n" +msgstr "" +"目录 B “%1â€ä¸å­˜åœ¨æˆ–者ä¸æ˜¯ç›®å½•ã€‚\n" + +#: directorymergewindow.cpp:471 +msgid "" +"Dir C \"%1\" does not exist or is not a directory.\n" +msgstr "" +"目录 C “%1â€ä¸å­˜åœ¨æˆ–者ä¸æ˜¯ç›®å½•ã€‚\n" + +#: directorymergewindow.cpp:473 +msgid "Directory Open Error" +msgstr "打开目录错误" + +#: directorymergewindow.cpp:481 +msgid "" +"The destination directory must not be the same as A or B when three directories " +"are merged.\n" +"Check again before continuing." +msgstr "" +"当三个目录åˆå¹¶æ—¶ï¼Œç›®æ ‡ç›®å½•ä¸èƒ½æ˜¯ A 或者 B。\n" +"在继续进行å‰ï¼Œè¯·å†æ ¸å¯¹ä¸€é。" + +#: directorymergewindow.cpp:483 +msgid "Parameter Warning" +msgstr "å‚数警告" + +#: directorymergewindow.cpp:488 +msgid "Scanning directories..." +msgstr "正在扫æ目录..." + +#: directorymergewindow.cpp:537 +msgid "Reading Directory A" +msgstr "读å–目录 A" + +#: directorymergewindow.cpp:559 +msgid "Reading Directory B" +msgstr "读å–目录 B" + +#: directorymergewindow.cpp:581 +msgid "Reading Directory C" +msgstr "读å–目录 C" + +#: directorymergewindow.cpp:607 +msgid "Some subdirectories were not readable in" +msgstr "ä¸èƒ½è¿›å…¥è¯»å–一些å­ç›®å½•" + +#: directorymergewindow.cpp:612 +msgid "Check the permissions of the subdirectories." +msgstr "检查å­ç›®å½•æƒé™ã€‚" + +#: directorymergewindow.cpp:646 kdiff3.cpp:552 kdiff3.cpp:636 kdiff3.cpp:661 +#: kdiff3.cpp:934 kdiff3.cpp:955 pdiff.cpp:1059 pdiff.cpp:1131 pdiff.cpp:1169 +#: pdiff.cpp:1185 pdiff.cpp:1215 pdiff.cpp:1226 +msgid "Ready." +msgstr "就绪。" + +#: directorymergewindow.cpp:660 +msgid "Directory Comparison Status" +msgstr "目录比较状æ€" + +#: directorymergewindow.cpp:661 +msgid "Number of subdirectories:" +msgstr "å­ç›®å½•æ•°ï¼š" + +#: directorymergewindow.cpp:662 +msgid "Number of equal files:" +msgstr "相åŒæ–‡ä»¶æ•°ï¼š" + +#: directorymergewindow.cpp:663 +msgid "Number of different files:" +msgstr "ä¸åŒæ–‡ä»¶æ•°ï¼š" + +#: directorymergewindow.cpp:666 +msgid "Number of manual merges:" +msgstr "手动åˆå¹¶æ•°ï¼š" + +#: directorymergewindow.cpp:802 +msgid "This affects all merge operations." +msgstr "这将影å“全部åˆå¹¶æ“作。" + +#: directorymergewindow.cpp:803 +msgid "Changing All Merge Operations" +msgstr "更改全部åˆå¹¶æ“作" + +#: directorymergewindow.cpp:803 mergeresultwindow.cpp:287 +msgid "C&ontinue" +msgstr "继续(&o)" + +#: directorymergewindow.cpp:1169 +msgid "Processing " +msgstr "å¤„ç† " + +#: directorymergewindow.cpp:1647 directorymergewindow.cpp:1653 +msgid "To do." +msgstr "执行。" + +#: directorymergewindow.cpp:1756 directorymergewindow.cpp:2899 +msgid "Copy A to B" +msgstr "å¤åˆ¶ A 到 B" + +#: directorymergewindow.cpp:1757 directorymergewindow.cpp:2900 +msgid "Copy B to A" +msgstr "å¤åˆ¶ B 到 A" + +#: directorymergewindow.cpp:1758 directorymergewindow.cpp:2901 +msgid "Delete A" +msgstr "删除 A" + +#: directorymergewindow.cpp:1759 directorymergewindow.cpp:2902 +msgid "Delete B" +msgstr "删除 B" + +#: directorymergewindow.cpp:1760 +msgid "Delete A & B" +msgstr "删除 A å’Œ B" + +#: directorymergewindow.cpp:1761 directorymergewindow.cpp:2904 +msgid "Merge to A" +msgstr "åˆå¹¶åˆ° A" + +#: directorymergewindow.cpp:1762 directorymergewindow.cpp:2905 +msgid "Merge to B" +msgstr "åˆå¹¶åˆ° B" + +#: directorymergewindow.cpp:1763 +msgid "Merge to A & B" +msgstr "åˆå¹¶åˆ° A å’Œ B" + +#: directorymergewindow.cpp:1767 directorymergewindow.cpp:2896 +msgid "Delete (if exists)" +msgstr "删除(如果存在)" + +#: directorymergewindow.cpp:1768 directorymergewindow.cpp:1769 +#: directorymergewindow.cpp:2895 optiondialog.cpp:809 smalldialogs.cpp:102 +msgid "Merge" +msgstr "åˆå¹¶" + +#: directorymergewindow.cpp:1768 directorymergewindow.cpp:1769 +msgid "Merge (manual)" +msgstr "åˆå¹¶(手动)" + +#: directorymergewindow.cpp:1770 +msgid "Error: Conflicting File Types" +msgstr "错误:文件类型冲çª" + +#: directorymergewindow.cpp:1771 +msgid "Error: Dates are equal but files are not." +msgstr "错误:日期相åŒä½†æ˜¯æ–‡ä»¶ä¸åŒã€‚" + +#: directorymergewindow.cpp:1795 directorymergewindow.cpp:1824 +#: directorymergewindow.cpp:1849 +msgid "This operation is currently not possible." +msgstr "现在ä¸èƒ½æ‰§è¡Œæ­¤æ“作。" + +#: directorymergewindow.cpp:1795 directorymergewindow.cpp:1824 +#: directorymergewindow.cpp:1849 directorymergewindow.cpp:2106 +msgid "Operation Not Possible" +msgstr "æ“作ä¸å¯è¡Œ" + +#: directorymergewindow.cpp:1888 +msgid "" +"This should never happen: \n" +"\n" +"mergeResultSaved: m_pMFI=0\n" +"\n" +"If you know how to reproduce this, please contact the program author." +msgstr "" +"此情况ä¸åº”å†å‘生:\n" +"\n" +"åˆå¹¶ç»“æžœä¿å­˜ï¼šm_pMFI=0\n" +"\n" +"如果您知é“如何é‡çŽ°é”™è¯¯ï¼Œè¯·è”系程åºä½œè€…。" + +#: directorymergewindow.cpp:1888 +msgid "Program Error" +msgstr "程åºé”™è¯¯" + +#: directorymergewindow.cpp:1899 +msgid "" +"An error occurred while copying.\n" +msgstr "" +"å¤åˆ¶æ—¶å‘生错误。\n" + +#: directorymergewindow.cpp:1900 directorymergewindow.cpp:2306 +msgid "Merge Error" +msgstr "åˆå¹¶é”™è¯¯" + +#: directorymergewindow.cpp:1905 directorymergewindow.cpp:2311 +msgid "Error." +msgstr "错误。" + +#: directorymergewindow.cpp:1910 directorymergewindow.cpp:2202 +#: directorymergewindow.cpp:2242 +msgid "Done." +msgstr "完æˆã€‚" + +#: directorymergewindow.cpp:1933 +msgid "Not saved." +msgstr "未ä¿å­˜ã€‚" + +#: directorymergewindow.cpp:1968 +msgid "Unknown merge operation. (This must never happen!)" +msgstr "未知åˆå¹¶æ“作。(ç»ä¸å¯ä»¥å‘生ï¼)" + +#: directorymergewindow.cpp:2000 +msgid "Unknown merge operation." +msgstr "未知åˆå¹¶æ“作。" + +#: directorymergewindow.cpp:2015 +msgid "" +"The merge is about to begin.\n" +"\n" +"Choose \"Do it\" if you have read the instructions and know what you are " +"doing.\n" +"Choosing \"Simulate it\" will tell you what would happen.\n" +"\n" +"Be aware that this program still has beta status and there is NO WARRANTY " +"whatsoever! Make backups of your vital data!" +msgstr "" +"åˆå¹¶å°†å¼€å§‹ã€‚\n" +"\n" +"选择“执行â€å¦‚果您已ç»é˜…读了指å—并知é“您在åšä»€ä¹ˆã€‚\n" +"选择“模拟â€å°†å‘Šè¯‰æ‚¨å°†å‘生什么。\n" +"\n" +"注æ„此程åºä¾ç„¶å¤„于 beta 状æ€ï¼Œæ²¡æœ‰ä»»ä½•ä¿è¯ï¼å¤‡ä»½æ‚¨çš„é‡è¦æ•°æ®ï¼" + +#: directorymergewindow.cpp:2020 +msgid "Starting Merge" +msgstr "开始åˆå¹¶" + +#: directorymergewindow.cpp:2020 +msgid "Do It" +msgstr "执行" + +#: directorymergewindow.cpp:2020 +msgid "Simulate It" +msgstr "模拟" + +#: directorymergewindow.cpp:2046 +msgid "" +"The highlighted item has a different type in the different directories. Select " +"what to do." +msgstr "高亮的项目在ä¸åŒçš„目录有ä¸åŒç±»åž‹ã€‚选择åšä»€ä¹ˆã€‚" + +#: directorymergewindow.cpp:2055 +msgid "" +"The modification dates of the file are equal but the files are not. Select what " +"to do." +msgstr "文件的修改日期相åŒä½†æ˜¯æ–‡ä»¶ä¸åŒã€‚选择åšä»€ä¹ˆã€‚" + +#: directorymergewindow.cpp:2106 +msgid "" +"This operation is currently not possible because directory merge is currently " +"running." +msgstr "æ­¤æ“作当å‰ä¸å¯è¡Œï¼Œå› ä¸ºç›®å½•åˆå¹¶æ­£åœ¨è¿è¡Œã€‚" + +#: directorymergewindow.cpp:2166 +msgid "" +"There was an error in the last step.\n" +"Do you want to continue with the item that caused the error or do you want to " +"skip this item?" +msgstr "" +"最åŽä¸€æ­¥æœ‰é”™è¯¯ã€‚\n" +"您è¦ç»§ç»­è¿›è¡Œå¯¼è‡´é”™è¯¯çš„项目还是跳过该项?" + +#: directorymergewindow.cpp:2168 +msgid "Continue merge after an error" +msgstr "出错åŽç»§ç»­åˆå¹¶" + +#: directorymergewindow.cpp:2168 +msgid "Continue With Last Item" +msgstr "继续进行上一项" + +#: directorymergewindow.cpp:2168 +msgid "Skip Item" +msgstr "跳过项目" + +#: directorymergewindow.cpp:2202 +msgid "Skipped." +msgstr "已跳过。" + +#: directorymergewindow.cpp:2209 directorymergewindow.cpp:2435 +msgid "In progress..." +msgstr "进行中..." + +#: directorymergewindow.cpp:2257 +msgid "Merge operation complete." +msgstr "åˆå¹¶æ“作完æˆã€‚" + +#: directorymergewindow.cpp:2257 directorymergewindow.cpp:2260 +msgid "Merge Complete" +msgstr "åˆå¹¶å®Œæˆ" + +#: directorymergewindow.cpp:2269 +msgid "" +"Simulated merge complete: Check if you agree with the proposed operations." +msgstr "模拟åˆå¹¶å®Œæˆï¼šæ ¸å¯¹æ‚¨æ˜¯å¦èµžåŒè¢«æ议的æ“作。" + +#: directorymergewindow.cpp:2305 +msgid "" +"An error occurred. Press OK to see detailed information.\n" +msgstr "" +"错误å‘生。按 OK 看详细信æ¯ã€‚\n" + +#: directorymergewindow.cpp:2348 +msgid "Error: While deleting %1: Creating backup failed." +msgstr "错误:在删除 %1 时:创建备份失败。" + +#: directorymergewindow.cpp:2355 +msgid "delete directory recursively( %1 )" +msgstr "递归删除目录( %1 )" + +#: directorymergewindow.cpp:2357 +msgid "delete( %1 )" +msgstr "删除( %1 )" + +#: directorymergewindow.cpp:2372 +msgid "Error: delete dir operation failed while trying to read the directory." +msgstr "错误:在试图读å–目录时删除目录æ“作失败。" + +#: directorymergewindow.cpp:2391 +msgid "Error: rmdir( %1 ) operation failed." +msgstr "错误:rmdir( %1 )æ“作失败。" + +#: directorymergewindow.cpp:2401 +msgid "Error: delete operation failed." +msgstr "错误:删除æ“作失败。" + +#: directorymergewindow.cpp:2427 +msgid "manual merge( %1, %2, %3 -> %4)" +msgstr "手动åˆå¹¶( %1,%2,%3 -> %4)" + +#: directorymergewindow.cpp:2430 +msgid "" +" Note: After a manual merge the user should continue by pressing F7." +msgstr " 注æ„:在手动åˆå¹¶ä¹‹åŽç”¨æˆ·åº”该按 F7 继续。" + +#: directorymergewindow.cpp:2453 +msgid "Error: copy( %1 -> %2 ) failed.Deleting existing destination failed." +msgstr "错误:å¤åˆ¶( %1 -> %2 )失败。删除现存目标失败。" + +#: directorymergewindow.cpp:2463 +msgid "copyLink( %1 -> %2 )" +msgstr "å¤åˆ¶é“¾æŽ¥( %1 -> %2 )" + +#: directorymergewindow.cpp:2474 +msgid "Error: copyLink failed: Remote links are not yet supported." +msgstr "错误:å¤åˆ¶é“¾æŽ¥å¤±è´¥ï¼šè¿œç¨‹é“¾æŽ¥å°šæœªæ”¯æŒã€‚" + +#: directorymergewindow.cpp:2480 +msgid "Error: copyLink failed." +msgstr "错误:å¤åˆ¶é“¾æŽ¥å¤±è´¥ã€‚" + +#: directorymergewindow.cpp:2500 +msgid "copy( %1 -> %2 )" +msgstr "å¤åˆ¶( %1 -> %2 )" + +#: directorymergewindow.cpp:2526 +msgid "Error during rename( %1 -> %2 ): Cannot delete existing destination." +msgstr "é‡å‘½å( %1 -> %2 )错误:无法删除现存目标。" + +#: directorymergewindow.cpp:2532 +msgid "rename( %1 -> %2 )" +msgstr "é‡å‘½å( %1 -> %2 )" + +#: directorymergewindow.cpp:2541 +msgid "Error: Rename failed." +msgstr "错误:é‡å‘½å失败。" + +#: directorymergewindow.cpp:2559 +msgid "Error during makeDir of %1. Cannot delete existing file." +msgstr "建立目录 %1 出错。无法删除现存文件。" + +#: directorymergewindow.cpp:2575 +msgid "makeDir( %1 )" +msgstr "建立目录( %1 )" + +#: directorymergewindow.cpp:2585 +msgid "Error while creating directory." +msgstr "创建目录时出错。" + +#: directorymergewindow.cpp:2608 directorymergewindow.cpp:2725 +msgid "Dest" +msgstr "目标" + +#: directorymergewindow.cpp:2612 directorymergewindow.cpp:2650 +msgid "Dir" +msgstr "目录" + +#: directorymergewindow.cpp:2613 +msgid "Type" +msgstr "类型" + +#: directorymergewindow.cpp:2614 +msgid "Size" +msgstr "大å°" + +#: directorymergewindow.cpp:2615 +msgid "Attr" +msgstr "属性" + +#: directorymergewindow.cpp:2616 +msgid "Last Modification" +msgstr "上次修改" + +#: directorymergewindow.cpp:2617 +msgid "Link-Destination" +msgstr "链接目标" + +#: directorymergewindow.cpp:2667 +msgid "not available" +msgstr "ä¸å¯ç”¨" + +#: directorymergewindow.cpp:2687 +msgid "A (Dest): " +msgstr "A (目标):" + +#: directorymergewindow.cpp:2690 +msgid "A (Base): " +msgstr "A 基准" + +#: directorymergewindow.cpp:2696 +msgid "B (Dest): " +msgstr "B (目标):" + +#: directorymergewindow.cpp:2704 +msgid "C (Dest): " +msgstr "C (目标):" + +#: directorymergewindow.cpp:2710 +msgid "Dest: " +msgstr "目标:" + +#: directorymergewindow.cpp:2775 +#, fuzzy +msgid "Save Directory Merge State As..." +msgstr "目录åˆå¹¶" + +#: directorymergewindow.cpp:2862 +msgid "Start/Continue Directory Merge" +msgstr "开始/继续目录åˆå¹¶" + +#: directorymergewindow.cpp:2863 +msgid "Run Operation for Current Item" +msgstr "开始当å‰é¡¹ç›®æ“作" + +#: directorymergewindow.cpp:2864 +msgid "Compare Selected File" +msgstr "比较所选文件" + +#: directorymergewindow.cpp:2865 +msgid "Merge Current File" +msgstr "åˆå¹¶å½“å‰æ–‡ä»¶" + +#: directorymergewindow.cpp:2866 +msgid "Fold All Subdirs" +msgstr "折å å…¨éƒ¨å­æ–‡ä»¶å¤¹" + +#: directorymergewindow.cpp:2867 +msgid "Unfold All Subdirs" +msgstr "打开全部å­æ–‡ä»¶å¤¹" + +#: directorymergewindow.cpp:2871 +msgid "Choose A for All Items" +msgstr "选择 A 的全部项目" + +#: directorymergewindow.cpp:2872 +msgid "Choose B for All Items" +msgstr "选择 B 的全部项目" + +#: directorymergewindow.cpp:2873 +msgid "Choose C for All Items" +msgstr "选择 C 的全部项目" + +#: directorymergewindow.cpp:2874 +msgid "Auto-Choose Operation for All Items" +msgstr "为全部项目自动选择æ“作" + +#: directorymergewindow.cpp:2875 +msgid "No Operation for All Items" +msgstr "全部项目无æ“作" + +#: directorymergewindow.cpp:2880 +msgid "Show Identical Files" +msgstr "" + +#: directorymergewindow.cpp:2881 +#, fuzzy +msgid "Show Different Files" +msgstr "ä¸åŒæ–‡ä»¶æ•°ï¼š" + +#: directorymergewindow.cpp:2882 +msgid "Show Files only in A" +msgstr "" + +#: directorymergewindow.cpp:2883 +msgid "Show Files only in B" +msgstr "" + +#: directorymergewindow.cpp:2884 +msgid "Show Files only in C" +msgstr "" + +#: directorymergewindow.cpp:2888 +#, fuzzy +msgid "Compare Explicitly Selected Files" +msgstr "比较所选文件" + +#: directorymergewindow.cpp:2889 +#, fuzzy +msgid "Merge Explicitly Selected Files" +msgstr "比较所选文件" + +#: directorymergewindow.cpp:2891 directorymergewindow.cpp:2898 +msgid "Do Nothing" +msgstr "什么也ä¸åš" + +#: directorymergewindow.cpp:2892 +msgid "A" +msgstr "A" + +#: directorymergewindow.cpp:2893 +msgid "B" +msgstr "B" + +#: directorymergewindow.cpp:2894 +msgid "C" +msgstr "C" + +#: directorymergewindow.cpp:2903 +msgid "Delete A && B" +msgstr "删除 A å’Œ B" + +#: directorymergewindow.cpp:2906 +msgid "Merge to A && B" +msgstr "åˆå¹¶åˆ° A å’Œ B" + +#: fileaccess.cpp:595 +msgid "" +"While trying to make a backup, deleting an older backup failed. \n" +"Filename: " +msgstr "" +"试图åšå¤‡ä»½æ—¶ï¼Œåˆ é™¤æ—§å¤‡ä»½å¤±è´¥ã€‚\n" +"文件å:" + +#: fileaccess.cpp:602 +msgid "" +"While trying to make a backup, renaming failed. \n" +"Filenames: " +msgstr "" +"试图备份时,é‡å‘½å失败。\n" +"文件å:" + +#: fileaccess.cpp:624 +#, c-format +msgid "Getting file status: %1" +msgstr "获å–文件状æ€ï¼š%1" + +#: fileaccess.cpp:667 +#, c-format +msgid "Reading file: %1" +msgstr "读å–文件:%1" + +#: fileaccess.cpp:703 +#, c-format +msgid "Writing file: %1" +msgstr "写入文件:%1" + +#: fileaccess.cpp:731 +msgid "Out of memory" +msgstr "内存溢出" + +#: fileaccess.cpp:766 +#, c-format +msgid "Making directory: %1" +msgstr "建立目录:%1" + +#: fileaccess.cpp:786 +#, c-format +msgid "Removing directory: %1" +msgstr "删除目录:%1" + +#: fileaccess.cpp:801 +#, c-format +msgid "Removing file: %1" +msgstr "删除文件:%1" + +#: fileaccess.cpp:817 +msgid "Creating symbolic link: %1 -> %2" +msgstr "创建符å·é“¾æŽ¥ï¼š%1 -> %2" + +#: fileaccess.cpp:843 +msgid "Renaming file: %1 -> %2" +msgstr "é‡å‘½å文件:%1 -> %2" + +#: fileaccess.cpp:879 +msgid "Copying file: %1 -> %2" +msgstr "å¤åˆ¶æ–‡ä»¶ï¼š%1 -> %2" + +#: fileaccess.cpp:893 +#, c-format +msgid "" +"Error during file copy operation: Opening file for reading failed. Filename: %1" +msgstr "文件å¤åˆ¶æ“作出错:打开文件读å–失败。文件å:%1" + +#: fileaccess.cpp:899 +#, c-format +msgid "" +"Error during file copy operation: Opening file for writing failed. Filename: %1" +msgstr "文件å¤åˆ¶æ“作出错:打开文件写入失败。文件å:%1" + +#: fileaccess.cpp:914 +#, c-format +msgid "Error during file copy operation: Reading failed. Filename: %1" +msgstr "文件å¤åˆ¶æ“作出错:读å–失败。文件å:%1" + +#: fileaccess.cpp:923 +#, c-format +msgid "Error during file copy operation: Writing failed. Filename: %1" +msgstr "文件å¤åˆ¶æ“作出错:写入失败。文件å:%1" + +#: fileaccess.cpp:1219 +msgid "Reading directory: " +msgstr "读å–目录:" + +#: fileaccess.cpp:1348 +#, c-format +msgid "Listing directory: %1" +msgstr "目录列表:%1" + +#: kdiff3.cpp:142 +#, fuzzy +msgid "Current Configuration:" +msgstr "当å‰é¡¹ç›®åŒæ­¥æ“作" + +#: kdiff3.cpp:147 +#, fuzzy +msgid "Config Option Error:" +msgstr "文件打开出错" + +#: kdiff3.cpp:187 +msgid "Option --auto used, but no output file specified." +msgstr "选项 -- 自动使用,但没有指定输出文件。" + +#: kdiff3.cpp:323 +msgid "Option --auto ignored for directory comparison." +msgstr "选项 -- 自动忽略目录比较。" + +#: kdiff3.cpp:359 +msgid "Saving failed." +msgstr "ä¿å­˜å¤±è´¥ã€‚" + +#: kdiff3.cpp:386 pdiff.cpp:1041 pdiff.cpp:1112 +msgid "Opening of these files failed:" +msgstr "打开以下文件失败:" + +#: kdiff3.cpp:395 +msgid "File Open Error" +msgstr "文件打开出错" + +#: kdiff3.cpp:418 +msgid "Opens documents for comparison..." +msgstr "打开文档比较..." + +#: kdiff3.cpp:423 +msgid "Saves the merge result. All conflicts must be solved!" +msgstr "ä¿å­˜åˆå¹¶ç»“果。必须解决全部冲çªï¼" + +#: kdiff3.cpp:425 +msgid "Saves the current document as..." +msgstr "ä¿å­˜å½“å‰æ–‡æ¡£ä¸º..." + +#: kdiff3.cpp:427 +msgid "Print the differences" +msgstr "" + +#: kdiff3.cpp:429 +msgid "Quits the application" +msgstr "退出程åº" + +#: kdiff3.cpp:431 +msgid "Cuts the selected section and puts it to the clipboard" +msgstr "剪切所选节,将其放入剪贴æ¿" + +#: kdiff3.cpp:433 +msgid "Copies the selected section to the clipboard" +msgstr "å¤åˆ¶æ‰€é€‰èŠ‚至剪贴æ¿" + +#: kdiff3.cpp:435 +msgid "Pastes the clipboard contents to actual position" +msgstr "粘贴剪贴æ¿å†…容到实际ä½ç½®" + +#: kdiff3.cpp:437 +msgid "Select everything in current window" +msgstr "" + +#: kdiff3.cpp:439 +msgid "Search for a string" +msgstr "æœç´¢å­—符串" + +#: kdiff3.cpp:441 +msgid "Search again for the string" +msgstr "å†æ¬¡æœç´¢è¯¥å­—符串" + +#: kdiff3.cpp:443 +msgid "Enables/disables the toolbar" +msgstr "å¯ç”¨/ç¦æ­¢å·¥å…·æ " + +#: kdiff3.cpp:445 +msgid "Enables/disables the statusbar" +msgstr "å¯ç”¨/ç¦æ­¢çŠ¶æ€æ " + +#: kdiff3.cpp:449 +msgid "Configure KDiff3..." +msgstr "é…ç½® KDiff3..." + +#: kdiff3.cpp:470 +msgid "Go to Current Delta" +msgstr "åˆ°å½“å‰ Delta" + +#: kdiff3.cpp:471 +msgid "Go to First Delta" +msgstr "到第一个 Delta" + +#: kdiff3.cpp:472 +msgid "Go to Last Delta" +msgstr "到最åŽä¸€ä¸ª Delta" + +#: kdiff3.cpp:473 +msgid "(Skips white space differences when \"Show White Space\" is disabled.)" +msgstr "(ç¦ç”¨â€œæ˜¾ç¤ºç©ºç™½å­—符â€æ—¶è·³è¿‡ç©ºç™½å·®å¼‚。)" + +#: kdiff3.cpp:474 +msgid "" +"(Does not skip white space differences even when \"Show White Space\" is " +"disabled.)" +msgstr "(ç¦ç”¨â€œæ˜¾ç¤ºç©ºç™½å­—符â€æ—¶ä¹Ÿä¸è·³è¿‡ç©ºç™½å·®å¼‚。)" + +#: kdiff3.cpp:475 +msgid "Go to Previous Delta" +msgstr "到上一个 Delta" + +#: kdiff3.cpp:477 +msgid "Go to Next Delta" +msgstr "到下一个 Delta" + +#: kdiff3.cpp:479 +msgid "Go to Previous Conflict" +msgstr "到上一个冲çª" + +#: kdiff3.cpp:481 +msgid "Go to Next Conflict" +msgstr "到下一个冲çª" + +#: kdiff3.cpp:483 +msgid "Go to Previous Unsolved Conflict" +msgstr "到上一个未解决冲çª" + +#: kdiff3.cpp:485 +msgid "Go to Next Unsolved Conflict" +msgstr "到下一个未解决冲çª" + +#: kdiff3.cpp:487 +msgid "Select Line(s) From A" +msgstr "从 A 选择 è¡Œ" + +#: kdiff3.cpp:488 +msgid "Select Line(s) From B" +msgstr "从 B 选择行" + +#: kdiff3.cpp:489 +msgid "Select Line(s) From C" +msgstr "从 C 选择行" + +#: kdiff3.cpp:490 +msgid "Automatically Go to Next Unsolved Conflict After Source Selection" +msgstr "æºç é€‰æ‹©åŽè‡ªåŠ¨åˆ°ä¸‹ä¸€ä¸ªæœªè§£å†³å†²çª" + +#: kdiff3.cpp:492 +msgid "Show Space && Tabulator Characters for Differences" +msgstr "显示间è·å’Œåˆ¶è¡¨ç¬¦çš„ä¸åŒ" + +#: kdiff3.cpp:493 +msgid "Show White Space" +msgstr "显示空白字符" + +#: kdiff3.cpp:495 +msgid "Show Line Numbers" +msgstr "显示行数" + +#: kdiff3.cpp:496 +msgid "Choose A Everywhere" +msgstr "选择 A 全部" + +#: kdiff3.cpp:497 +msgid "Choose B Everywhere" +msgstr "选择 B 全部" + +#: kdiff3.cpp:498 +msgid "Choose C Everywhere" +msgstr "选择 C 全部" + +#: kdiff3.cpp:499 +msgid "Choose A for All Unsolved Conflicts" +msgstr "选择 A 全部未解决冲çª" + +#: kdiff3.cpp:500 +msgid "Choose B for All Unsolved Conflicts" +msgstr "选择 B 全部未解决冲çª" + +#: kdiff3.cpp:501 +msgid "Choose C for All Unsolved Conflicts" +msgstr "选择 C 全部未解决冲çª" + +#: kdiff3.cpp:502 +msgid "Choose A for All Unsolved Whitespace Conflicts" +msgstr "选择 A 全部未解决空白字符冲çª" + +#: kdiff3.cpp:503 +msgid "Choose B for All Unsolved Whitespace Conflicts" +msgstr "选择 B 全部未解决空白字符冲çª" + +#: kdiff3.cpp:504 +msgid "Choose C for All Unsolved Whitespace Conflicts" +msgstr "选择 C 全部未解决空白字符冲çª" + +#: kdiff3.cpp:505 +msgid "Automatically Solve Simple Conflicts" +msgstr "自动解决简å•å†²çª" + +#: kdiff3.cpp:506 +msgid "Set Deltas to Conflicts" +msgstr "设置 Delta 为冲çª" + +#: kdiff3.cpp:507 +msgid "Run Regular Expression Auto Merge" +msgstr "" + +#: kdiff3.cpp:508 +#, fuzzy +msgid "Automatically Solve History Conflicts" +msgstr "自动解决简å•å†²çª" + +#: kdiff3.cpp:509 +msgid "Split Diff At Selection" +msgstr "" + +#: kdiff3.cpp:510 +#, fuzzy +msgid "Join Selected Diffs" +msgstr "比较所选文件" + +#: kdiff3.cpp:512 +msgid "Show Window A" +msgstr "æ˜¾ç¤ºçª—å£ A" + +#: kdiff3.cpp:513 +msgid "Show Window B" +msgstr "æ˜¾ç¤ºçª—å£ B" + +#: kdiff3.cpp:514 +msgid "Show Window C" +msgstr "æ˜¾ç¤ºçª—å£ C" + +#: kdiff3.cpp:515 kdiff3.cpp:526 +msgid "Focus Next Window" +msgstr "èšç„¦äºŽä¸‹ä¸€ä¸ªçª—å£" + +#: kdiff3.cpp:517 +msgid "Normal Overview" +msgstr "普通概览" + +#: kdiff3.cpp:518 +msgid "A vs. B Overview" +msgstr "A å’Œ B 概览" + +#: kdiff3.cpp:519 +msgid "A vs. C Overview" +msgstr "A å’Œ C 概览" + +#: kdiff3.cpp:520 +msgid "B vs. C Overview" +msgstr "B å’Œ C 概览" + +#: kdiff3.cpp:521 +msgid "Word Wrap Diff Windows" +msgstr "在 Diff 窗å£è‡ªåŠ¨æ¢è¡Œ" + +#: kdiff3.cpp:522 +msgid "Add Manual Diff Alignment" +msgstr "" + +#: kdiff3.cpp:523 +msgid "Clear All Manual Diff Alignments" +msgstr "" + +#: kdiff3.cpp:528 +msgid "Focus Prev Window" +msgstr "èšç„¦äºŽä¸Šä¸€ä¸ªçª—å£" + +#: kdiff3.cpp:529 +msgid "Toggle Split Orientation" +msgstr "切æ¢åˆ†éš”æ–¹å‘" + +#: kdiff3.cpp:531 +msgid "Dir && Text Split Screen View" +msgstr "目录和文本分å±è§†å›¾" + +#: kdiff3.cpp:533 +msgid "Toggle Between Dir && Text View" +msgstr "切æ¢ç›®å½•å’Œæ–‡æœ¬è§†å›¾" + +#: kdiff3.cpp:582 pdiff.cpp:1712 +msgid "The merge result hasn't been saved." +msgstr "åˆå¹¶ç»“果未ä¿å­˜ã€‚" + +#: kdiff3.cpp:583 +msgid "Save && Quit" +msgstr "ä¿å­˜å¹¶é€€å‡º" + +#: kdiff3.cpp:583 +msgid "Quit Without Saving" +msgstr "退出ä¸ä¿å­˜" + +#: kdiff3.cpp:591 pdiff.cpp:1721 +msgid "Saving the merge result failed." +msgstr "ä¿å­˜åˆå¹¶ç»“果失败。" + +#: kdiff3.cpp:602 pdiff.cpp:978 +msgid "" +"You are currently doing a directory merge. Are you sure, you want to abort?" +msgstr "您当å‰æ­£åœ¨åˆå¹¶ç›®å½•ã€‚您确认è¦æ”¾å¼ƒå—?" + +#: kdiff3.cpp:625 +msgid "Saving file..." +msgstr "正在ä¿å­˜æ–‡ä»¶..." + +#: kdiff3.cpp:642 +msgid "Saving file with a new filename..." +msgstr "正在用新文件åä¿å­˜æ–‡ä»¶..." + +#: kdiff3.cpp:732 +#, fuzzy +msgid "Printing..." +msgstr "正在退出..." + +#: kdiff3.cpp:738 kdiff3.cpp:900 +msgid "Printing aborted." +msgstr "" + +#: kdiff3.cpp:870 +msgid "Selection" +msgstr "" + +#: kdiff3.cpp:896 +#, fuzzy +msgid "Printing completed." +msgstr "åˆå¹¶æ“作完æˆã€‚" + +#: kdiff3.cpp:906 +msgid "Exiting..." +msgstr "正在退出..." + +#: kdiff3.cpp:918 +msgid "Toggling toolbar..." +msgstr "切æ¢å·¥å…·æ ..." + +#: kdiff3.cpp:939 +msgid "Toggle the statusbar..." +msgstr "切æ¢çŠ¶æ€æ ..." + +#: kdiff3_part.cpp:155 kdiff3_part.cpp:224 +msgid "Couldn't find files for comparison." +msgstr "无法找到文件比较。" + +#: kdiff3_part.cpp:291 +msgid "KDiff3Part" +msgstr "KDiff3Part" + +#: kdiff3_shell.cpp:78 +msgid "" +"Could not find our part!\n" +"This usually happens due to an installation problem. Please read the " +"README-file in the source package for details." +msgstr "" +"无法找到我们的组件ï¼\n" +"å‘生此错误通常因为安装错误。详细内容请阅读æºç åŒ…内的 README 文件。" + +#: main.cpp:35 +msgid "Tool for Comparison and Merge of Files and Directories" +msgstr "比较åŠåˆå¹¶æ–‡ä»¶å’Œç›®å½•çš„工具" + +#: main.cpp:40 +msgid "Merge the input." +msgstr "åˆå¹¶è¾“入。" + +#: main.cpp:42 +msgid "Explicit base file. For compatibility with certain tools." +msgstr "明确基准文件,以便与æŸäº›å·¥å…·å…¼å®¹ã€‚" + +#: main.cpp:44 +msgid "Output file. Implies -m. E.g.: -o newfile.txt" +msgstr "输出文件。Implies -m。例如:-o newfile.txt" + +#: main.cpp:45 +msgid "Output file, again. (For compatibility with certain tools.)" +msgstr "å†æ¬¡è¾“出文件。(为与æŸäº›å·¥å…·å…¼å®¹ã€‚)" + +#: main.cpp:46 +msgid "No GUI if all conflicts are auto-solvable. (Needs -o file)" +msgstr "如果全部冲çªè‡ªåŠ¨è§£å†³æ— å›¾å½¢ç”¨æˆ·ç•Œé¢ã€‚(éœ€è¦ -o file)" + +#: main.cpp:47 +msgid "Don't solve conflicts automatically. (For compatibility...)" +msgstr "ä¸è‡ªåŠ¨è§£å†³å†²çªã€‚(为了兼容性...)" + +#: main.cpp:48 +msgid "Visible name replacement for input file 1 (base)." +msgstr "为输入文件1(基准文件)åšçš„å¯è§å替æ¢ã€‚" + +#: main.cpp:49 +msgid "Visible name replacement for input file 2." +msgstr "为输入文件2åšçš„å¯è§å替æ¢ã€‚" + +#: main.cpp:50 +msgid "Visible name replacement for input file 3." +msgstr "为输入文件3åšçš„å¯è§å替æ¢ã€‚" + +#: main.cpp:52 +msgid "Alternative visible name replacement. Supply this once for every input." +msgstr "候选å¯è§å替æ¢ã€‚æ¯æ¬¡è¾“å…¥æ供。" + +#: main.cpp:53 +msgid "" +"Override a config setting. Use once for every setting. E.g.: --cs " +"\"AutoAdvance=1\"" +msgstr "" + +#: main.cpp:54 +msgid "Show list of config settings and current values." +msgstr "" + +#: main.cpp:55 +#, fuzzy +msgid "Use a different config file." +msgstr "ä¸åŒæ–‡ä»¶æ•°ï¼š" + +#: main.cpp:59 +msgid "file1 to open (base, if not specified via --base)" +msgstr "è¦æ‰“开的文件(基准文件,如果未通过 --base 指定)" + +#: main.cpp:60 +msgid "file2 to open" +msgstr "è¦æ‰“开的文件 2" + +#: main.cpp:61 +msgid "file3 to open" +msgstr "è¦æ‰“开的文件 3" + +#: main.cpp:93 +msgid "Ignored. (User defined.)" +msgstr "" + +#. i18n: file kdiff3_part.rc line 16 +#: main.cpp:173 rc.cpp:9 +#, no-c-format +msgid "KDiff3" +msgstr "KDiff3" + +#: main.cpp:186 +msgid "+ Many thanks to those who reported bugs and contributed ideas!" +msgstr "+ å分感谢报告错误和贡献想法的人们ï¼" + +#: mergeresultwindow.cpp:136 mergeresultwindow.cpp:939 +#: mergeresultwindow.cpp:953 mergeresultwindow.cpp:965 +#: mergeresultwindow.cpp:977 +msgid "Number of remaining unsolved conflicts: %1 (of which %2 are whitespace)" +msgstr "还未解决的冲çªæ•°ç›®ï¼š%1(其中 %2 项为空白字符)" + +#: mergeresultwindow.cpp:285 +msgid "" +"The output has been modified.\n" +"If you continue your changes will be lost." +msgstr "" +"已修改输出。\n" +"如果您继续您的更改将丢失。" + +#: mergeresultwindow.cpp:797 pdiff.cpp:511 +msgid "All input files are binary equal." +msgstr "全部输入文件二进制数æ®ç›¸åŒã€‚" + +#: mergeresultwindow.cpp:799 +msgid "All input files contain the same text." +msgstr "全部输入文件包å«ç›¸åŒæ–‡æœ¬ã€‚" + +#: mergeresultwindow.cpp:801 +msgid "" +"Files A and B are binary equal.\n" +msgstr "" +"文件 A å’Œ B 二进制数æ®ç›¸åŒã€‚\n" + +#: mergeresultwindow.cpp:802 +msgid "" +"Files A and B have equal text. \n" +msgstr "" +"文件 A å’Œ B 文本相åŒã€‚\n" + +#: mergeresultwindow.cpp:803 +msgid "" +"Files A and C are binary equal.\n" +msgstr "" +"文件 A å’Œ C 二进制数æ®ç›¸åŒã€‚\n" + +#: mergeresultwindow.cpp:804 +msgid "" +"Files A and C have equal text. \n" +msgstr "" +"文件 A å’Œ C 文本相åŒã€‚\n" + +#: mergeresultwindow.cpp:805 +msgid "" +"Files B and C are binary equal.\n" +msgstr "" +"文件 B å’Œ C 二进制数æ®ç›¸åŒã€‚\n" + +#: mergeresultwindow.cpp:806 +msgid "" +"Files B and C have equal text. \n" +msgstr "" +"文件 B å’Œ C 文本相åŒã€‚\n" + +#: mergeresultwindow.cpp:812 +msgid "Total number of conflicts: " +msgstr "冲çªæ€»æ•°ï¼š" + +#: mergeresultwindow.cpp:813 +msgid "" +"\n" +"Nr of automatically solved conflicts: " +msgstr "" +"\n" +"自动解决的冲çªæ•°ç›®ï¼š" + +#: mergeresultwindow.cpp:814 +msgid "" +"\n" +"Nr of unsolved conflicts: " +msgstr "" +"\n" +"未解决冲çªæ•°ç›®ï¼š" + +#: mergeresultwindow.cpp:816 +msgid "Conflicts" +msgstr "冲çª" + +#: mergeresultwindow.cpp:1652 +msgid "" +msgstr "<æ— æºè¡Œ>" + +#: mergeresultwindow.cpp:1660 +msgid "" +msgstr "<åˆå¹¶å†²çª(åªæœ‰ç©ºç™½å­—符)>" + +#: mergeresultwindow.cpp:1662 mergeresultwindow.cpp:2427 +msgid "" +msgstr "<åˆå¹¶å†²çª>" + +#: mergeresultwindow.cpp:2635 +msgid "" +"Not all conflicts are solved yet.\n" +"File not saved.\n" +msgstr "" +"尚未解决全部冲çªã€‚\n" +"文件未ä¿å­˜ã€‚\n" + +#: mergeresultwindow.cpp:2637 +msgid "Conflicts Left" +msgstr "é—留的冲çª" + +#: mergeresultwindow.cpp:2649 +msgid "" +"\n" +"\n" +"Creating backup failed. File not saved." +msgstr "" +"\n" +"\n" +"创建备份失败。文件未ä¿å­˜ã€‚" + +#: mergeresultwindow.cpp:2649 mergeresultwindow.cpp:2689 +msgid "File Save Error" +msgstr "ä¿å­˜æ–‡ä»¶é”™è¯¯" + +#: mergeresultwindow.cpp:2689 +msgid "Error while writing." +msgstr "写入时出错。" + +#: mergeresultwindow.cpp:3020 +msgid "Output" +msgstr "输出" + +#: mergeresultwindow.cpp:3032 mergeresultwindow.cpp:3139 +msgid "[Modified]" +msgstr "[已修改]" + +#: mergeresultwindow.cpp:3039 +#, fuzzy +msgid "Encoding for saving" +msgstr "C 的文件编ç ï¼š" + +#: mergeresultwindow.cpp:3075 mergeresultwindow.cpp:3081 +#: mergeresultwindow.cpp:3087 +msgid "Codec from" +msgstr "" + +#: optiondialog.cpp:362 +msgid "Unicode, 8 bit" +msgstr "8 ä½ Unicode" + +#: optiondialog.cpp:363 +msgid "Unicode" +msgstr "Unicode" + +#: optiondialog.cpp:364 +msgid "Latin1" +msgstr "Latin1" + +#: optiondialog.cpp:383 +msgid "Change this if non-ASCII characters are not displayed correctly." +msgstr "å¦‚æžœéž ASCII 字符ä¸èƒ½æ­£ç¡®æ˜¾ç¤ºï¼Œè¯·æ›´æ”¹æ­¤é€‰é¡¹ã€‚" + +#: optiondialog.cpp:510 +msgid "Editor & Diff Output Font" +msgstr "编辑器和 Diff 输出字体" + +#: optiondialog.cpp:531 +msgid "Italic font for deltas" +msgstr "delta 使用斜体字" + +#: optiondialog.cpp:534 +msgid "" +"Selects the italic version of the font for differences.\n" +"If the font doesn't support italic characters, then this does nothing." +msgstr "" +"选择斜体字表示差别。\n" +"如果字体ä¸æ”¯æŒæ–œä½“,那么这个选项无效。" + +#: optiondialog.cpp:542 +msgid "Color" +msgstr "颜色" + +#: optiondialog.cpp:542 +#, fuzzy +msgid "Colors Settings" +msgstr "区域设置" + +#: optiondialog.cpp:556 +msgid "Editor and Diff Views:" +msgstr "" + +#: optiondialog.cpp:564 +msgid "Foreground color:" +msgstr "å‰æ™¯é¢œè‰²ï¼š" + +#: optiondialog.cpp:570 +msgid "Background color:" +msgstr "背景颜色:" + +#: optiondialog.cpp:578 +msgid "Diff background color:" +msgstr "Diff 背景颜色:" + +#: optiondialog.cpp:585 +msgid "Color A:" +msgstr "颜色 A:" + +#: optiondialog.cpp:592 +msgid "Color B:" +msgstr "颜色 B:" + +#: optiondialog.cpp:599 +msgid "Color C:" +msgstr "颜色 C:" + +#: optiondialog.cpp:605 +msgid "Conflict color:" +msgstr "冲çªé¢œè‰²ï¼š" + +#: optiondialog.cpp:612 +msgid "Current range background color:" +msgstr "当å‰èŒƒå›´èƒŒæ™¯é¢œè‰²ï¼š" + +#: optiondialog.cpp:619 +msgid "Current range diff background color:" +msgstr "当å‰èŒƒå›´å·®åˆ«èƒŒæ™¯é¢œè‰²ï¼š" + +#: optiondialog.cpp:625 +msgid "Color for manually aligned difference ranges:" +msgstr "" + +#: optiondialog.cpp:630 +#, fuzzy +msgid "Directory Comparison View:" +msgstr "目录比较状æ€" + +#: optiondialog.cpp:636 +msgid "Newest file color:" +msgstr "" + +#: optiondialog.cpp:639 +msgid "" +"Changing this color will only be effective when starting the next directory " +"comparison." +msgstr "" + +#: optiondialog.cpp:644 +msgid "Oldest file color:" +msgstr "" + +#: optiondialog.cpp:651 +msgid "Middle age file color:" +msgstr "" + +#: optiondialog.cpp:658 +msgid "Color for missing files:" +msgstr "" + +#: optiondialog.cpp:670 +msgid "Editor" +msgstr "编辑器" + +#: optiondialog.cpp:670 +msgid "Editor Behavior" +msgstr "编辑器行为" + +#: optiondialog.cpp:680 +msgid "Tab inserts spaces" +msgstr "跳格æ’入空格" + +#: optiondialog.cpp:683 +msgid "" +"On: Pressing tab generates the appropriate number of spaces.\n" +"Off: A Tab-character will be inserted." +msgstr "" +"打开:按下 Tab 则生æˆç›¸åº”æ•°é‡çš„空格。\n" +"关闭:将æ’入一个制表符。" + +#: optiondialog.cpp:689 +msgid "Tab size:" +msgstr "制表符大å°ï¼š" + +#: optiondialog.cpp:694 +msgid "Auto indentation" +msgstr "自动缩进" + +#: optiondialog.cpp:697 +msgid "" +"On: The indentation of the previous line is used for a new line.\n" +msgstr "" +"打开:使用å‰ä¸€è¡Œçš„缩进于新一行。\n" + +#: optiondialog.cpp:701 +msgid "Auto copy selection" +msgstr "自动å¤åˆ¶é€‰æ‹©" + +#: optiondialog.cpp:704 +msgid "" +"On: Any selection is immediately written to the clipboard.\n" +"Off: You must explicitely copy e.g. via Ctrl-C." +msgstr "" +"打开:任何选择将被自动写入剪贴æ¿ã€‚\n" +"关闭:您必须明确å¤åˆ¶å†…容,如通过 Ctrl-C。" + +#: optiondialog.cpp:709 +msgid "Line end style:" +msgstr "行尾风格:" + +#: optiondialog.cpp:721 +msgid "" +"Sets the line endings for when an edited file is saved.\n" +"DOS/Windows: CR+LF; UNIX: LF; with CR=0D, LF=0A" +msgstr "" +"设置ä¿å­˜æ–‡ä»¶çš„行尾。\n" +"DOS/Windows:CR+LFï¼›Unix:LF;而 CR=0D,LF=0A" + +#: optiondialog.cpp:732 +#, fuzzy +msgid "Diff" +msgstr "KDiff3" + +#: optiondialog.cpp:732 +#, fuzzy +msgid "Diff Settings" +msgstr "Diff å’Œ Merge 设置" + +#: optiondialog.cpp:743 +msgid "Preserve carriage return" +msgstr "ä¿ç•™å›žè½¦" + +#: optiondialog.cpp:746 +msgid "" +"Show carriage return characters '\\r' if they exist.\n" +"Helps to compare files that were modified under different operating systems." +msgstr "" +"如果存在,显示回车字符“\\râ€ã€‚\n" +"这个选项帮助比较在ä¸åŒæ“作系统下修改的文件。" + +#: optiondialog.cpp:751 +msgid "Ignore numbers" +msgstr "忽略数字" + +#: optiondialog.cpp:754 +msgid "" +"Ignore number characters during line matching phase. (Similar to Ignore white " +"space.)\n" +"Might help to compare files with numeric data." +msgstr "" +"在行匹é…阶段,忽略数字字符。(与忽略空白字符相似。)\n" +"å¯èƒ½å¸®åŠ©æ¯”较带数值数æ®çš„文件。" + +#: optiondialog.cpp:759 +msgid "Ignore C/C++ comments" +msgstr "忽略 C/C++ 注解" + +#: optiondialog.cpp:761 +msgid "Treat C/C++ comments like white space." +msgstr "æŒ‰ç©ºç™½å­—ç¬¦å¤„ç† C/C++ 注解" + +#: optiondialog.cpp:765 +msgid "Ignore case" +msgstr "忽略大å°å†™" + +#: optiondialog.cpp:768 +msgid "Treat case differences like white space changes. ('a'<=>'A')" +msgstr "按处ç†ç©ºæ ¼æ›´æ”¹çš„方法处ç†å¤§å°å†™æ›´æ”¹ã€‚(“aâ€<=>“Aâ€)" + +#: optiondialog.cpp:772 +msgid "Preprocessor command:" +msgstr "预处ç†ç¨‹åºå‘½ä»¤ï¼š" + +#: optiondialog.cpp:776 +msgid "User defined pre-processing. (See the docs for details.)" +msgstr "用户定义预处ç†ã€‚(详细内容è§æ–‡æ¡£ã€‚)" + +#: optiondialog.cpp:779 +msgid "Line-matching preprocessor command:" +msgstr "行匹é…预处ç†å‘½ä»¤ï¼š" + +#: optiondialog.cpp:783 +msgid "" +"This pre-processor is only used during line matching.\n" +"(See the docs for details.)" +msgstr "" +"此预处ç†ä»…在行匹é…时使用。\n" +"(详细内容è§æ–‡æ¡£ã€‚)" + +#: optiondialog.cpp:786 +msgid "Try hard (slower)" +msgstr "å°½é‡ä»”细(较慢)" + +#: optiondialog.cpp:789 +msgid "" +"Enables the --minimal option for the external diff.\n" +"The analysis of big files will be much slower." +msgstr "" +"为外部 diff 程åºå¯ç”¨ --minimal 选项。\n" +"大文件的分æžä¼šæ…¢å¾—多。" + +#: optiondialog.cpp:794 +msgid "Auto advance delay (ms):" +msgstr "自动å‰è¿›å»¶è¿Ÿ(毫秒):" + +#: optiondialog.cpp:799 +msgid "" +"When in Auto-Advance mode the result of the current selection is shown \n" +"for the specified time, before jumping to the next conflict. Range: 0-2000 ms" +msgstr "在自动å‰è¿›æ¨¡å¼ï¼Œå½“å‰é€‰æ‹©ç»“果显示一定时间,æ‰ä¼šè·³åˆ°ä¸‹ä¸€ä¸ªå†²çªã€‚范围:0-2000 毫秒" + +#: optiondialog.cpp:809 +#, fuzzy +msgid "Merge Settings" +msgstr "Diff å’Œ Merge 设置" + +#: optiondialog.cpp:822 +msgid "White space 2-file merge default:" +msgstr "2 文件åˆå¹¶é»˜è®¤ç©ºç™½å­—符:" + +#: optiondialog.cpp:826 optiondialog.cpp:839 +msgid "Manual Choice" +msgstr "手动选择" + +#: optiondialog.cpp:830 optiondialog.cpp:844 +msgid "" +"Allow the merge algorithm to automatically select an input for white-space-only " +"changes." +msgstr "å…许åˆå¹¶ç®—法为仅有空白字符å˜åŒ–自动选择输入。" + +#: optiondialog.cpp:835 +msgid "White space 3-file merge default:" +msgstr "默认 3 文件åˆå¹¶ç©ºç™½å­—符:" + +#: optiondialog.cpp:849 +msgid "Automatic Merge Regular Expression" +msgstr "" + +#: optiondialog.cpp:858 smalldialogs.cpp:397 +msgid "Auto merge regular expression:" +msgstr "" + +#: optiondialog.cpp:862 +msgid "" +"Regular expression for lines where KDiff3 should automatically choose one " +"source.\n" +"When a line with a conflict matches the regular expression then\n" +"- if available - C, otherwise B will be chosen." +msgstr "" + +#: optiondialog.cpp:868 +msgid "Run regular expression auto merge on merge start" +msgstr "" + +#: optiondialog.cpp:870 +msgid "" +"Run the merge for auto merge regular expressions\n" +"immediately when a merge starts.\n" +msgstr "" + +#: optiondialog.cpp:875 +msgid "Version Control History Merging" +msgstr "" + +#: optiondialog.cpp:884 smalldialogs.cpp:424 +msgid "History start regular expression:" +msgstr "" + +#: optiondialog.cpp:888 +msgid "" +"Regular expression for the start of the version control history entry.\n" +"Usually this line contains the \"$Log$\"-keyword.\n" +"Default value: \".*\\$Log.*\\$.*\"" +msgstr "" + +#: optiondialog.cpp:894 smalldialogs.cpp:453 +msgid "History entry start regular expression:" +msgstr "" + +#: optiondialog.cpp:906 +msgid "" +"A version control history entry consists of several lines.\n" +"Specify the regular expression to detect the first line (without the leading " +"comment).\n" +"Use parentheses to group the keys you want to use for sorting.\n" +"If left empty, then KDiff3 assumes that empty lines separate history entries.\n" +"See the documentation for details." +msgstr "" + +#: optiondialog.cpp:914 +msgid "History merge sorting" +msgstr "" + +#: optiondialog.cpp:916 +msgid "Sort version control history by a key." +msgstr "" + +#: optiondialog.cpp:926 +msgid "History entry start sort key order:" +msgstr "" + +#: optiondialog.cpp:930 +msgid "" +"Each parentheses used in the regular expression for the history start entry\n" +"groups a key that can be used for sorting.\n" +"Specify the list of keys (that are numbered in order of occurrence\n" +"starting with 1) using ',' as separator (e.g. \"4,5,6,1,2,3,7\").\n" +"If left empty, then no sorting will be done.\n" +"See the documentation for details." +msgstr "" + +#: optiondialog.cpp:941 +msgid "Merge version control history on merge start" +msgstr "" + +#: optiondialog.cpp:943 +msgid "Run version control history automerge on merge start." +msgstr "" + +#: optiondialog.cpp:947 +msgid "Test your regular expressions" +msgstr "" + +#: optiondialog.cpp:952 +msgid "Irrelevant merge command:" +msgstr "" + +#: optiondialog.cpp:956 +msgid "" +"If specified this script is run after automerge\n" +"when no other relevant changes were detected.\n" +"Called with the parameters: filename1 filename2 filename3" +msgstr "" + +#: optiondialog.cpp:966 +msgid "Directory Merge" +msgstr "目录åˆå¹¶" + +#: optiondialog.cpp:975 +msgid "Recursive directories" +msgstr "包å«å­ç›®å½•" + +#: optiondialog.cpp:977 +msgid "Whether to analyze subdirectories or not." +msgstr "是å¦åˆ†æžå­ç›®å½•ã€‚" + +#: optiondialog.cpp:979 +msgid "File pattern(s):" +msgstr "文件模å¼ï¼š" + +#: optiondialog.cpp:984 +msgid "" +"Pattern(s) of files to be analyzed. \n" +"Wildcards: '*' and '?'\n" +"Several Patterns can be specified by using the separator: ';'" +msgstr "" +"è¦åˆ†æžçš„文件模å¼ã€‚\n" +"通é…符:“*â€å’Œâ€œ?â€\n" +"几个模å¼å¯ä»¥ä½¿ç”¨åˆ†éš”符:“;â€æŒ‡å®š" + +#: optiondialog.cpp:990 +msgid "File-anti-pattern(s):" +msgstr "排除文件模å¼ï¼š" + +#: optiondialog.cpp:995 +msgid "" +"Pattern(s) of files to be excluded from analysis. \n" +"Wildcards: '*' and '?'\n" +"Several Patterns can be specified by using the separator: ';'" +msgstr "" +"排除分æžçš„文件模å¼ã€‚\n" +"通é…符:“*â€å’Œâ€œ?â€\n" +"几个模å¼å¯ä»¥ä½¿ç”¨åˆ†éš”符:“;â€æŒ‡å®š" + +#: optiondialog.cpp:1001 +msgid "Dir-anti-pattern(s):" +msgstr "排除目录模å¼ï¼š" + +#: optiondialog.cpp:1006 +msgid "" +"Pattern(s) of directories to be excluded from analysis. \n" +"Wildcards: '*' and '?'\n" +"Several Patterns can be specified by using the separator: ';'" +msgstr "" +"排除分æžçš„目录模å¼ã€‚\n" +"通é…符:“*â€å’Œâ€œ?â€\n" +"几个模å¼å¯ä»¥ä½¿ç”¨åˆ†éš”符:“;â€æŒ‡å®š" + +#: optiondialog.cpp:1012 +msgid "Use .cvsignore" +msgstr "使用 .cvsignore" + +#: optiondialog.cpp:1015 +msgid "" +"Extends the antipattern to anything that would be ignored by CVS.\n" +"Via local \".cvsignore\"-files this can be directory specific." +msgstr "" +"扩展排除模å¼è‡³ä»»ä½•è¢« CVS 忽略的类型。\n" +"通过本地“.cvsignoreâ€æ–‡ä»¶ï¼Œå¯ä»¥æŒ‡å®šç›®å½•ã€‚" + +#: optiondialog.cpp:1020 +msgid "Find hidden files and directories" +msgstr "查找éšè—目录和文件" + +#: optiondialog.cpp:1023 +msgid "Finds files and directories with the hidden attribute." +msgstr "查找具有éšè—属性的文件和目录。" + +#: optiondialog.cpp:1025 +msgid "Finds files and directories starting with '.'." +msgstr "查找以“.â€å¼€å¤´çš„文件和目录。" + +#: optiondialog.cpp:1029 +msgid "Follow file links" +msgstr "追踪文件链接" + +#: optiondialog.cpp:1032 +msgid "" +"On: Compare the file the link points to.\n" +"Off: Compare the links." +msgstr "" +"打开:比较链接指å‘的文件。\n" +"关闭:比较链接。" + +#: optiondialog.cpp:1037 +msgid "Follow directory links" +msgstr "追踪目录链接" + +#: optiondialog.cpp:1040 +msgid "" +"On: Compare the directory the link points to.\n" +"Off: Compare the links." +msgstr "" +"打开:比较链接指å‘的目录。\n" +"关闭:比较链接。" + +#: optiondialog.cpp:1056 +msgid "Case sensitive filename comparison" +msgstr "" + +#: optiondialog.cpp:1059 +msgid "" +"The directory comparison will compare files or directories when their names " +"match.\n" +"Set this option if the case of the names must match. (Default for Windows is " +"off, otherwise on.)" +msgstr "" + +#: optiondialog.cpp:1063 +msgid "File Comparison Mode" +msgstr "文件比较模å¼" + +#: optiondialog.cpp:1067 +msgid "Binary comparison" +msgstr "二进制比较" + +#: optiondialog.cpp:1068 +msgid "Binary comparison of each file. (Default)" +msgstr "用二进制比较模å¼æ¯”较æ¯ä¸ªæ–‡ä»¶ã€‚" + +#: optiondialog.cpp:1070 +msgid "Full analysis" +msgstr "完全分æž" + +#: optiondialog.cpp:1071 +msgid "" +"Do a full analysis and show statistics information in extra columns.\n" +"(Slower than a binary comparison, much slower for binary files.)" +msgstr "" +"进行完全分æžå¹¶ä¸”在é¢å¤–的列里显示统计信æ¯ã€‚\n" +"(比较二进制比较模å¼æ…¢ï¼Œæ¯”较二进制文件更慢。)" + +#: optiondialog.cpp:1074 +msgid "Trust the modification date (unsafe)" +msgstr "信任修改日期(ä¸å®‰å…¨)" + +#: optiondialog.cpp:1075 +msgid "" +"Assume that files are equal if the modification date and file length are " +"equal.\n" +"Useful for big directories or slow networks." +msgstr "" +"å‡å®šå¦‚果修改日期和文件长度相åŒï¼Œåˆ™æ–‡ä»¶ç›¸åŒã€‚\n" +"对于大目录或较慢的网络有用。" + +#: optiondialog.cpp:1078 +msgid "Trust the size (unsafe)" +msgstr "信任大å°(ä¸å®‰å…¨)" + +#: optiondialog.cpp:1079 +msgid "" +"Assume that files are equal if their file lengths are equal.\n" +"Useful for big directories or slow networks when the date is modified during " +"download." +msgstr "" +"å‡å®šæ–‡ä»¶é•¿åº¦ç›¸åŒæ–‡ä»¶ç›¸åŒã€‚\n" +"当下载过程中日期被修改时,对于大目录或较慢网络有用。" + +#: optiondialog.cpp:1083 +msgid "Synchronize directories" +msgstr "åŒæ­¥ç›®å½•" + +#: optiondialog.cpp:1086 +msgid "" +"Offers to store files in both directories so that\n" +"both directories are the same afterwards.\n" +"Works only when comparing two directories without specifying a destination." +msgstr "" +"为了以åŽç›®å½•ç›¸åŒï¼Œæ供在两个目录里存储文件。\n" +"仅在比较两个目录并未指定目标目录时有效。" + +#: optiondialog.cpp:1092 +msgid "White space differences considered equal" +msgstr "认为相åŒçš„空白字符数" + +#: optiondialog.cpp:1095 +msgid "" +"If files differ only by white space consider them equal.\n" +"This is only active when full analysis is chosen." +msgstr "" +"如果文件åªåœ¨ç©ºç™½å­—符上有差异,则认为它们相åŒã€‚\n" +"仅当选择完全比较时此选项æ‰æ¿€æ´»ã€‚" + +#: optiondialog.cpp:1101 +msgid "Copy newer instead of merging (unsafe)" +msgstr "å¤åˆ¶è¾ƒæ–°è€Œä¸åˆå¹¶(ä¸å®‰å…¨)" + +#: optiondialog.cpp:1104 +msgid "" +"Don't look inside, just take the newer file.\n" +"(Use this only if you know what you are doing!)\n" +"Only effective when comparing two directories." +msgstr "" +"ä¸è¿›å…¥æŸ¥çœ‹ï¼Œä»…å–较新的文件。\n" +"(如果您知é“自己在åšä»€ä¹ˆå†é€‰æ­¤é¡¹ï¼)\n" +"仅在比较两个目录时有效。" + +#: optiondialog.cpp:1109 +msgid "Backup files (.orig)" +msgstr "备份文件(.orig)" + +#: optiondialog.cpp:1112 +msgid "" +"When a file would be saved over an old file, then the old file\n" +"will be renamed with a '.orig'-extension instead of being deleted." +msgstr "在已有旧文件的文件ä¿å­˜æ—¶ï¼Œæ—§æ–‡ä»¶å°†è¢«é‡å‘½å为“.origâ€æ‰©å±•å,而ä¸æ˜¯è¢«åˆ é™¤ã€‚" + +#: optiondialog.cpp:1176 +msgid "Regional Settings" +msgstr "区域设置" + +#: optiondialog.cpp:1272 +msgid "Language (restart required)" +msgstr "语言(需è¦é‡å¯)" + +#: optiondialog.cpp:1304 +msgid "" +"Choose the language of the GUI-strings or \"Auto\".\n" +"For a change of language to take place, quit and restart KDiff3." +msgstr "" +"选择 GUI 的语言或者选择“自动â€ã€‚\n" +"è¦è®©æ›´æ”¹ç”Ÿæ•ˆï¼Œè¯·é€€å‡ºå¹¶é‡å¯ KDiff3。" + +#: optiondialog.cpp:1322 +msgid "Use the same encoding for everything:" +msgstr "所有文件使用åŒä¸€ç¼–ç ï¼š" + +#: optiondialog.cpp:1325 +msgid "" +"Enable this allows to change all encodings by changing the first only.\n" +"Disable this if different individual settings are needed." +msgstr "" +"å¯ç”¨æ­¤é€‰é¡¹å°†ä½¿å¾—åªæ›´æ”¹ç¬¬ä¸€ä¸ªç¼–ç è®¾ç½®å³å¯æ›´æ”¹å…¨éƒ¨æ–‡ä»¶çš„ç¼–ç ã€‚\n" +"如果需è¦ä¸ºæ¯ä¸ªæ–‡ä»¶è®¾ç½®ä¸åŒçš„ç¼–ç ï¼Œè¯·ç¦ç”¨æ­¤é€‰é¡¹ã€‚" + +#: optiondialog.cpp:1330 +msgid "Note: Local Encoding is " +msgstr "注æ„:本地编ç ä¸º" + +#: optiondialog.cpp:1334 +msgid "File Encoding for A:" +msgstr "A 的文件编ç ï¼š" + +#: optiondialog.cpp:1340 +msgid "" +"If enabled then Unicode (UTF-16 or UTF-8) encoding will be detected.\n" +"If the file encoding is not detected then the selected encoding will be used as " +"fallback.\n" +"(Unicode detection depends on the first bytes of a file - the byte order mark " +"\"BOM\".)" +msgstr "" + +#: optiondialog.cpp:1344 optiondialog.cpp:1353 optiondialog.cpp:1362 +msgid "Auto Detect Unicode" +msgstr "" + +#: optiondialog.cpp:1349 +msgid "File Encoding for B:" +msgstr "B 的文件编ç ï¼š" + +#: optiondialog.cpp:1358 +msgid "File Encoding for C:" +msgstr "C 的文件编ç ï¼š" + +#: optiondialog.cpp:1367 +msgid "File Encoding for Merge Output and Saving:" +msgstr "åˆå¹¶è¾“出和ä¿å­˜çš„文件编ç ï¼š" + +#: optiondialog.cpp:1371 +#, fuzzy +msgid "Auto Select" +msgstr "自动å¤åˆ¶é€‰æ‹©" + +#: optiondialog.cpp:1374 +msgid "" +"If enabled then the encoding from the input files is used.\n" +"In ambiguous cases a dialog will ask the user to choose the encoding for " +"saving." +msgstr "" + +#: optiondialog.cpp:1378 +msgid "File Encoding for Preprocessor Files:" +msgstr "预处ç†æ–‡ä»¶çš„文件编ç ï¼š" + +#: optiondialog.cpp:1389 +msgid "Right To Left Language" +msgstr "从å³è‡³å·¦è¯­è¨€" + +#: optiondialog.cpp:1392 +msgid "" +"Some languages are read from right to left.\n" +"This setting will change the viewer and editor accordingly." +msgstr "" +"æŸäº›è¯­è¨€æ˜¯ä»Žå³åˆ°å·¦ä¹¦å†™çš„。\n" +"此设置将更改查看器和编辑器的设置。" + +#: optiondialog.cpp:1402 +#, fuzzy +msgid "Integration" +msgstr "æ“作" + +#: optiondialog.cpp:1402 +#, fuzzy +msgid "Integration Settings" +msgstr "区域设置" + +#: optiondialog.cpp:1412 +msgid "Command line options to ignore:" +msgstr "" + +#: optiondialog.cpp:1417 +msgid "" +"List of command line options that should be ignored when KDiff3 is used by " +"other tools.\n" +"Several values can be specified if separated via ';'\n" +"This will suppress the \"Unknown option\"-error." +msgstr "" + +#: optiondialog.cpp:1480 +msgid "" +"You selected a variable width font.\n" +"\n" +"Because this program doesn't handle variable width fonts\n" +"correctly, you might experience problems while editing.\n" +"\n" +"Do you want to continue or do you want to select another font." +msgstr "" +"您选择了一个å¯å˜å®½åº¦å­—体。\n" +"\n" +"因为此程åºä¸èƒ½æ­£ç¡®å¤„ç†å¯å˜å®½åº¦å­—体\n" +"您å¯èƒ½åœ¨ç¼–辑时é‡åˆ°é—®é¢˜ã€‚\n" +"\n" +"您è¦ç»§ç»­ï¼Œè¿˜æ˜¯å¦é€‰ä¸€ç§å­—体。" + +#: optiondialog.cpp:1484 +msgid "Incompatible Font" +msgstr "ä¸å…¼å®¹å­—体" + +#: optiondialog.cpp:1485 +msgid "Continue at Own Risk" +msgstr "自愿冒险继续" + +#: optiondialog.cpp:1485 +msgid "Select Another Font" +msgstr "选择å¦ä¸€ç§å­—体" + +#: optiondialog.cpp:1521 +msgid "This resets all options. Not only those of the current topic." +msgstr "这将é‡ç½®å…¨éƒ¨é€‰é¡¹ï¼Œè€Œä¸ä»…是当å‰ä¸»é¢˜çš„选项。" + +#: pdiff.cpp:258 +msgid "PreprocessorCmd: " +msgstr "预处ç†ç¨‹åºå‘½ä»¤ï¼š" + +#: pdiff.cpp:263 +msgid "" +"The following option(s) you selected might change data:\n" +msgstr "" +"你所选的以下选项å¯èƒ½ä¼šæ›´æ”¹æ•°æ®ï¼š\n" + +#: pdiff.cpp:264 +msgid "" +"\n" +"Most likely this is not wanted during a merge.\n" +"Do you want to disable these settings or continue with these settings active?" +msgstr "" +"\n" +"大多数情况下åˆå¹¶åº”该ä¸ä¼šç”¨åˆ°è¿™äº›é€‰é¡¹ã€‚\n" +"您想ç¦ç”¨è¿™äº›è®¾ç½®è¿˜æ˜¯ç»§ç»­æ¿€æ´»è¿™äº›è®¾ç½®ï¼Ÿ" + +#: pdiff.cpp:266 +msgid "Option Unsafe for Merging" +msgstr "åˆå¹¶æ—¶ä¼šé€ æˆä¸å®‰å…¨çš„选项" + +#: pdiff.cpp:267 +msgid "Use These Options During Merge" +msgstr "在åˆå¹¶æ—¶ä½¿ç”¨è¿™äº›é€‰é¡¹" + +#: pdiff.cpp:267 +msgid "Disable Unsafe Options" +msgstr "ç¦ç”¨ä¸å®‰å…¨çš„选项" + +#: pdiff.cpp:297 +msgid "Loading A" +msgstr "加载 A" + +#: pdiff.cpp:301 +msgid "Loading B" +msgstr "加载 B" + +#: pdiff.cpp:318 pdiff.cpp:344 +msgid "Diff: A <-> B" +msgstr "Diff:A <-> B" + +#: pdiff.cpp:324 pdiff.cpp:366 +msgid "Linediff: A <-> B" +msgstr "Linediff:A <-> B" + +#: pdiff.cpp:335 +msgid "Loading C" +msgstr "加载 C" + +#: pdiff.cpp:347 +msgid "Diff: B <-> C" +msgstr "Diff:B <-> C" + +#: pdiff.cpp:350 +msgid "Diff: A <-> C" +msgstr "Diff:A <-> C" + +#: pdiff.cpp:369 +msgid "Linediff: B <-> C" +msgstr "Linediff:B <-> C" + +#: pdiff.cpp:372 +msgid "Linediff: A <-> C" +msgstr "Linediff:A <-> C" + +#: pdiff.cpp:513 +#, fuzzy +msgid "All input files contain the same text, but are not binary equal." +msgstr "全部输入文件包å«ç›¸åŒæ–‡æœ¬ã€‚" + +#: pdiff.cpp:515 pdiff.cpp:517 pdiff.cpp:519 +#, fuzzy +msgid "" +"Files %1 and %2 are binary equal.\n" +msgstr "" +"文件 B å’Œ C 二进制数æ®ç›¸åŒã€‚\n" + +#: pdiff.cpp:516 pdiff.cpp:518 pdiff.cpp:520 +#, fuzzy +msgid "" +"Files %1 and %2 have equal text, but are not binary equal. \n" +msgstr "" +"文件 A å’Œ B 二进制数æ®ç›¸åŒã€‚\n" + +#: pdiff.cpp:530 +msgid "" +"Some inputfiles don't seem to be pure textfiles.\n" +"Note that the KDiff3-merge was not meant for binary data.\n" +"Continue at your own risk." +msgstr "" +"一些输入文件ä¸æ˜¯çº¯æ–‡æœ¬æ–‡ä»¶ã€‚\n" +"æ³¨æ„ KDiff3-merge 用于二进制数æ®ã€‚\n" +"继续则您自己承担风险。" + +#: pdiff.cpp:979 +msgid "Abort" +msgstr "放弃" + +#: pdiff.cpp:985 pdiff.cpp:1073 +msgid "Opening files..." +msgstr "正在打开文件..." + +#: pdiff.cpp:1050 pdiff.cpp:1121 +msgid "File open error" +msgstr "打开文件错误" + +#: pdiff.cpp:1153 +msgid "Cutting selection..." +msgstr "剪切所选内容..." + +#: pdiff.cpp:1174 +msgid "Copying selection to clipboard..." +msgstr "å¤åˆ¶æ‰€é€‰å†…容到剪贴æ¿..." + +#: pdiff.cpp:1190 +msgid "Inserting clipboard contents..." +msgstr "æ’入剪贴æ¿å†…容..." + +#: pdiff.cpp:1713 +msgid "Save && Continue" +msgstr "ä¿å­˜å¹¶ç»§ç»­" + +#: pdiff.cpp:1713 +msgid "Continue Without Saving" +msgstr "ä¸ä¿å­˜ç»§ç»­" + +#: pdiff.cpp:1920 +msgid "Search complete." +msgstr "æœç´¢å®Œæˆã€‚" + +#: pdiff.cpp:1920 +msgid "Search Complete" +msgstr "æœç´¢å®Œæˆ" + +#: pdiff.cpp:2144 +msgid "Nothing is selected in either diff input window." +msgstr "" + +#: pdiff.cpp:2144 +#, fuzzy +msgid "Error while adding manual diff range" +msgstr "创建目录时出错。" + +#. i18n: file kdiff3_part.rc line 4 +#: rc.cpp:3 +#, no-c-format +msgid "&KDiff3" +msgstr "&KDiff3" + +#. i18n: file kdiff3_part.rc line 13 +#: rc.cpp:6 +#, no-c-format +msgid "Configure KDiff3" +msgstr "é…ç½® KDiff3" + +#. i18n: file kdiff3_shell.rc line 7 +#: rc.cpp:15 +#, no-c-format +msgid "&Directory" +msgstr "目录(&D)" + +#. i18n: file kdiff3_shell.rc line 30 +#: rc.cpp:18 +#, no-c-format +msgid "Current Item Merge Operation" +msgstr "当å‰é¡¹ç›®åˆå¹¶æ“作" + +#. i18n: file kdiff3_shell.rc line 38 +#: rc.cpp:21 +#, no-c-format +msgid "Current Item Sync Operation" +msgstr "当å‰é¡¹ç›®åŒæ­¥æ“作" + +#. i18n: file kdiff3_shell.rc line 50 +#: rc.cpp:24 +#, no-c-format +msgid "&Movement" +msgstr "移动(&M)" + +#. i18n: file kdiff3_shell.rc line 61 +#: rc.cpp:27 +#, no-c-format +msgid "D&iffview" +msgstr "查看 Diff(&I)" + +#. i18n: file kdiff3_shell.rc line 73 +#: rc.cpp:30 +#, no-c-format +msgid "&Merge" +msgstr "åˆå¹¶(&M)" + +#. i18n: file kdiff3_shell.rc line 95 +#: rc.cpp:33 +#, no-c-format +msgid "&Window" +msgstr "窗å£(&W)" + +#: smalldialogs.cpp:53 +msgid "A (Base):" +msgstr "A (基准文件):" + +#: smalldialogs.cpp:59 smalldialogs.cpp:75 smalldialogs.cpp:91 +#: smalldialogs.cpp:134 +msgid "File..." +msgstr "文件..." + +#: smalldialogs.cpp:61 smalldialogs.cpp:77 smalldialogs.cpp:93 +#: smalldialogs.cpp:136 +msgid "Dir..." +msgstr "目录..." + +#: smalldialogs.cpp:86 +msgid "C (Optional):" +msgstr "C (å¯é€‰):" + +#: smalldialogs.cpp:108 +msgid "Swap/Copy Names ..." +msgstr "" + +#: smalldialogs.cpp:114 smalldialogs.cpp:115 smalldialogs.cpp:116 +msgid "Swap %1<->%2" +msgstr "" + +#: smalldialogs.cpp:117 smalldialogs.cpp:118 smalldialogs.cpp:119 +msgid "Copy %1->Output" +msgstr "" + +#: smalldialogs.cpp:120 smalldialogs.cpp:121 smalldialogs.cpp:122 +msgid "Swap %1<->Output" +msgstr "" + +#: smalldialogs.cpp:129 +msgid "Output (optional):" +msgstr "输出(å¯é€‰):" + +#: smalldialogs.cpp:158 +msgid "Configure..." +msgstr "é…ç½®..." + +#: smalldialogs.cpp:347 +msgid "Search text:" +msgstr "æœç´¢æ–‡æœ¬ï¼š" + +#: smalldialogs.cpp:354 +msgid "Case sensitive" +msgstr "区分大å°å†™" + +#: smalldialogs.cpp:357 +msgid "Search A" +msgstr "æœç´¢ A" + +#: smalldialogs.cpp:362 +msgid "Search B" +msgstr "æœç´¢ B" + +#: smalldialogs.cpp:367 +msgid "Search C" +msgstr "æœç´¢ C" + +#: smalldialogs.cpp:372 +msgid "Search output" +msgstr "æœç´¢è¾“出" + +#: smalldialogs.cpp:377 +msgid "&Search" +msgstr "æœç´¢(&S)" + +#: smalldialogs.cpp:394 +msgid "Regular Expression Tester" +msgstr "" + +#: smalldialogs.cpp:405 +msgid "Example auto merge line:" +msgstr "" + +#: smalldialogs.cpp:407 +msgid "For auto merge test copy a line as used in your files." +msgstr "" + +#: smalldialogs.cpp:413 smalldialogs.cpp:442 smalldialogs.cpp:479 +msgid "Match result:" +msgstr "" + +#: smalldialogs.cpp:432 +msgid "Example history start line (with leading comment):" +msgstr "" + +#: smalldialogs.cpp:435 +msgid "" +"Copy a history start line as used in your files,\n" +"including the leading comment." +msgstr "" + +#: smalldialogs.cpp:461 +msgid "History sort key order:" +msgstr "" + +#: smalldialogs.cpp:469 +msgid "Example history entry start line (without leading comment):" +msgstr "" + +#: smalldialogs.cpp:471 +msgid "" +"Copy a history entry start line as used in your files,\n" +"but omit the leading comment." +msgstr "" + +#: smalldialogs.cpp:486 +msgid "Sort key result:" +msgstr "" + +#: smalldialogs.cpp:537 smalldialogs.cpp:547 smalldialogs.cpp:568 +msgid "Match success." +msgstr "" + +#: smalldialogs.cpp:541 smalldialogs.cpp:551 smalldialogs.cpp:574 +#, fuzzy +msgid "Match failed." +msgstr "ä¿å­˜å¤±è´¥ã€‚" + +#: smalldialogs.cpp:559 +msgid "Opening and closing parentheses don't match in regular expression." +msgstr "" + +#, fuzzy +#~ msgid "Diff and Merge" +#~ msgstr "Diff å’Œ Merge" + +#, fuzzy +#~ msgid "Save Directory Merge State ..." +#~ msgstr "目录åˆå¹¶" + +#, fuzzy +#~ msgid "Load Directory Merge State ..." +#~ msgstr "目录åˆå¹¶" + +#, fuzzy +#~ msgid "Synchronize Directories" +#~ msgstr "åŒæ­¥ç›®å½•" + +#, fuzzy +#~ msgid "Copy Newer Files Instead of Merging" +#~ msgstr "å¤åˆ¶è¾ƒæ–°è€Œä¸åˆå¹¶(ä¸å®‰å…¨)" + +#~ msgid "List only deltas" +#~ msgstr "仅列出 delta" + +#~ msgid "Files and directories without change will not appear in the list." +#~ msgstr "未更改的文件和目录ä¸ä¼šåœ¨åˆ—表显示。" + +#, fuzzy +#~ msgid "no selection" +#~ msgstr "自动å¤åˆ¶é€‰æ‹©" + +#, fuzzy +#~ msgid "Manually match lines" +#~ msgstr "手动选择" + +#~ msgid "Has no effect. For compatibility with certain tools." +#~ msgstr "没有效果。为与æŸäº›å·¥å…·å…¼å®¹è€Œè®¾ã€‚" + +#~ msgid "For compatibility with certain tools." +#~ msgstr "为与æŸäº›å·¥å…·å…¼å®¹ã€‚" + +#~ msgid "Colors in Editor & Diff Output" +#~ msgstr "编辑器和 Diff 输出颜色" diff --git a/src/Makefile.am b/src/Makefile.am new file mode 100644 index 0000000..151e53d --- /dev/null +++ b/src/Makefile.am @@ -0,0 +1,58 @@ + +# set the include path for X, qt and KDE +INCLUDES = $(all_includes) + +# these are the headers for your project +noinst_HEADERS = kdiff3_part.h kdiff3_shell.h kdiff3.h common.h diff.h \ + directorymergewindow.h merger.h optiondialog.h fileaccess.h version.h \ + smalldialogs.h difftextwindow.h mergeresultwindow.h + +# let automoc handle all of the meta source files (moc) +METASOURCES = AUTO + +messages: rc.cpp + $(XGETTEXT) *.cpp -o $(podir)/kdiff3.pot + +KDE_ICON = kdiff3 + +# this Makefile creates both a KPart application and a KPart +######################################################################### +# APPLICATION SECTION +######################################################################### +# this is the program that gets installed. it's name is used for all +# of the other Makefile.am variables +bin_PROGRAMS = kdiff3 + +# the application source, library search path, and link libraries +kdiff3_SOURCES = main.cpp kdiff3_shell.cpp +kdiff3_LDFLAGS = $(KDE_RPATH) $(all_libraries) +kdiff3_LDADD = $(LIB_KPARTS) + +# this is where the desktop file will go +shelldesktopdir = $(kde_appsdir)/Development +shelldesktop_DATA = kdiff3.desktop + +# this is where the shell's XML-GUI resource file goes +shellrcdir = $(kde_datadir)/kdiff3 +shellrc_DATA = kdiff3_shell.rc + +######################################################################### +# KPART SECTION +######################################################################### +kde_module_LTLIBRARIES = libkdiff3part.la + +# the Part's source, library search path, and link libraries +libkdiff3part_la_SOURCES = kdiff3_part.cpp kdiff3.cpp directorymergewindow.cpp \ + merger.cpp pdiff.cpp difftextwindow.cpp diff.cpp optiondialog.cpp \ + mergeresultwindow.cpp fileaccess.cpp gnudiff_analyze.cpp gnudiff_io.cpp gnudiff_xmalloc.cpp \ + common.cpp smalldialogs.cpp +libkdiff3part_la_LDFLAGS = -module $(KDE_PLUGIN) $(all_libraries) +libkdiff3part_la_LIBADD = $(LIB_KDEPRINT) $(LIB_KPARTS) $(LIB_KFILE) + +# this is where the desktop file will go +partdesktopdir = $(kde_servicesdir) +partdesktop_DATA = kdiff3part.desktop + +# this is where the part's XML-GUI resource file goes +partrcdir = $(kde_datadir)/kdiff3part +partrc_DATA = kdiff3_part.rc diff --git a/src/Makefile.qt b/src/Makefile.qt new file mode 100644 index 0000000..44de44b --- /dev/null +++ b/src/Makefile.qt @@ -0,0 +1,425 @@ +############################################################################# +# Makefile for building: kdiff3 +# Generated by qmake (1.07a) (Qt 3.3.5) on: Sat Apr 8 20:11:51 2006 +# Project: kdiff3.pro +# Template: app +# Command: $(QMAKE) -o Makefile kdiff3.pro +############################################################################# + +####### Compiler, tools and options + +CC = gcc +CXX = g++ +LEX = flex +YACC = yacc +CFLAGS = -pipe -O2 -Wall -W -fPIC -D_REENTRANT -DQT_NO_DEBUG -DQT_THREAD_SUPPORT -DQT_SHARED -DQT_TABLET_SUPPORT -D__USE_STD_IOSTREAM +CXXFLAGS = -pipe -O2 -Wall -W -fPIC -D_REENTRANT -DQT_NO_DEBUG -DQT_THREAD_SUPPORT -DQT_SHARED -DQT_TABLET_SUPPORT -D__USE_STD_IOSTREAM +LEXFLAGS = +YACCFLAGS= -d +INCPATH = -I$(QTDIR)/mkspecs/default -I. -Ikreplacements -I/usr/include -I$(QTDIR)/include +LINK = g++ +LFLAGS = +LIBS = $(SUBLIBS) -L/usr/lib/ -L$(QTDIR)/lib/ -L/usr/X11R6/lib/ -lqt-mt -lXext -lX11 -lm -lpthread +AR = ar cqs +RANLIB = +MOC = $(QTDIR)/bin/moc +UIC = $(QTDIR)/bin/uic +QMAKE = qmake +TAR = tar -cf +GZIP = gzip -9f +COPY = cp -f +COPY_FILE= $(COPY) +COPY_DIR = $(COPY) -r +INSTALL_FILE= $(COPY_FILE) +INSTALL_DIR = $(COPY_DIR) +DEL_FILE = rm -f +SYMLINK = ln -sf +DEL_DIR = rmdir +MOVE = mv -f +CHK_DIR_EXISTS= test -d +MKDIR = mkdir -p + +####### Output directory + +OBJECTS_DIR = ./ + +####### Files + +HEADERS = version.h \ + diff.h \ + difftextwindow.h \ + mergeresultwindow.h \ + kdiff3.h \ + merger.h \ + optiondialog.h \ + kreplacements/kreplacements.h \ + directorymergewindow.h \ + fileaccess.h \ + kdiff3_shell.h \ + kdiff3_part.h \ + smalldialogs.h +SOURCES = main.cpp \ + diff.cpp \ + difftextwindow.cpp \ + kdiff3.cpp \ + merger.cpp \ + mergeresultwindow.cpp \ + optiondialog.cpp \ + pdiff.cpp \ + directorymergewindow.cpp \ + fileaccess.cpp \ + smalldialogs.cpp \ + kdiff3_shell.cpp \ + kdiff3_part.cpp \ + gnudiff_analyze.cpp \ + gnudiff_io.cpp \ + gnudiff_xmalloc.cpp \ + common.cpp \ + kreplacements/kreplacements.cpp \ + kreplacements/ShellContextMenu.cpp +OBJECTS = main.o \ + diff.o \ + difftextwindow.o \ + kdiff3.o \ + merger.o \ + mergeresultwindow.o \ + optiondialog.o \ + pdiff.o \ + directorymergewindow.o \ + fileaccess.o \ + smalldialogs.o \ + kdiff3_shell.o \ + kdiff3_part.o \ + gnudiff_analyze.o \ + gnudiff_io.o \ + gnudiff_xmalloc.o \ + common.o \ + kreplacements.o \ + ShellContextMenu.o +FORMS = +UICDECLS = +UICIMPLS = +SRCMOC = moc_difftextwindow.cpp \ + moc_mergeresultwindow.cpp \ + moc_kdiff3.cpp \ + moc_optiondialog.cpp \ + kreplacements/moc_kreplacements.cpp \ + moc_directorymergewindow.cpp \ + moc_fileaccess.cpp \ + moc_kdiff3_shell.cpp \ + moc_kdiff3_part.cpp \ + moc_smalldialogs.cpp +OBJMOC = moc_difftextwindow.o \ + moc_mergeresultwindow.o \ + moc_kdiff3.o \ + moc_optiondialog.o \ + moc_kreplacements.o \ + moc_directorymergewindow.o \ + moc_fileaccess.o \ + moc_kdiff3_shell.o \ + moc_kdiff3_part.o \ + moc_smalldialogs.o +DIST = kdiff3.pro +QMAKE_TARGET = kdiff3 +DESTDIR = +TARGET = kdiff3 + +first: all +####### Implicit rules + +.SUFFIXES: .c .o .cpp .cc .cxx .C + +.cpp.o: + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $< + +.cc.o: + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $< + +.cxx.o: + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $< + +.C.o: + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $< + +.c.o: + $(CC) -c $(CFLAGS) $(INCPATH) -o $@ $< + +####### Build rules + +all: $(TARGET) + +$(TARGET): $(UICDECLS) $(OBJECTS) $(OBJMOC) + $(LINK) $(LFLAGS) -o $(TARGET) $(OBJECTS) $(OBJMOC) $(OBJCOMP) $(LIBS) + +mocables: $(SRCMOC) +uicables: $(UICDECLS) $(UICIMPLS) + +$(MOC): + ( cd $(QTDIR)/src/moc && $(MAKE) ) + +dist: + @mkdir -p .tmp/kdiff3 && $(COPY_FILE) --parents $(SOURCES) $(HEADERS) $(FORMS) $(DIST) .tmp/kdiff3/ && ( cd `dirname .tmp/kdiff3` && $(TAR) kdiff3.tar kdiff3 && $(GZIP) kdiff3.tar ) && $(MOVE) `dirname .tmp/kdiff3`/kdiff3.tar.gz . && $(DEL_FILE) -r .tmp/kdiff3 + +mocclean: + -$(DEL_FILE) $(OBJMOC) + -$(DEL_FILE) $(SRCMOC) + +uiclean: + +yaccclean: +lexclean: +clean: mocclean + -$(DEL_FILE) $(OBJECTS) + -$(DEL_FILE) *~ core *.core + + +####### Sub-libraries + +distclean: clean + -$(DEL_FILE) $(TARGET) $(TARGET) + + +FORCE: + +####### Compile + +main.o: main.cpp kdiff3_shell.h \ + version.h \ + optiondialog.h \ + common.h + +diff.o: diff.cpp diff.h \ + fileaccess.h \ + optiondialog.h \ + common.h + +difftextwindow.o: difftextwindow.cpp difftextwindow.h \ + merger.h \ + optiondialog.h \ + diff.h \ + common.h \ + fileaccess.h + +kdiff3.o: kdiff3.cpp difftextwindow.h \ + mergeresultwindow.h \ + kdiff3.h \ + optiondialog.h \ + fileaccess.h \ + kdiff3_part.h \ + directorymergewindow.h \ + smalldialogs.h \ + xpm/downend.xpm \ + xpm/currentpos.xpm \ + xpm/down1arrow.xpm \ + xpm/down2arrow.xpm \ + xpm/upend.xpm \ + xpm/up1arrow.xpm \ + xpm/up2arrow.xpm \ + xpm/prevunsolved.xpm \ + xpm/nextunsolved.xpm \ + xpm/iconA.xpm \ + xpm/iconB.xpm \ + xpm/iconC.xpm \ + xpm/autoadvance.xpm \ + xpm/showwhitespace.xpm \ + xpm/showwhitespacechars.xpm \ + xpm/showlinenumbers.xpm \ + diff.h \ + common.h + +merger.o: merger.cpp merger.h \ + diff.h \ + common.h \ + fileaccess.h \ + optiondialog.h + +mergeresultwindow.o: mergeresultwindow.cpp mergeresultwindow.h \ + optiondialog.h \ + diff.h \ + common.h \ + fileaccess.h + +optiondialog.o: optiondialog.cpp optiondialog.h \ + diff.h \ + smalldialogs.h \ + common.h \ + fileaccess.h + +pdiff.o: pdiff.cpp difftextwindow.h \ + mergeresultwindow.h \ + directorymergewindow.h \ + smalldialogs.h \ + kdiff3.h \ + optiondialog.h \ + fileaccess.h \ + gnudiff_diff.h \ + diff.h \ + common.h \ + gnudiff_system.h + +directorymergewindow.o: directorymergewindow.cpp directorymergewindow.h \ + optiondialog.h \ + xpm/link_arrow.xpm \ + xpm/file.xpm \ + xpm/folder.xpm \ + xpm/startmerge.xpm \ + xpm/showequalfiles.xpm \ + xpm/showfilesonlyina.xpm \ + xpm/showfilesonlyinb.xpm \ + xpm/showfilesonlyinc.xpm \ + common.h \ + fileaccess.h \ + diff.h + +fileaccess.o: fileaccess.cpp fileaccess.h \ + optiondialog.h \ + common.h + +smalldialogs.o: smalldialogs.cpp smalldialogs.h \ + optiondialog.h \ + diff.h \ + common.h \ + fileaccess.h + +kdiff3_shell.o: kdiff3_shell.cpp kdiff3_shell.h \ + kdiff3.h \ + diff.h \ + common.h \ + fileaccess.h \ + optiondialog.h + +kdiff3_part.o: kdiff3_part.cpp kdiff3_part.h \ + kdiff3.h \ + fileaccess.h \ + version.h \ + diff.h \ + common.h \ + optiondialog.h + +gnudiff_analyze.o: gnudiff_analyze.cpp gnudiff_diff.h \ + gnudiff_system.h + +gnudiff_io.o: gnudiff_io.cpp gnudiff_diff.h \ + gnudiff_system.h + +gnudiff_xmalloc.o: gnudiff_xmalloc.cpp gnudiff_diff.h \ + gnudiff_system.h + +common.o: common.cpp common.h + +kreplacements.o: kreplacements/kreplacements.cpp kreplacements/kreplacements.h \ + common.h \ + xpm/fileopen.xpm \ + xpm/filesave.xpm \ + xpm/fileprint.xpm \ + kreplacements/kreplacements.moc + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o kreplacements.o kreplacements/kreplacements.cpp + +ShellContextMenu.o: kreplacements/ShellContextMenu.cpp kreplacements/ShellContextMenu.h + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o ShellContextMenu.o kreplacements/ShellContextMenu.cpp + +moc_difftextwindow.o: moc_difftextwindow.cpp difftextwindow.h diff.h \ + common.h \ + fileaccess.h \ + optiondialog.h + +moc_mergeresultwindow.o: moc_mergeresultwindow.cpp mergeresultwindow.h diff.h \ + common.h \ + fileaccess.h \ + optiondialog.h + +moc_kdiff3.o: moc_kdiff3.cpp kdiff3.h diff.h \ + common.h \ + fileaccess.h \ + optiondialog.h + +moc_optiondialog.o: moc_optiondialog.cpp optiondialog.h + +moc_kreplacements.o: kreplacements/moc_kreplacements.cpp kreplacements/kreplacements.h common.h + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o moc_kreplacements.o kreplacements/moc_kreplacements.cpp + +moc_directorymergewindow.o: moc_directorymergewindow.cpp directorymergewindow.h common.h \ + fileaccess.h \ + diff.h \ + optiondialog.h + +moc_fileaccess.o: moc_fileaccess.cpp fileaccess.h + +moc_kdiff3_shell.o: moc_kdiff3_shell.cpp kdiff3_shell.h + +moc_kdiff3_part.o: moc_kdiff3_part.cpp kdiff3_part.h + +moc_smalldialogs.o: moc_smalldialogs.cpp smalldialogs.h diff.h \ + common.h \ + fileaccess.h \ + optiondialog.h + +moc_difftextwindow.cpp: $(MOC) difftextwindow.h + $(MOC) difftextwindow.h -o moc_difftextwindow.cpp + +moc_mergeresultwindow.cpp: $(MOC) mergeresultwindow.h + $(MOC) mergeresultwindow.h -o moc_mergeresultwindow.cpp + +moc_kdiff3.cpp: $(MOC) kdiff3.h + $(MOC) kdiff3.h -o moc_kdiff3.cpp + +moc_optiondialog.cpp: $(MOC) optiondialog.h + $(MOC) optiondialog.h -o moc_optiondialog.cpp + +kreplacements/moc_kreplacements.cpp: $(MOC) kreplacements/kreplacements.h + $(MOC) kreplacements/kreplacements.h -o kreplacements/moc_kreplacements.cpp + +moc_directorymergewindow.cpp: $(MOC) directorymergewindow.h + $(MOC) directorymergewindow.h -o moc_directorymergewindow.cpp + +moc_fileaccess.cpp: $(MOC) fileaccess.h + $(MOC) fileaccess.h -o moc_fileaccess.cpp + +moc_kdiff3_shell.cpp: $(MOC) kdiff3_shell.h + $(MOC) kdiff3_shell.h -o moc_kdiff3_shell.cpp + +moc_kdiff3_part.cpp: $(MOC) kdiff3_part.h + $(MOC) kdiff3_part.h -o moc_kdiff3_part.cpp + +moc_smalldialogs.cpp: $(MOC) smalldialogs.h + $(MOC) smalldialogs.h -o moc_smalldialogs.cpp + +####### Install + +install_documentation: all + @$(CHK_DIR_EXISTS) "$(INSTALL_ROOT)/usr/local/share/doc/kdiff3/" || $(MKDIR) "$(INSTALL_ROOT)/usr/local/share/doc/kdiff3/" + -$(INSTALL_DIR) "../doc/da" "$(INSTALL_ROOT)/usr/local/share/doc/kdiff3/" + -$(INSTALL_DIR) "../doc/de" "$(INSTALL_ROOT)/usr/local/share/doc/kdiff3/" + -$(INSTALL_DIR) "../doc/en" "$(INSTALL_ROOT)/usr/local/share/doc/kdiff3/" + -$(INSTALL_DIR) "../doc/et" "$(INSTALL_ROOT)/usr/local/share/doc/kdiff3/" + -$(INSTALL_DIR) "../doc/fr" "$(INSTALL_ROOT)/usr/local/share/doc/kdiff3/" + -$(INSTALL_DIR) "../doc/it" "$(INSTALL_ROOT)/usr/local/share/doc/kdiff3/" + -$(INSTALL_DIR) "../doc/pt" "$(INSTALL_ROOT)/usr/local/share/doc/kdiff3/" + -$(INSTALL_DIR) "../doc/sv" "$(INSTALL_ROOT)/usr/local/share/doc/kdiff3/" + + +uninstall_documentation: + -$(DEL_FILE) -r "$(INSTALL_ROOT)/usr/local/share/doc/kdiff3/da" + -$(DEL_FILE) -r "$(INSTALL_ROOT)/usr/local/share/doc/kdiff3/de" + -$(DEL_FILE) -r "$(INSTALL_ROOT)/usr/local/share/doc/kdiff3/en" + -$(DEL_FILE) -r "$(INSTALL_ROOT)/usr/local/share/doc/kdiff3/et" + -$(DEL_FILE) -r "$(INSTALL_ROOT)/usr/local/share/doc/kdiff3/fr" + -$(DEL_FILE) -r "$(INSTALL_ROOT)/usr/local/share/doc/kdiff3/it" + -$(DEL_FILE) -r "$(INSTALL_ROOT)/usr/local/share/doc/kdiff3/pt" + -$(DEL_FILE) -r "$(INSTALL_ROOT)/usr/local/share/doc/kdiff3/sv" + -$(DEL_DIR) "$(INSTALL_ROOT)/usr/local/share/doc/kdiff3/" + + +install_target: all + @$(CHK_DIR_EXISTS) "$(INSTALL_ROOT)/usr/local/bin/" || $(MKDIR) "$(INSTALL_ROOT)/usr/local/bin/" + -$(INSTALL_FILE) "$(QMAKE_TARGET)" "$(INSTALL_ROOT)/usr/local/bin/$(QMAKE_TARGET)" + +uninstall_target: + -$(DEL_FILE) "$(INSTALL_ROOT)/usr/local/bin/$(QMAKE_TARGET)" + -$(DEL_DIR) "$(INSTALL_ROOT)/usr/local/bin/" + + +install: install_documentation install_target + +uninstall: uninstall_documentation uninstall_target + diff --git a/src/ccInstHelper.cpp b/src/ccInstHelper.cpp new file mode 100644 index 0000000..055e2d6 --- /dev/null +++ b/src/ccInstHelper.cpp @@ -0,0 +1,334 @@ +// uninstallHelper.cpp : Defines the entry point for the console application. +// +#include +#include +#include +#include +#include +#include +#include + +//#define __stdcall + +#ifndef KREPLACEMENTS_H +// For compilation download the NSIS source package and modify the following +// line to point to the exdll.h-file +#include "C:/Programme/NSIS/Contrib/ExDll/exdll.h" +#endif + +struct ReplacementItem +{ char* fileType; char* operationType; }; + +ReplacementItem g_replacementTable[] = { + "text_file_delta", "xcompare", + "text_file_delta", "xmerge", + "whole_copy", "xcompare", + "whole_copy", "xmerge", + "z_text_file_delta", "xcompare", + "z_text_file_delta", "xmerge", + "z_whole_copy", "xcompare", + "z_whole_copy", "xmerge", + "_xml", "xcompare", + "_xml", "xmerge", + "_xml2", "xcompare", + "_xml2", "xmerge", + "_rftdef", "xcompare", + "_rftmap", "xcompare", + "_rftvp", "xcompare", + "_xtools", "xcompare", + 0,0 +}; + +struct LineItem +{ + std::string fileType; + std::string opType; + std::string command; + std::string fileOpPart; +}; + +// Return true if successful, else false +bool readAndParseMapFile( const std::string& filename, std::list& lineItemList ) +{ + // Read file + FILE* pFile = fopen( filename.c_str(), "r" ); + if (pFile) + { + fseek(pFile,0,SEEK_END); + int size = ftell(pFile); + fseek(pFile,0,SEEK_SET); + std::vector buf( size ); + fread( &buf[0], 1, size, pFile ); + fclose( pFile ); + + // Replace strings + int lineStartPos=0; + int wordInLine = 0; + LineItem lineItem; + for( int i=0; i& lineItemList ) +{ + FILE* pFile = fopen( filename.c_str(), "w" ); + if (pFile) + { + std::list::const_iterator i = lineItemList.begin(); + for( ; i!=lineItemList.end(); ++i ) + { + const LineItem& li = *i; + fprintf( pFile, "%s%s\n", li.fileOpPart.c_str(), li.command.c_str() ); + } + fclose( pFile ); + } + else + { + return false; + } + return true; +} + +std::string toUpper( const std::string& s ) +{ + std::string s2 = s; + + for( unsigned int i=0; i0 && len+1 lineItemList; + bool bSuccess = readAndParseMapFile( path, lineItemList ); + if ( !bSuccess ) + { + std::cerr << "Error reading original map file.\n"; + return -1; + } + + // Create backup + if ( access( bakName.c_str(), 0 )!=0 ) // Create backup only if not exists yet + { + if ( rename( path.c_str(), bakName.c_str() ) ) + { + std::cerr << "Error renaming original map file.\n"; + return -1; + } + } + + std::list::iterator i = lineItemList.begin(); + for( ; i!=lineItemList.end(); ++i ) + { + LineItem& li = *i; + for (int j=0;;++j) + { + ReplacementItem& ri = g_replacementTable[j]; + if ( ri.fileType==0 || ri.operationType==0 ) + break; + if ( li.fileType == ri.fileType && li.opType == ri.operationType ) + { + li.command = kdiff3Command.c_str(); + break; + } + } + } + + bSuccess = writeMapFile( path, lineItemList ); + if ( !bSuccess ) + { + if ( rename( bakName.c_str(), path.c_str() ) ) + std::cerr << "Error writing new map file, restoring old file also failed.\n"; + else + std::cerr << "Error writing new map file, old file restored.\n"; + + return -1; + } + } + else if ( installCommand == "uninstall" ) + { + std::list lineItemList; + bool bSuccess = readAndParseMapFile( path, lineItemList ); + if ( !bSuccess ) + { + std::cerr << "Error reading original map file\n."; + return -1; + } + + std::list lineItemListBak; + bSuccess = readAndParseMapFile( bakName, lineItemListBak ); + if ( !bSuccess ) + { + std::cerr << "Error reading backup map file.\n"; + return -1; + } + + std::list::iterator i = lineItemList.begin(); + for( ; i!=lineItemList.end(); ++i ) + { + LineItem& li = *i; + if ((int)toUpper(li.command).find("KDIFF3")>=0) + { + std::list::const_iterator j = lineItemListBak.begin(); + for (;j!=lineItemListBak.end();++j) + { + const LineItem& bi = *j; // backup iterator + if ( li.fileType == bi.fileType && li.opType == bi.opType ) + { + li.command = bi.command; + break; + } + } + } + } + + bSuccess = writeMapFile( path, lineItemList ); + if ( !bSuccess ) + { + std::cerr << "Error writing map file."; + + return -1; + } + } + } + return 0; +} + +#ifndef KREPLACEMENTS_H + +extern "C" +void __declspec(dllexport) nsisPlugin(HWND hwndParent, int string_size, + char *variables, stack_t **stacktop, + extra_parameters *extra) +{ + //g_hwndParent=hwndParent; + + EXDLL_INIT(); + { + std::string param1( g_stringsize, ' ' ); + int retVal = popstring( ¶m1[0] ); + if ( retVal == 0 ) + { + std::string param2( g_stringsize, ' ' ); + retVal = popstring( ¶m2[0] ); + if ( retVal == 0 ) + install( param1.c_str(), param2.c_str() ); + return; + } + std::cerr << "Not enough parameters." << std::endl; + } +} + +#endif +/* +int _tmain(int argc, _TCHAR* argv[]) +{ + if ( argc<3 ) + { + std::cout << "This program is needed to install/uninstall KDiff3 for clearcase.\n" + "It tries to patch the map file (clearcase-subdir\\lib\\mgrs\\map)\n" + "Usage 1: ccInstHelper install pathToKdiff3.exe\n" + "Usage 2: ccInstHelper uninstall pathToKdiff3.exe\n" + "Backups of the original map files are created in the dir of the map file.\n"; + } + else + { + return install( argv[1], argv[2] ); + } + + return 0; +} +*/ diff --git a/src/common.cpp b/src/common.cpp new file mode 100644 index 0000000..a05920e --- /dev/null +++ b/src/common.cpp @@ -0,0 +1,341 @@ +/*************************************************************************** + * Copyright (C) 2004-2007 by Joachim Eibl * + * joachim.eibl at gmx.de * + * * + * 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., * + * 51 Franklin Steet, Fifth Floor, Boston, MA 02110-1301, USA. * + ***************************************************************************/ + +#include "common.h" +#include +#include +#include +#include +#include +#include +#include + +ValueMap::ValueMap() +{ +} + +ValueMap::~ValueMap() +{ +} + +void ValueMap::save( QTextStream& ts ) +{ + std::map::iterator i; + for( i=m_map.begin(); i!=m_map.end(); ++i) + { + QString key = i->first; + QString val = i->second; + ts << key << "=" << val << "\n"; + } +} + +QString ValueMap::getAsString() +{ + QString result; + std::map::iterator i; + for( i=m_map.begin(); i!=m_map.end(); ++i) + { + QString key = i->first; + QString val = i->second; + result += key + "=" + val + "\n"; + } + return result; +} + +void ValueMap::load( QTextStream& ts ) +{ + while ( !ts.eof() ) + { // until end of file... + QString s = ts.readLine(); // line of text excluding '\n' + int pos = s.find('='); + if( pos > 0 ) // seems not to have a tag + { + QString key = s.left(pos); + QString val = s.mid(pos+1); + m_map[key] = val; + } + } +} +/* +void ValueMap::load( const QString& s ) +{ + int pos=0; + while ( pos<(int)s.length() ) + { // until end of file... + int pos2 = s.find('=', pos); + int pos3 = s.find('\n', pos2 ); + if (pos3<0) + pos3=s.length(); + if( pos2 > 0 ) // seems not to have a tag + { + QString key = s.mid(pos, pos2-pos); + QString val = s.mid(pos2+1, pos3-pos2-1); + m_map[key] = val; + } + pos = pos3; + } +} +*/ + +// safeStringJoin and safeStringSplit allow to convert a stringlist into a string and back +// safely, even if the individual strings in the list contain the separator character. +QString safeStringJoin(const QStringList& sl, char sepChar, char metaChar ) +{ + // Join the strings in the list, using the separator ',' + // If a string contains the separator character, it will be replaced with "\,". + // Any occurances of "\" (one backslash) will be replaced with "\\" (2 backslashes) + + assert(sepChar!=metaChar); + + QString sep; + sep += sepChar; + QString meta; + meta += metaChar; + + QString safeString; + + QStringList::const_iterator i; + for (i=sl.begin(); i!=sl.end(); ++i) + { + QString s = *i; + s.replace(meta, meta+meta); // "\" -> "\\" + s.replace(sep, meta+sep); // "," -> "\," + if ( i==sl.begin() ) + safeString = s; + else + safeString += sep + s; + } + return safeString; +} + +// Split a string that was joined with safeStringJoin +QStringList safeStringSplit(const QString& s, char sepChar, char metaChar ) +{ + assert(sepChar!=metaChar); + QStringList sl; + // Miniparser + int i=0; + int len=s.length(); + QString b; + for(i=0;i0 ) + { + pos = s.find( sep, pos ); + --idx; + if (pos<0) break; + ++pos; + } + if ( pos>=0 ) + { + int pos2 = s.find( sep, pos ); + if ( pos2>0 ) + return s.mid(pos, pos2-pos); + else + return s.mid(pos); + } + + return ""; +} + +static int num( QString& s, int idx ) +{ + return subSection( s, idx, ',').toInt(); +} + +void ValueMap::writeEntry(const QString& k, const QFont& v ) +{ + m_map[k] = v.family() + "," + QString::number(v.pointSize()) + "," + (v.bold() ? "bold" : "normal"); +} + +void ValueMap::writeEntry(const QString& k, const QColor& v ) +{ + m_map[k] = numStr(v.red()) + "," + numStr(v.green()) + "," + numStr(v.blue()); +} + +void ValueMap::writeEntry(const QString& k, const QSize& v ) +{ + m_map[k] = numStr(v.width()) + "," + numStr(v.height()); +} + +void ValueMap::writeEntry(const QString& k, const QPoint& v ) +{ + m_map[k] = numStr(v.x()) + "," + numStr(v.y()); +} + +void ValueMap::writeEntry(const QString& k, int v ) +{ + m_map[k] = numStr(v); +} + +void ValueMap::writeEntry(const QString& k, bool v ) +{ + m_map[k] = numStr(v); +} + +void ValueMap::writeEntry(const QString& k, const QString& v ) +{ + m_map[k] = v; +} + +void ValueMap::writeEntry(const QString& k, const char* v ) +{ + m_map[k] = v; +} + +void ValueMap::writeEntry(const QString& k, const QStringList& v, char separator ) +{ + m_map[k] = safeStringJoin(v, separator); +} + + +QFont ValueMap::readFontEntry(const QString& k, QFont* defaultVal ) +{ + QFont f = *defaultVal; + std::map::iterator i = m_map.find( k ); + if ( i!=m_map.end() ) + { + f.setFamily( subSection( i->second, 0, ',' ) ); + f.setPointSize( subSection( i->second, 1, ',' ).toInt() ); + f.setBold( subSection( i->second, 2, ',' )=="bold" ); + //f.fromString(i->second); + } + + return f; +} + +QColor ValueMap::readColorEntry(const QString& k, QColor* defaultVal ) +{ + QColor c= *defaultVal; + std::map::iterator i = m_map.find( k ); + if ( i!=m_map.end() ) + { + QString s = i->second; + c = QColor( num(s,0),num(s,1),num(s,2) ); + } + + return c; +} + +QSize ValueMap::readSizeEntry(const QString& k, QSize* defaultVal ) +{ + QSize size = defaultVal ? *defaultVal : QSize(600,400); + std::map::iterator i = m_map.find( k ); + if ( i!=m_map.end() ) + { + + QString s = i->second; + size = QSize( num(s,0),num(s,1) ); + } + + return size; +} + +QPoint ValueMap::readPointEntry(const QString& k, QPoint* defaultVal) +{ + QPoint point = defaultVal ? *defaultVal : QPoint(0,0); + std::map::iterator i = m_map.find( k ); + if ( i!=m_map.end() ) + { + QString s = i->second; + point = QPoint( num(s,0),num(s,1) ); + } + + return point; +} + +bool ValueMap::readBoolEntry(const QString& k, bool bDefault ) +{ + bool b = bDefault; + std::map::iterator i = m_map.find( k ); + if ( i!=m_map.end() ) + { + QString s = i->second; + b = (bool)num(s,0); + } + + return b; +} + +int ValueMap::readNumEntry(const QString& k, int iDefault ) +{ + int ival = iDefault; + std::map::iterator i = m_map.find( k ); + if ( i!=m_map.end() ) + { + QString s = i->second; + ival = num(s,0); + } + + return ival; +} + +QString ValueMap::readEntry(const QString& k, const QString& sDefault ) +{ + QString sval = sDefault; + std::map::iterator i = m_map.find( k ); + if ( i!=m_map.end() ) + { + sval = i->second; + } + + return sval; +} + +QStringList ValueMap::readListEntry(const QString& k, const QStringList& defaultVal, char separator ) +{ + QStringList strList; + + std::map::iterator i = m_map.find( k ); + if ( i!=m_map.end() ) + { + strList = safeStringSplit( i->second, separator ); + return strList; + } + else + return defaultVal; +} diff --git a/src/common.h b/src/common.h new file mode 100644 index 0000000..b78d5bc --- /dev/null +++ b/src/common.h @@ -0,0 +1,113 @@ +/*************************************************************************** + common.h - Things that are needed often + ------------------- + begin : Mon Mar 18 2002 + copyright : (C) 2002-2007 by Joachim Eibl + email : joachim.eibl at gmx.de + ***************************************************************************/ + +/*************************************************************************** + * * + * 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. * + * * + ***************************************************************************/ + +#ifndef _COMMON_H +#define _COMMON_H + +#include + +template< class T > +T min2( T x, T y ) +{ + return x +T max2( T x, T y ) +{ + return x>y ? x : y; +} + +typedef unsigned char UINT8; +typedef unsigned short UINT16; +typedef unsigned int UINT32; + + +template +T min3( T d1, T d2, T d3 ) +{ + if ( d1 < d2 && d1 < d3 ) return d1; + if ( d2 < d3 ) return d2; + return d3; +} + +template +T max3( T d1, T d2, T d3 ) +{ + + if ( d1 > d2 && d1 > d3 ) return d1; + + + if ( d2 > d3 ) return d2; + return d3; + +} + +template +T minMaxLimiter( T d, T minimum, T maximum ) +{ + assert(minimum<=maximum); + if ( d < minimum ) return minimum; + if ( d > maximum ) return maximum; + return d; +} + +#include +#include +class QFont; +class QColor; +class QSize; +class QPoint; +class QStringList; +class QTextStream; + +class ValueMap +{ +private: + std::map m_map; +public: + ValueMap(); + virtual ~ValueMap(); + + void save( QTextStream& ts ); + void load( QTextStream& ts ); + QString getAsString(); + // void load( const QString& s ); + + virtual void writeEntry(const QString&, const QFont& ); + virtual void writeEntry(const QString&, const QColor& ); + virtual void writeEntry(const QString&, const QSize& ); + virtual void writeEntry(const QString&, const QPoint& ); + virtual void writeEntry(const QString&, int ); + virtual void writeEntry(const QString&, bool ); + virtual void writeEntry(const QString&, const QStringList&, char separator ); + virtual void writeEntry(const QString&, const QString& ); + virtual void writeEntry(const QString&, const char* ); + + virtual QFont readFontEntry (const QString&, QFont* defaultVal ); + virtual QColor readColorEntry(const QString&, QColor* defaultVal ); + virtual QSize readSizeEntry (const QString&, QSize* defaultVal ); + virtual QPoint readPointEntry(const QString&, QPoint* defaultVal ); + virtual bool readBoolEntry (const QString&, bool bDefault ); + virtual int readNumEntry (const QString&, int iDefault ); + virtual QStringList readListEntry (const QString&, const QStringList& defaultVal, char separator ); + virtual QString readEntry (const QString&, const QString& ); +}; + +QStringList safeStringSplit(const QString& s, char sepChar=',', char metaChar='\\' ); +QString safeStringJoin(const QStringList& sl, char sepChar=',', char metaChar='\\' ); + +#endif diff --git a/src/diff.cpp b/src/diff.cpp new file mode 100644 index 0000000..7875bc6 --- /dev/null +++ b/src/diff.cpp @@ -0,0 +1,1920 @@ +/*************************************************************************** + diff.cpp - description + ------------------- + begin : Mon Mar 18 2002 + copyright : (C) 2002-2007 by Joachim Eibl + email : joachim.eibl at gmx.de + ***************************************************************************/ + +/*************************************************************************** + * * + * 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. * + * * + ***************************************************************************/ + +#include +#include +#include + +#include "diff.h" +#include "fileaccess.h" +#include "optiondialog.h" + +#include +#include +#include +#include +#include + +#include +#include +#include +//using namespace std; + + +int LineData::width(int tabSize) const +{ + int w=0; + int j=0; + for( int i=0; i=5 || l2.occurances>=5) ) + return false; + + // Ignore white space diff + const QChar* p1 = l1.pLine; + const QChar* p1End = p1 + l1.size; + + const QChar* p2 = l2.pLine; + const QChar* p2End = p2 + l2.size; + + if ( g_bIgnoreWhiteSpace ) + { + int nonWhite = 0; + for(;;) + { + while( isWhite( *p1 ) && p1!=p1End ) ++p1; + while( isWhite( *p2 ) && p2!=p2End ) ++p2; + + if ( p1 == p1End && p2 == p2End ) + { + if ( bStrict && g_bIgnoreTrivialMatches ) + { // Then equality is not enough + return nonWhite>2; + } + else // equality is enough + return true; + } + else if ( p1 == p1End || p2 == p2End ) + return false; + + if( *p1 != *p2 ) + return false; + ++p1; + ++p2; + ++nonWhite; + } + } + + else + { + if ( l1.size==l2.size && memcmp(p1, p2, l1.size)==0) + return true; + else + return false; + } +} + + +static bool isLineOrBufEnd( const QChar* p, int i, int size ) +{ + return + i>=size // End of file + || p[i]=='\n' // Normal end of line + + // No support for Mac-end of line yet, because incompatible with GNU-diff-routines. + // || ( p[i]=='\r' && (i>=size-1 || p[i+1]!='\n') + // && (i==0 || p[i-1]!='\n') ) // Special case: '\r' without '\n' + ; +} + + +/* Features of class SourceData: +- Read a file (from the given URL) or accept data via a string. +- Allocate and free buffers as necessary. +- Run a preprocessor, when specified. +- Run the line-matching preprocessor, when specified. +- Run other preprocessing steps: Uppercase, ignore comments, + remove carriage return, ignore numbers. + +Order of operation: + 1. If data was given via a string then save it to a temp file. (see setData()) + 2. If the specified file is nonlocal (URL) copy it to a temp file. + 3. If a preprocessor was specified, run the input file through it. + 4. Read the output of the preprocessor. + 5. If Uppercase was specified: Turn the read data to uppercase. + 6. Write the result to a temp file. + 7. If a line-matching preprocessor was specified, run the temp file through it. + 8. Read the output of the line-matching preprocessor. + 9. If ignore numbers was specified, strip the LMPP-output of all numbers. +10. If ignore comments was specified, strip the LMPP-output of comments. + +Optimizations: Skip unneeded steps. +*/ + +SourceData::SourceData() +{ + m_pOptionDialog = 0; + reset(); +} + +SourceData::~SourceData() +{ + reset(); +} + +void SourceData::reset() +{ + m_pEncoding = 0; + m_fileAccess = FileAccess(); + m_normalData.reset(); + m_lmppData.reset(); + if ( !m_tempInputFileName.isEmpty() ) + { + FileAccess::removeFile( m_tempInputFileName ); + m_tempInputFileName = ""; + } +} + +void SourceData::setFilename( const QString& filename ) +{ + if (filename.isEmpty()) + { + reset(); + } + else + { + FileAccess fa( filename ); + setFileAccess( fa ); + } +} + +bool SourceData::isEmpty() +{ + return getFilename().isEmpty(); +} + +bool SourceData::hasData() +{ + return m_normalData.m_pBuf != 0; +} + +bool SourceData::isValid() +{ + return isEmpty() || hasData(); +} + +void SourceData::setOptionDialog( OptionDialog* pOptionDialog ) +{ + m_pOptionDialog = pOptionDialog; +} + +QString SourceData::getFilename() +{ + return m_fileAccess.absFilePath(); +} + +QString SourceData::getAliasName() +{ + return m_aliasName.isEmpty() ? m_fileAccess.prettyAbsPath() : m_aliasName; +} + +void SourceData::setAliasName( const QString& name ) +{ + m_aliasName = name; +} + +void SourceData::setFileAccess( const FileAccess& fileAccess ) +{ + m_fileAccess = fileAccess; + m_aliasName = QString(); + if ( !m_tempInputFileName.isEmpty() ) + { + FileAccess::removeFile( m_tempInputFileName ); + m_tempInputFileName = ""; + } +} + +void SourceData::setData( const QString& data ) +{ + // Create a temp file for preprocessing: + if ( m_tempInputFileName.isEmpty() ) + { + m_tempInputFileName = FileAccess::tempFileName(); + } + + FileAccess f( m_tempInputFileName ); + bool bSuccess = f.writeFile( QTextCodec::codecForName("UTF-8")->fromUnicode(data), data.length() ); + if ( !bSuccess ) + { + KMessageBox::error( m_pOptionDialog, i18n("Writing clipboard data to temp file failed.") ); + return; + } + + m_aliasName = i18n("From Clipboard"); + m_fileAccess = FileAccess(""); // Effect: m_fileAccess.isValid() is false +} + +const LineData* SourceData::getLineDataForDiff() const +{ + if ( m_lmppData.m_pBuf==0 ) + return m_normalData.m_v.size()>0 ? &m_normalData.m_v[0] : 0; + else + return m_lmppData.m_v.size()>0 ? &m_lmppData.m_v[0] : 0; +} + +const LineData* SourceData::getLineDataForDisplay() const +{ + return m_normalData.m_v.size()>0 ? &m_normalData.m_v[0] : 0; +} + +int SourceData::getSizeLines() const +{ + return m_normalData.m_vSize; +} + +int SourceData::getSizeBytes() const +{ + return m_normalData.m_size; +} + +const char* SourceData::getBuf() const +{ + return m_normalData.m_pBuf; +} + +bool SourceData::isText() +{ + return m_normalData.m_bIsText; +} + +bool SourceData::isFromBuffer() +{ + return !m_fileAccess.isValid(); +} + + +bool SourceData::isBinaryEqualWith( const SourceData& other ) const +{ + return m_fileAccess.exists() && other.m_fileAccess.exists() && + getSizeBytes() == other.getSizeBytes() && + ( getSizeBytes()==0 || memcmp( getBuf(), other.getBuf(), getSizeBytes() )==0 ); +} + +void SourceData::FileData::reset() +{ + delete[] (char*)m_pBuf; + m_pBuf = 0; + m_v.clear(); + m_size = 0; + m_vSize = 0; + m_bIsText = true; +} + +bool SourceData::FileData::readFile( const QString& filename ) +{ + reset(); + if ( filename.isEmpty() ) { return true; } + + FileAccess fa( filename ); + m_size = fa.sizeForReading(); + char* pBuf; + m_pBuf = pBuf = new char[m_size+100]; // Alloc 100 byte extra: Savety hack, not nice but does no harm. + // Some extra bytes at the end of the buffer are needed by + // the diff algorithm. See also GnuDiff::diff_2_files(). + bool bSuccess = fa.readFile( pBuf, m_size ); + if ( !bSuccess ) + { + delete pBuf; + m_pBuf = 0; + m_size = 0; + } + return bSuccess; +} + +bool SourceData::saveNormalDataAs( const QString& fileName ) +{ + return m_normalData.writeFile( fileName ); +} + +bool SourceData::FileData::writeFile( const QString& filename ) +{ + if ( filename.isEmpty() ) { return true; } + + FileAccess fa( filename ); + bool bSuccess = fa.writeFile(m_pBuf, m_size); + return bSuccess; +} + +void SourceData::FileData::copyBufFrom( const FileData& src ) +{ + reset(); + char* pBuf; + m_size = src.m_size; + m_pBuf = pBuf = new char[m_size+100]; + memcpy( pBuf, src.m_pBuf, m_size ); +} + +// Convert the input file from input encoding to output encoding and write it to the output file. +static bool convertFileEncoding( const QString& fileNameIn, QTextCodec* pCodecIn, + const QString& fileNameOut, QTextCodec* pCodecOut ) +{ + QFile in( fileNameIn ); + if ( ! in.open(IO_ReadOnly ) ) + return false; + QTextStream inStream( &in ); + inStream.setCodec( pCodecIn ); + //inStream.setAutoDetectUnicode( false ); //not available in Qt3, will always detect UCS2 + + QFile out( fileNameOut ); + if ( ! out.open( IO_WriteOnly ) ) + return false; + QTextStream outStream( &out ); + outStream.setCodec( pCodecOut ); + + QString data = inStream.read(); + outStream << data; + + return true; +} + +static QTextCodec* detectEncoding( const char* buf, long size, long& skipBytes ) +{ + if (size>=2) + { + skipBytes = 0; // In Qt3 UTF-16LE can only be used if autodetected. + if (buf[0]=='\xFF' && buf[1]=='\xFE' ) + return QTextCodec::codecForName( "ISO-10646-UCS2" );// "UTF-16LE" + + if (buf[0]=='\xFE' && buf[1]=='\xFF' ) + return QTextCodec::codecForName( "ISO-10646-UCS2" );// "UTF-16BE". Qt3 autodetects the difference but has no name for it. + } + if (size>=3) + { + skipBytes = 3; + if (buf[0]=='\xEF' && buf[1]=='\xBB' && buf[2]=='\xBF' ) + return QTextCodec::codecForName( "UTF-8-BOM" ); + } + skipBytes = 0; + return 0; +} + +QTextCodec* SourceData::detectEncoding( const QString& fileName, QTextCodec* pFallbackCodec ) +{ + QFile f(fileName); + if ( f.open(IO_ReadOnly) ) + { + char buf[4]; + long size = f.readBlock( buf, sizeof(buf) ); + long skipBytes = 0; + QTextCodec* pCodec = ::detectEncoding( buf, size, skipBytes ); + if (pCodec) + return pCodec; + } + return pFallbackCodec; +} + +void SourceData::readAndPreprocess( QTextCodec* pEncoding, bool bAutoDetectUnicode ) +{ + m_pEncoding = pEncoding; + QString fileNameIn1; + QString fileNameOut1; + QString fileNameIn2; + QString fileNameOut2; + + bool bTempFileFromClipboard = !m_fileAccess.isValid(); + + // Detect the input for the preprocessing operations + if ( !bTempFileFromClipboard ) + { + if ( m_fileAccess.isLocal() ) + { + fileNameIn1 = m_fileAccess.absFilePath(); + } + else // File is not local: create a temporary local copy: + { + if ( m_tempInputFileName.isEmpty() ) { m_tempInputFileName = FileAccess::tempFileName(); } + + m_fileAccess.copyFile(m_tempInputFileName); + fileNameIn1 = m_tempInputFileName; + } + if ( bAutoDetectUnicode ) + { + m_pEncoding = detectEncoding( fileNameIn1, pEncoding ); + } + } + else // The input was set via setData(), probably from clipboard. + { + fileNameIn1 = m_tempInputFileName; + m_pEncoding = QTextCodec::codecForName("UTF-8"); + } + QTextCodec* pEncoding1 = m_pEncoding; + QTextCodec* pEncoding2 = m_pEncoding; + + m_normalData.reset(); + m_lmppData.reset(); + + FileAccess faIn(fileNameIn1); + int fileInSize = faIn.size(); + + if ( faIn.exists() ) // fileInSize > 0 ) + { + +#ifdef _WIN32 + QString catCmd = "type"; + fileNameIn1.replace( '/', "\\" ); +#else + QString catCmd = "cat"; +#endif + + // Run the first preprocessor + if ( m_pOptionDialog->m_PreProcessorCmd.isEmpty() ) + { + // No preprocessing: Read the file directly: + m_normalData.readFile( fileNameIn1 ); + } + else + { + QString fileNameInPP = fileNameIn1; + + if ( pEncoding1 != m_pOptionDialog->m_pEncodingPP ) + { + // Before running the preprocessor convert to the format that the preprocessor expects. + fileNameInPP = FileAccess::tempFileName(); + pEncoding1 = m_pOptionDialog->m_pEncodingPP; + convertFileEncoding( fileNameIn1, pEncoding, fileNameInPP, pEncoding1 ); + } + + QString ppCmd = m_pOptionDialog->m_PreProcessorCmd; + fileNameOut1 = FileAccess::tempFileName(); + QString cmd = catCmd + " \"" + fileNameInPP + "\" | " + ppCmd + " >\"" + fileNameOut1+"\""; + ::system( encodeString(cmd) ); + bool bSuccess = m_normalData.readFile( fileNameOut1 ); + if ( fileInSize >0 && ( !bSuccess || m_normalData.m_size==0 ) ) + { + KMessageBox::error(m_pOptionDialog, + i18n("Preprocessing possibly failed. Check this command:\n\n %1" + "\n\nThe preprocessing command will be disabled now." + ).arg(cmd) ); + m_pOptionDialog->m_PreProcessorCmd = ""; + m_normalData.readFile( fileNameIn1 ); + pEncoding1 = m_pEncoding; + } + if (fileNameInPP != fileNameIn1) + { + FileAccess::removeTempFile( fileNameInPP ); + } + } + + // LineMatching Preprocessor + if ( ! m_pOptionDialog->m_LineMatchingPreProcessorCmd.isEmpty() ) + { + fileNameIn2 = fileNameOut1.isEmpty() ? fileNameIn1 : fileNameOut1; + QString fileNameInPP = fileNameIn2; + pEncoding2 = pEncoding1; + if ( pEncoding2 != m_pOptionDialog->m_pEncodingPP ) + { + // Before running the preprocessor convert to the format that the preprocessor expects. + fileNameInPP = FileAccess::tempFileName(); + pEncoding2 = m_pOptionDialog->m_pEncodingPP; + convertFileEncoding( fileNameIn2, pEncoding1, fileNameInPP, pEncoding2 ); + } + + QString ppCmd = m_pOptionDialog->m_LineMatchingPreProcessorCmd; + fileNameOut2 = FileAccess::tempFileName(); + QString cmd = catCmd + " \"" + fileNameInPP + "\" | " + ppCmd + " >\"" + fileNameOut2 + "\""; + ::system( encodeString(cmd) ); + bool bSuccess = m_lmppData.readFile( fileNameOut2 ); + if ( FileAccess(fileNameIn2).size()>0 && ( !bSuccess || m_lmppData.m_size==0 ) ) + { + KMessageBox::error(m_pOptionDialog, + i18n("The line-matching-preprocessing possibly failed. Check this command:\n\n %1" + "\n\nThe line-matching-preprocessing command will be disabled now." + ).arg(cmd) ); + m_pOptionDialog->m_LineMatchingPreProcessorCmd = ""; + m_lmppData.readFile( fileNameIn2 ); + } + FileAccess::removeTempFile( fileNameOut2 ); + if (fileNameInPP != fileNameIn2) + { + FileAccess::removeTempFile( fileNameInPP ); + } + } + else if ( m_pOptionDialog->m_bIgnoreComments || m_pOptionDialog->m_bIgnoreCase ) + { + // We need a copy of the normal data. + m_lmppData.copyBufFrom( m_normalData ); + } + else + { // We don't need any lmpp data at all. + m_lmppData.reset(); + } + } + + m_normalData.preprocess( m_pOptionDialog->m_bPreserveCarriageReturn, pEncoding1 ); + m_lmppData.preprocess( false, pEncoding2 ); + + if ( m_lmppData.m_vSize < m_normalData.m_vSize ) + { + // This probably is the fault of the LMPP-Command, but not worth reporting. + m_lmppData.m_v.resize( m_normalData.m_vSize ); + for(int i=m_lmppData.m_vSize; im_bIgnoreCase ) + { + int i; + QChar* pBuf = const_cast(m_lmppData.m_unicodeBuf.unicode()); + int ucSize = m_lmppData.m_unicodeBuf.length(); + for(i=0; im_bIgnoreComments ) + { + m_lmppData.removeComments(); + int vSize = min2(m_normalData.m_vSize, m_lmppData.m_vSize); + for(int i=0; i0 && m_v[lineIdx].pLine[lineLength-1]=='\r' ) + { + --lineLength; + } + m_v[lineIdx].pFirstNonWhiteChar = m_v[lineIdx].pLine + min2(whiteLength,lineLength); + m_v[lineIdx].size = lineLength; + lineLength = 0; + bNonWhiteFound = false; + whiteLength = 0; + ++lineIdx; + } + else + { + ++lineLength; + + if ( ! bNonWhiteFound && isWhite( p[i] ) ) + ++whiteLength; + else + bNonWhiteFound = true; + } + } + assert( lineIdx == lines ); + + m_vSize = lines; +} + + +// Must not be entered, when within a comment. +// Returns either at a newline-character p[i]=='\n' or when i==size. +// A line that contains only comments is still "white". +// Comments in white lines must remain, while comments in +// non-white lines are overwritten with spaces. +static void checkLineForComments( + QChar* p, // pointer to start of buffer + int& i, // index of current position (in, out) + int size, // size of buffer + bool& bWhite, // false if this line contains nonwhite characters (in, out) + bool& bCommentInLine, // true if any comment is within this line (in, out) + bool& bStartsOpenComment // true if the line ends within an comment (out) + ) +{ + bStartsOpenComment = false; + for(; i(m_unicodeBuf.unicode()); + bool bWithinComment=false; + int size = m_unicodeBuf.length(); + for(int i=0; ibegin(); + int lineA=0; + int lineB=0; + Diff d(0,0,0); + + for(;;) + { + if ( d.nofEquals==0 && d.diff1==0 && d.diff2==0 ) + { + if ( i!=pDiffListAB->end() ) + { + d=*i; + ++i; + } + else + break; + } + + Diff3Line d3l; + if( d.nofEquals>0 ) + { + d3l.bAEqB = true; + d3l.lineA = lineA; + d3l.lineB = lineB; + --d.nofEquals; + ++lineA; + ++lineB; + } + else if ( d.diff1>0 && d.diff2>0 ) + { + d3l.lineA = lineA; + d3l.lineB = lineB; + --d.diff1; + --d.diff2; + ++lineA; + ++lineB; + } + else if ( d.diff1>0 ) + { + d3l.lineA = lineA; + --d.diff1; + ++lineA; + } + else if ( d.diff2>0 ) + { + d3l.lineB = lineB; + --d.diff2; + ++lineB; + } + + d3ll.push_back( d3l ); + } +} + + +// Second step +void calcDiff3LineListUsingAC( + const DiffList* pDiffListAC, + Diff3LineList& d3ll + ) +{ + //////////////// + // Now insert data from C using pDiffListAC + + DiffList::const_iterator i=pDiffListAC->begin(); + Diff3LineList::iterator i3 = d3ll.begin(); + int lineA=0; + int lineC=0; + Diff d(0,0,0); + + for(;;) + { + if ( d.nofEquals==0 && d.diff1==0 && d.diff2==0 ) + { + if ( i!=pDiffListAC->end() ) + { + d=*i; + ++i; + } + else + break; + } + + Diff3Line d3l; + if( d.nofEquals>0 ) + { + // Find the corresponding lineA + while( (*i3).lineA!=lineA ) + ++i3; + + (*i3).lineC = lineC; + (*i3).bAEqC = true; + (*i3).bBEqC = (*i3).bAEqB; + + --d.nofEquals; + ++lineA; + ++lineC; + ++i3; + } + else if ( d.diff1>0 && d.diff2>0 ) + { + d3l.lineC = lineC; + d3ll.insert( i3, d3l ); + --d.diff1; + --d.diff2; + ++lineA; + ++lineC; + } + else if ( d.diff1>0 ) + { + --d.diff1; + ++lineA; + } + else if ( d.diff2>0 ) + { + d3l.lineC = lineC; + d3ll.insert( i3, d3l ); + --d.diff2; + ++lineC; + } + } +} + +// Third step +void calcDiff3LineListUsingBC( + const DiffList* pDiffListBC, + Diff3LineList& d3ll + ) +{ + //////////////// + // Now improve the position of data from C using pDiffListBC + // If a line from C equals a line from A then it is in the + // same Diff3Line already. + // If a line from C equals a line from B but not A, this + // information will be used here. + + DiffList::const_iterator i=pDiffListBC->begin(); + Diff3LineList::iterator i3b = d3ll.begin(); + Diff3LineList::iterator i3c = d3ll.begin(); + int lineB=0; + int lineC=0; + Diff d(0,0,0); + + for(;;) + { + if ( d.nofEquals==0 && d.diff1==0 && d.diff2==0 ) + { + if ( i!=pDiffListBC->end() ) + { + d=*i; + ++i; + } + else + break; + } + + Diff3Line d3l; + if( d.nofEquals>0 ) + { + // Find the corresponding lineB and lineC + while( i3b!=d3ll.end() && (*i3b).lineB!=lineB ) + ++i3b; + + while( i3c!=d3ll.end() && (*i3c).lineC!=lineC ) + ++i3c; + + assert(i3b!=d3ll.end()); + assert(i3c!=d3ll.end()); + + if ( i3b==i3c ) + { + assert( (*i3b).lineC == lineC ); + (*i3b).bBEqC = true; + } + else + { + // Is it possible to move this line up? + // Test if no other B's are used between i3c and i3b + + // First test which is before: i3c or i3b ? + Diff3LineList::iterator i3c1 = i3c; + Diff3LineList::iterator i3b1 = i3b; + while( i3c1!=i3b && i3b1!=i3c ) + { + assert(i3b1!=d3ll.end() || i3c1!=d3ll.end()); + if( i3c1!=d3ll.end() ) ++i3c1; + if( i3b1!=d3ll.end() ) ++i3b1; + } + + if( i3c1==i3b && !(*i3b).bAEqB ) // i3c before i3b + { + Diff3LineList::iterator i3 = i3c; + int nofDisturbingLines = 0; + while( i3 != i3b && i3!=d3ll.end() ) + { + if ( (*i3).lineB != -1 ) + ++nofDisturbingLines; + ++i3; + } + + if ( nofDisturbingLines>0 )//&& nofDisturbingLines < d.nofEquals*d.nofEquals+4 ) + { + // Move the disturbing lines up, out of sight. + i3 = i3c; + while( i3 != i3b ) + { + if ( (*i3).lineB != -1 ) + { + Diff3Line d3l; + d3l.lineB = (*i3).lineB; + (*i3).lineB = -1; + (*i3).bAEqB = false; + (*i3).bBEqC = false; + d3ll.insert( i3c, d3l ); + } + ++i3; + } + nofDisturbingLines=0; + } + + if ( nofDisturbingLines == 0 ) + { + // Yes, the line from B can be moved. + (*i3b).lineB = -1; // This might leave an empty line: removed later. + (*i3b).bAEqB = false; + (*i3b).bAEqC = false; + (*i3b).bBEqC = false; + (*i3c).lineB = lineB; + (*i3c).bBEqC = true; + } + } + else if( i3b1==i3c && !(*i3c).bAEqC) + { + Diff3LineList::iterator i3 = i3b; + int nofDisturbingLines = 0; + while( i3 != i3c && i3!=d3ll.end() ) + { + if ( (*i3).lineC != -1 ) + ++nofDisturbingLines; + ++i3; + } + + if ( nofDisturbingLines>0 )//&& nofDisturbingLines < d.nofEquals*d.nofEquals+4 ) + { + // Move the disturbing lines up. + i3 = i3b; + while( i3 != i3c ) + { + if ( (*i3).lineC != -1 ) + { + Diff3Line d3l; + d3l.lineC = (*i3).lineC; + (*i3).lineC = -1; + (*i3).bAEqC = false; + (*i3).bBEqC = false; + d3ll.insert( i3b, d3l ); + } + ++i3; + } + nofDisturbingLines=0; + } + + if ( nofDisturbingLines == 0 ) + { + // Yes, the line from C can be moved. + (*i3c).lineC = -1; // This might leave an empty line: removed later. + (*i3c).bAEqC = false; + (*i3c).bBEqC = false; + (*i3b).lineC = lineC; + (*i3b).bBEqC = true; + } + } + } + + --d.nofEquals; + ++lineB; + ++lineC; + ++i3b; + ++i3c; + } + else if ( d.diff1>0 ) + { + Diff3LineList::iterator i3 = i3b; + while( (*i3).lineB!=lineB ) + ++i3; + if( i3 != i3b && (*i3).bAEqB==false ) + { + // Take B from this line and move it up as far as possible + d3l.lineB = lineB; + d3ll.insert( i3b, d3l ); + (*i3).lineB = -1; + } + else + { + i3b=i3; + } + --d.diff1; + ++lineB; + ++i3b; + + if( d.diff2>0 ) + { + --d.diff2; + ++lineC; + } + } + else if ( d.diff2>0 ) + { + --d.diff2; + ++lineC; + } + } +/* + Diff3LineList::iterator it = d3ll.begin(); + int li=0; + for( ; it!=d3ll.end(); ++it, ++li ) + { + printf( "%4d %4d %4d %4d A%c=B A%c=C B%c=C\n", + li, (*it).lineA, (*it).lineB, (*it).lineC, + (*it).bAEqB ? '=' : '!', (*it).bAEqC ? '=' : '!', (*it).bBEqC ? '=' : '!' ); + } + printf("\n");*/ +} + +#ifdef _WIN32 +using ::equal; +#endif + +// Test if the move would pass a barrier. Return true if not. +static bool isValidMove( ManualDiffHelpList* pManualDiffHelpList, int line1, int line2, int winIdx1, int winIdx2 ) +{ + if (line1>=0 && line2>=0) + { + ManualDiffHelpList::const_iterator i; + for( i = pManualDiffHelpList->begin(); i!=pManualDiffHelpList->end(); ++i ) + { + const ManualDiffHelpEntry& mdhe = *i; + + // Barrier + int l1 = winIdx1 == 1 ? mdhe.lineA1 : winIdx1==2 ? mdhe.lineB1 : mdhe.lineC1 ; + int l2 = winIdx2 == 1 ? mdhe.lineA1 : winIdx2==2 ? mdhe.lineB1 : mdhe.lineC1 ; + + if ( l1>=0 && l2>=0 ) + { + if ( line1>=l1 && line2=l2 ) + return false; + l1 = winIdx1 == 1 ? mdhe.lineA2 : winIdx1==2 ? mdhe.lineB2 : mdhe.lineC2 ; + l2 = winIdx2 == 1 ? mdhe.lineA2 : winIdx2==2 ? mdhe.lineB2 : mdhe.lineC2 ; + ++l1; + ++l2; + if ( line1>=l1 && line2=l2 ) + return false; + } + } + } + return true; // no barrier passed. +} + +void correctManualDiffAlignment( Diff3LineList& d3ll, ManualDiffHelpList* pManualDiffHelpList ) +{ + if ( pManualDiffHelpList->empty() ) + return; + + // If a line appears unaligned in comparison to the manual alignment, correct this. + + ManualDiffHelpList::iterator iMDHL; + for( iMDHL = pManualDiffHelpList->begin(); iMDHL != pManualDiffHelpList->end(); ++iMDHL ) + { + Diff3LineList::iterator i3 = d3ll.begin(); + int winIdxPreferred = 0; + int missingWinIdx = 0; + int alignedSum = (iMDHL->lineA1<0?0:1) + (iMDHL->lineB1<0?0:1) + (iMDHL->lineC1<0?0:1); + if (alignedSum==2) + { + // If only A & B are aligned then let C rather be aligned with A + // If only A & C are aligned then let B rather be aligned with A + // If only B & C are aligned then let A rather be aligned with B + missingWinIdx = iMDHL->lineA1<0 ? 1 : (iMDHL->lineB1<0 ? 2 : 3 ); + winIdxPreferred = missingWinIdx == 1 ? 2 : 1; + } + else if (alignedSum<=1) + { + return; + } + + // At the first aligned line, move up the two other lines into new d3ls until the second input is aligned + // Then move up the third input until all three lines are aligned. + int wi=0; + for( ; i3!=d3ll.end(); ++i3 ) + { + for ( wi=1; wi<=3; ++wi ) + { + if ( i3->getLineInFile(wi) >= 0 && iMDHL->firstLine(wi) == i3->getLineInFile(wi) ) + break; + } + if ( wi<=3 ) + break; + } + + if (wi>=1 && wi <= 3) + { + // Found manual alignment for one source + Diff3LineList::iterator iDest = i3; + + // Move lines up until the next firstLine is found. Omit wi from move and search. + int wi2=0; + for( ; i3!=d3ll.end(); ++i3 ) + { + for ( wi2=1; wi2<=3; ++wi2 ) + { + if ( wi!=wi2 && i3->getLineInFile(wi2) >= 0 && iMDHL->firstLine(wi2) == i3->getLineInFile(wi2) ) + break; + } + if (wi2>3) + { // Not yet found + // Move both others up + Diff3Line d3l; + // Move both up + if (wi==1) // Move B and C up + { + d3l.bBEqC = i3->bBEqC; + d3l.lineB = i3->lineB; + d3l.lineC = i3->lineC; + i3->lineB = -1; + i3->lineC = -1; + } + if (wi==2) // Move A and C up + { + d3l.bAEqC = i3->bAEqC; + d3l.lineA = i3->lineA; + d3l.lineC = i3->lineC; + i3->lineA = -1; + i3->lineC = -1; + } + if (wi==3) // Move A and B up + { + d3l.bAEqB = i3->bAEqB; + d3l.lineA = i3->lineA; + d3l.lineB = i3->lineB; + i3->lineA = -1; + i3->lineB = -1; + } + i3->bAEqB = false; + i3->bAEqC = false; + i3->bBEqC = false; + d3ll.insert( iDest, d3l ); + } + else + { + // align the found line with the line we already have here + if ( i3 != iDest ) + { + if (wi2==1) + { + iDest->lineA = i3->lineA; + i3->lineA = -1; + i3->bAEqB = false; + i3->bAEqC = false; + } + else if (wi2==2) + { + iDest->lineB = i3->lineB; + i3->lineB = -1; + i3->bAEqB = false; + i3->bBEqC = false; + } + else if (wi2==3) + { + iDest->lineC = i3->lineC; + i3->lineC = -1; + i3->bBEqC = false; + i3->bAEqC = false; + } + } + + if ( missingWinIdx!=0 ) + { + for( ; i3!=d3ll.end(); ++i3 ) + { + int wi3 = missingWinIdx; + if ( i3->getLineInFile(wi3) >= 0 ) + { + // not found, move the line before iDest + Diff3Line d3l; + if ( wi3==1 ) + { + if (i3->bAEqB) // Stop moving lines up if one equal is found. + break; + d3l.lineA = i3->lineA; + i3->lineA = -1; + i3->bAEqB = false; + i3->bAEqC = false; + } + if ( wi3==2 ) + { + if (i3->bAEqB) + break; + d3l.lineB = i3->lineB; + i3->lineB = -1; + i3->bAEqB = false; + i3->bBEqC = false; + } + if ( wi3==3 ) + { + if (i3->bAEqC) + break; + d3l.lineC = i3->lineC; + i3->lineC = -1; + i3->bAEqC = false; + i3->bBEqC = false; + } + d3ll.insert( iDest, d3l ); + } + } // for(), searching for wi3 + } + break; + } + } // for(), searching for wi2 + } // if, wi found + } // for (iMDHL) +} + +// Fourth step +void calcDiff3LineListTrim( + Diff3LineList& d3ll, const LineData* pldA, const LineData* pldB, const LineData* pldC, ManualDiffHelpList* pManualDiffHelpList + ) +{ + const Diff3Line d3l_empty; + d3ll.remove( d3l_empty ); + + Diff3LineList::iterator i3 = d3ll.begin(); + Diff3LineList::iterator i3A = d3ll.begin(); + Diff3LineList::iterator i3B = d3ll.begin(); + Diff3LineList::iterator i3C = d3ll.begin(); + + int line=0; // diff3line counters + int lineA=0; // + int lineB=0; + int lineC=0; + + ManualDiffHelpList::iterator iMDHL = pManualDiffHelpList->begin(); + // The iterator i3 and the variable line look ahead. + // The iterators i3A, i3B, i3C and corresponding lineA, lineB and lineC stop at empty lines, if found. + // If possible, then the texts from the look ahead will be moved back to the empty places. + + for( ; i3!=d3ll.end(); ++i3, ++line ) + { + if ( iMDHL!=pManualDiffHelpList->end() ) + { + if ( i3->lineA >= 0 && i3->lineA==iMDHL->lineA1 || + i3->lineB >= 0 && i3->lineB==iMDHL->lineB1 || + i3->lineC >= 0 && i3->lineC==iMDHL->lineC1 ) + { + i3A = i3; + i3B = i3; + i3C = i3; + lineA = line; + lineB = line; + lineC = line; + ++iMDHL; + } + } + + if( line>lineA && (*i3).lineA != -1 && (*i3A).lineB!=-1 && (*i3A).bBEqC && + ::equal( pldA[(*i3).lineA], pldB[(*i3A).lineB], false ) && + isValidMove( pManualDiffHelpList, (*i3).lineA, (*i3A).lineB, 1, 2 ) && + isValidMove( pManualDiffHelpList, (*i3).lineA, (*i3A).lineC, 1, 3 ) ) + { + // Empty space for A. A matches B and C in the empty line. Move it up. + (*i3A).lineA = (*i3).lineA; + (*i3A).bAEqB = true; + (*i3A).bAEqC = true; + (*i3).lineA = -1; + (*i3).bAEqB = false; + (*i3).bAEqC = false; + ++i3A; + ++lineA; + } + + if( line>lineB && (*i3).lineB != -1 && (*i3B).lineA!=-1 && (*i3B).bAEqC && + ::equal( pldB[(*i3).lineB], pldA[(*i3B).lineA], false ) && + isValidMove( pManualDiffHelpList, (*i3).lineB, (*i3B).lineA, 2, 1 ) && + isValidMove( pManualDiffHelpList, (*i3).lineB, (*i3B).lineC, 2, 3 ) ) + { + // Empty space for B. B matches A and C in the empty line. Move it up. + (*i3B).lineB = (*i3).lineB; + (*i3B).bAEqB = true; + (*i3B).bBEqC = true; + (*i3).lineB = -1; + (*i3).bAEqB = false; + (*i3).bBEqC = false; + ++i3B; + ++lineB; + } + + if( line>lineC && (*i3).lineC != -1 && (*i3C).lineA!=-1 && (*i3C).bAEqB && + ::equal( pldC[(*i3).lineC], pldA[(*i3C).lineA], false )&& + isValidMove( pManualDiffHelpList, (*i3).lineC, (*i3C).lineA, 3, 1 ) && + isValidMove( pManualDiffHelpList, (*i3).lineC, (*i3C).lineB, 3, 2 ) ) + { + // Empty space for C. C matches A and B in the empty line. Move it up. + (*i3C).lineC = (*i3).lineC; + (*i3C).bAEqC = true; + (*i3C).bBEqC = true; + (*i3).lineC = -1; + (*i3).bAEqC = false; + (*i3).bBEqC = false; + ++i3C; + ++lineC; + } + + if( line>lineA && (*i3).lineA != -1 && !(*i3).bAEqB && !(*i3).bAEqC && + isValidMove( pManualDiffHelpList, (*i3).lineA, (*i3A).lineB, 1, 2 ) && + isValidMove( pManualDiffHelpList, (*i3).lineA, (*i3A).lineC, 1, 3 ) ) { + // Empty space for A. A doesn't match B or C. Move it up. + (*i3A).lineA = (*i3).lineA; + (*i3).lineA = -1; + ++i3A; + ++lineA; + } + + if( line>lineB && (*i3).lineB != -1 && !(*i3).bAEqB && !(*i3).bBEqC && + isValidMove( pManualDiffHelpList, (*i3).lineB, (*i3B).lineA, 2, 1 ) && + isValidMove( pManualDiffHelpList, (*i3).lineB, (*i3B).lineC, 2, 3 ) ) + { + // Empty space for B. B matches neither A nor C. Move B up. + (*i3B).lineB = (*i3).lineB; + (*i3).lineB = -1; + ++i3B; + ++lineB; + } + + if( line>lineC && (*i3).lineC != -1 && !(*i3).bAEqC && !(*i3).bBEqC && + isValidMove( pManualDiffHelpList, (*i3).lineC, (*i3C).lineA, 3, 1 ) && + isValidMove( pManualDiffHelpList, (*i3).lineC, (*i3C).lineB, 3, 2 ) ) + { + // Empty space for C. C matches neither A nor B. Move C up. + (*i3C).lineC = (*i3).lineC; + (*i3).lineC = -1; + ++i3C; + ++lineC; + } + + if( line>lineA && line>lineB && (*i3).lineA != -1 && (*i3).bAEqB && !(*i3).bAEqC ) + { + // Empty space for A and B. A matches B, but not C. Move A & B up. + Diff3LineList::iterator i = lineA > lineB ? i3A : i3B; + int l = lineA > lineB ? lineA : lineB; + + if ( isValidMove( pManualDiffHelpList, i->lineC, (*i3).lineA, 3, 1 ) && + isValidMove( pManualDiffHelpList, i->lineC, (*i3).lineB, 3, 2 ) ) + { + (*i).lineA = (*i3).lineA; + (*i).lineB = (*i3).lineB; + (*i).bAEqB = true; + + (*i3).lineA = -1; + (*i3).lineB = -1; + (*i3).bAEqB = false; + i3A = i; + i3B = i; + ++i3A; + ++i3B; + lineA=l+1; + lineB=l+1; + } + } + else if( line>lineA && line>lineC && (*i3).lineA != -1 && (*i3).bAEqC && !(*i3).bAEqB ) + { + // Empty space for A and C. A matches C, but not B. Move A & C up. + Diff3LineList::iterator i = lineA > lineC ? i3A : i3C; + int l = lineA > lineC ? lineA : lineC; + + if ( isValidMove( pManualDiffHelpList, i->lineB, (*i3).lineA, 2, 1 ) && + isValidMove( pManualDiffHelpList, i->lineB, (*i3).lineC, 2, 3 ) ) + { + (*i).lineA = (*i3).lineA; + (*i).lineC = (*i3).lineC; + (*i).bAEqC = true; + + (*i3).lineA = -1; + (*i3).lineC = -1; + (*i3).bAEqC = false; + i3A = i; + i3C = i; + ++i3A; + ++i3C; + lineA=l+1; + lineC=l+1; + } + } + else if( line>lineB && line>lineC && (*i3).lineB != -1 && (*i3).bBEqC && !(*i3).bAEqC ) + { + // Empty space for B and C. B matches C, but not A. Move B & C up. + Diff3LineList::iterator i = lineB > lineC ? i3B : i3C; + int l = lineB > lineC ? lineB : lineC; + + if ( isValidMove( pManualDiffHelpList, i->lineA, (*i3).lineB, 1, 2 ) && + isValidMove( pManualDiffHelpList, i->lineA, (*i3).lineC, 1, 3 ) ) + { + (*i).lineB = (*i3).lineB; + (*i).lineC = (*i3).lineC; + (*i).bBEqC = true; + + (*i3).lineB = -1; + (*i3).lineC = -1; + (*i3).bBEqC = false; + i3B = i; + i3C = i; + ++i3B; + ++i3C; + lineB=l+1; + lineC=l+1; + } + } + + if ( (*i3).lineA != -1 ) + { + lineA = line+1; + i3A = i3; + ++i3A; + } + if ( (*i3).lineB != -1 ) + { + lineB = line+1; + i3B = i3; + ++i3B; + } + if ( (*i3).lineC != -1 ) + { + lineC = line+1; + i3C = i3; + ++i3C; + } + } + + d3ll.remove( d3l_empty ); + +/* + + Diff3LineList::iterator it = d3ll.begin(); + int li=0; + for( ; it!=d3ll.end(); ++it, ++li ) + { + printf( "%4d %4d %4d %4d A%c=B A%c=C B%c=C\n", + li, (*it).lineA, (*it).lineB, (*it).lineC, + (*it).bAEqB ? '=' : '!', (*it).bAEqC ? '=' : '!', (*it).bBEqC ? '=' : '!' ); + + } +*/ +} + +void DiffBufferInfo::init( Diff3LineList* pD3ll, const Diff3LineVector* pD3lv, + const LineData* pldA, int sizeA, const LineData* pldB, int sizeB, const LineData* pldC, int sizeC ) +{ + m_pDiff3LineList = pD3ll; + m_pDiff3LineVector = pD3lv; + m_pLineDataA = pldA; + m_pLineDataB = pldB; + m_pLineDataC = pldC; + m_sizeA = sizeA; + m_sizeB = sizeB; + m_sizeC = sizeC; + Diff3LineList::iterator i3 = pD3ll->begin(); + for( ; i3!=pD3ll->end(); ++i3 ) + { + i3->m_pDiffBufferInfo = this; + } +} + +void calcWhiteDiff3Lines( + Diff3LineList& d3ll, const LineData* pldA, const LineData* pldB, const LineData* pldC + ) +{ + Diff3LineList::iterator i3 = d3ll.begin(); + + for( ; i3!=d3ll.end(); ++i3 ) + { + i3->bWhiteLineA = ( (*i3).lineA == -1 || pldA==0 || pldA[(*i3).lineA].whiteLine() || pldA[(*i3).lineA].bContainsPureComment ); + i3->bWhiteLineB = ( (*i3).lineB == -1 || pldB==0 || pldB[(*i3).lineB].whiteLine() || pldB[(*i3).lineB].bContainsPureComment ); + i3->bWhiteLineC = ( (*i3).lineC == -1 || pldC==0 || pldC[(*i3).lineC].whiteLine() || pldC[(*i3).lineC].bContainsPureComment ); + } +} + +// Just make sure that all input lines are in the output too, exactly once. +void debugLineCheck( Diff3LineList& d3ll, int size, int idx ) +{ + Diff3LineList::iterator it = d3ll.begin(); + int i=0; + + for ( it = d3ll.begin(); it!= d3ll.end(); ++it ) + { + int l=0; + if (idx==1) l=(*it).lineA; + else if (idx==2) l=(*it).lineB; + else if (idx==3) l=(*it).lineC; + else assert(false); + + if ( l!=-1 ) + { + if( l!=i ) + { + KMessageBox::error(0, i18n( + "Data loss error:\n" + "If it is reproducable please contact the author.\n" + ), i18n("Severe Internal Error") ); + assert(false); + std::cerr << "Severe Internal Error.\n"; + ::exit(-1); + } + ++i; + } + } + + if( size!=i ) + { + KMessageBox::error(0, i18n( + "Data loss error:\n" + "If it is reproducable please contact the author.\n" + ), i18n("Severe Internal Error") ); + assert(false); + std::cerr << "Severe Internal Error.\n"; + ::exit(-1); + } +} + +inline bool equal( QChar c1, QChar c2, bool /*bStrict*/ ) +{ + // If bStrict then white space doesn't match + + //if ( bStrict && ( c1==' ' || c1=='\t' ) ) + // return false; + + return c1==c2; +} + + +// My own diff-invention: +template +void calcDiff( const T* p1, int size1, const T* p2, int size2, DiffList& diffList, int match, int maxSearchRange ) +{ + diffList.clear(); + + const T* p1start = p1; + const T* p2start = p2; + const T* p1end=p1+size1; + const T* p2end=p2+size2; + for(;;) + { + int nofEquals = 0; + while( p1!=p1end && p2!=p2end && equal(*p1, *p2, false) ) + { + ++p1; + ++p2; + ++nofEquals; + } + + bool bBestValid=false; + int bestI1=0; + int bestI2=0; + int i1=0; + int i2=0; + for( i1=0; ; ++i1 ) + { + if ( &p1[i1]==p1end || ( bBestValid && i1>= bestI1+bestI2)) + { + break; + } + for(i2=0;i2=bestI1+bestI2) ) + { + break; + } + else if( equal( p2[i2], p1[i1], true ) && + ( match==1 || abs(i1-i2)<3 || ( &p2[i2+1]==p2end && &p1[i1+1]==p1end ) || + ( &p2[i2+1]!=p2end && &p1[i1+1]!=p1end && equal( p2[i2+1], p1[i1+1], false )) + ) + ) + { + if ( i1+i2 < bestI1+bestI2 || bBestValid==false ) + { + bestI1 = i1; + bestI2 = i2; + bBestValid = true; + break; + } + } + } + } + + // The match was found using the strict search. Go back if there are non-strict + // matches. + while( bestI1>=1 && bestI2>=1 && equal( p1[bestI1-1], p2[bestI2-1], false ) ) + { + --bestI1; + --bestI2; + } + + + bool bEndReached = false; + if (bBestValid) + { + // continue somehow + Diff d(nofEquals, bestI1, bestI2); + diffList.push_back( d ); + + p1 += bestI1; + p2 += bestI2; + } + else + { + // Nothing else to match. + Diff d(nofEquals, p1end-p1, p2end-p2); + diffList.push_back( d ); + + bEndReached = true; //break; + } + + // Sometimes the algorithm that chooses the first match unfortunately chooses + // a match where later actually equal parts don't match anymore. + // A different match could be achieved, if we start at the end. + // Do it, if it would be a better match. + int nofUnmatched = 0; + const T* pu1 = p1-1; + const T* pu2 = p2-1; + while ( pu1>=p1start && pu2>=p2start && equal( *pu1, *pu2, false ) ) + { + ++nofUnmatched; + --pu1; + --pu2; + } + + Diff d = diffList.back(); + if ( nofUnmatched > 0 ) + { + // We want to go backwards the nofUnmatched elements and redo + // the matching + d = diffList.back(); + Diff origBack = d; + diffList.pop_back(); + + while ( nofUnmatched > 0 ) + { + if ( d.diff1 > 0 && d.diff2 > 0 ) + { + --d.diff1; + --d.diff2; + --nofUnmatched; + } + else if ( d.nofEquals > 0 ) + { + --d.nofEquals; + --nofUnmatched; + } + + if ( d.nofEquals==0 && (d.diff1==0 || d.diff2==0) && nofUnmatched>0 ) + { + if ( diffList.empty() ) + break; + d.nofEquals += diffList.back().nofEquals; + d.diff1 += diffList.back().diff1; + d.diff2 += diffList.back().diff2; + diffList.pop_back(); + bEndReached = false; + } + } + + if ( bEndReached ) + diffList.push_back( origBack ); + else + { + + p1 = pu1 + 1 + nofUnmatched; + p2 = pu2 + 1 + nofUnmatched; + diffList.push_back( d ); + } + } + if ( bEndReached ) + break; + } + +#ifndef NDEBUG + // Verify difflist + { + int l1=0; + int l2=0; + DiffList::iterator i; + for( i = diffList.begin(); i!=diffList.end(); ++i ) + { + l1+= i->nofEquals + i->diff1; + l2+= i->nofEquals + i->diff2; + } + + //if( l1!=p1-p1start || l2!=p2-p2start ) + if( l1!=size1 || l2!=size2 ) + assert( false ); + } +#endif +} + +void fineDiff( + Diff3LineList& diff3LineList, + int selector, + const LineData* v1, + const LineData* v2, + bool& bTextsTotalEqual + ) +{ + // Finetuning: Diff each line with deltas + ProgressProxy pp; + int maxSearchLength=500; + Diff3LineList::iterator i; + int k1=0; + int k2=0; + bTextsTotalEqual = true; + int listSize = diff3LineList.size(); + int listIdx = 0; + for( i= diff3LineList.begin(); i!= diff3LineList.end(); ++i) + { + if (selector==1){ k1=i->lineA; k2=i->lineB; } + else if (selector==2){ k1=i->lineB; k2=i->lineC; } + else if (selector==3){ k1=i->lineC; k2=i->lineA; } + else assert(false); + if( k1==-1 && k2!=-1 || k1!=-1 && k2==-1 ) bTextsTotalEqual=false; + if( k1!=-1 && k2!=-1 ) + { + if ( v1[k1].size != v2[k2].size || memcmp( v1[k1].pLine, v2[k2].pLine, v1[k1].size<<1)!=0 ) + { + bTextsTotalEqual = false; + DiffList* pDiffList = new DiffList; + calcDiff( v1[k1].pLine, v1[k1].size, v2[k2].pLine, v2[k2].size, *pDiffList, 2, maxSearchLength ); + + // Optimize the diff list. + DiffList::iterator dli; + bool bUsefulFineDiff = false; + for( dli = pDiffList->begin(); dli!=pDiffList->end(); ++dli) + { + if( dli->nofEquals >= 4 ) + { + bUsefulFineDiff = true; + break; + } + } + + for( dli = pDiffList->begin(); dli!=pDiffList->end(); ++dli) + { + if( dli->nofEquals < 4 && (dli->diff1>0 || dli->diff2>0) + && !( bUsefulFineDiff && dli==pDiffList->begin() ) + ) + { + dli->diff1 += dli->nofEquals; + dli->diff2 += dli->nofEquals; + dli->nofEquals = 0; + } + } + + if (selector==1){ delete (*i).pFineAB; (*i).pFineAB = pDiffList; } + else if (selector==2){ delete (*i).pFineBC; (*i).pFineBC = pDiffList; } + else if (selector==3){ delete (*i).pFineCA; (*i).pFineCA = pDiffList; } + else assert(false); + } + + if ( (v1[k1].bContainsPureComment || v1[k1].whiteLine()) && (v2[k2].bContainsPureComment || v2[k2].whiteLine())) + { + if (selector==1){ i->bAEqB = true; } + else if (selector==2){ i->bBEqC = true; } + else if (selector==3){ i->bAEqC = true; } + else assert(false); + } + } + ++listIdx; + pp.setCurrent(double(listIdx)/listSize); + } +} + + +// Convert the list to a vector of pointers +void calcDiff3LineVector( Diff3LineList& d3ll, Diff3LineVector& d3lv ) +{ + d3lv.resize( d3ll.size() ); + Diff3LineList::iterator i; + int j=0; + for( i= d3ll.begin(); i!= d3ll.end(); ++i, ++j) + { + d3lv[j] = &(*i); + } + assert( j==(int)d3lv.size() ); +} + + diff --git a/src/diff.h b/src/diff.h new file mode 100644 index 0000000..1101752 --- /dev/null +++ b/src/diff.h @@ -0,0 +1,462 @@ +/*************************************************************************** + diff.h - description + ------------------- + begin : Mon Mar 18 2002 + copyright : (C) 2002-2007 by Joachim Eibl + email : joachim.eibl at gmx.de + ***************************************************************************/ + +/*************************************************************************** + * * + * 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. * + * * + ***************************************************************************/ + +#ifndef DIFF_H +#define DIFF_H + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "common.h" +#include "fileaccess.h" + +class OptionDialog; + +// Each range with matching elements is followed by a range with differences on either side. +// Then again range of matching elements should follow. +struct Diff +{ + int nofEquals; + + int diff1; + int diff2; + + Diff(int eq, int d1, int d2){nofEquals=eq; diff1=d1; diff2=d2; } +}; + +typedef std::list DiffList; + +struct LineData +{ + const QChar* pLine; + const QChar* pFirstNonWhiteChar; + int size; + + LineData(){ pLine=0; pFirstNonWhiteChar=0; size=0; /*occurances=0;*/ bContainsPureComment=false; } + int width(int tabSize) const; // Calcs width considering tabs. + //int occurances; + bool whiteLine() const { return pFirstNonWhiteChar-pLine == size; } + bool bContainsPureComment; +}; + +class Diff3LineList; +class Diff3LineVector; + +struct DiffBufferInfo +{ + const LineData* m_pLineDataA; + const LineData* m_pLineDataB; + const LineData* m_pLineDataC; + int m_sizeA; + int m_sizeB; + int m_sizeC; + const Diff3LineList* m_pDiff3LineList; + const Diff3LineVector* m_pDiff3LineVector; + void init( Diff3LineList* d3ll, const Diff3LineVector* d3lv, + const LineData* pldA, int sizeA, const LineData* pldB, int sizeB, const LineData* pldC, int sizeC ); +}; + +struct Diff3Line +{ + int lineA; + int lineB; + int lineC; + + bool bAEqC : 1; // These are true if equal or only white-space changes exist. + bool bBEqC : 1; + bool bAEqB : 1; + + bool bWhiteLineA : 1; + bool bWhiteLineB : 1; + bool bWhiteLineC : 1; + + DiffList* pFineAB; // These are 0 only if completely equal or if either source doesn't exist. + DiffList* pFineBC; + DiffList* pFineCA; + + int linesNeededForDisplay; // Due to wordwrap + int sumLinesNeededForDisplay; // For fast conversion to m_diff3WrapLineVector + + DiffBufferInfo* m_pDiffBufferInfo; // For convenience + + Diff3Line() + { + lineA=-1; lineB=-1; lineC=-1; + bAEqC=false; bAEqB=false; bBEqC=false; + pFineAB=0; pFineBC=0; pFineCA=0; + linesNeededForDisplay=1; + sumLinesNeededForDisplay=0; + bWhiteLineA=false; bWhiteLineB=false; bWhiteLineC=false; + m_pDiffBufferInfo=0; + } + + ~Diff3Line() + { + if (pFineAB!=0) delete pFineAB; + if (pFineBC!=0) delete pFineBC; + if (pFineCA!=0) delete pFineCA; + pFineAB=0; pFineBC=0; pFineCA=0; + } + + bool operator==( const Diff3Line& d3l ) + { + return lineA == d3l.lineA && lineB == d3l.lineB && lineC == d3l.lineC + && bAEqB == d3l.bAEqB && bAEqC == d3l.bAEqC && bBEqC == d3l.bBEqC; + } + + const LineData* getLineData( int src ) const + { + assert( m_pDiffBufferInfo!=0 ); + if ( src == 1 && lineA >= 0 ) return &m_pDiffBufferInfo->m_pLineDataA[lineA]; + if ( src == 2 && lineB >= 0 ) return &m_pDiffBufferInfo->m_pLineDataB[lineB]; + if ( src == 3 && lineC >= 0 ) return &m_pDiffBufferInfo->m_pLineDataC[lineC]; + return 0; + } + QString getString( int src ) const + { + const LineData* pld = getLineData(src); + if ( pld ) + return QString( pld->pLine, pld->size); + else + return QString(); + } + int getLineInFile( int src ) const + { + if ( src == 1 ) return lineA; + if ( src == 2 ) return lineB; + if ( src == 3 ) return lineC; + return -1; + } +}; + + +class Diff3LineList : public std::list +{ +}; +class Diff3LineVector : public std::vector +{ +}; + +class Diff3WrapLine +{ +public: + Diff3Line* pD3L; + int diff3LineIndex; + int wrapLineOffset; + int wrapLineLength; +}; + +typedef std::vector Diff3WrapLineVector; + + +class TotalDiffStatus +{ +public: + TotalDiffStatus(){ reset(); } + void reset() {bBinaryAEqC=false; bBinaryBEqC=false; bBinaryAEqB=false; + bTextAEqC=false; bTextBEqC=false; bTextAEqB=false; + nofUnsolvedConflicts=0; nofSolvedConflicts=0; + nofWhitespaceConflicts=0; + } + bool bBinaryAEqC; + bool bBinaryBEqC; + bool bBinaryAEqB; + + bool bTextAEqC; + bool bTextBEqC; + bool bTextAEqB; + + int nofUnsolvedConflicts; + int nofSolvedConflicts; + int nofWhitespaceConflicts; +}; + +// Three corresponding ranges. (Minimum size of a valid range is one line.) +class ManualDiffHelpEntry +{ +public: + ManualDiffHelpEntry() { lineA1=-1; lineA2=-1; + lineB1=-1; lineB2=-1; + lineC1=-1; lineC2=-1; } + int lineA1; + int lineA2; + int lineB1; + int lineB2; + int lineC1; + int lineC2; + int& firstLine( int winIdx ) + { + return winIdx==1 ? lineA1 : (winIdx==2 ? lineB1 : lineC1 ); + } + int& lastLine( int winIdx ) + { + return winIdx==1 ? lineA2 : (winIdx==2 ? lineB2 : lineC2 ); + } + bool isLineInRange( int line, int winIdx ) + { + return line>=0 && line>=firstLine(winIdx) && line<=lastLine(winIdx); + } + bool operator==(const ManualDiffHelpEntry& r) const + { + return lineA1 == r.lineA1 && lineB1 == r.lineB1 && lineC1 == r.lineC1 && + lineA2 == r.lineA2 && lineB2 == r.lineB2 && lineC2 == r.lineC2; + } +}; + +// A list of corresponding ranges +typedef std::list ManualDiffHelpList; + +void calcDiff3LineListUsingAB( + const DiffList* pDiffListAB, + Diff3LineList& d3ll + ); + +void calcDiff3LineListUsingAC( + const DiffList* pDiffListBC, + Diff3LineList& d3ll + ); + +void calcDiff3LineListUsingBC( + const DiffList* pDiffListBC, + Diff3LineList& d3ll + ); + +void correctManualDiffAlignment( Diff3LineList& d3ll, ManualDiffHelpList* pManualDiffHelpList ); + +class SourceData +{ +public: + SourceData(); + ~SourceData(); + + void setOptionDialog( OptionDialog* pOptionDialog ); + + int getSizeLines() const; + int getSizeBytes() const; + const char* getBuf() const; + const LineData* getLineDataForDisplay() const; + const LineData* getLineDataForDiff() const; + + void setFilename(const QString& filename); + void setFileAccess( const FileAccess& fa ); + //FileAccess& getFileAccess(); + QString getFilename(); + void setAliasName(const QString& a); + QString getAliasName(); + bool isEmpty(); // File was set + bool hasData(); // Data was readable + bool isText(); // is it pure text (vs. binary data) + bool isFromBuffer(); // was it set via setData() (vs. setFileAccess() or setFilename()) + void setData( const QString& data ); + bool isValid(); // Either no file is specified or reading was successful + + void readAndPreprocess(QTextCodec* pEncoding, bool bAutoDetectUnicode ); + bool saveNormalDataAs( const QString& fileName ); + + bool isBinaryEqualWith( const SourceData& other ) const; + + void reset(); + + QTextCodec* getEncoding() const { return m_pEncoding; } + +private: + QTextCodec* detectEncoding( const QString& fileName, QTextCodec* pFallbackCodec ); + QString m_aliasName; + FileAccess m_fileAccess; + OptionDialog* m_pOptionDialog; + QString m_tempInputFileName; + + struct FileData + { + FileData(){ m_pBuf=0; m_size=0; m_vSize=0; m_bIsText=false; } + ~FileData(){ reset(); } + const char* m_pBuf; + int m_size; + int m_vSize; // Nr of lines in m_pBuf1 and size of m_v1, m_dv12 and m_dv13 + QString m_unicodeBuf; + std::vector m_v; + bool m_bIsText; + bool readFile( const QString& filename ); + bool writeFile( const QString& filename ); + void preprocess(bool bPreserveCR, QTextCodec* pEncoding ); + void reset(); + void removeComments(); + void copyBufFrom( const FileData& src ); + }; + FileData m_normalData; + FileData m_lmppData; + QTextCodec* m_pEncoding; +}; + +void calcDiff3LineListTrim( Diff3LineList& d3ll, const LineData* pldA, const LineData* pldB, const LineData* pldC, ManualDiffHelpList* pManualDiffHelpList ); +void calcWhiteDiff3Lines( Diff3LineList& d3ll, const LineData* pldA, const LineData* pldB, const LineData* pldC ); + +void calcDiff3LineVector( Diff3LineList& d3ll, Diff3LineVector& d3lv ); + +void debugLineCheck( Diff3LineList& d3ll, int size, int idx ); + +class QStatusBar; + + +class Selection +{ +public: + Selection(){ reset(); oldLastLine=-1; lastLine=-1; oldFirstLine=-1; } + int firstLine; + int firstPos; + int lastLine; + int lastPos; + int oldLastLine; + int oldFirstLine; + bool bSelectionContainsData; + bool isEmpty() { return firstLine==-1 || (firstLine==lastLine && firstPos==lastPos) || bSelectionContainsData==false;} + void reset(){ + oldFirstLine=firstLine; + oldLastLine =lastLine; + firstLine=-1; + lastLine=-1; + bSelectionContainsData = false; + } + void start( int l, int p ) { firstLine = l; firstPos = p; } + void end( int l, int p ) { + if ( oldLastLine == -1 ) + oldLastLine = lastLine; + lastLine = l; + lastPos = p; + } + bool within( int l, int p ); + + bool lineWithin( int l ); + int firstPosInLine(int l); + int lastPosInLine(int l); + int beginLine(){ + if (firstLine<0 && lastLine<0) return -1; + return max2(0,min2(firstLine,lastLine)); + } + int endLine(){ + if (firstLine<0 && lastLine<0) return -1; + return max2(firstLine,lastLine); + } + int beginPos() { return firstLine==lastLine ? min2(firstPos,lastPos) : + firstLine +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +class DiffTextWindowData +{ +public: + DiffTextWindowData( DiffTextWindow* p ) + { + m_pDiffTextWindow = p; + m_bPaintingAllowed = false; + m_pLineData = 0; + m_size = 0; + m_bWordWrap = false; + m_delayedDrawTimer = 0; + m_pDiff3LineVector = 0; + m_pManualDiffHelpList = 0; + m_pOptionDialog = 0; + m_fastSelectorLine1 = 0; + m_fastSelectorNofLines = 0; + m_bTriple = 0; + m_winIdx = 0; + m_firstLine = 0; + m_oldFirstLine = 0; + m_oldFirstColumn = 0; + m_firstColumn = 0; + m_lineNumberWidth = 0; + m_pStatusBar = 0; + m_scrollDeltaX = 0; + m_scrollDeltaY = 0; + m_bMyUpdate = false; + m_bSelectionInProgress = false; + } + DiffTextWindow* m_pDiffTextWindow; + DiffTextWindowFrame* m_pDiffTextWindowFrame; + + bool m_bPaintingAllowed; + const LineData* m_pLineData; + int m_size; + QString m_filename; + bool m_bWordWrap; + int m_delayedDrawTimer; + + const Diff3LineVector* m_pDiff3LineVector; + Diff3WrapLineVector m_diff3WrapLineVector; + const ManualDiffHelpList* m_pManualDiffHelpList; + + OptionDialog* m_pOptionDialog; + QColor m_cThis; + QColor m_cDiff1; + QColor m_cDiff2; + QColor m_cDiffBoth; + + int m_fastSelectorLine1; + int m_fastSelectorNofLines; + + bool m_bTriple; + int m_winIdx; + int m_firstLine; + int m_oldFirstLine; + int m_oldFirstColumn; + int m_firstColumn; + int m_lineNumberWidth; + + void getLineInfo( + const Diff3Line& d, + int& lineIdx, + DiffList*& pFineDiff1, DiffList*& pFineDiff2, // return values + int& changed, int& changed2 ); + + QString getString( int d3lIdx ); + QString getLineString( int line ); + + void writeLine( + MyPainter& p, const LineData* pld, + const DiffList* pLineDiff1, const DiffList* pLineDiff2, int line, + int whatChanged, int whatChanged2, int srcLineIdx, + int wrapLineOffset, int wrapLineLength, bool bWrapLine, const QRect& invalidRect, int deviceWidth + ); + + void draw( MyPainter& p, const QRect& invalidRect, int deviceWidth, int beginLine, int endLine ); + + QStatusBar* m_pStatusBar; + + Selection m_selection; + + int m_scrollDeltaX; + int m_scrollDeltaY; + + bool m_bMyUpdate; + void myUpdate(int afterMilliSecs ); + + int leftInfoWidth() { return 4+m_lineNumberWidth; } // Nr of information columns on left side + int convertLineOnScreenToLineInSource( int lineOnScreen, e_CoordType coordType, bool bFirstLine ); + + bool m_bSelectionInProgress; + QPoint m_lastKnownMousePos; +}; + +DiffTextWindow::DiffTextWindow( + DiffTextWindowFrame* pParent, + QStatusBar* pStatusBar, + OptionDialog* pOptionDialog, + int winIdx + ) + : QWidget(pParent, 0, Qt::WResizeNoErase | Qt::WRepaintNoErase) +{ + d = new DiffTextWindowData(this); + d->m_pDiffTextWindowFrame = pParent; + setFocusPolicy( ClickFocus ); + setAcceptDrops( true ); + + d->m_pOptionDialog = pOptionDialog; + init( 0, 0, 0, 0, 0, false ); + + setMinimumSize(QSize(20,20)); + + d->m_pStatusBar = pStatusBar; + d->m_bPaintingAllowed = true; + d->m_bWordWrap = false; + d->m_winIdx = winIdx; + + setFont(d->m_pOptionDialog->m_font); +} + +DiffTextWindow::~DiffTextWindow() +{ + delete d; +} + +void DiffTextWindow::init( + const QString& filename, + const LineData* pLineData, + int size, + const Diff3LineVector* pDiff3LineVector, + const ManualDiffHelpList* pManualDiffHelpList, + bool bTriple + ) +{ + d->m_filename = filename; + d->m_pLineData = pLineData; + d->m_size = size; + d->m_pDiff3LineVector = pDiff3LineVector; + d->m_diff3WrapLineVector.clear(); + d->m_pManualDiffHelpList = pManualDiffHelpList; + + d->m_firstLine = 0; + d->m_oldFirstLine = -1; + d->m_firstColumn = 0; + d->m_oldFirstColumn = -1; + d->m_bTriple = bTriple; + d->m_scrollDeltaX=0; + d->m_scrollDeltaY=0; + d->m_bMyUpdate = false; + d->m_fastSelectorLine1 = 0; + d->m_fastSelectorNofLines = 0; + d->m_lineNumberWidth = 0; + d->m_selection.reset(); + d->m_selection.oldFirstLine = -1; // reset is not enough here. + d->m_selection.oldLastLine = -1; + d->m_selection.lastLine = -1; + + update(); + d->m_pDiffTextWindowFrame->init(); +} + +void DiffTextWindow::reset() +{ + d->m_pLineData=0; + d->m_size=0; + d->m_pDiff3LineVector=0; + d->m_filename=""; + d->m_diff3WrapLineVector.clear(); +} + +void DiffTextWindow::setPaintingAllowed( bool bAllowPainting ) +{ + if (d->m_bPaintingAllowed != bAllowPainting) + { + d->m_bPaintingAllowed = bAllowPainting; + if ( d->m_bPaintingAllowed ) update(); + else reset(); + } +} + +void DiffTextWindow::dragEnterEvent( QDragEnterEvent* e ) +{ + e->accept( QUriDrag::canDecode(e) || QTextDrag::canDecode(e) ); + // Note that the corresponding drop is handled in KDiff3App::eventFilter(). +} + + +void DiffTextWindow::setFirstLine(int firstLine) +{ + int fontHeight = fontMetrics().height(); + + int newFirstLine = max2(0,firstLine); + + int deltaY = fontHeight * ( d->m_firstLine - newFirstLine ); + + d->m_firstLine = newFirstLine; + + if ( d->m_bSelectionInProgress && d->m_selection.firstLine != -1 ) + { + int line, pos; + convertToLinePos( d->m_lastKnownMousePos.x(), d->m_lastKnownMousePos.y(), line, pos ); + d->m_selection.end( line, pos ); + update(); + } + else + { + QWidget::scroll( 0, deltaY ); + } + d->m_pDiffTextWindowFrame->setFirstLine( d->m_firstLine ); +} + +int DiffTextWindow::getFirstLine() +{ + return d->m_firstLine; +} + +void DiffTextWindow::setFirstColumn(int firstCol) +{ + int fontWidth = fontMetrics().width('W'); + int xOffset = d->leftInfoWidth() * fontWidth; + + int newFirstColumn = max2(0,firstCol); + + int deltaX = fontWidth * ( d->m_firstColumn - newFirstColumn ); + + d->m_firstColumn = newFirstColumn; + + QRect r( xOffset, 0, width()-xOffset, height() ); + + if ( d->m_pOptionDialog->m_bRightToLeftLanguage ) + { + deltaX = -deltaX; + r = QRect( width()-1-xOffset, 0, -(width()-xOffset), height() ).normalize(); + } + + if ( d->m_bSelectionInProgress && d->m_selection.firstLine != -1 ) + { + int line, pos; + convertToLinePos( d->m_lastKnownMousePos.x(), d->m_lastKnownMousePos.y(), line, pos ); + d->m_selection.end( line, pos ); + update(); + } + else + { + QWidget::scroll( deltaX, 0, r ); + } +} + +int DiffTextWindow::getNofColumns() +{ + if (d->m_bWordWrap) + { + return getNofVisibleColumns(); + } + else + { + int nofColumns = 0; + for( int i = 0; i< d->m_size; ++i ) + { + if ( d->m_pLineData[i].width( d->m_pOptionDialog->m_tabSize ) > nofColumns ) + nofColumns = d->m_pLineData[i].width( d->m_pOptionDialog->m_tabSize ); + } + return nofColumns; + } +} + +int DiffTextWindow::getNofLines() +{ + return d->m_bWordWrap ? d->m_diff3WrapLineVector.size() : + d->m_pDiff3LineVector->size(); +} + + +int DiffTextWindow::convertLineToDiff3LineIdx( int line ) +{ + if ( d->m_bWordWrap && d->m_diff3WrapLineVector.size()>0 ) + return d->m_diff3WrapLineVector[ min2( line, (int)d->m_diff3WrapLineVector.size()-1 ) ].diff3LineIndex; + else + return line; +} + +int DiffTextWindow::convertDiff3LineIdxToLine( int d3lIdx ) +{ + if ( d->m_bWordWrap && d->m_pDiff3LineVector!=0 && d->m_pDiff3LineVector->size()>0 ) + return (*d->m_pDiff3LineVector)[ min2( d3lIdx, (int)d->m_pDiff3LineVector->size()-1 ) ]->sumLinesNeededForDisplay; + else + return d3lIdx; +} + +/** Returns a line number where the linerange [line, line+nofLines] can + be displayed best. If it fits into the currently visible range then + the returned value is the current firstLine. +*/ +int getBestFirstLine( int line, int nofLines, int firstLine, int visibleLines ) +{ + int newFirstLine = firstLine; + if ( line < firstLine || line + nofLines + 2 > firstLine + visibleLines ) + { + if ( nofLines > visibleLines || nofLines <= ( 2*visibleLines / 3 - 1) ) + newFirstLine = line - visibleLines/3; + else + newFirstLine = line - (visibleLines - nofLines); + } + + return newFirstLine; +} + + +void DiffTextWindow::setFastSelectorRange( int line1, int nofLines ) +{ + d->m_fastSelectorLine1 = line1; + d->m_fastSelectorNofLines = nofLines; + if ( isVisible() ) + { + int newFirstLine = getBestFirstLine( + convertDiff3LineIdxToLine(d->m_fastSelectorLine1), + convertDiff3LineIdxToLine(d->m_fastSelectorLine1+d->m_fastSelectorNofLines)-convertDiff3LineIdxToLine(d->m_fastSelectorLine1), + d->m_firstLine, + getNofVisibleLines() + ); + if ( newFirstLine != d->m_firstLine ) + { + scroll( 0, newFirstLine - d->m_firstLine ); + } + + update(); + } +} + + +void DiffTextWindow::showStatusLine(int line ) +{ + int d3lIdx = convertLineToDiff3LineIdx( line ); + if(d3lIdx >= 0 && d3lIdx<(int)d->m_pDiff3LineVector->size() ) + { + const Diff3Line* pD3l = (*d->m_pDiff3LineVector)[d3lIdx]; + if ( pD3l != 0 ) + { + int l = pD3l->getLineInFile( d->m_winIdx ); + + QString s; + if ( l!=-1 ) + s.sprintf("File %s: Line %d", d->m_filename.ascii(), l+1 ); + else + s.sprintf("File %s: Line not available", d->m_filename.ascii() ); + if (d->m_pStatusBar!=0) d->m_pStatusBar->message(s); + + emit lineClicked( d->m_winIdx, l ); + } + } +} + +void DiffTextWindow::focusInEvent(QFocusEvent* e) +{ + emit gotFocus(); + QWidget::focusInEvent(e); +} + +void DiffTextWindow::mousePressEvent ( QMouseEvent* e ) +{ + if ( e->button() == Qt::LeftButton ) + { + int line; + int pos; + convertToLinePos( e->x(), e->y(), line, pos ); + if ( pos < d->m_firstColumn ) + { + emit setFastSelectorLine( convertLineToDiff3LineIdx(line) ); + d->m_selection.firstLine = -1; // Disable current d->m_selection + } + else + { // Selection + resetSelection(); + d->m_selection.start( line, pos ); + d->m_selection.end( line, pos ); + d->m_bSelectionInProgress = true; + d->m_lastKnownMousePos = e->pos(); + + showStatusLine( line ); + } + } +} + +bool isCTokenChar( QChar c ) +{ + return (c=='_') || + ( c>='A' && c<='Z' ) || ( c>='a' && c<='z' ) || + (c>='0' && c<='9'); +} + +/// Calculate where a token starts and ends, given the x-position on screen. +void calcTokenPos( const QString& s, int posOnScreen, int& pos1, int& pos2, int tabSize ) +{ + // Cursor conversions that consider g_tabSize + int pos = convertToPosInText( s, max2( 0, posOnScreen ), tabSize ); + if ( pos>=(int)s.length() ) + { + pos1=s.length(); + pos2=s.length(); + return; + } + + pos1 = pos; + pos2 = pos+1; + + if( isCTokenChar( s[pos1] ) ) + { + while( pos1>=0 && isCTokenChar( s[pos1] ) ) + --pos1; + ++pos1; + + while( pos2<(int)s.length() && isCTokenChar( s[pos2] ) ) + ++pos2; + } +} + +void DiffTextWindow::mouseDoubleClickEvent( QMouseEvent* e ) +{ + d->m_bSelectionInProgress = false; + d->m_lastKnownMousePos = e->pos(); + if ( e->button() == Qt::LeftButton ) + { + int line; + int pos; + convertToLinePos( e->x(), e->y(), line, pos ); + + // Get the string data of the current line + QString s; + if ( d->m_bWordWrap ) + { + if ( line<0 || line >= (int)d->m_diff3WrapLineVector.size() ) + return; + const Diff3WrapLine& d3wl = d->m_diff3WrapLineVector[line]; + s = d->getString( d3wl.diff3LineIndex ).mid( d3wl.wrapLineOffset, d3wl.wrapLineLength ); + } + else + { + if ( line<0 || line >= (int)d->m_pDiff3LineVector->size() ) + return; + s = d->getString( line ); + } + + if ( ! s.isEmpty() ) + { + int pos1, pos2; + calcTokenPos( s, pos, pos1, pos2, d->m_pOptionDialog->m_tabSize ); + + resetSelection(); + d->m_selection.start( line, convertToPosOnScreen( s, pos1, d->m_pOptionDialog->m_tabSize ) ); + d->m_selection.end( line, convertToPosOnScreen( s, pos2, d->m_pOptionDialog->m_tabSize ) ); + update(); + // emit d->m_selectionEnd() happens in the mouseReleaseEvent. + showStatusLine( line ); + } + } +} + +void DiffTextWindow::mouseReleaseEvent ( QMouseEvent* e ) +{ + d->m_bSelectionInProgress = false; + d->m_lastKnownMousePos = e->pos(); + //if ( e->button() == LeftButton ) + { + killTimer(d->m_delayedDrawTimer); + d->m_delayedDrawTimer = 0; + if (d->m_selection.firstLine != -1 ) + { + emit selectionEnd(); + } + } + d->m_scrollDeltaX=0; + d->m_scrollDeltaY=0; +} + +inline int sqr(int x){return x*x;} + +void DiffTextWindow::mouseMoveEvent ( QMouseEvent * e ) +{ + int line; + int pos; + convertToLinePos( e->x(), e->y(), line, pos ); + d->m_lastKnownMousePos = e->pos(); + + if (d->m_selection.firstLine != -1 ) + { + d->m_selection.end( line, pos ); + + showStatusLine( line ); + + // Scroll because mouse moved out of the window + const QFontMetrics& fm = fontMetrics(); + int fontWidth = fm.width('W'); + int deltaX=0; + int deltaY=0; + if ( ! d->m_pOptionDialog->m_bRightToLeftLanguage ) + { + if ( e->x() < d->leftInfoWidth()*fontWidth ) deltaX = -1 - abs(e->x()-d->leftInfoWidth()*fontWidth)/fontWidth; + if ( e->x() > width() ) deltaX = +1 + abs(e->x()-width())/fontWidth; + } + else + { + if ( e->x() > width()-1-d->leftInfoWidth()*fontWidth ) deltaX=+1+ abs(e->x() - (width()-1-d->leftInfoWidth()*fontWidth)) / fontWidth; + if ( e->x() < fontWidth ) deltaX=-1- abs(e->x()-fontWidth)/fontWidth; + } + if ( e->y() < 0 ) deltaY = -1 - sqr( e->y() ) / sqr(fm.height()); + if ( e->y() > height() ) deltaY = +1 + sqr( e->y() - height() ) / sqr(fm.height()); + if ( deltaX != 0 && d->m_scrollDeltaX!=deltaX || deltaY!= 0 && d->m_scrollDeltaY!=deltaY ) + { + d->m_scrollDeltaX = deltaX; + d->m_scrollDeltaY = deltaY; + emit scroll( deltaX, deltaY ); + killTimer( d->m_delayedDrawTimer ); + d->m_delayedDrawTimer = startTimer(50); + } + else + { + d->m_scrollDeltaX = deltaX; + d->m_scrollDeltaY = deltaY; + d->myUpdate(0); + } + } +} + + +void DiffTextWindowData::myUpdate(int afterMilliSecs) +{ + m_pDiffTextWindow->killTimer( m_delayedDrawTimer ); + m_bMyUpdate = true; + m_delayedDrawTimer = m_pDiffTextWindow->startTimer( afterMilliSecs ); +} + +void DiffTextWindow::timerEvent(QTimerEvent*) +{ + killTimer(d->m_delayedDrawTimer); + d->m_delayedDrawTimer = 0; + + if ( d->m_bMyUpdate ) + { + int fontHeight = fontMetrics().height(); + + if ( d->m_selection.oldLastLine != -1 ) + { + int lastLine; + int firstLine; + if ( d->m_selection.oldFirstLine != -1 ) + { + firstLine = min3( d->m_selection.oldFirstLine, d->m_selection.lastLine, d->m_selection.oldLastLine ); + lastLine = max3( d->m_selection.oldFirstLine, d->m_selection.lastLine, d->m_selection.oldLastLine ); + } + else + { + firstLine = min2( d->m_selection.lastLine, d->m_selection.oldLastLine ); + lastLine = max2( d->m_selection.lastLine, d->m_selection.oldLastLine ); + } + int y1 = ( firstLine - d->m_firstLine ) * fontHeight; + int y2 = min2( height(), ( lastLine - d->m_firstLine + 1 ) * fontHeight ); + + if ( y10 ) + { + QRect invalidRect = QRect( 0, y1, width(), y2-y1 ); + update( invalidRect ); + } + } + + d->m_bMyUpdate = false; + } + + if ( d->m_scrollDeltaX != 0 || d->m_scrollDeltaY != 0 ) + { + d->m_selection.end( d->m_selection.lastLine + d->m_scrollDeltaY, d->m_selection.lastPos + d->m_scrollDeltaX ); + emit scroll( d->m_scrollDeltaX, d->m_scrollDeltaY ); + killTimer(d->m_delayedDrawTimer); + d->m_delayedDrawTimer = startTimer(50); + } +} + +void DiffTextWindow::resetSelection() +{ + d->m_selection.reset(); + update(); +} + +void DiffTextWindow::convertToLinePos( int x, int y, int& line, int& pos ) +{ + const QFontMetrics& fm = fontMetrics(); + int fontHeight = fm.height(); + int fontWidth = fm.width('W'); + int xOffset = ( d->leftInfoWidth() - d->m_firstColumn ) * fontWidth; + + int yOffset = - d->m_firstLine * fontHeight; + + line = ( y - yOffset ) / fontHeight; + if ( ! d->m_pOptionDialog->m_bRightToLeftLanguage ) + pos = ( x - xOffset ) / fontWidth; + else + pos = ( (width() - 1 - x) - xOffset ) / fontWidth; +} + +int Selection::firstPosInLine(int l) +{ + assert( firstLine != -1 ); + + int l1 = firstLine; + int l2 = lastLine; + int p1 = firstPos; + int p2 = lastPos; + if ( l1>l2 ){ std::swap(l1,l2); std::swap(p1,p2); } + if ( l1==l2 && p1>p2 ){ std::swap(p1,p2); } + + if ( l==l1 ) + return p1; + return 0; +} + +int Selection::lastPosInLine(int l) +{ + assert( firstLine != -1 ); + + int l1 = firstLine; + int l2 = lastLine; + int p1 = firstPos; + int p2 = lastPos; + + if ( l1>l2 ){ std::swap(l1,l2); std::swap(p1,p2); } + if ( l1==l2 && p1>p2 ){ std::swap(p1,p2); } + + if ( l==l2 ) + return p2; + return INT_MAX; +} + +bool Selection::within( int l, int p ) +{ + if ( firstLine == -1 ) return false; + int l1 = firstLine; + int l2 = lastLine; + int p1 = firstPos; + int p2 = lastPos; + if ( l1>l2 ){ std::swap(l1,l2); std::swap(p1,p2); } + if ( l1==l2 && p1>p2 ){ std::swap(p1,p2); } + if( l1 <= l && l <= l2 ) + { + if ( l1==l2 ) + return p>=p1 && p=p1; + if ( l==l2 ) + return pl2 ){ std::swap(l1,l2); } + + return ( l1 <= l && l <= l2 ); +} + + +void DiffTextWindowData::writeLine( + MyPainter& p, + const LineData* pld, + const DiffList* pLineDiff1, + const DiffList* pLineDiff2, + int line, + int whatChanged, + int whatChanged2, + int srcLineIdx, + int wrapLineOffset, + int wrapLineLength, + bool bWrapLine, + const QRect& invalidRect, + int deviceWidth + ) +{ + QFont normalFont = p.font(); + QFont diffFont = normalFont; + diffFont.setItalic( m_pOptionDialog->m_bItalicForDeltas ); + const QFontMetrics& fm = p.fontMetrics(); + int fontHeight = fm.height(); + int fontAscent = fm.ascent(); + int fontDescent = fm.descent(); + int fontWidth = fm.width('W'); + + int xOffset = (leftInfoWidth() - m_firstColumn)*fontWidth; + int yOffset = (line-m_firstLine) * fontHeight; + + QRect lineRect( 0, yOffset, deviceWidth, fontHeight ); + if ( ! invalidRect.intersects( lineRect ) ) + { + return; + } + + int fastSelectorLine1 = m_pDiffTextWindow->convertDiff3LineIdxToLine(m_fastSelectorLine1); + int fastSelectorLine2 = m_pDiffTextWindow->convertDiff3LineIdxToLine(m_fastSelectorLine1+m_fastSelectorNofLines)-1; + + bool bFastSelectionRange = (line>=fastSelectorLine1 && line<= fastSelectorLine2 ); + QColor bgColor = m_pOptionDialog->m_bgColor; + QColor diffBgColor = m_pOptionDialog->m_diffBgColor; + + if ( bFastSelectionRange ) + { + bgColor = m_pOptionDialog->m_currentRangeBgColor; + diffBgColor = m_pOptionDialog->m_currentRangeDiffBgColor; + } + + if ( yOffset+fontHeightm_fgColor; + if ( changed == 2 ) { + c = m_cDiff2; + } else if ( changed == 1 ) { + c = m_cDiff1; + } else if ( changed == 3 ) { + c = m_cDiffBoth; + } + + p.fillRect( leftInfoWidth()*fontWidth, yOffset, deviceWidth, fontHeight, bgColor ); + + if (pld!=0) + { + // First calculate the "changed" information for each character. + int i=0; + std::vector charChanged( pld->size ); + if ( pLineDiff1!=0 || pLineDiff2 != 0 ) + { + Merger merger( pLineDiff1, pLineDiff2 ); + while( ! merger.isEndReached() && isize ) + { + if ( i < pld->size ) + { + charChanged[i] = merger.whatChanged(); + ++i; + } + merger.next(); + } + } + + QString s=" "; + // Convert tabs + int outPos = 0; + + QString lineString( pld->pLine, pld->size ); + int lineLength = m_bWordWrap ? wrapLineOffset+wrapLineLength : lineString.length(); + + for( i=wrapLineOffset; im_tabSize ); + s[0] = ' '; + } + else + { + s[0] = lineString[i]; + } + + QColor c = m_pOptionDialog->m_fgColor; + int cchanged = charChanged[i] | whatChanged; + + if ( cchanged == 2 ) { + c = m_cDiff2; + } else if ( cchanged == 1 ) { + c = m_cDiff1; + } else if ( cchanged == 3 ) { + c = m_cDiffBoth; + } + + if ( c!=m_pOptionDialog->m_fgColor && whatChanged2==0 && !m_pOptionDialog->m_bShowWhiteSpace ) + { + // The user doesn't want to see highlighted white space. + c = m_pOptionDialog->m_fgColor; + } + + QRect outRect( xOffset + fontWidth*outPos, yOffset, fontWidth*spaces, fontHeight ); + if ( m_pOptionDialog->m_bRightToLeftLanguage ) + outRect = QRect( deviceWidth-1-(xOffset + fontWidth*outPos), yOffset, -fontWidth*spaces, fontHeight ).normalize(); + if ( invalidRect.intersects( outRect ) ) + { + if( !m_selection.within( line, outPos ) ) + { + + if( c!=m_pOptionDialog->m_fgColor ) + { + QColor lightc = diffBgColor; + p.fillRect( xOffset + fontWidth*outPos, yOffset, + fontWidth*spaces, fontHeight, lightc ); + p.setFont(diffFont); + } + + p.setPen( c ); + if ( s[0]==' ' && c!=m_pOptionDialog->m_fgColor && charChanged[i]!=0 ) + { + if ( m_pOptionDialog->m_bShowWhiteSpaceCharacters && m_pOptionDialog->m_bShowWhiteSpace) + { + p.fillRect( xOffset + fontWidth*outPos, yOffset+fontAscent, + fontWidth*spaces-1, fontDescent, c ); // QT3 + //fontWidth*spaces-1, fontDescent, c ); // QT4 + } + } + else + { + p.drawText( xOffset + fontWidth*outPos, yOffset + fontAscent, s ); + } + p.setFont(normalFont); + } + else + { + p.fillRect( xOffset + fontWidth*outPos, yOffset, + fontWidth*(spaces), fontHeight, m_pDiffTextWindow->colorGroup().highlight() ); + + p.setPen( m_pDiffTextWindow->colorGroup().highlightedText() ); + p.drawText( xOffset + fontWidth*outPos, yOffset + fontAscent, s ); + + m_selection.bSelectionContainsData = true; + } + } + + outPos += spaces; + } + + if( m_selection.lineWithin( line ) && m_selection.lineWithin( line+1 ) ) + { + p.fillRect( xOffset + fontWidth*outPos, yOffset, + deviceWidth, fontHeight, m_pDiffTextWindow->colorGroup().highlight() ); + } + } + + p.fillRect( 0, yOffset, leftInfoWidth()*fontWidth, fontHeight, m_pOptionDialog->m_bgColor ); + + xOffset = (m_lineNumberWidth+2)*fontWidth; + int xLeft = m_lineNumberWidth*fontWidth; + p.setPen( m_pOptionDialog->m_fgColor ); + if ( pld!=0 ) + { + if ( m_pOptionDialog->m_bShowLineNumbers && !bWrapLine ) + { + QString num; + num.sprintf( "%0*d", m_lineNumberWidth, srcLineIdx+1); + p.drawText( 0, yOffset + fontAscent, num ); + //p.drawLine( xLeft -1, yOffset, xLeft -1, yOffset+fontHeight-1 ); + } + if ( !bWrapLine || wrapLineLength>0 ) + { + p.setPen( QPen( m_pOptionDialog->m_fgColor, 0, bWrapLine ? Qt::DotLine : Qt::SolidLine) ); + p.drawLine( xOffset +1, yOffset, xOffset +1, yOffset+fontHeight-1 ); + p.setPen( QPen( m_pOptionDialog->m_fgColor, 0, Qt::SolidLine) ); + } + } + if ( c!=m_pOptionDialog->m_fgColor && whatChanged2==0 )//&& whatChanged==0 ) + { + if ( m_pOptionDialog->m_bShowWhiteSpace ) + { + p.setBrushOrigin(0,0); + p.fillRect( xLeft, yOffset, fontWidth*2-1, fontHeight, QBrush(c,Qt::Dense5Pattern) ); + } + } + else + { + p.fillRect( xLeft, yOffset, fontWidth*2-1, fontHeight, c==m_pOptionDialog->m_fgColor ? bgColor : c ); + } + + if ( bFastSelectionRange ) + { + p.fillRect( xOffset + fontWidth-1, yOffset, 3, fontHeight, m_pOptionDialog->m_fgColor ); + } + + // Check if line needs a manual diff help mark + ManualDiffHelpList::const_iterator ci; + for( ci = m_pManualDiffHelpList->begin(); ci!=m_pManualDiffHelpList->end(); ++ci) + { + const ManualDiffHelpEntry& mdhe=*ci; + int rangeLine1 = -1; + int rangeLine2 = -1; + if (m_winIdx==1 ) { rangeLine1 = mdhe.lineA1; rangeLine2= mdhe.lineA2; } + if (m_winIdx==2 ) { rangeLine1 = mdhe.lineB1; rangeLine2= mdhe.lineB2; } + if (m_winIdx==3 ) { rangeLine1 = mdhe.lineC1; rangeLine2= mdhe.lineC2; } + if ( rangeLine1>=0 && rangeLine2>=0 && srcLineIdx >= rangeLine1 && srcLineIdx <= rangeLine2 ) + { + p.fillRect( xOffset - fontWidth, yOffset, fontWidth-1, fontHeight, m_pOptionDialog->m_manualHelpRangeColor ); + break; + } + } +} + +void DiffTextWindow::paintEvent( QPaintEvent* e ) +{ + if ( d->m_pDiff3LineVector==0 || ! d->m_bPaintingAllowed || + ( d->m_diff3WrapLineVector.empty() && d->m_bWordWrap ) ) + return; + + QRect invalidRect = e->rect(); + if ( invalidRect.isEmpty() ) + return; + + bool bOldSelectionContainsData = d->m_selection.bSelectionContainsData; + d->m_selection.bSelectionContainsData = false; + + int endLine = min2( d->m_firstLine + getNofVisibleLines()+2, getNofLines() ); + + //if ( invalidRect.size()==size() ) + { // double buffering, obsolete with Qt4 + QPainter painter(this); // Remove for Qt4 + QPixmap pixmap( invalidRect.size() );// Remove for Qt4 + + MyPainter p( &pixmap, d->m_pOptionDialog->m_bRightToLeftLanguage, width(), fontMetrics().width('W') ); // For Qt4 change pixmap to this + + p.translate( -invalidRect.x(), -invalidRect.y() );// Remove for Qt4 + + p.setFont( font() ); + p.QPainter::fillRect( invalidRect, d->m_pOptionDialog->m_bgColor ); + + d->draw( p, invalidRect, width(), d->m_firstLine, endLine ); + // p.drawLine( m_invalidRect.x(), m_invalidRect.y(), m_invalidRect.right(), m_invalidRect.bottom() ); // For test only + p.end(); + + painter.drawPixmap( invalidRect.x(), invalidRect.y(), pixmap );// Remove for Qt4 + } +// else +// { // no double buffering +// MyPainter p( this, d->m_pOptionDialog->m_bRightToLeftLanguage, width(), fontMetrics().width('W') ); +// p.setFont( font() ); +// p.QPainter::fillRect( invalidRect, d->m_pOptionDialog->m_bgColor ); +// d->draw( p, invalidRect, width(), d->m_firstLine, endLine ); +// } + + + d->m_oldFirstLine = d->m_firstLine; + d->m_oldFirstColumn = d->m_firstColumn; + d->m_selection.oldLastLine = -1; + if ( d->m_selection.oldFirstLine !=-1 ) + d->m_selection.oldFirstLine = -1; + + if( !bOldSelectionContainsData && d->m_selection.bSelectionContainsData ) + emit newSelection(); +} + +void DiffTextWindow::print( MyPainter& p, const QRect&, int firstLine, int nofLinesPerPage ) +{ + if ( d->m_pDiff3LineVector==0 || ! d->m_bPaintingAllowed || + ( d->m_diff3WrapLineVector.empty() && d->m_bWordWrap ) ) + return; + resetSelection(); +// MyPainter p( this, d->m_pOptionDialog->m_bRightToLeftLanguage, width(), fontMetrics().width('W') ); + int oldFirstLine = d->m_firstLine; + d->m_firstLine = firstLine; + QRect invalidRect = QRect(0,0,QCOORD_MAX,QCOORD_MAX); + QColor bgColor = d->m_pOptionDialog->m_bgColor; + d->m_pOptionDialog->m_bgColor = Qt::white; + d->draw( p, invalidRect, p.window().width(), firstLine, min2(firstLine+nofLinesPerPage,getNofLines()) ); + d->m_pOptionDialog->m_bgColor = bgColor; + d->m_firstLine = oldFirstLine; +} + +void DiffTextWindowData::draw( MyPainter& p, const QRect& invalidRect, int deviceWidth, int beginLine, int endLine ) +{ + m_lineNumberWidth = m_pOptionDialog->m_bShowLineNumbers ? (int)log10((double)m_size)+1 : 0; + + if ( m_winIdx==1 ) + { + m_cThis = m_pOptionDialog->m_colorA; + m_cDiff1 = m_pOptionDialog->m_colorB; + m_cDiff2 = m_pOptionDialog->m_colorC; + } + if ( m_winIdx==2 ) + { + m_cThis = m_pOptionDialog->m_colorB; + m_cDiff1 = m_pOptionDialog->m_colorC; + m_cDiff2 = m_pOptionDialog->m_colorA; + } + if ( m_winIdx==3 ) + { + m_cThis = m_pOptionDialog->m_colorC; + m_cDiff1 = m_pOptionDialog->m_colorA; + m_cDiff2 = m_pOptionDialog->m_colorB; + } + m_cDiffBoth = m_pOptionDialog->m_colorForConflict; // Conflict color + + p.setPen( m_cThis ); + + for ( int line = beginLine; line 0 && m_diff3WrapLineVector[line-1].pD3L == d3l; + } + else + { + d3l = (*m_pDiff3LineVector)[line]; + } + DiffList* pFineDiff1; + DiffList* pFineDiff2; + int changed=0; + int changed2=0; + + int srcLineIdx=-1; + getLineInfo( *d3l, srcLineIdx, pFineDiff1, pFineDiff2, changed, changed2 ); + + writeLine( + p, // QPainter + srcLineIdx == -1 ? 0 : &m_pLineData[srcLineIdx], // Text in this line + pFineDiff1, + pFineDiff2, + line, // Line on the screen + changed, + changed2, + srcLineIdx, + wrapLineOffset, + wrapLineLength, + bWrapLine, + invalidRect, + deviceWidth + ); + } +} + +QString DiffTextWindowData::getString( int d3lIdx ) +{ + if ( d3lIdx<0 || d3lIdx>=(int)m_pDiff3LineVector->size() ) + return QString(); + const Diff3Line* d3l = (*m_pDiff3LineVector)[d3lIdx]; + DiffList* pFineDiff1; + DiffList* pFineDiff2; + int changed=0; + int changed2=0; + int lineIdx; + getLineInfo( *d3l, lineIdx, pFineDiff1, pFineDiff2, changed, changed2 ); + + if (lineIdx==-1) return QString(); + else + { + const LineData* ld = &m_pLineData[lineIdx]; + return QString( ld->pLine, ld->size ); + } + return QString(); +} + +QString DiffTextWindowData::getLineString( int line ) +{ + if ( m_bWordWrap ) + { + int d3LIdx = m_pDiffTextWindow->convertLineToDiff3LineIdx(line); + return getString( d3LIdx ).mid( m_diff3WrapLineVector[line].wrapLineOffset, m_diff3WrapLineVector[line].wrapLineLength ); + } + else + { + return getString( line ); + } +} + +void DiffTextWindowData::getLineInfo( + const Diff3Line& d3l, + int& lineIdx, + DiffList*& pFineDiff1, DiffList*& pFineDiff2, // return values + int& changed, int& changed2 + ) +{ + changed=0; + changed2=0; + bool bAEqB = d3l.bAEqB || ( d3l.bWhiteLineA && d3l.bWhiteLineB ); + bool bAEqC = d3l.bAEqC || ( d3l.bWhiteLineA && d3l.bWhiteLineC ); + bool bBEqC = d3l.bBEqC || ( d3l.bWhiteLineB && d3l.bWhiteLineC ); + if ( m_winIdx == 1 ) { + lineIdx=d3l.lineA; + pFineDiff1=d3l.pFineAB; + pFineDiff2=d3l.pFineCA; + changed |= ((d3l.lineB==-1)!=(lineIdx==-1) ? 1 : 0) + + ((d3l.lineC==-1)!=(lineIdx==-1) && m_bTriple ? 2 : 0); + changed2 |= ( bAEqB ? 0 : 1 ) + (bAEqC || !m_bTriple ? 0 : 2); + } + else if ( m_winIdx == 2 ) { + lineIdx=d3l.lineB; + pFineDiff1=d3l.pFineBC; + pFineDiff2=d3l.pFineAB; + changed |= ((d3l.lineC==-1)!=(lineIdx==-1) && m_bTriple ? 1 : 0) + + ((d3l.lineA==-1)!=(lineIdx==-1) ? 2 : 0); + changed2 |= ( bBEqC || !m_bTriple ? 0 : 1 ) + (bAEqB ? 0 : 2); + } + else if ( m_winIdx == 3 ) { + lineIdx=d3l.lineC; + pFineDiff1=d3l.pFineCA; + pFineDiff2=d3l.pFineBC; + changed |= ((d3l.lineA==-1)!=(lineIdx==-1) ? 1 : 0) + + ((d3l.lineB==-1)!=(lineIdx==-1) ? 2 : 0); + changed2 |= ( bAEqC ? 0 : 1 ) + (bBEqC ? 0 : 2); + } + else assert(false); +} + + + +void DiffTextWindow::resizeEvent( QResizeEvent* e ) +{ + QSize s = e->size(); + QFontMetrics fm = fontMetrics(); + int visibleLines = s.height()/fm.height()-2; + int visibleColumns = s.width()/fm.width('W') - d->leftInfoWidth(); + emit resizeSignal( visibleColumns, visibleLines ); + QWidget::resizeEvent(e); +} + +int DiffTextWindow::getNofVisibleLines() +{ + QFontMetrics fm = fontMetrics(); + int fmh = fm.height(); + int h = height(); + return h/fmh -1;//height()/fm.height()-2; +} + +int DiffTextWindow::getNofVisibleColumns() +{ + QFontMetrics fm = fontMetrics(); + return width()/fm.width('W') - d->leftInfoWidth(); +} + +QString DiffTextWindow::getSelection() +{ + QString selectionString; + + int line=0; + int lineIdx=0; + + int it; + int vectorSize = d->m_bWordWrap ? d->m_diff3WrapLineVector.size() : d->m_pDiff3LineVector->size(); + for( it=0; itm_bWordWrap ? d->m_diff3WrapLineVector[it].pD3L : (*d->m_pDiff3LineVector)[it]; + if ( d->m_winIdx == 1 ) { lineIdx=d3l->lineA; } + else if ( d->m_winIdx == 2 ) { lineIdx=d3l->lineB; } + else if ( d->m_winIdx == 3 ) { lineIdx=d3l->lineC; } + else assert(false); + + if( lineIdx != -1 ) + { + const QChar* pLine = d->m_pLineData[lineIdx].pLine; + int size = d->m_pLineData[lineIdx].size; + QString lineString = QString( pLine, size ); + + if ( d->m_bWordWrap ) + { + size = d->m_diff3WrapLineVector[it].wrapLineLength; + lineString = lineString.mid( d->m_diff3WrapLineVector[it].wrapLineOffset, size ); + } + + // Consider tabs + int outPos = 0; + for( int i=0; im_pOptionDialog->m_tabSize ); + } + + if( d->m_selection.within( line, outPos ) ) + { + selectionString += lineString[i]; + } + + outPos += spaces; + } + + if( d->m_selection.within( line, outPos ) && + !( d->m_bWordWrap && it+1m_diff3WrapLineVector[it+1].pD3L ) + ) + { + #ifdef _WIN32 + selectionString += '\r'; + #endif + selectionString += '\n'; + } + } + + ++line; + } + + return selectionString; +} + +bool DiffTextWindow::findString( const QString& s, int& d3vLine, int& posInLine, bool bDirDown, bool bCaseSensitive ) +{ + int it = d3vLine; + int endIt = bDirDown ? (int)d->m_pDiff3LineVector->size() : -1; + int step = bDirDown ? 1 : -1; + int startPos = posInLine; + + for( ; it!=endIt; it+=step ) + { + QString line = d->getString( it ); + if ( !line.isEmpty() ) + { + int pos = line.find( s, startPos, bCaseSensitive ); + if ( pos != -1 ) + { + d3vLine = it; + posInLine = pos; + return true; + } + + startPos = 0; + } + } + return false; +} + +void DiffTextWindow::convertD3LCoordsToLineCoords( int d3LIdx, int d3LPos, int& line, int& pos ) +{ + if( d->m_bWordWrap ) + { + int wrapPos = d3LPos; + int wrapLine = convertDiff3LineIdxToLine(d3LIdx); + while ( wrapPos > d->m_diff3WrapLineVector[wrapLine].wrapLineLength ) + { + wrapPos -= d->m_diff3WrapLineVector[wrapLine].wrapLineLength; + ++wrapLine; + } + pos = wrapPos; + line = wrapLine; + } + else + { + pos = d3LPos; + line = d3LIdx; + } +} + +void DiffTextWindow::convertLineCoordsToD3LCoords( int line, int pos, int& d3LIdx, int& d3LPos ) +{ + if( d->m_bWordWrap ) + { + d3LPos = pos; + d3LIdx = convertLineToDiff3LineIdx( line ); + int wrapLine = convertDiff3LineIdxToLine(d3LIdx); // First wrap line belonging to this d3LIdx + while ( wrapLine < line ) + { + d3LPos += d->m_diff3WrapLineVector[wrapLine].wrapLineLength; + ++wrapLine; + } + } + else + { + d3LPos = pos; + d3LIdx = line; + } +} + + +void DiffTextWindow::setSelection( int firstLine, int startPos, int lastLine, int endPos, int& l, int& p ) +{ + d->m_selection.reset(); + if ( lastLine >= getNofLines() ) + { + lastLine = getNofLines()-1; + + const Diff3Line* d3l = (*d->m_pDiff3LineVector)[convertLineToDiff3LineIdx(lastLine)]; + int line = -1; + if ( d->m_winIdx==1 ) line = d3l->lineA; + if ( d->m_winIdx==2 ) line = d3l->lineB; + if ( d->m_winIdx==3 ) line = d3l->lineC; + if (line>=0) + endPos = d->m_pLineData[line].width( d->m_pOptionDialog->m_tabSize); + } + + if ( d->m_bWordWrap && d->m_pDiff3LineVector!=0 ) + { + QString s1 = d->getString(firstLine); + int firstWrapLine = convertDiff3LineIdxToLine(firstLine); + int wrapStartPos = startPos; + while ( wrapStartPos > d->m_diff3WrapLineVector[firstWrapLine].wrapLineLength ) + { + wrapStartPos -= d->m_diff3WrapLineVector[firstWrapLine].wrapLineLength; + s1 = s1.mid(d->m_diff3WrapLineVector[firstWrapLine].wrapLineLength); + ++firstWrapLine; + } + + QString s2 = d->getString(lastLine); + int lastWrapLine = convertDiff3LineIdxToLine(lastLine); + int wrapEndPos = endPos; + while ( wrapEndPos > d->m_diff3WrapLineVector[lastWrapLine].wrapLineLength ) + { + wrapEndPos -= d->m_diff3WrapLineVector[lastWrapLine].wrapLineLength; + s2 = s2.mid(d->m_diff3WrapLineVector[lastWrapLine].wrapLineLength); + ++lastWrapLine; + } + + d->m_selection.start( firstWrapLine, convertToPosOnScreen( s1, wrapStartPos, d->m_pOptionDialog->m_tabSize ) ); + d->m_selection.end( lastWrapLine, convertToPosOnScreen( s2, wrapEndPos, d->m_pOptionDialog->m_tabSize ) ); + l=firstWrapLine; + p=wrapStartPos; + } + else + { + d->m_selection.start( firstLine, convertToPosOnScreen( d->getString(firstLine), startPos, d->m_pOptionDialog->m_tabSize ) ); + d->m_selection.end( lastLine, convertToPosOnScreen( d->getString(lastLine), endPos, d->m_pOptionDialog->m_tabSize ) ); + l=firstLine; + p=startPos; + } + update(); +} + +int DiffTextWindowData::convertLineOnScreenToLineInSource( int lineOnScreen, e_CoordType coordType, bool bFirstLine ) +{ + int line=-1; + if (lineOnScreen>=0) + { + if (coordType==eWrapCoords) return lineOnScreen; + int d3lIdx = m_pDiffTextWindow->convertLineToDiff3LineIdx( lineOnScreen ); + if ( !bFirstLine && d3lIdx >= (int)m_pDiff3LineVector->size() ) + d3lIdx = m_pDiff3LineVector->size()-1; + if (coordType==eD3LLineCoords) return d3lIdx; + while ( line<0 && d3lIdx<(int)m_pDiff3LineVector->size() && d3lIdx>=0 ) + { + const Diff3Line* d3l = (*m_pDiff3LineVector)[d3lIdx]; + if ( m_winIdx==1 ) line = d3l->lineA; + if ( m_winIdx==2 ) line = d3l->lineB; + if ( m_winIdx==3 ) line = d3l->lineC; + if ( bFirstLine ) + ++d3lIdx; + else + --d3lIdx; + } + if (coordType==eFileCoords) return line; + } + return line; +} + + +void DiffTextWindow::getSelectionRange( int* pFirstLine, int* pLastLine, e_CoordType coordType ) +{ + if (pFirstLine) + *pFirstLine = d->convertLineOnScreenToLineInSource( d->m_selection.beginLine(), coordType, true ); + if (pLastLine) + *pLastLine = d->convertLineOnScreenToLineInSource( d->m_selection.endLine(), coordType, false ); +} + +// Returns the number of wrapped lines +// if pWrappedLines != 0 then the stringlist will contain the wrapped lines. +int wordWrap( const QString& origLine, int nofColumns, Diff3WrapLine* pDiff3WrapLine ) +{ + if (nofColumns<=0) + nofColumns = 1; + + int nofNeededLines = 0; + int length = origLine.length(); + + if (length==0) + { + nofNeededLines = 1; + if( pDiff3WrapLine ) + { + pDiff3WrapLine->wrapLineOffset=0; + pDiff3WrapLine->wrapLineLength=0; + } + } + else + { + int pos = 0; + + while ( pos < length ) + { + int wrapPos = pos + nofColumns; + + if ( length-pos <= nofColumns ) + { + wrapPos = length; + } + else + { + int wsPos = max2( origLine.findRev( ' ', wrapPos ), origLine.findRev( '\t', wrapPos ) ); + + if ( wsPos > pos ) + { + // Wrap line at wsPos + wrapPos = wsPos; + } + } + + if ( pDiff3WrapLine ) + { + pDiff3WrapLine->wrapLineOffset = pos; + pDiff3WrapLine->wrapLineLength = wrapPos-pos; + ++pDiff3WrapLine; + } + + pos = wrapPos; + + ++nofNeededLines; + } + } + return nofNeededLines; +} + +void DiffTextWindow::convertSelectionToD3LCoords() +{ + if ( d->m_pDiff3LineVector==0 || ! d->m_bPaintingAllowed || !isVisible() || d->m_selection.isEmpty() ) + { + return; + } + + // convert the d->m_selection to unwrapped coordinates: Later restore to new coords + int firstD3LIdx, firstD3LPos; + QString s = d->getLineString( d->m_selection.beginLine() ); + int firstPosInText = convertToPosInText( s, d->m_selection.beginPos(), d->m_pOptionDialog->m_tabSize ); + convertLineCoordsToD3LCoords( d->m_selection.beginLine(), firstPosInText, firstD3LIdx, firstD3LPos ); + + int lastD3LIdx, lastD3LPos; + s = d->getLineString( d->m_selection.endLine() ); + int lastPosInText = convertToPosInText( s, d->m_selection.endPos(), d->m_pOptionDialog->m_tabSize ); + convertLineCoordsToD3LCoords( d->m_selection.endLine(), lastPosInText, lastD3LIdx, lastD3LPos ); + + //d->m_selection.reset(); + d->m_selection.start( firstD3LIdx, firstD3LPos ); + d->m_selection.end( lastD3LIdx, lastD3LPos ); +} + +void DiffTextWindow::recalcWordWrap( bool bWordWrap, int wrapLineVectorSize, int nofVisibleColumns ) +{ + if ( d->m_pDiff3LineVector==0 || ! d->m_bPaintingAllowed || !isVisible() ) + { + d->m_bWordWrap = bWordWrap; + if (!bWordWrap) d->m_diff3WrapLineVector.resize( 0 ); + return; + } + + d->m_bWordWrap = bWordWrap; + + if ( bWordWrap ) + { + d->m_diff3WrapLineVector.resize( wrapLineVectorSize ); + + if (nofVisibleColumns<0) + nofVisibleColumns = getNofVisibleColumns(); + else + nofVisibleColumns-= d->leftInfoWidth(); + int i; + int wrapLineIdx = 0; + int size = d->m_pDiff3LineVector->size(); + for( i=0; igetString( i ); + int linesNeeded = wordWrap( s, nofVisibleColumns, wrapLineVectorSize==0 ? 0 : &d->m_diff3WrapLineVector[wrapLineIdx] ); + Diff3Line& d3l = *(*d->m_pDiff3LineVector)[i]; + if ( d3l.linesNeededForDisplay0 ) + { + int j; + for( j=0; jm_diff3WrapLineVector[wrapLineIdx]; + d3wl.diff3LineIndex = i; + d3wl.pD3L = (*d->m_pDiff3LineVector)[i]; + if ( j>=linesNeeded ) + { + d3wl.wrapLineOffset=0; + d3wl.wrapLineLength=0; + } + } + } + } + + if ( wrapLineVectorSize>0 ) + { + d->m_firstLine = min2( d->m_firstLine, wrapLineVectorSize-1 ); + d->m_firstColumn = 0; + d->m_pDiffTextWindowFrame->setFirstLine( d->m_firstLine ); + } + } + else + { + d->m_diff3WrapLineVector.resize( 0 ); + } + + if ( !d->m_selection.isEmpty() && ( !d->m_bWordWrap || wrapLineVectorSize>0 ) ) + { + // Assume unwrapped coordinates + //( Why? ->Conversion to unwrapped coords happened a few lines above in this method. + // Also see KDiff3App::recalcWordWrap() on the role of wrapLineVectorSize) + + // Wrap them now. + + // convert the d->m_selection to unwrapped coordinates. + int firstLine, firstPos; + convertD3LCoordsToLineCoords( d->m_selection.beginLine(), d->m_selection.beginPos(), firstLine, firstPos ); + + int lastLine, lastPos; + convertD3LCoordsToLineCoords( d->m_selection.endLine(), d->m_selection.endPos(), lastLine, lastPos ); + + //d->m_selection.reset(); + d->m_selection.start( firstLine, convertToPosOnScreen( d->getLineString( firstLine ), firstPos, d->m_pOptionDialog->m_tabSize ) ); + d->m_selection.end( lastLine, convertToPosOnScreen( d->getLineString( lastLine ),lastPos, d->m_pOptionDialog->m_tabSize ) ); + } +} + + +class DiffTextWindowFrameData +{ +public: + DiffTextWindow* m_pDiffTextWindow; + QLineEdit* m_pFileSelection; + QPushButton* m_pBrowseButton; + OptionDialog* m_pOptionDialog; + QLabel* m_pLabel; + QLabel* m_pTopLine; + QWidget* m_pTopLineWidget; +}; + +DiffTextWindowFrame::DiffTextWindowFrame( QWidget* pParent, QStatusBar* pStatusBar, OptionDialog* pOptionDialog, int winIdx ) + : QWidget( pParent ) +{ + d = new DiffTextWindowFrameData; + d->m_pOptionDialog = pOptionDialog; + d->m_pTopLineWidget = new QWidget(this); + d->m_pFileSelection = new QLineEdit(d->m_pTopLineWidget); + d->m_pBrowseButton = new QPushButton( "...",d->m_pTopLineWidget ); + d->m_pBrowseButton->setFixedWidth( 30 ); + connect(d->m_pBrowseButton,SIGNAL(clicked()), this, SLOT(slotBrowseButtonClicked())); + connect(d->m_pFileSelection,SIGNAL(returnPressed()), this, SLOT(slotReturnPressed())); + + d->m_pLabel = new QLabel("A:",d->m_pTopLineWidget); + d->m_pTopLine = new QLabel(d->m_pTopLineWidget); + d->m_pDiffTextWindow = 0; + d->m_pDiffTextWindow = new DiffTextWindow( this, pStatusBar, pOptionDialog, winIdx ); + QHBoxLayout* pHL = new QHBoxLayout(d->m_pTopLineWidget); + pHL->setMargin(2); + pHL->setSpacing(2); + + pHL->addWidget( d->m_pLabel, 0 ); + pHL->addWidget( d->m_pFileSelection, 1 ); + pHL->addWidget( d->m_pBrowseButton, 0 ); + pHL->addWidget( d->m_pTopLine, 0 ); + + QVBoxLayout* pVL = new QVBoxLayout( this, 0, 0 ); + pVL->addWidget( d->m_pTopLineWidget, 0 ); + pVL->addWidget( d->m_pDiffTextWindow, 1 ); + + d->m_pDiffTextWindow->installEventFilter( this ); + d->m_pFileSelection->installEventFilter( this ); + d->m_pBrowseButton->installEventFilter( this ); + init(); +} + +DiffTextWindowFrame::~DiffTextWindowFrame() +{ + delete d; +} + +void DiffTextWindowFrame::init() +{ + DiffTextWindow* pDTW = d->m_pDiffTextWindow; + if ( pDTW ) + { + QString s = pDTW->d->m_filename ; + d->m_pFileSelection->setText( QDir::convertSeparators(s) ); + QString winId = pDTW->d->m_winIdx==1 ? + ( pDTW->d->m_bTriple?"A (Base)":"A") : + ( pDTW->d->m_winIdx==2 ? "B" : "C" ); + d->m_pLabel->setText( winId + ":" ); + } +} + +// Search for the first visible line (search loop needed when no line exist for this file.) +int DiffTextWindow::calcTopLineInFile( int firstLine ) +{ + int l=-1; + for ( int i = convertLineToDiff3LineIdx(firstLine); i<(int)d->m_pDiff3LineVector->size(); ++i ) + { + const Diff3Line* d3l = (*d->m_pDiff3LineVector)[i]; + l = d3l->getLineInFile(d->m_winIdx); + if (l!=-1) break; + } + return l; +} + +void DiffTextWindowFrame::setFirstLine( int firstLine ) +{ + DiffTextWindow* pDTW = d->m_pDiffTextWindow; + if ( pDTW && pDTW->d->m_pDiff3LineVector ) + { + QString s= i18n("Top line"); + int lineNumberWidth = (int)log10((double)pDTW->d->m_size)+1; + + int l=pDTW->calcTopLineInFile(firstLine); + + int w = d->m_pTopLine->fontMetrics().width( + s+" "+QString().fill('0',lineNumberWidth)); + d->m_pTopLine->setMinimumWidth( w ); + + if (l==-1) + s = i18n("End"); + else + s += " " + QString::number( l+1 ); + + d->m_pTopLine->setText( s ); + d->m_pTopLine->repaint(); + } +} + +DiffTextWindow* DiffTextWindowFrame::getDiffTextWindow() +{ + return d->m_pDiffTextWindow; +} + +bool DiffTextWindowFrame::eventFilter( QObject* o, QEvent* e ) +{ + DiffTextWindow* pDTW = d->m_pDiffTextWindow; + if ( e->type()==QEvent::FocusIn || e->type()==QEvent::FocusOut ) + { + QColor c1 = d->m_pOptionDialog->m_bgColor; + QColor c2 = pDTW->d->m_cThis; + QPalette p = d->m_pTopLineWidget->palette(); + if ( e->type()==QEvent::FocusOut ) + std::swap(c1,c2); + + p.setColor(QColorGroup::Background, c2); + d->m_pTopLineWidget->setPalette( p ); + d->m_pBrowseButton->setPalette( p ); + d->m_pFileSelection->setPalette( p ); + + p.setColor(QColorGroup::Foreground, c1); + d->m_pLabel->setPalette( p ); + d->m_pTopLine->setPalette( p ); + } + if (o == d->m_pFileSelection && e->type()==QEvent::Drop) + { + QDropEvent* d = static_cast(e); + + if ( QUriDrag::canDecode( d ) ) + { + QStringList lst; + QUriDrag::decodeLocalFiles( d, lst ); + + if ( lst.count() > 0 ) + { + static_cast(o)->setText( lst[0] ); + static_cast(o)->setFocus(); + emit fileNameChanged( lst[0], pDTW->d->m_winIdx ); + return true; + } + } + /* The following lines work for Qt>4.1 but not for 4.0.x*/ + /*if ( d->mimeData()->hasUrls() ) + { + QList lst = d->mimeData()->urls(); + if ( !lst.empty() ) + { + static_cast(o)->setText( lst[0].toLocalFile() ); + static_cast(o)->setFocus(); + emit fileNameChanged( lst[0], pDTW->d->m_winIdx ); + return true; + } + }*/ + } + return false; +} + +void DiffTextWindowFrame::slotReturnPressed() +{ + DiffTextWindow* pDTW = d->m_pDiffTextWindow; + if ( pDTW->d->m_filename != d->m_pFileSelection->text() ) + { + emit fileNameChanged( d->m_pFileSelection->text(), pDTW->d->m_winIdx ); + } +} + +void DiffTextWindowFrame::slotBrowseButtonClicked() +{ + QString current = d->m_pFileSelection->text(); + + KURL newURL = KFileDialog::getOpenURL( current, 0, this); + if ( !newURL.isEmpty() ) + { + DiffTextWindow* pDTW = d->m_pDiffTextWindow; + emit fileNameChanged( newURL.url(), pDTW->d->m_winIdx ); + } +} + +QCString encodeString( const QString& s ) +{ + QTextCodec* c = QTextCodec::codecForLocale(); + if (c!=0) + return c->fromUnicode( s ); + else + return QCString( s.latin1() ); +} + +#include "difftextwindow.moc" diff --git a/src/difftextwindow.h b/src/difftextwindow.h new file mode 100644 index 0000000..8620b28 --- /dev/null +++ b/src/difftextwindow.h @@ -0,0 +1,135 @@ +/*************************************************************************** + difftextwindow.h - description + ------------------- + begin : Mon Mar 18 2002 + copyright : (C) 2002-2007 by Joachim Eibl + email : joachim.eibl at gmx.de + ***************************************************************************/ + +/*************************************************************************** + * * + * 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. * + * * + ***************************************************************************/ + +#ifndef DIFFTEXTWINDOW_H +#define DIFFTEXTWINDOW_H + +#include "diff.h" + +#include + +class QStatusBar; +class OptionDialog; +class DiffTextWindowData; +class DiffTextWindowFrame; + +class DiffTextWindow : public QWidget +{ + Q_OBJECT +public: + DiffTextWindow( + DiffTextWindowFrame* pParent, + QStatusBar* pStatusBar, + OptionDialog* pOptionDialog, + int winIdx + ); + ~DiffTextWindow(); + void init( + const QString& fileName, + const LineData* pLineData, + int size, + const Diff3LineVector* pDiff3LineVector, + const ManualDiffHelpList* pManualDiffHelpList, + bool bTriple + ); + void reset(); + void convertToLinePos( int x, int y, int& line, int& pos ); + + QString getSelection(); + int getFirstLine(); + int calcTopLineInFile( int firstLine ); + + int getNofColumns(); + int getNofLines(); + int getNofVisibleLines(); + int getNofVisibleColumns(); + + int convertLineToDiff3LineIdx( int line ); + int convertDiff3LineIdxToLine( int d3lIdx ); + + void convertD3LCoordsToLineCoords( int d3LIdx, int d3LPos, int& line, int& pos ); + void convertLineCoordsToD3LCoords( int line, int pos, int& d3LIdx, int& d3LPos ); + + void convertSelectionToD3LCoords(); + + bool findString( const QString& s, int& d3vLine, int& posInLine, bool bDirDown, bool bCaseSensitive ); + void setSelection( int firstLine, int startPos, int lastLine, int endPos, int& l, int& p ); + void getSelectionRange( int* firstLine, int* lastLine, e_CoordType coordType ); + + void setPaintingAllowed( bool bAllowPainting ); + void recalcWordWrap( bool bWordWrap, int wrapLineVectorSize, int nofVisibleColumns ); + void print( MyPainter& painter, const QRect& r, int firstLine, int nofLinesPerPage ); +signals: + void resizeSignal( int nofVisibleColumns, int nofVisibleLines ); + void scroll( int deltaX, int deltaY ); + void newSelection(); + void selectionEnd(); + void setFastSelectorLine( int line ); + void gotFocus(); + void lineClicked( int winIdx, int line ); + +public slots: + void setFirstLine( int line ); + void setFirstColumn( int col ); + void resetSelection(); + void setFastSelectorRange( int line1, int nofLines ); + +protected: + virtual void mousePressEvent ( QMouseEvent * ); + virtual void mouseReleaseEvent ( QMouseEvent * ); + virtual void mouseMoveEvent ( QMouseEvent * ); + virtual void mouseDoubleClickEvent ( QMouseEvent * e ); + + virtual void paintEvent( QPaintEvent* ); + virtual void dragEnterEvent( QDragEnterEvent* e ); + virtual void focusInEvent( QFocusEvent* e ); + + virtual void resizeEvent( QResizeEvent* ); + virtual void timerEvent(QTimerEvent*); + +private: + DiffTextWindowData* d; + void showStatusLine( int line ); + friend class DiffTextWindowFrame; +}; + + +class DiffTextWindowFrameData; + +class DiffTextWindowFrame : public QWidget +{ + Q_OBJECT +public: + DiffTextWindowFrame( QWidget* pParent, QStatusBar* pStatusBar, OptionDialog* pOptionDialog, int winIdx ); + ~DiffTextWindowFrame(); + DiffTextWindow* getDiffTextWindow(); + void init(); + void setFirstLine(int firstLine); +signals: + void fileNameChanged(const QString&, int); +protected: + bool eventFilter( QObject*, QEvent* ); +private slots: + void slotReturnPressed(); + void slotBrowseButtonClicked(); +private: + DiffTextWindowFrameData* d; +}; + + +#endif + diff --git a/src/directorymergewindow.cpp b/src/directorymergewindow.cpp new file mode 100644 index 0000000..48d7904 --- /dev/null +++ b/src/directorymergewindow.cpp @@ -0,0 +1,3048 @@ +/*************************************************************************** + directorymergewindow.cpp + ----------------- + begin : Sat Oct 19 2002 + copyright : (C) 2002-2007 by Joachim Eibl + email : joachim.eibl at gmx.de + ***************************************************************************/ + +/*************************************************************************** + * * + * 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. * + * * + ***************************************************************************/ + +#include "directorymergewindow.h" +#include "optiondialog.h" +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +//#include + +static bool conflictingFileTypes(MergeFileInfos& mfi); +/* +class StatusInfo : public QListView +{ +public: + StatusInfo(QWidget* pParent) : QListView( pParent, "StatusInfo", Qt::WShowModal ) + { + addColumn(""); + setSorting(-1); //disable sorting + } + + QListViewItem* m_pLast; + QListViewItem* last() + { + if (firstChild()==0) return 0; + else return m_pLast; + } + + void addText(const QString& s ) + { + if (firstChild()==0) m_pLast = new QListViewItem( this, s ); + else m_pLast = new QListViewItem( this, last(), s ); + } +}; +*/ +class StatusInfo : public QTextEdit +{ +public: + StatusInfo(QWidget* pParent) : QTextEdit( pParent, "StatusInfo" ) + { + setWFlags(Qt::WShowModal); + setWordWrap(QTextEdit::NoWrap); + setReadOnly(true); + //showMaximized(); + } + + bool isEmpty(){ return text().isEmpty(); } + + void addText(const QString& s ) + { + append(s); + } + + void show() + { + scrollToBottom(); + QTextEdit::show(); + } +}; + + +class TempRemover +{ +public: + TempRemover( const QString& origName, FileAccess& fa ); + ~TempRemover(); + QString name() { return m_name; } + bool success() { return m_bSuccess; } +private: + QString m_name; + bool m_bTemp; + bool m_bSuccess; +}; +TempRemover::TempRemover(const QString& origName, FileAccess& fa) +{ + if ( fa.isLocal() ) + { + m_name = origName; + m_bTemp = false; + m_bSuccess = true; + } + else + { + m_name = FileAccess::tempFileName(); + m_bSuccess = fa.copyFile( m_name ); + m_bTemp = m_bSuccess; + } +} +TempRemover::~TempRemover() +{ + if ( m_bTemp && ! m_name.isEmpty() ) + FileAccess::removeTempFile(m_name); +} + +void DirectoryMergeWindow::fastFileComparison( + FileAccess& fi1, FileAccess& fi2, + bool& bEqual, bool& bError, QString& status ) +{ + ProgressProxy pp; + status = ""; + bEqual = false; + bError = true; + + if ( !m_bFollowFileLinks ) + { + if ( fi1.isSymLink() != fi2.isSymLink() ) + { + status = i18n("Mix of links and normal files."); + return; + } + else if ( fi1.isSymLink() && fi2.isSymLink() ) + { + bError = false; + bEqual = fi1.readLink() == fi2.readLink(); + status = i18n("Link: "); + return; + } + } + + if ( fi1.size()!=fi2.size() ) + { + bEqual = false; + status = i18n("Size. "); + return; + } + else if ( m_pOptions->m_bDmTrustSize ) + { + bEqual = true; + return; + } + + if ( m_pOptions->m_bDmTrustDate ) + { + bEqual = ( fi1.lastModified() == fi2.lastModified() && fi1.size()==fi2.size() ); + bError = false; + status = i18n("Date & Size: "); + return; + } + + if ( m_pOptions->m_bDmTrustDateFallbackToBinary ) + { + bEqual = ( fi1.lastModified() == fi2.lastModified() && fi1.size()==fi2.size() ); + if ( bEqual ) + { + bError = false; + status = i18n("Date & Size: "); + return; + } + } + + QString fileName1 = fi1.absFilePath(); + QString fileName2 = fi2.absFilePath(); + TempRemover tr1( fileName1, fi1 ); + if ( !tr1.success() ) + { + status = i18n("Creating temp copy of %1 failed.").arg(fileName1); + return; + } + TempRemover tr2( fileName2, fi2 ); + if ( !tr2.success() ) + { + status = i18n("Creating temp copy of %1 failed.").arg(fileName2); + return; + } + + std::vector buf1(100000); + std::vector buf2(buf1.size()); + + QFile file1( tr1.name() ); + + if ( ! file1.open(IO_ReadOnly) ) + { + status = i18n("Opening %1 failed.").arg(fileName1); + return; + } + + QFile file2( tr2.name() ); + + if ( ! file2.open(IO_ReadOnly) ) + { + status = i18n("Opening %1 failed.").arg(fileName2); + return; + } + + pp.setInformation( i18n("Comparing file..."), 0, false ); + typedef QFile::Offset t_FileSize; + t_FileSize fullSize = file1.size(); + t_FileSize sizeLeft = fullSize; + + while( sizeLeft>0 && ! pp.wasCancelled() ) + { + int len = min2( sizeLeft, (t_FileSize)buf1.size() ); + if( len != file1.readBlock( &buf1[0], len ) ) + { + status = i18n("Error reading from %1").arg(fileName1); + return; + } + + if( len != file2.readBlock( &buf2[0], len ) ) + { + status = i18n("Error reading from %1").arg(fileName2); + return; + } + + if ( memcmp( &buf1[0], &buf2[0], len ) != 0 ) + { + bError = false; + return; + } + sizeLeft-=len; + pp.setCurrent(double(fullSize-sizeLeft)/fullSize, false ); + } + + // If the program really arrives here, then the files are really equal. + bError = false; + bEqual = true; +} + + + + + +static int s_nameCol = 0; +static int s_ACol = 1; +static int s_BCol = 2; +static int s_CCol = 3; +static int s_OpCol = 4; +static int s_OpStatusCol = 5; +static int s_UnsolvedCol = 6; // Nr of unsolved conflicts (for 3 input files) +static int s_SolvedCol = 7; // Nr of auto-solvable conflicts (for 3 input files) +static int s_NonWhiteCol = 8; // Nr of nonwhite deltas (for 2 input files) +static int s_WhiteCol = 9; // Nr of white deltas (for 2 input files) +DirectoryMergeWindow::DirectoryMergeWindow( QWidget* pParent, OptionDialog* pOptions, KIconLoader* pIconLoader ) + : QListView( pParent ) +{ + connect( this, SIGNAL(doubleClicked(QListViewItem*)), this, SLOT(onDoubleClick(QListViewItem*))); + connect( this, SIGNAL(returnPressed(QListViewItem*)), this, SLOT(onDoubleClick(QListViewItem*))); + connect( this, SIGNAL( mouseButtonPressed(int,QListViewItem*,const QPoint&, int)), + this, SLOT( onClick(int,QListViewItem*,const QPoint&, int)) ); + connect( this, SIGNAL(contextMenuRequested(QListViewItem*,const QPoint &,int)), + this, SLOT( slotShowContextMenu(QListViewItem*,const QPoint &,int))); + connect( this, SIGNAL(selectionChanged(QListViewItem*)), this, SLOT(onSelectionChanged(QListViewItem*))); + m_pOptions = pOptions; + m_pIconLoader = pIconLoader; + m_pDirectoryMergeInfo = 0; + m_bAllowResizeEvents = true; + m_bSimulatedMergeStarted=false; + m_bRealMergeStarted=false; + m_bError = false; + m_bSyncMode = false; + m_pStatusInfo = new StatusInfo(0); + m_pStatusInfo->hide(); + m_bScanning = false; + m_pSelection1Item = 0; + m_pSelection2Item = 0; + m_pSelection3Item = 0; + m_bCaseSensitive = true; + + addColumn(i18n("Name")); + addColumn("A"); + addColumn("B"); + addColumn("C"); + addColumn(i18n("Operation")); + addColumn(i18n("Status")); + addColumn(i18n("Unsolved")); + addColumn(i18n("Solved")); + addColumn(i18n("Nonwhite")); + addColumn(i18n("White")); + + setColumnAlignment( s_UnsolvedCol, Qt::AlignRight ); + setColumnAlignment( s_SolvedCol, Qt::AlignRight ); + setColumnAlignment( s_NonWhiteCol, Qt::AlignRight ); + setColumnAlignment( s_WhiteCol, Qt::AlignRight ); +} + +DirectoryMergeWindow::~DirectoryMergeWindow() +{ +} + + +int DirectoryMergeWindow::totalColumnWidth() +{ + int w=0; + for (int i=0; iconvertToImage().convertDepth(32); + QImage img2 = pm2->convertToImage().convertDepth(32); + + for (int y = 0; y < img1.height(); y++) + { + Q_UINT32 *line1 = reinterpret_cast(img1.scanLine(y)); + Q_UINT32 *line2 = reinterpret_cast(img2.scanLine(y)); + for (int x = 0; x < img1.width(); x++) + { + if ( qAlpha( line2[x] ) >0 ) + line1[x] = (line2[x] | 0xff000000); + } + } + QPixmap pix; + pix.convertFromImage(img1); + return pix; +} + +// like pixCombiner but let the pm1 color shine through +static QPixmap pixCombiner2( const QPixmap* pm1, const QPixmap* pm2 ) +{ + QImage img1 = pm1->convertToImage().convertDepth(32); + QImage img2 = pm2->convertToImage().convertDepth(32); + + for (int y = 0; y < img1.height(); y++) + { + Q_UINT32 *line1 = reinterpret_cast(img1.scanLine(y)); + Q_UINT32 *line2 = reinterpret_cast(img2.scanLine(y)); + for (int x = 0; x < img1.width(); x++) + { + if ( qAlpha( line2[x] ) >0 ) + { + int r = ( qRed( line1[x] ) + qRed( line2[x] ))/2; + int g = ( qGreen( line1[x] ) + qGreen( line2[x] ))/2; + int b = ( qBlue( line1[x] ) + qBlue( line2[x] ))/2; + line1[x] = qRgba( r,g,b, 0xff ); + } + } + } + QPixmap pix; + pix.convertFromImage(img1); + return pix; +} + +static void calcDirStatus( bool bThreeDirs, DirMergeItem* i, int& nofFiles, + int& nofDirs, int& nofEqualFiles, int& nofManualMerges ) +{ + if ( i->m_pMFI->m_bDirA || i->m_pMFI->m_bDirB || i->m_pMFI->m_bDirC ) + { + ++nofDirs; + } + else + { + ++nofFiles; + if ( i->m_pMFI->m_bEqualAB && (!bThreeDirs || i->m_pMFI->m_bEqualAC )) + { + ++nofEqualFiles; + } + else + { + if ( i->m_pMFI->m_eMergeOperation==eMergeABCToDest || i->m_pMFI->m_eMergeOperation==eMergeABToDest ) + ++nofManualMerges; + } + } + for( QListViewItem* p = i->firstChild(); p!=0; p = p->nextSibling() ) + calcDirStatus( bThreeDirs, static_cast(p), nofFiles, nofDirs, nofEqualFiles, nofManualMerges ); +} + +static QString sortString(const QString& s, bool bCaseSensitive) +{ + if (bCaseSensitive) + return s; + else + return s.upper(); +} + +struct t_ItemInfo +{ + bool bExpanded; + bool bOperationComplete; + QString status; + e_MergeOperation eMergeOperation; +}; + +bool DirectoryMergeWindow::init + ( + FileAccess& dirA, + FileAccess& dirB, + FileAccess& dirC, + FileAccess& dirDest, + bool bDirectoryMerge, + bool bReload + ) +{ + if ( m_pOptions->m_bDmFullAnalysis ) + { + // A full analysis uses the same ressources that a normal text-diff/merge uses. + // So make sure that the user saves his data first. + bool bCanContinue=false; + checkIfCanContinue( &bCanContinue ); + if ( !bCanContinue ) + return false; + startDiffMerge("","","","","","","",0); // hide main window + } + + show(); + + std::map expandedDirsMap; + + if ( bReload ) + { + // Remember expandes items + QListViewItemIterator it( this ); + while ( it.current() ) + { + DirMergeItem* pDMI = static_cast( it.current() ); + t_ItemInfo& ii = expandedDirsMap[ pDMI->m_pMFI->m_subPath ]; + ii.bExpanded = pDMI->isOpen(); + ii.bOperationComplete = pDMI->m_pMFI->m_bOperationComplete; + ii.status = pDMI->text( s_OpStatusCol ); + ii.eMergeOperation = pDMI->m_pMFI->m_eMergeOperation; + ++it; + } + } + + ProgressProxy pp; + m_bFollowDirLinks = m_pOptions->m_bDmFollowDirLinks; + m_bFollowFileLinks = m_pOptions->m_bDmFollowFileLinks; + m_bSimulatedMergeStarted=false; + m_bRealMergeStarted=false; + m_bError=false; + m_bDirectoryMerge = bDirectoryMerge; + m_pSelection1Item = 0; + m_pSelection2Item = 0; + m_pSelection3Item = 0; + m_bCaseSensitive = m_pOptions->m_bDmCaseSensitiveFilenameComparison; + + clear(); + + m_mergeItemList.clear(); + m_currentItemForOperation = m_mergeItemList.end(); + + m_dirA = dirA; + m_dirB = dirB; + m_dirC = dirC; + m_dirDest = dirDest; + + if ( !bReload ) + { + m_pDirShowIdenticalFiles->setChecked(true); + m_pDirShowDifferentFiles->setChecked(true); + m_pDirShowFilesOnlyInA->setChecked(true); + m_pDirShowFilesOnlyInB->setChecked(true); + m_pDirShowFilesOnlyInC->setChecked(true); + } + + // Check if all input directories exist and are valid. The dest dir is not tested now. + // The test will happen only when we are going to write to it. + if ( !m_dirA.isDir() || !m_dirB.isDir() || + (m_dirC.isValid() && !m_dirC.isDir()) ) + { + QString text( i18n("Opening of directories failed:") ); + text += "\n\n"; + if ( !dirA.isDir() ) + { text += i18n("Dir A \"%1\" does not exist or is not a directory.\n").arg(m_dirA.prettyAbsPath()); } + + if ( !dirB.isDir() ) + { text += i18n("Dir B \"%1\" does not exist or is not a directory.\n").arg(m_dirB.prettyAbsPath()); } + + if ( m_dirC.isValid() && !m_dirC.isDir() ) + { text += i18n("Dir C \"%1\" does not exist or is not a directory.\n").arg(m_dirC.prettyAbsPath()); } + + KMessageBox::sorry( this, text, i18n("Directory Open Error") ); + return false; + } + + if ( m_dirC.isValid() && + (m_dirDest.prettyAbsPath() == m_dirA.prettyAbsPath() || m_dirDest.prettyAbsPath()==m_dirB.prettyAbsPath() ) ) + { + KMessageBox::error(this, + i18n( "The destination directory must not be the same as A or B when " + "three directories are merged.\nCheck again before continuing."), + i18n("Parameter Warning")); + return false; + } + + m_bScanning = true; + statusBarMessage(i18n("Scanning directories...")); + + m_bSyncMode = m_pOptions->m_bDmSyncMode && !m_dirC.isValid() && !m_dirDest.isValid(); + + if ( m_dirDest.isValid() ) + m_dirDestInternal = m_dirDest; + else + m_dirDestInternal = m_dirC.isValid() ? m_dirC : m_dirB; + + QString origCurrentDirectory = QDir::currentDirPath(); + + m_fileMergeMap.clear(); + t_DirectoryList::iterator i; + + // calc how many directories will be read: + double nofScans = ( m_dirA.isValid() ? 1 : 0 )+( m_dirB.isValid() ? 1 : 0 )+( m_dirC.isValid() ? 1 : 0 ); + int currentScan = 0; + + setColumnWidthMode(s_UnsolvedCol, QListView::Manual); + setColumnWidthMode(s_SolvedCol, QListView::Manual); + setColumnWidthMode(s_WhiteCol, QListView::Manual); + setColumnWidthMode(s_NonWhiteCol, QListView::Manual); + if ( !m_pOptions->m_bDmFullAnalysis ) + { + setColumnWidth( s_WhiteCol, 0 ); + setColumnWidth( s_NonWhiteCol, 0 ); + setColumnWidth( s_UnsolvedCol, 0 ); + setColumnWidth( s_SolvedCol, 0 ); + } + else if ( m_dirC.isValid() ) + { + setColumnWidth(s_WhiteCol, 50 ); + setColumnWidth(s_NonWhiteCol, 50 ); + setColumnWidth(s_UnsolvedCol, 50 ); + setColumnWidth(s_SolvedCol, 50 ); + } + else + { + setColumnWidth(s_WhiteCol, 50 ); + setColumnWidth(s_NonWhiteCol, 50 ); + setColumnWidth(s_UnsolvedCol, 50 ); + setColumnWidth(s_SolvedCol, 0 ); + } + + bool bListDirSuccessA = true; + bool bListDirSuccessB = true; + bool bListDirSuccessC = true; + if ( m_dirA.isValid() ) + { + pp.setInformation(i18n("Reading Directory A")); + pp.setSubRangeTransformation(currentScan/nofScans, (currentScan+1)/nofScans); + ++currentScan; + + t_DirectoryList dirListA; + bListDirSuccessA = m_dirA.listDir( &dirListA, + m_pOptions->m_bDmRecursiveDirs, m_pOptions->m_bDmFindHidden, + m_pOptions->m_DmFilePattern, m_pOptions->m_DmFileAntiPattern, + m_pOptions->m_DmDirAntiPattern, m_pOptions->m_bDmFollowDirLinks, + m_pOptions->m_bDmUseCvsIgnore); + + for (i=dirListA.begin(); i!=dirListA.end();++i ) + { + MergeFileInfos& mfi = m_fileMergeMap[sortString(i->filePath(), m_bCaseSensitive)]; + //std::cout <filePath()<m_bDmRecursiveDirs, m_pOptions->m_bDmFindHidden, + m_pOptions->m_DmFilePattern, m_pOptions->m_DmFileAntiPattern, + m_pOptions->m_DmDirAntiPattern, m_pOptions->m_bDmFollowDirLinks, + m_pOptions->m_bDmUseCvsIgnore); + + for (i=dirListB.begin(); i!=dirListB.end();++i ) + { + MergeFileInfos& mfi = m_fileMergeMap[sortString(i->filePath(), m_bCaseSensitive)]; + mfi.m_bExistsInB = true; + mfi.m_fileInfoB = *i; + } + } + + e_MergeOperation eDefaultMergeOp; + if ( m_dirC.isValid() ) + { + pp.setInformation(i18n("Reading Directory C")); + pp.setSubRangeTransformation(currentScan/nofScans, (currentScan+1)/nofScans); + ++currentScan; + + t_DirectoryList dirListC; + bListDirSuccessC = m_dirC.listDir( &dirListC, + m_pOptions->m_bDmRecursiveDirs, m_pOptions->m_bDmFindHidden, + m_pOptions->m_DmFilePattern, m_pOptions->m_DmFileAntiPattern, + m_pOptions->m_DmDirAntiPattern, m_pOptions->m_bDmFollowDirLinks, + m_pOptions->m_bDmUseCvsIgnore); + + for (i=dirListC.begin(); i!=dirListC.end();++i ) + { + MergeFileInfos& mfi = m_fileMergeMap[sortString(i->filePath(),m_bCaseSensitive)]; + mfi.m_bExistsInC = true; + mfi.m_fileInfoC = *i; + } + + eDefaultMergeOp = eMergeABCToDest; + } + else + eDefaultMergeOp = m_bSyncMode ? eMergeToAB : eMergeABToDest; + + bool bContinue = true; + if ( !bListDirSuccessA || !bListDirSuccessB || !bListDirSuccessC ) + { + QString s = i18n("Some subdirectories were not readable in"); + if ( !bListDirSuccessA ) s += "\nA: " + m_dirA.prettyAbsPath(); + if ( !bListDirSuccessB ) s += "\nB: " + m_dirB.prettyAbsPath(); + if ( !bListDirSuccessC ) s += "\nC: " + m_dirC.prettyAbsPath(); + s+="\n"; + s+= i18n("Check the permissions of the subdirectories."); + bContinue = KMessageBox::Continue == KMessageBox::warningContinueCancel( this, s ); + } + + if ( bContinue ) + { + prepareListView(pp); + + for( QListViewItem* p = firstChild(); p!=0; p = p->nextSibling() ) + { + DirMergeItem* pDMI = static_cast( p ); + calcSuggestedOperation( *pDMI->m_pMFI, eDefaultMergeOp ); + } + } + else + { + setSelected( 0, true ); + } + + QDir::setCurrent(origCurrentDirectory); + + // Try to improve the view a little bit. + QWidget* pParent = parentWidget(); + QSplitter* pSplitter = static_cast(pParent); + if (pSplitter!=0) + { + QValueList sizes = pSplitter->sizes(); + int total = sizes[0] + sizes[1]; + sizes[0]=total*6/10; + sizes[1]=total - sizes[0]; + pSplitter->setSizes( sizes ); + } + + m_bScanning = false; + statusBarMessage(i18n("Ready.")); + + if ( bContinue ) + { + // Generate a status report + int nofFiles=0; + int nofDirs=0; + int nofEqualFiles=0; + int nofManualMerges=0; + for( QListViewItem* p = firstChild(); p!=0; p = p->nextSibling() ) + calcDirStatus( m_dirC.isValid(), static_cast(p), + nofFiles, nofDirs, nofEqualFiles, nofManualMerges ); + + QString s; + s = i18n("Directory Comparison Status") + "\n\n" + + i18n("Number of subdirectories:") +" "+ QString::number(nofDirs) + "\n"+ + i18n("Number of equal files:") +" "+ QString::number(nofEqualFiles) + "\n"+ + i18n("Number of different files:") +" "+ QString::number(nofFiles-nofEqualFiles); + + if ( m_dirC.isValid() ) + s += "\n" + i18n("Number of manual merges:") +" "+ QString::number(nofManualMerges); + KMessageBox::information( this, s ); + setSelected( firstChild(), true ); + } + + updateFileVisibilities(); + if ( bReload ) + { + // Remember expandes items + QListViewItemIterator it( this ); + while ( it.current() ) + { + DirMergeItem* pDMI = static_cast( it.current() ); + std::map::iterator i = expandedDirsMap.find( pDMI->m_pMFI->m_subPath ); + if ( i!=expandedDirsMap.end() ) + { + t_ItemInfo& ii = i->second; + pDMI->setOpen( ii.bExpanded ); + pDMI->m_pMFI->setMergeOperation( ii.eMergeOperation, false ); + pDMI->m_pMFI->m_bOperationComplete = ii.bOperationComplete; + pDMI->setText( s_OpStatusCol, ii.status ); + } + ++it; + } + } + return true; +} + + + +void DirectoryMergeWindow::slotChooseAEverywhere(){ setAllMergeOperations( eCopyAToDest ); } + +void DirectoryMergeWindow::slotChooseBEverywhere(){ setAllMergeOperations( eCopyBToDest ); } + +void DirectoryMergeWindow::slotChooseCEverywhere(){ setAllMergeOperations( eCopyCToDest ); } + +void DirectoryMergeWindow::slotAutoChooseEverywhere() +{ + e_MergeOperation eDefaultMergeOp = m_dirC.isValid() ? eMergeABCToDest : + m_bSyncMode ? eMergeToAB : eMergeABToDest; + setAllMergeOperations(eDefaultMergeOp ); +} + +void DirectoryMergeWindow::slotNoOpEverywhere(){ setAllMergeOperations(eNoOperation); } + +static void setListViewItemOpen( QListViewItem* p, bool bOpen ) +{ + for( QListViewItem* pChild = p->firstChild(); pChild!=0; pChild = pChild->nextSibling() ) + setListViewItemOpen( pChild, bOpen ); + + p->setOpen( bOpen ); +} + +void DirectoryMergeWindow::slotFoldAllSubdirs() +{ + for( QListViewItem* p = firstChild(); p!=0; p = p->nextSibling() ) + setListViewItemOpen( p, false ); +} + +void DirectoryMergeWindow::slotUnfoldAllSubdirs() +{ + for( QListViewItem* p = firstChild(); p!=0; p = p->nextSibling() ) + setListViewItemOpen( p, true ); +} + +static void setMergeOperation( QListViewItem* pLVI, e_MergeOperation eMergeOp ) +{ + if ( pLVI==0 ) return; + + DirMergeItem* pDMI = static_cast(pLVI); + MergeFileInfos& mfi = *pDMI->m_pMFI; + + mfi.setMergeOperation(eMergeOp ); +} + +// Merge current item (merge mode) +void DirectoryMergeWindow::slotCurrentDoNothing() { setMergeOperation(currentItem(), eNoOperation ); } +void DirectoryMergeWindow::slotCurrentChooseA() { setMergeOperation(currentItem(), m_bSyncMode ? eCopyAToB : eCopyAToDest ); } +void DirectoryMergeWindow::slotCurrentChooseB() { setMergeOperation(currentItem(), m_bSyncMode ? eCopyBToA : eCopyBToDest ); } +void DirectoryMergeWindow::slotCurrentChooseC() { setMergeOperation(currentItem(), eCopyCToDest ); } +void DirectoryMergeWindow::slotCurrentMerge() +{ + bool bThreeDirs = m_dirC.isValid(); + setMergeOperation(currentItem(), bThreeDirs ? eMergeABCToDest : eMergeABToDest ); +} +void DirectoryMergeWindow::slotCurrentDelete() { setMergeOperation(currentItem(), eDeleteFromDest ); } +// Sync current item +void DirectoryMergeWindow::slotCurrentCopyAToB() { setMergeOperation(currentItem(), eCopyAToB ); } +void DirectoryMergeWindow::slotCurrentCopyBToA() { setMergeOperation(currentItem(), eCopyBToA ); } +void DirectoryMergeWindow::slotCurrentDeleteA() { setMergeOperation(currentItem(), eDeleteA ); } +void DirectoryMergeWindow::slotCurrentDeleteB() { setMergeOperation(currentItem(), eDeleteB ); } +void DirectoryMergeWindow::slotCurrentDeleteAAndB() { setMergeOperation(currentItem(), eDeleteAB ); } +void DirectoryMergeWindow::slotCurrentMergeToA() { setMergeOperation(currentItem(), eMergeToA ); } +void DirectoryMergeWindow::slotCurrentMergeToB() { setMergeOperation(currentItem(), eMergeToB ); } +void DirectoryMergeWindow::slotCurrentMergeToAAndB() { setMergeOperation(currentItem(), eMergeToAB ); } + + +void DirectoryMergeWindow::keyPressEvent( QKeyEvent* e ) +{ + if ( (e->state() & Qt::ControlButton)!=0 ) + { + bool bThreeDirs = m_dirC.isValid(); + + QListViewItem* lvi = currentItem(); + DirMergeItem* pDMI = lvi==0 ? 0 : static_cast(lvi); + MergeFileInfos* pMFI = pDMI==0 ? 0 : pDMI->m_pMFI; + + if ( pMFI==0 ) return; + bool bMergeMode = bThreeDirs || !m_bSyncMode; + bool bFTConflict = pMFI==0 ? false : conflictingFileTypes(*pMFI); + + if ( bMergeMode ) + { + switch(e->key()) + { + case Key_1: if(pMFI->m_bExistsInA){ slotCurrentChooseA(); } return; + case Key_2: if(pMFI->m_bExistsInB){ slotCurrentChooseB(); } return; + case Key_3: if(pMFI->m_bExistsInC){ slotCurrentChooseC(); } return; + case Key_Space: slotCurrentDoNothing(); return; + case Key_4: if ( !bFTConflict ) { slotCurrentMerge(); } return; + case Key_Delete: slotCurrentDelete(); return; + default: break; + } + } + else + { + switch(e->key()) + { + case Key_1: if(pMFI->m_bExistsInA){ slotCurrentCopyAToB(); } return; + case Key_2: if(pMFI->m_bExistsInB){ slotCurrentCopyBToA(); } return; + case Key_Space: slotCurrentDoNothing(); return; + case Key_4: if ( !bFTConflict ) { slotCurrentMergeToAAndB(); } return; + case Key_Delete: if( pMFI->m_bExistsInA && pMFI->m_bExistsInB ) slotCurrentDeleteAAndB(); + else if( pMFI->m_bExistsInA ) slotCurrentDeleteA(); + else if( pMFI->m_bExistsInB ) slotCurrentDeleteB(); + return; + default: break; + } + } + } + + QListView::keyPressEvent(e); +} + +void DirectoryMergeWindow::focusInEvent(QFocusEvent*) +{ + updateAvailabilities(); +} +void DirectoryMergeWindow::focusOutEvent(QFocusEvent*) +{ + updateAvailabilities(); +} + +void DirectoryMergeWindow::setAllMergeOperations( e_MergeOperation eDefaultOperation ) +{ + if ( KMessageBox::Yes == KMessageBox::warningYesNo(this, + i18n("This affects all merge operations."), + i18n("Changing All Merge Operations"),i18n("C&ontinue"), i18n("&Cancel") ) ) + { + for( QListViewItem* p = firstChild(); p!=0; p = p->nextSibling() ) + { + DirMergeItem* pDMI = static_cast( p ); + calcSuggestedOperation( *pDMI->m_pMFI, eDefaultOperation ); + } + } +} + + +void DirectoryMergeWindow::compareFilesAndCalcAges( MergeFileInfos& mfi ) +{ + std::map dateMap; + + if( mfi.m_bExistsInA ) + { + mfi.m_bLinkA = mfi.m_fileInfoA.isSymLink(); + mfi.m_bDirA = mfi.m_fileInfoA.isDir(); + dateMap[ mfi.m_fileInfoA.lastModified() ] = 0; + } + if( mfi.m_bExistsInB ) + { + mfi.m_bLinkB = mfi.m_fileInfoB.isSymLink(); + mfi.m_bDirB = mfi.m_fileInfoB.isDir(); + dateMap[ mfi.m_fileInfoB.lastModified() ] = 1; + } + if( mfi.m_bExistsInC ) + { + mfi.m_bLinkC = mfi.m_fileInfoC.isSymLink(); + mfi.m_bDirC = mfi.m_fileInfoC.isDir(); + dateMap[ mfi.m_fileInfoC.lastModified() ] = 2; + } + + if ( m_pOptions->m_bDmFullAnalysis ) + { + if( mfi.m_bExistsInA && mfi.m_bDirA || mfi.m_bExistsInB && mfi.m_bDirB || mfi.m_bExistsInC && mfi.m_bDirC ) + { + // If any input is a directory, don't start any comparison. + mfi.m_bEqualAB=mfi.m_bExistsInA && mfi.m_bExistsInB; + mfi.m_bEqualAC=mfi.m_bExistsInA && mfi.m_bExistsInC; + mfi.m_bEqualBC=mfi.m_bExistsInB && mfi.m_bExistsInC; + } + else + { + emit startDiffMerge( + mfi.m_bExistsInA ? mfi.m_fileInfoA.absFilePath() : QString(""), + mfi.m_bExistsInB ? mfi.m_fileInfoB.absFilePath() : QString(""), + mfi.m_bExistsInC ? mfi.m_fileInfoC.absFilePath() : QString(""), + "", + "","","",&mfi.m_totalDiffStatus + ); + int nofNonwhiteConflicts = mfi.m_totalDiffStatus.nofUnsolvedConflicts + + mfi.m_totalDiffStatus.nofSolvedConflicts - mfi.m_totalDiffStatus.nofWhitespaceConflicts; + + if (m_pOptions->m_bDmWhiteSpaceEqual && nofNonwhiteConflicts == 0) + { + mfi.m_bEqualAB = mfi.m_bExistsInA && mfi.m_bExistsInB; + mfi.m_bEqualAC = mfi.m_bExistsInA && mfi.m_bExistsInC; + mfi.m_bEqualBC = mfi.m_bExistsInB && mfi.m_bExistsInC; + } + else + { + mfi.m_bEqualAB = mfi.m_totalDiffStatus.bBinaryAEqB; + mfi.m_bEqualBC = mfi.m_totalDiffStatus.bBinaryBEqC; + mfi.m_bEqualAC = mfi.m_totalDiffStatus.bBinaryAEqC; + } + } + } + else + { + bool bError; + QString eqStatus; + if( mfi.m_bExistsInA && mfi.m_bExistsInB ) + { + if( mfi.m_bDirA ) mfi.m_bEqualAB=true; + else fastFileComparison( mfi.m_fileInfoA, mfi.m_fileInfoB, mfi.m_bEqualAB, bError, eqStatus ); + } + if( mfi.m_bExistsInA && mfi.m_bExistsInC ) + { + if( mfi.m_bDirA ) mfi.m_bEqualAC=true; + else fastFileComparison( mfi.m_fileInfoA, mfi.m_fileInfoC, mfi.m_bEqualAC, bError, eqStatus ); + } + if( mfi.m_bExistsInB && mfi.m_bExistsInC ) + { + if (mfi.m_bEqualAB && mfi.m_bEqualAC) + mfi.m_bEqualBC = true; + else + { + if( mfi.m_bDirB ) mfi.m_bEqualBC=true; + else fastFileComparison( mfi.m_fileInfoB, mfi.m_fileInfoC, mfi.m_bEqualBC, bError, eqStatus ); + } + } + } + + if (mfi.m_bLinkA!=mfi.m_bLinkB) mfi.m_bEqualAB=false; + if (mfi.m_bLinkA!=mfi.m_bLinkC) mfi.m_bEqualAC=false; + if (mfi.m_bLinkB!=mfi.m_bLinkC) mfi.m_bEqualBC=false; + + if (mfi.m_bDirA!=mfi.m_bDirB) mfi.m_bEqualAB=false; + if (mfi.m_bDirA!=mfi.m_bDirC) mfi.m_bEqualAC=false; + if (mfi.m_bDirB!=mfi.m_bDirC) mfi.m_bEqualBC=false; + + assert(eNew==0 && eMiddle==1 && eOld==2); + + // The map automatically sorts the keys. + int age = eNew; + std::map::reverse_iterator i; + for( i=dateMap.rbegin(); i!=dateMap.rend(); ++i ) + { + int n = i->second; + if ( n==0 && mfi.m_ageA==eNotThere ) + { + mfi.m_ageA = (e_Age)age; ++age; + if ( mfi.m_bEqualAB ) { mfi.m_ageB = mfi.m_ageA; ++age; } + if ( mfi.m_bEqualAC ) { mfi.m_ageC = mfi.m_ageA; ++age; } + } + else if ( n==1 && mfi.m_ageB==eNotThere ) + { + mfi.m_ageB = (e_Age)age; ++age; + if ( mfi.m_bEqualAB ) { mfi.m_ageA = mfi.m_ageB; ++age; } + if ( mfi.m_bEqualBC ) { mfi.m_ageC = mfi.m_ageB; ++age; } + } + else if ( n==2 && mfi.m_ageC==eNotThere) + { + mfi.m_ageC = (e_Age)age; ++age; + if ( mfi.m_bEqualAC ) { mfi.m_ageA = mfi.m_ageC; ++age; } + if ( mfi.m_bEqualBC ) { mfi.m_ageB = mfi.m_ageC; ++age; } + } + } + + // The checks below are necessary when the dates of the file are equal but the + // files are not. One wouldn't expect this to happen, yet it happens sometimes. + if ( mfi.m_bExistsInC && mfi.m_ageC==eNotThere ) + { + mfi.m_ageC = (e_Age)age; ++age; + mfi.m_bConflictingAges = true; + } + if ( mfi.m_bExistsInB && mfi.m_ageB==eNotThere ) + { + mfi.m_ageB = (e_Age)age; ++age; + mfi.m_bConflictingAges = true; + } + if ( mfi.m_bExistsInA && mfi.m_ageA==eNotThere ) + { + mfi.m_ageA = (e_Age)age; ++age; + mfi.m_bConflictingAges = true; + } + + if ( mfi.m_ageA != eOld && mfi.m_ageB != eOld && mfi.m_ageC != eOld ) + { + if (mfi.m_ageA == eMiddle) mfi.m_ageA = eOld; + if (mfi.m_ageB == eMiddle) mfi.m_ageB = eOld; + if (mfi.m_ageC == eMiddle) mfi.m_ageC = eOld; + } +} + +static QPixmap* s_pm_dir; +static QPixmap* s_pm_file; + +static QPixmap* pmNotThere; +static QPixmap* pmNew; +static QPixmap* pmOld; +static QPixmap* pmMiddle; + +static QPixmap* pmLink; + +static QPixmap* pmDirLink; +static QPixmap* pmFileLink; + +static QPixmap* pmNewLink; +static QPixmap* pmOldLink; +static QPixmap* pmMiddleLink; + +static QPixmap* pmNewDir; +static QPixmap* pmMiddleDir; +static QPixmap* pmOldDir; + +static QPixmap* pmNewDirLink; +static QPixmap* pmMiddleDirLink; +static QPixmap* pmOldDirLink; + + +static QPixmap colorToPixmap(QColor c) +{ + QPixmap pm(16,16); + QPainter p(&pm); + p.setPen( Qt::black ); + p.setBrush( c ); + p.drawRect(0,0,pm.width(),pm.height()); + return pm; +} + +static void initPixmaps( QColor newest, QColor oldest, QColor middle, QColor notThere ) +{ + if (pmNew==0) + { + pmNotThere = new QPixmap; + pmNew = new QPixmap; + pmOld = new QPixmap; + pmMiddle = new QPixmap; + + #include "xpm/link_arrow.xpm" + pmLink = new QPixmap(link_arrow); + + pmDirLink = new QPixmap; + pmFileLink = new QPixmap; + + pmNewLink = new QPixmap; + pmOldLink = new QPixmap; + pmMiddleLink = new QPixmap; + + pmNewDir = new QPixmap; + pmMiddleDir = new QPixmap; + pmOldDir = new QPixmap; + + pmNewDirLink = new QPixmap; + pmMiddleDirLink = new QPixmap; + pmOldDirLink = new QPixmap; + } + + + *pmNotThere = colorToPixmap(notThere); + *pmNew = colorToPixmap(newest); + *pmOld = colorToPixmap(oldest); + *pmMiddle = colorToPixmap(middle); + + *pmDirLink = pixCombiner( s_pm_dir, pmLink); + *pmFileLink = pixCombiner( s_pm_file, pmLink ); + + *pmNewLink = pixCombiner( pmNew, pmLink); + *pmOldLink = pixCombiner( pmOld, pmLink); + *pmMiddleLink = pixCombiner( pmMiddle, pmLink); + + *pmNewDir = pixCombiner2( pmNew, s_pm_dir); + *pmMiddleDir = pixCombiner2( pmMiddle, s_pm_dir); + *pmOldDir = pixCombiner2( pmOld, s_pm_dir); + + *pmNewDirLink = pixCombiner( pmNewDir, pmLink); + *pmMiddleDirLink = pixCombiner( pmMiddleDir, pmLink); + *pmOldDirLink = pixCombiner( pmOldDir, pmLink); +} + + +static void setOnePixmap( QListViewItem* pLVI, int col, e_Age eAge, bool bLink, bool bDir ) +{ + static QPixmap* ageToPm[]= { pmNew, pmMiddle, pmOld, pmNotThere, s_pm_file }; + static QPixmap* ageToPmLink[]= { pmNewLink, pmMiddleLink, pmOldLink, pmNotThere, pmFileLink }; + static QPixmap* ageToPmDir[]= { pmNewDir, pmMiddleDir, pmOldDir, pmNotThere, s_pm_dir }; + static QPixmap* ageToPmDirLink[]={ pmNewDirLink, pmMiddleDirLink, pmOldDirLink, pmNotThere, pmDirLink }; + + QPixmap** ppPm = bDir ? ( bLink ? ageToPmDirLink : ageToPmDir ): + ( bLink ? ageToPmLink : ageToPm ); + + pLVI->setPixmap( col, *ppPm[eAge] ); +} + +static void setPixmaps( MergeFileInfos& mfi, bool bCheckC ) +{ + setOnePixmap( mfi.m_pDMI, s_nameCol, eAgeEnd, + mfi.m_bLinkA || mfi.m_bLinkB || mfi.m_bLinkC, + mfi.m_bDirA || mfi.m_bDirB || mfi.m_bDirC + ); + + if ( mfi.m_bDirA || mfi.m_bDirB || mfi.m_bDirC ) + { + mfi.m_ageA=eNotThere; + mfi.m_ageB=eNotThere; + mfi.m_ageC=eNotThere; + int age = eNew; + if ( mfi.m_bExistsInC ) + { + mfi.m_ageC = (e_Age)age; + if (mfi.m_bEqualAC) mfi.m_ageA = (e_Age)age; + if (mfi.m_bEqualBC) mfi.m_ageB = (e_Age)age; + ++age; + } + if ( mfi.m_bExistsInB && mfi.m_ageB==eNotThere ) + { + mfi.m_ageB = (e_Age)age; + if (mfi.m_bEqualAB) mfi.m_ageA = (e_Age)age; + ++age; + } + if ( mfi.m_bExistsInA && mfi.m_ageA==eNotThere ) + { + mfi.m_ageA = (e_Age)age; + } + if ( mfi.m_ageA != eOld && mfi.m_ageB != eOld && mfi.m_ageC != eOld ) + { + if (mfi.m_ageA == eMiddle) mfi.m_ageA = eOld; + if (mfi.m_ageB == eMiddle) mfi.m_ageB = eOld; + if (mfi.m_ageC == eMiddle) mfi.m_ageC = eOld; + } + } + + setOnePixmap( mfi.m_pDMI, s_ACol, mfi.m_ageA, mfi.m_bLinkA, mfi.m_bDirA ); + setOnePixmap( mfi.m_pDMI, s_BCol, mfi.m_ageB, mfi.m_bLinkB, mfi.m_bDirB ); + if ( bCheckC ) + setOnePixmap( mfi.m_pDMI, s_CCol, mfi.m_ageC, mfi.m_bLinkC, mfi.m_bDirC ); +} + +// Iterate through the complete tree. Start by specifying QListView::firstChild(). +static QListViewItem* treeIterator( QListViewItem* p, bool bVisitChildren=true, bool bFindInvisible=false ) +{ + if( p!=0 ) + { + do + { + if ( bVisitChildren && p->firstChild() != 0 ) p = p->firstChild(); + else if ( p->nextSibling() !=0 ) p = p->nextSibling(); + else + { + p = p->parent(); + while ( p!=0 ) + { + if( p->nextSibling()!=0 ) { p = p->nextSibling(); break; } + else { p = p->parent(); } + } + } + } + while( p && !(p->isVisible() || bFindInvisible) ); + } + return p; +} + +void DirectoryMergeWindow::prepareListView( ProgressProxy& pp ) +{ + static bool bFirstTime = true; + if (bFirstTime) + { + #include "xpm/file.xpm" + #include "xpm/folder.xpm" + s_pm_dir = new QPixmap( m_pIconLoader->loadIcon("folder", KIcon::Small ) ); + if (s_pm_dir->size()!=QSize(16,16)) + { + delete s_pm_dir; + s_pm_dir = new QPixmap( folder_pm ); + } + s_pm_file= new QPixmap( file_pm ); + bFirstTime=false; + } + + clear(); + initPixmaps( m_pOptions->m_newestFileColor, m_pOptions->m_oldestFileColor, + m_pOptions->m_midAgeFileColor, m_pOptions->m_missingFileColor ); + + setRootIsDecorated( true ); + + bool bCheckC = m_dirC.isValid(); + + std::map::iterator j; + int nrOfFiles = m_fileMergeMap.size(); + int currentIdx = 1; + QTime t; + t.start(); + for( j=m_fileMergeMap.begin(); j!=m_fileMergeMap.end(); ++j ) + { + MergeFileInfos& mfi = j->second; + + mfi.m_subPath = mfi.m_fileInfoA.exists() ? mfi.m_fileInfoA.filePath() : + mfi.m_fileInfoB.exists() ? mfi.m_fileInfoB.filePath() : + mfi.m_fileInfoC.exists() ? mfi.m_fileInfoC.filePath() : + QString(""); + + // const QString& fileName = j->first; + const QString& fileName = mfi.m_subPath; + + pp.setInformation( + i18n("Processing ") + QString::number(currentIdx) +" / "+ QString::number(nrOfFiles) + +"\n" + fileName, double(currentIdx) / nrOfFiles, false ); + if ( pp.wasCancelled() ) break; + ++currentIdx; + + + // The comparisons and calculations for each file take place here. + compareFilesAndCalcAges( mfi ); + + bool bEqual = bCheckC ? mfi.m_bEqualAB && mfi.m_bEqualAC : mfi.m_bEqualAB; + //bool bDir = mfi.m_bDirA || mfi.m_bDirB || mfi.m_bDirC; + + //if ( m_pOptions->m_bDmShowOnlyDeltas && !bDir && bEqual ) + // continue; + + // Get dirname from fileName: Search for "/" from end: + int pos = fileName.findRev('/'); + QString dirPart; + QString filePart; + if (pos==-1) + { + // Top dir + filePart = fileName; + } + else + { + dirPart = fileName.left(pos); + filePart = fileName.mid(pos+1); + } + + if ( dirPart.isEmpty() ) // Top level + { + new DirMergeItem( this, filePart, &mfi ); + } + else + { + MergeFileInfos& dirMfi = m_fileMergeMap[sortString(dirPart, m_bCaseSensitive)]; // parent + assert(dirMfi.m_pDMI!=0); + new DirMergeItem( dirMfi.m_pDMI, filePart, &mfi ); + mfi.m_pParent = &dirMfi; + + if ( !bEqual ) // Set all parents to "not equal" + { + MergeFileInfos* p = mfi.m_pParent; + while(p!=0) + { + bool bChange = false; + if ( !mfi.m_bEqualAB && p->m_bEqualAB ){ p->m_bEqualAB = false; bChange=true; } + if ( !mfi.m_bEqualAC && p->m_bEqualAC ){ p->m_bEqualAC = false; bChange=true; } + if ( !mfi.m_bEqualBC && p->m_bEqualBC ){ p->m_bEqualBC = false; bChange=true; } + + if ( bChange ) + setPixmaps( *p, bCheckC ); + else + break; + + p = p->m_pParent; + } + } + } + + setPixmaps( mfi, bCheckC ); + } + + /*if ( m_pOptions->m_bDmShowOnlyDeltas ) + { + // Remove all equals. (Search tree depth first) + QListViewItem* p = firstChild(); + while( p!=0 && firstChild() != 0 ) + { + QListViewItem* pParent = p->parent(); + QListViewItem* pNextSibling = p->nextSibling(); + + DirMergeItem* pDMI = static_cast(p); + bool bDirEqual = bCheckC ? pDMI->m_pMFI->m_bEqualAB && pDMI->m_pMFI->m_bEqualAC + : pDMI->m_pMFI->m_bEqualAB; + if ( pDMI!=0 && pDMI->m_pMFI->m_bDirA && bDirEqual ) + { + delete p; + p=0; + } + + if ( p!=0 && p->firstChild() != 0 ) p = p->firstChild(); + else if ( pNextSibling!=0 ) p = pNextSibling; + else + { + p=pParent; + while ( p!=0 ) + { + if( p->nextSibling()!=0 ) { p = p->nextSibling(); break; } + else { p = p->parent(); } + } + } + } + }*/ +} + +static bool conflictingFileTypes(MergeFileInfos& mfi) +{ + // Now check if file/dir-types fit. + if ( mfi.m_bLinkA || mfi.m_bLinkB || mfi.m_bLinkC ) + { + if ( mfi.m_bExistsInA && ! mfi.m_bLinkA || + mfi.m_bExistsInB && ! mfi.m_bLinkB || + mfi.m_bExistsInC && ! mfi.m_bLinkC ) + { + return true; + } + } + + if ( mfi.m_bDirA || mfi.m_bDirB || mfi.m_bDirC ) + { + if ( mfi.m_bExistsInA && ! mfi.m_bDirA || + mfi.m_bExistsInB && ! mfi.m_bDirB || + mfi.m_bExistsInC && ! mfi.m_bDirC ) + { + return true; + } + } + return false; +} + +void DirectoryMergeWindow::calcSuggestedOperation( MergeFileInfos& mfi, e_MergeOperation eDefaultMergeOp ) +{ + bool bCheckC = m_dirC.isValid(); + bool bCopyNewer = m_pOptions->m_bDmCopyNewer; + bool bOtherDest = !( m_dirDestInternal.absFilePath() == m_dirA.absFilePath() || + m_dirDestInternal.absFilePath() == m_dirB.absFilePath() || + bCheckC && m_dirDestInternal.absFilePath() == m_dirC.absFilePath() ); + + if ( eDefaultMergeOp == eMergeABCToDest && !bCheckC ) { eDefaultMergeOp = eMergeABToDest; } + if ( eDefaultMergeOp == eMergeToAB && bCheckC ) { assert(false); } + + if ( eDefaultMergeOp == eMergeToA || eDefaultMergeOp == eMergeToB || + eDefaultMergeOp == eMergeABCToDest || eDefaultMergeOp == eMergeABToDest || eDefaultMergeOp == eMergeToAB ) + { + if ( !bCheckC ) + { + if ( mfi.m_bEqualAB ) + { + mfi.setMergeOperation( bOtherDest ? eCopyBToDest : eNoOperation ); + } + else if ( mfi.m_bExistsInA && mfi.m_bExistsInB ) + { + if ( !bCopyNewer || mfi.m_bDirA ) + mfi.setMergeOperation( eDefaultMergeOp ); + else if ( bCopyNewer && mfi.m_bConflictingAges ) + { + mfi.setMergeOperation( eConflictingAges ); + } + else + { + if ( mfi.m_ageA == eNew ) + mfi.setMergeOperation( eDefaultMergeOp == eMergeToAB ? eCopyAToB : eCopyAToDest ); + else + mfi.setMergeOperation( eDefaultMergeOp == eMergeToAB ? eCopyBToA : eCopyBToDest ); + } + } + else if ( !mfi.m_bExistsInA && mfi.m_bExistsInB ) + { + if ( eDefaultMergeOp==eMergeABToDest ) mfi.setMergeOperation( eCopyBToDest ); + else if ( eDefaultMergeOp==eMergeToB ) mfi.setMergeOperation( eNoOperation ); + else mfi.setMergeOperation( eCopyBToA ); + } + else if ( mfi.m_bExistsInA && !mfi.m_bExistsInB ) + { + if ( eDefaultMergeOp==eMergeABToDest ) mfi.setMergeOperation( eCopyAToDest ); + else if ( eDefaultMergeOp==eMergeToA ) mfi.setMergeOperation( eNoOperation ); + else mfi.setMergeOperation( eCopyAToB ); + } + else //if ( !mfi.m_bExistsInA && !mfi.m_bExistsInB ) + { + mfi.setMergeOperation( eNoOperation ); assert(false); + } + } + else + { + if ( mfi.m_bEqualAB && mfi.m_bEqualAC ) + { + mfi.setMergeOperation( bOtherDest ? eCopyCToDest : eNoOperation ); + } + else if ( mfi.m_bExistsInA && mfi.m_bExistsInB && mfi.m_bExistsInC) + { + if ( mfi.m_bEqualAB ) + mfi.setMergeOperation( eCopyCToDest ); + else if ( mfi.m_bEqualAC ) + mfi.setMergeOperation( eCopyBToDest ); + else if ( mfi.m_bEqualBC ) + mfi.setMergeOperation( eCopyCToDest ); + else + mfi.setMergeOperation( eMergeABCToDest ); + } + else if ( mfi.m_bExistsInA && mfi.m_bExistsInB && !mfi.m_bExistsInC ) + { + if ( mfi.m_bEqualAB ) + mfi.setMergeOperation( eDeleteFromDest ); + else + mfi.setMergeOperation( eCopyBToDest ); + } + else if ( mfi.m_bExistsInA && !mfi.m_bExistsInB && mfi.m_bExistsInC ) + { + if ( mfi.m_bEqualAC ) + mfi.setMergeOperation( eDeleteFromDest ); + else + mfi.setMergeOperation( eCopyCToDest ); + } + else if ( !mfi.m_bExistsInA && mfi.m_bExistsInB && mfi.m_bExistsInC ) + { + if ( mfi.m_bEqualBC ) + mfi.setMergeOperation( eCopyCToDest ); + else + mfi.setMergeOperation( eMergeABCToDest ); + } + else if ( !mfi.m_bExistsInA && !mfi.m_bExistsInB && mfi.m_bExistsInC ) + { + mfi.setMergeOperation( eCopyCToDest ); + } + else if ( !mfi.m_bExistsInA && mfi.m_bExistsInB && !mfi.m_bExistsInC ) + { + mfi.setMergeOperation( eCopyBToDest ); + } + else if ( mfi.m_bExistsInA && !mfi.m_bExistsInB && !mfi.m_bExistsInC) + { + mfi.setMergeOperation( eDeleteFromDest ); + } + else //if ( !mfi.m_bExistsInA && !mfi.m_bExistsInB && !mfi.m_bExistsInC ) + { + mfi.setMergeOperation( eNoOperation ); assert(false); + } + } + + // Now check if file/dir-types fit. + if ( conflictingFileTypes(mfi) ) + { + mfi.setMergeOperation( eConflictingFileTypes ); + } + } + else + { + e_MergeOperation eMO = eDefaultMergeOp; + switch ( eDefaultMergeOp ) + { + case eConflictingFileTypes: + case eConflictingAges: + case eDeleteA: + case eDeleteB: + case eDeleteAB: + case eDeleteFromDest: + case eNoOperation: break; + case eCopyAToB: if ( !mfi.m_bExistsInA ) { eMO = eDeleteB; } break; + case eCopyBToA: if ( !mfi.m_bExistsInB ) { eMO = eDeleteA; } break; + case eCopyAToDest: if ( !mfi.m_bExistsInA ) { eMO = eDeleteFromDest; } break; + case eCopyBToDest: if ( !mfi.m_bExistsInB ) { eMO = eDeleteFromDest; } break; + case eCopyCToDest: if ( !mfi.m_bExistsInC ) { eMO = eDeleteFromDest; } break; + + case eMergeToA: + case eMergeToB: + case eMergeToAB: + case eMergeABCToDest: + case eMergeABToDest: + default: + assert(false); + } + mfi.setMergeOperation( eMO ); + } +} + +void DirectoryMergeWindow::onDoubleClick( QListViewItem* lvi ) +{ + if (lvi==0) return; + + if ( m_bDirectoryMerge ) + mergeCurrentFile(); + else + compareCurrentFile(); +} + +void DirectoryMergeWindow::onSelectionChanged( QListViewItem* lvi ) +{ + if ( lvi==0 ) return; + + DirMergeItem* pDMI = static_cast(lvi); + + MergeFileInfos& mfi = *pDMI->m_pMFI; + assert( mfi.m_pDMI==pDMI ); + + m_pDirectoryMergeInfo->setInfo( m_dirA, m_dirB, m_dirC, m_dirDestInternal, mfi ); +} + +void DirectoryMergeWindow::onClick( int button, QListViewItem* lvi, const QPoint& p, int c ) +{ + if ( lvi==0 ) return; + + DirMergeItem* pDMI = static_cast(lvi); + + MergeFileInfos& mfi = *pDMI->m_pMFI; + assert( mfi.m_pDMI==pDMI ); + + if ( c==s_OpCol ) + { + bool bThreeDirs = m_dirC.isValid(); + + KPopupMenu m(this); + if ( bThreeDirs ) + { + m_pDirCurrentDoNothing->plug(&m); + int count=0; + if ( mfi.m_bExistsInA ) { m_pDirCurrentChooseA->plug(&m); ++count; } + if ( mfi.m_bExistsInB ) { m_pDirCurrentChooseB->plug(&m); ++count; } + if ( mfi.m_bExistsInC ) { m_pDirCurrentChooseC->plug(&m); ++count; } + if ( !conflictingFileTypes(mfi) && count>1 ) m_pDirCurrentMerge->plug(&m); + m_pDirCurrentDelete->plug(&m); + } + else if ( m_bSyncMode ) + { + m_pDirCurrentSyncDoNothing->plug(&m); + if ( mfi.m_bExistsInA ) m_pDirCurrentSyncCopyAToB->plug(&m); + if ( mfi.m_bExistsInB ) m_pDirCurrentSyncCopyBToA->plug(&m); + if ( mfi.m_bExistsInA ) m_pDirCurrentSyncDeleteA->plug(&m); + if ( mfi.m_bExistsInB ) m_pDirCurrentSyncDeleteB->plug(&m); + if ( mfi.m_bExistsInA && mfi.m_bExistsInB ) + { + m_pDirCurrentSyncDeleteAAndB->plug(&m); + if ( !conflictingFileTypes(mfi)) + { + m_pDirCurrentSyncMergeToA->plug(&m); + m_pDirCurrentSyncMergeToB->plug(&m); + m_pDirCurrentSyncMergeToAAndB->plug(&m); + } + } + } + else + { + m_pDirCurrentDoNothing->plug(&m); + if ( mfi.m_bExistsInA ) { m_pDirCurrentChooseA->plug(&m); } + if ( mfi.m_bExistsInB ) { m_pDirCurrentChooseB->plug(&m); } + if ( !conflictingFileTypes(mfi) && mfi.m_bExistsInA && mfi.m_bExistsInB ) m_pDirCurrentMerge->plug(&m); + m_pDirCurrentDelete->plug(&m); + } + + m.exec( p ); + } + else if ( c == s_ACol || c==s_BCol || c==s_CCol ) + { + QString itemPath; + if ( c == s_ACol && mfi.m_bExistsInA ){ itemPath = fullNameA(mfi); } + else if ( c == s_BCol && mfi.m_bExistsInB ){ itemPath = fullNameB(mfi); } + else if ( c == s_CCol && mfi.m_bExistsInC ){ itemPath = fullNameC(mfi); } + + if (!itemPath.isEmpty()) + { + selectItemAndColumn( pDMI, c, button==Qt::RightButton ); + } + } +} + +void DirectoryMergeWindow::slotShowContextMenu(QListViewItem* lvi,const QPoint & p,int c) +{ + if ( lvi==0 ) return; + + DirMergeItem* pDMI = static_cast(lvi); + + MergeFileInfos& mfi = *pDMI->m_pMFI; + assert( mfi.m_pDMI==pDMI ); + if ( c == s_ACol || c==s_BCol || c==s_CCol ) + { + QString itemPath; + if ( c == s_ACol && mfi.m_bExistsInA ){ itemPath = fullNameA(mfi); } + else if ( c == s_BCol && mfi.m_bExistsInB ){ itemPath = fullNameB(mfi); } + else if ( c == s_CCol && mfi.m_bExistsInC ){ itemPath = fullNameC(mfi); } + + if (!itemPath.isEmpty()) + { + selectItemAndColumn(pDMI, c, true); + KPopupMenu m(this); + m_pDirCompareExplicit->plug(&m); + m_pDirMergeExplicit->plug(&m); + +#ifndef _WIN32 + m.exec( p ); +#else + void showShellContextMenu( const QString&, QPoint, QWidget*, QPopupMenu* ); + showShellContextMenu( itemPath, p, this, &m ); +#endif + } + } +} + +static QString getFileName( DirMergeItem* pDMI, int column ) +{ + if ( pDMI != 0 ) + { + MergeFileInfos& mfi = *pDMI->m_pMFI; + return column == s_ACol ? mfi.m_fileInfoA.absFilePath() : + column == s_BCol ? mfi.m_fileInfoB.absFilePath() : + column == s_CCol ? mfi.m_fileInfoC.absFilePath() : + QString(""); + } + return ""; +} + +static bool isDir( DirMergeItem* pDMI, int column ) +{ + if ( pDMI != 0 ) + { + MergeFileInfos& mfi = *pDMI->m_pMFI; + return column == s_ACol ? mfi.m_bDirA : + column == s_BCol ? mfi.m_bDirB : + mfi.m_bDirC; + } + return false; +} + + +void DirectoryMergeWindow::selectItemAndColumn(DirMergeItem* pDMI, int c, bool bContextMenu) +{ + if ( bContextMenu && ( + pDMI==m_pSelection1Item && c==m_selection1Column || + pDMI==m_pSelection2Item && c==m_selection2Column || + pDMI==m_pSelection3Item && c==m_selection3Column ) ) + return; + + DirMergeItem* pOld1=m_pSelection1Item; + DirMergeItem* pOld2=m_pSelection2Item; + DirMergeItem* pOld3=m_pSelection3Item; + + bool bReset = false; + + if ( m_pSelection1Item ) + { + if (isDir( m_pSelection1Item, m_selection1Column )!=isDir( pDMI, c )) + bReset = true; + } + + if ( bReset || m_pSelection3Item!=0 || + pDMI==m_pSelection1Item && c==m_selection1Column || + pDMI==m_pSelection2Item && c==m_selection2Column || + pDMI==m_pSelection3Item && c==m_selection3Column) + { + m_pSelection1Item = 0; + m_pSelection2Item = 0; + m_pSelection3Item = 0; + } + else if ( m_pSelection1Item==0 ) + { + m_pSelection1Item = pDMI; + m_selection1Column = c; + m_pSelection2Item = 0; + m_pSelection3Item = 0; + } + else if ( m_pSelection2Item==0 ) + { + m_pSelection2Item = pDMI; + m_selection2Column = c; + m_pSelection3Item = 0; + } + else if ( m_pSelection3Item==0 ) + { + m_pSelection3Item = pDMI; + m_selection3Column = c; + } + if (pOld1) repaintItem( pOld1 ); + if (pOld2) repaintItem( pOld2 ); + if (pOld3) repaintItem( pOld3 ); + if (m_pSelection1Item) repaintItem( m_pSelection1Item ); + if (m_pSelection2Item) repaintItem( m_pSelection2Item ); + if (m_pSelection3Item) repaintItem( m_pSelection3Item ); + emit updateAvailabilities(); +} + +// Since Qt 2.3.0 doesn't allow the specification of a compare operator, this trick emulates it. +#if QT_VERSION==230 +#define DIRSORT(x) ( pMFI->m_bDirA ? " " : "" )+x +#else +#define DIRSORT(x) x +#endif + +DirMergeItem::DirMergeItem( QListView* pParent, const QString& fileName, MergeFileInfos* pMFI ) +: QListViewItem( pParent, DIRSORT( fileName ), "","","", i18n("To do."), "" ) +{ + init(pMFI); +} + +DirMergeItem::DirMergeItem( DirMergeItem* pParent, const QString& fileName, MergeFileInfos* pMFI ) +: QListViewItem( pParent, DIRSORT( fileName ), "","","", i18n("To do."), "" ) +{ + init(pMFI); +} + + +void DirMergeItem::init(MergeFileInfos* pMFI) +{ + pMFI->m_pDMI = this; + m_pMFI = pMFI; + TotalDiffStatus& tds = pMFI->m_totalDiffStatus; + if ( m_pMFI->m_bDirA || m_pMFI->m_bDirB || m_pMFI->m_bDirC ) + { + } + else + { + setText( s_UnsolvedCol, QString::number( tds.nofUnsolvedConflicts ) ); + setText( s_SolvedCol, QString::number( tds.nofSolvedConflicts ) ); + setText( s_NonWhiteCol, QString::number( tds.nofUnsolvedConflicts + tds.nofSolvedConflicts - tds.nofWhitespaceConflicts ) ); + setText( s_WhiteCol, QString::number( tds.nofWhitespaceConflicts ) ); + } +} + +int DirMergeItem::compare(QListViewItem *i, int col, bool ascending) const +{ + DirMergeItem* pDMI = static_cast(i); + bool bDir1 = m_pMFI->m_bDirA || m_pMFI->m_bDirB || m_pMFI->m_bDirC; + bool bDir2 = pDMI->m_pMFI->m_bDirA || pDMI->m_pMFI->m_bDirB || pDMI->m_pMFI->m_bDirC; + if ( m_pMFI==0 || pDMI->m_pMFI==0 || bDir1 == bDir2 ) + { + if(col==s_UnsolvedCol || col==s_SolvedCol || col==s_NonWhiteCol || col==s_WhiteCol) + return key(col,ascending).toInt() > i->key(col,ascending).toInt() ? -1 : 1; + else + return QListViewItem::compare( i, col, ascending ); + } + else + return bDir1 ? -1 : 1; +} + +void DirMergeItem::paintCell(QPainter * p, const QColorGroup & cg, int column, int width, int align ) +{ + if (column == s_ACol || column == s_BCol || column == s_CCol ) + { + const QPixmap* icon = pixmap(column); + if ( icon ) + { + int yOffset = (height() - icon->height()) / 2; + p->fillRect( 0, 0, width, height(), cg.base() ); + p->drawPixmap( 2, yOffset, *icon ); + if ( listView() ) + { + DirectoryMergeWindow* pDMW = static_cast(listView()); + int i = this==pDMW->m_pSelection1Item && column == pDMW->m_selection1Column ? 1 : + this==pDMW->m_pSelection2Item && column == pDMW->m_selection2Column ? 2 : + this==pDMW->m_pSelection3Item && column == pDMW->m_selection3Column ? 3 : + 0; + if ( i!=0 ) + { + OptionDialog* pOD = pDMW->m_pOptions; + QColor c ( i==1 ? pOD->m_colorA : i==2 ? pOD->m_colorB : pOD->m_colorC ); + p->setPen( c );// highlight() ); + p->drawRect( 2, yOffset, icon->width(), icon->height()); + p->setPen( QPen( c, 0, Qt::DotLine) ); + p->drawRect( 1, yOffset-1, icon->width()+2, icon->height()+2); + p->setPen( cg.background() ); + QString s( QChar('A'+i-1) ); + p->drawText( 2 + (icon->width() - p->fontMetrics().width(s))/2, + yOffset + (icon->height() + p->fontMetrics().ascent())/2-1, + s ); + } + else + { + p->setPen( cg.background() ); + p->drawRect( 1, yOffset-1, icon->width()+2, icon->height()+2); + } + } + return; + } + } + QListViewItem::paintCell(p,cg,column,width,align); +} + +DirMergeItem::~DirMergeItem() +{ + m_pMFI->m_pDMI = 0; +} + +void MergeFileInfos::setMergeOperation( e_MergeOperation eMOp, bool bRecursive ) +{ + if ( eMOp != m_eMergeOperation ) + { + m_bOperationComplete = false; + m_pDMI->setText( s_OpStatusCol, "" ); + } + + m_eMergeOperation = eMOp; + QString s; + bool bDir = m_bDirA || m_bDirB || m_bDirC; + if( m_pDMI!=0 ) + { + switch( m_eMergeOperation ) + { + case eNoOperation: s=""; m_pDMI->setText(s_OpCol,""); break; + case eCopyAToB: s=i18n("Copy A to B"); break; + case eCopyBToA: s=i18n("Copy B to A"); break; + case eDeleteA: s=i18n("Delete A"); break; + case eDeleteB: s=i18n("Delete B"); break; + case eDeleteAB: s=i18n("Delete A & B"); break; + case eMergeToA: s=i18n("Merge to A"); break; + case eMergeToB: s=i18n("Merge to B"); break; + case eMergeToAB: s=i18n("Merge to A & B"); break; + case eCopyAToDest: s="A"; break; + case eCopyBToDest: s="B"; break; + case eCopyCToDest: s="C"; break; + case eDeleteFromDest: s=i18n("Delete (if exists)"); break; + case eMergeABCToDest: s= bDir ? i18n("Merge") : i18n("Merge (manual)"); break; + case eMergeABToDest: s= bDir ? i18n("Merge") : i18n("Merge (manual)"); break; + case eConflictingFileTypes: s=i18n("Error: Conflicting File Types"); break; + case eConflictingAges: s=i18n("Error: Dates are equal but files are not."); break; + default: assert(false); break; + } + m_pDMI->setText(s_OpCol,s); + + if ( bRecursive ) + { + e_MergeOperation eChildrenMergeOp = m_eMergeOperation; + if ( eChildrenMergeOp == eConflictingFileTypes ) eChildrenMergeOp = eMergeABCToDest; + QListViewItem* p = m_pDMI->firstChild(); + while ( p!=0 ) + { + DirMergeItem* pDMI = static_cast( p ); + DirectoryMergeWindow* pDMW = static_cast( p->listView() ); + pDMW->calcSuggestedOperation( *pDMI->m_pMFI, eChildrenMergeOp ); + p = p->nextSibling(); + } + } + } +} + +void DirectoryMergeWindow::compareCurrentFile() +{ + if (!canContinue()) return; + + if ( m_bRealMergeStarted ) + { + KMessageBox::sorry(this,i18n("This operation is currently not possible."),i18n("Operation Not Possible")); + return; + } + + DirMergeItem* pDMI = static_cast( selectedItem() ); + if ( pDMI != 0 ) + { + MergeFileInfos& mfi = *pDMI->m_pMFI; + if ( !(mfi.m_bDirA || mfi.m_bDirB || mfi.m_bDirC) ) + { + emit startDiffMerge( + mfi.m_bExistsInA ? mfi.m_fileInfoA.absFilePath() : QString(""), + mfi.m_bExistsInB ? mfi.m_fileInfoB.absFilePath() : QString(""), + mfi.m_bExistsInC ? mfi.m_fileInfoC.absFilePath() : QString(""), + "", + "","","",0 + ); + } + } + emit updateAvailabilities(); +} + + +void DirectoryMergeWindow::slotCompareExplicitlySelectedFiles() +{ + if ( ! isDir(m_pSelection1Item,m_selection1Column) && !canContinue() ) return; + + if ( m_bRealMergeStarted ) + { + KMessageBox::sorry(this,i18n("This operation is currently not possible."),i18n("Operation Not Possible")); + return; + } + + emit startDiffMerge( + getFileName( m_pSelection1Item, m_selection1Column ), + getFileName( m_pSelection2Item, m_selection2Column ), + getFileName( m_pSelection3Item, m_selection3Column ), + "", + "","","",0 + ); + m_pSelection1Item=0; + m_pSelection2Item=0; + m_pSelection3Item=0; + + emit updateAvailabilities(); + triggerUpdate(); +} + +void DirectoryMergeWindow::slotMergeExplicitlySelectedFiles() +{ + if ( ! isDir(m_pSelection1Item,m_selection1Column) && !canContinue() ) return; + + if ( m_bRealMergeStarted ) + { + KMessageBox::sorry(this,i18n("This operation is currently not possible."),i18n("Operation Not Possible")); + return; + } + + QString fn1 = getFileName( m_pSelection1Item, m_selection1Column ); + QString fn2 = getFileName( m_pSelection2Item, m_selection2Column ); + QString fn3 = getFileName( m_pSelection3Item, m_selection3Column ); + + emit startDiffMerge( fn1, fn2, fn3, + fn3.isEmpty() ? fn2 : fn3, + "","","",0 + ); + m_pSelection1Item=0; + m_pSelection2Item=0; + m_pSelection3Item=0; + + emit updateAvailabilities(); + triggerUpdate(); +} + +bool DirectoryMergeWindow::isFileSelected() +{ + DirMergeItem* pDMI = static_cast( selectedItem() ); + if ( pDMI != 0 ) + { + MergeFileInfos& mfi = *pDMI->m_pMFI; + return ! (mfi.m_bDirA || mfi.m_bDirB || mfi.m_bDirC || conflictingFileTypes(mfi) ); + } + return false; +} + +void DirectoryMergeWindow::mergeResultSaved(const QString& fileName) +{ + DirMergeItem* pCurrentItemForOperation = (m_mergeItemList.empty() || m_currentItemForOperation==m_mergeItemList.end() ) + ? 0 + : *m_currentItemForOperation; + + if ( pCurrentItemForOperation!=0 && pCurrentItemForOperation->m_pMFI==0 ) + { + KMessageBox::error( this, i18n("This should never happen: \n\nmergeResultSaved: m_pMFI=0\n\nIf you know how to reproduce this, please contact the program author."),i18n("Program Error") ); + return; + } + if ( pCurrentItemForOperation!=0 && fileName == fullNameDest(*pCurrentItemForOperation->m_pMFI) ) + { + if ( pCurrentItemForOperation->m_pMFI->m_eMergeOperation==eMergeToAB ) + { + MergeFileInfos& mfi = *pCurrentItemForOperation->m_pMFI; + bool bSuccess = copyFLD( fullNameB(mfi), fullNameA(mfi) ); + if (!bSuccess) + { + KMessageBox::error(this, i18n("An error occurred while copying.\n"), i18n("Error") ); + m_pStatusInfo->setCaption(i18n("Merge Error")); + m_pStatusInfo->show(); + //if ( m_pStatusInfo->firstChild()!=0 ) + // m_pStatusInfo->ensureItemVisible( m_pStatusInfo->last() ); + m_bError = true; + pCurrentItemForOperation->setText( s_OpStatusCol, i18n("Error.") ); + mfi.m_eMergeOperation = eCopyBToA; + return; + } + } + pCurrentItemForOperation->setText( s_OpStatusCol, i18n("Done.") ); + pCurrentItemForOperation->m_pMFI->m_bOperationComplete = true; + if ( m_mergeItemList.size()==1 ) + { + m_mergeItemList.clear(); + m_bRealMergeStarted=false; + } + } + + emit updateAvailabilities(); +} + +bool DirectoryMergeWindow::canContinue() +{ + bool bCanContinue=false; + checkIfCanContinue( &bCanContinue ); + if ( bCanContinue && !m_bError ) + { + DirMergeItem* pCurrentItemForOperation = + (m_mergeItemList.empty() || m_currentItemForOperation==m_mergeItemList.end() ) ? 0 : *m_currentItemForOperation; + + if ( pCurrentItemForOperation!=0 && ! pCurrentItemForOperation->m_pMFI->m_bOperationComplete ) + { + pCurrentItemForOperation->setText( s_OpStatusCol, i18n("Not saved.") ); + pCurrentItemForOperation->m_pMFI->m_bOperationComplete = true; + if ( m_mergeItemList.size()==1 ) + { + m_mergeItemList.clear(); + m_bRealMergeStarted=false; + } + } + } + return bCanContinue; +} + +bool DirectoryMergeWindow::executeMergeOperation( MergeFileInfos& mfi, bool& bSingleFileMerge ) +{ + bool bCreateBackups = m_pOptions->m_bDmCreateBakFiles; + // First decide destname + QString destName; + switch( mfi.m_eMergeOperation ) + { + case eNoOperation: break; + case eDeleteAB: break; + case eMergeToAB: // let the user save in B. In mergeResultSaved() the file will be copied to A. + case eMergeToB: + case eDeleteB: + case eCopyAToB: destName = fullNameB(mfi); break; + case eMergeToA: + case eDeleteA: + case eCopyBToA: destName = fullNameA(mfi); break; + case eMergeABToDest: + case eMergeABCToDest: + case eCopyAToDest: + case eCopyBToDest: + case eCopyCToDest: + case eDeleteFromDest: destName = fullNameDest(mfi); break; + default: + KMessageBox::error( this, i18n("Unknown merge operation. (This must never happen!)"), i18n("Error") ); + assert(false); + } + + bool bSuccess = false; + bSingleFileMerge = false; + switch( mfi.m_eMergeOperation ) + { + case eNoOperation: bSuccess = true; break; + case eCopyAToDest: + case eCopyAToB: bSuccess = copyFLD( fullNameA(mfi), destName ); break; + case eCopyBToDest: + case eCopyBToA: bSuccess = copyFLD( fullNameB(mfi), destName ); break; + case eCopyCToDest: bSuccess = copyFLD( fullNameC(mfi), destName ); break; + case eDeleteFromDest: + case eDeleteA: + case eDeleteB: bSuccess = deleteFLD( destName, bCreateBackups ); break; + case eDeleteAB: bSuccess = deleteFLD( fullNameA(mfi), bCreateBackups ) && + deleteFLD( fullNameB(mfi), bCreateBackups ); break; + case eMergeABToDest: + case eMergeToA: + case eMergeToAB: + case eMergeToB: bSuccess = mergeFLD( fullNameA(mfi), fullNameB(mfi), "", + destName, bSingleFileMerge ); + break; + case eMergeABCToDest:bSuccess = mergeFLD( + mfi.m_bExistsInA ? fullNameA(mfi) : QString(""), + mfi.m_bExistsInB ? fullNameB(mfi) : QString(""), + mfi.m_bExistsInC ? fullNameC(mfi) : QString(""), + destName, bSingleFileMerge ); + break; + default: + KMessageBox::error( this, i18n("Unknown merge operation."), i18n("Error") ); + assert(false); + } + + return bSuccess; +} + + +// Check if the merge can start, and prepare the m_mergeItemList which then contains all +// items that must be merged. +void DirectoryMergeWindow::prepareMergeStart( QListViewItem* pBegin, QListViewItem* pEnd, bool bVerbose ) +{ + if ( bVerbose ) + { + int status = KMessageBox::warningYesNoCancel(this, + i18n("The merge is about to begin.\n\n" + "Choose \"Do it\" if you have read the instructions and know what you are doing.\n" + "Choosing \"Simulate it\" will tell you what would happen.\n\n" + "Be aware that this program still has beta status " + "and there is NO WARRANTY whatsoever! Make backups of your vital data!"), + i18n("Starting Merge"), i18n("Do It"), i18n("Simulate It") ); + if (status==KMessageBox::Yes) m_bRealMergeStarted = true; + else if (status==KMessageBox::No ) m_bSimulatedMergeStarted = true; + else return; + } + else + { + m_bRealMergeStarted = true; + } + + m_mergeItemList.clear(); + if (pBegin == 0) + return; + + for( QListViewItem* p = pBegin; p!= pEnd; p = treeIterator( p ) ) + { + DirMergeItem* pDMI = static_cast(p); + + if ( pDMI && ! pDMI->m_pMFI->m_bOperationComplete ) + { + m_mergeItemList.push_back(pDMI); + + if (pDMI!=0 && pDMI->m_pMFI->m_eMergeOperation == eConflictingFileTypes ) + { + ensureItemVisible( pDMI ); + setSelected( pDMI, true ); + KMessageBox::error(this, i18n("The highlighted item has a different type in the different directories. Select what to do."), i18n("Error")); + m_mergeItemList.clear(); + m_bRealMergeStarted=false; + return; + } + if (pDMI!=0 && pDMI->m_pMFI->m_eMergeOperation == eConflictingAges ) + { + ensureItemVisible( pDMI ); + setSelected( pDMI, true ); + KMessageBox::error(this, i18n("The modification dates of the file are equal but the files are not. Select what to do."), i18n("Error")); + m_mergeItemList.clear(); + m_bRealMergeStarted=false; + return; + } + } + } + + m_currentItemForOperation = m_mergeItemList.begin(); + return; +} + +void DirectoryMergeWindow::slotRunOperationForCurrentItem() +{ + if ( ! canContinue() ) return; + + bool bVerbose = false; + if ( m_mergeItemList.empty() ) + { + QListViewItem* pBegin = currentItem(); + QListViewItem* pEnd = treeIterator(pBegin,false,false); // find next visible sibling (no children) + + prepareMergeStart( pBegin, pEnd, bVerbose ); + mergeContinue(true, bVerbose); + } + else + mergeContinue(false, bVerbose); +} + +void DirectoryMergeWindow::slotRunOperationForAllItems() +{ + if ( ! canContinue() ) return; + + bool bVerbose = true; + if ( m_mergeItemList.empty() ) + { + QListViewItem* pBegin = firstChild(); + + prepareMergeStart( pBegin, 0, bVerbose ); + mergeContinue(true, bVerbose); + } + else + mergeContinue(false, bVerbose); +} + +void DirectoryMergeWindow::mergeCurrentFile() +{ + if (!canContinue()) return; + + if ( m_bRealMergeStarted ) + { + KMessageBox::sorry(this,i18n("This operation is currently not possible because directory merge is currently running."),i18n("Operation Not Possible")); + return; + } + + if ( isFileSelected() ) + { + DirMergeItem* pDMI = static_cast( selectedItem() ); + if ( pDMI != 0 ) + { + MergeFileInfos& mfi = *pDMI->m_pMFI; + m_mergeItemList.clear(); + m_mergeItemList.push_back( pDMI ); + m_currentItemForOperation=m_mergeItemList.begin(); + bool bDummy=false; + mergeFLD( + mfi.m_bExistsInA ? mfi.m_fileInfoA.absFilePath() : QString(""), + mfi.m_bExistsInB ? mfi.m_fileInfoB.absFilePath() : QString(""), + mfi.m_bExistsInC ? mfi.m_fileInfoC.absFilePath() : QString(""), + fullNameDest(mfi), + bDummy + ); + } + } + emit updateAvailabilities(); +} + + +// When bStart is true then m_currentItemForOperation must still be processed. +// When bVerbose is true then a messagebox will tell when the merge is complete. +void DirectoryMergeWindow::mergeContinue(bool bStart, bool bVerbose) +{ + ProgressProxy pp; + if ( m_mergeItemList.empty() ) + return; + + int nrOfItems = 0; + int nrOfCompletedItems = 0; + int nrOfCompletedSimItems = 0; + + // Count the number of completed items (for the progress bar). + for( MergeItemList::iterator i = m_mergeItemList.begin(); i!=m_mergeItemList.end(); ++i ) + { + DirMergeItem* pDMI = *i; + ++nrOfItems; + if ( pDMI->m_pMFI->m_bOperationComplete ) + ++nrOfCompletedItems; + if ( pDMI->m_pMFI->m_bSimOpComplete ) + ++nrOfCompletedSimItems; + } + + m_pStatusInfo->hide(); + m_pStatusInfo->clear(); + + DirMergeItem* pCurrentItemForOperation = m_currentItemForOperation==m_mergeItemList.end() ? 0 : *m_currentItemForOperation; + + bool bContinueWithCurrentItem = bStart; // true for first item, else false + bool bSkipItem = false; + if ( !bStart && m_bError && pCurrentItemForOperation!=0 ) + { + int status = KMessageBox::warningYesNoCancel(this, + i18n("There was an error in the last step.\n" + "Do you want to continue with the item that caused the error or do you want to skip this item?"), + i18n("Continue merge after an error"), i18n("Continue With Last Item"), i18n("Skip Item") ); + if (status==KMessageBox::Yes) bContinueWithCurrentItem = true; + else if (status==KMessageBox::No ) bSkipItem = true; + else return; + m_bError = false; + } + + bool bSuccess = true; + bool bSingleFileMerge = false; + bool bSim = m_bSimulatedMergeStarted; + while( bSuccess ) + { + if ( pCurrentItemForOperation==0 ) + { + m_mergeItemList.clear(); + m_bRealMergeStarted=false; + break; + } + + if ( pCurrentItemForOperation!=0 && !bContinueWithCurrentItem ) + { + if ( bSim ) + { + if( pCurrentItemForOperation->firstChild()==0 ) + { + pCurrentItemForOperation->m_pMFI->m_bSimOpComplete = true; + } + } + else + { + if( pCurrentItemForOperation->firstChild()==0 ) + { + if( !pCurrentItemForOperation->m_pMFI->m_bOperationComplete ) + { + pCurrentItemForOperation->setText( s_OpStatusCol, bSkipItem ? i18n("Skipped.") : i18n("Done.") ); + pCurrentItemForOperation->m_pMFI->m_bOperationComplete = true; + bSkipItem = false; + } + } + else + { + pCurrentItemForOperation->setText( s_OpStatusCol, i18n("In progress...") ); + } + } + } + + if ( ! bContinueWithCurrentItem ) + { + // Depth first + QListViewItem* pPrevItem = pCurrentItemForOperation; + ++m_currentItemForOperation; + pCurrentItemForOperation = m_currentItemForOperation==m_mergeItemList.end() ? 0 : *m_currentItemForOperation; + if ( (pCurrentItemForOperation==0 || pCurrentItemForOperation->parent()!=pPrevItem->parent()) && pPrevItem->parent()!=0 ) + { + // Check if the parent may be set to "Done" + QListViewItem* pParent = pPrevItem->parent(); + bool bDone = true; + while ( bDone && pParent!=0 ) + { + for( QListViewItem* p = pParent->firstChild(); p!=0; p=p->nextSibling() ) + { + DirMergeItem* pDMI = static_cast(p); + if ( !bSim && ! pDMI->m_pMFI->m_bOperationComplete || bSim && pDMI->m_pMFI->m_bSimOpComplete ) + { + bDone=false; + break; + } + } + if ( bDone ) + { + if (bSim) + static_cast(pParent)->m_pMFI->m_bSimOpComplete = bDone; + else + { + pParent->setText( s_OpStatusCol, i18n("Done.") ); + static_cast(pParent)->m_pMFI->m_bOperationComplete = bDone; + } + } + pParent = pParent->parent(); + } + } + } + + if ( pCurrentItemForOperation == 0 ) // end? + { + if ( m_bRealMergeStarted ) + { + if (bVerbose) + { + KMessageBox::information( this, i18n("Merge operation complete."), i18n("Merge Complete") ); + } + m_bRealMergeStarted = false; + m_pStatusInfo->setCaption(i18n("Merge Complete")); + } + if ( m_bSimulatedMergeStarted ) + { + m_bSimulatedMergeStarted = false; + for( QListViewItem* p=firstChild(); p!=0; p=treeIterator(p) ) + { + static_cast(p)->m_pMFI->m_bSimOpComplete = false; + } + m_pStatusInfo->setCaption(i18n("Simulated merge complete: Check if you agree with the proposed operations.")); + m_pStatusInfo->show(); + } + //g_pProgressDialog->hide(); + m_mergeItemList.clear(); + m_bRealMergeStarted=false; + return; + } + + MergeFileInfos& mfi = *pCurrentItemForOperation->m_pMFI; + + pp.setInformation( mfi.m_subPath, + bSim ? double(nrOfCompletedSimItems)/nrOfItems : double(nrOfCompletedItems)/nrOfItems, + false // bRedrawUpdate + ); + //g_pProgressDialog->show(); + + bSuccess = executeMergeOperation( mfi, bSingleFileMerge ); // Here the real operation happens. + + if ( bSuccess ) + { + if(bSim) ++nrOfCompletedSimItems; + else ++nrOfCompletedItems; + bContinueWithCurrentItem = false; + } + + if( pp.wasCancelled() ) + break; + } // end while + + //g_pProgressDialog->hide(); + + setCurrentItem( pCurrentItemForOperation ); + ensureItemVisible( pCurrentItemForOperation ); + if ( !bSuccess && !bSingleFileMerge ) + { + KMessageBox::error(this, i18n("An error occurred. Press OK to see detailed information.\n"), i18n("Error") ); + m_pStatusInfo->setCaption(i18n("Merge Error")); + m_pStatusInfo->show(); + //if ( m_pStatusInfo->firstChild()!=0 ) + // m_pStatusInfo->ensureItemVisible( m_pStatusInfo->last() ); + m_bError = true; + pCurrentItemForOperation->setText( s_OpStatusCol, i18n("Error.") ); + } + else + { + m_bError = false; + } + emit updateAvailabilities(); + + if ( m_currentItemForOperation==m_mergeItemList.end() ) + { + m_mergeItemList.clear(); + m_bRealMergeStarted=false; + } +} + +void DirectoryMergeWindow::allowResizeEvents(bool bAllowResizeEvents ) +{ + m_bAllowResizeEvents = bAllowResizeEvents; +} + +void DirectoryMergeWindow::resizeEvent( QResizeEvent* e ) +{ + if (m_bAllowResizeEvents) + QListView::resizeEvent(e); +} + +bool DirectoryMergeWindow::deleteFLD( const QString& name, bool bCreateBackup ) +{ + FileAccess fi(name, true); + if ( !fi.exists() ) + return true; + + if ( bCreateBackup ) + { + bool bSuccess = renameFLD( name, name+".orig" ); + if (!bSuccess) + { + m_pStatusInfo->addText( i18n("Error: While deleting %1: Creating backup failed.").arg(name) ); + return false; + } + } + else + { + if ( fi.isDir() && !fi.isSymLink() ) + m_pStatusInfo->addText(i18n("delete directory recursively( %1 )").arg(name)); + else + m_pStatusInfo->addText(i18n("delete( %1 )").arg(name)); + + if ( m_bSimulatedMergeStarted ) + { + return true; + } + + if ( fi.isDir() && !fi.isSymLink() )// recursive directory delete only for real dirs, not symlinks + { + t_DirectoryList dirList; + bool bSuccess = fi.listDir( &dirList, false, true, "*", "", "", false, false ); // not recursive, find hidden files + + if ( !bSuccess ) + { + // No Permission to read directory or other error. + m_pStatusInfo->addText( i18n("Error: delete dir operation failed while trying to read the directory.") ); + return false; + } + + t_DirectoryList::iterator it; // create list iterator + + for ( it=dirList.begin(); it!=dirList.end(); ++it ) // for each file... + { + FileAccess& fi2 = *it; + if ( fi2.fileName() == "." || fi2.fileName()==".." ) + continue; + bSuccess = deleteFLD( fi2.absFilePath(), false ); + if (!bSuccess) break; + } + if (bSuccess) + { + bSuccess = FileAccess::removeDir( name ); + if ( !bSuccess ) + { + m_pStatusInfo->addText( i18n("Error: rmdir( %1 ) operation failed.").arg(name)); + return false; + } + } + } + else + { + bool bSuccess = FileAccess::removeFile( name ); + if ( !bSuccess ) + { + m_pStatusInfo->addText( i18n("Error: delete operation failed.") ); + return false; + } + } + } + return true; +} + +bool DirectoryMergeWindow::mergeFLD( const QString& nameA,const QString& nameB,const QString& nameC,const QString& nameDest, bool& bSingleFileMerge ) +{ + FileAccess fi(nameA); + if (fi.isDir()) + { + return makeDir(nameDest); + } + + // Make sure that the dir exists, into which we will save the file later. + int pos=nameDest.findRev('/'); + if ( pos>0 ) + { + QString parentName = nameDest.left(pos); + bool bSuccess = makeDir(parentName, true /*quiet*/); + if (!bSuccess) + return false; + } + + m_pStatusInfo->addText(i18n("manual merge( %1, %2, %3 -> %4)").arg(nameA).arg(nameB).arg(nameC).arg(nameDest)); + if ( m_bSimulatedMergeStarted ) + { + m_pStatusInfo->addText(i18n(" Note: After a manual merge the user should continue by pressing F7.") ); + return true; + } + + bSingleFileMerge = true; + (*m_currentItemForOperation)->setText( s_OpStatusCol, i18n("In progress...") ); + ensureItemVisible( *m_currentItemForOperation ); + + emit startDiffMerge( nameA, nameB, nameC, nameDest, "","","",0 ); + + return false; +} + +bool DirectoryMergeWindow::copyFLD( const QString& srcName, const QString& destName ) +{ + if ( srcName == destName ) + return true; + + if ( FileAccess(destName, true).exists() ) + { + bool bSuccess = deleteFLD( destName, m_pOptions->m_bDmCreateBakFiles ); + if ( !bSuccess ) + { + m_pStatusInfo->addText(i18n("Error: copy( %1 -> %2 ) failed." + "Deleting existing destination failed.").arg(srcName).arg(destName)); + return false; + } + } + + FileAccess fi( srcName ); + + if ( fi.isSymLink() && (fi.isDir() && !m_bFollowDirLinks || !fi.isDir() && !m_bFollowFileLinks) ) + { + m_pStatusInfo->addText(i18n("copyLink( %1 -> %2 )").arg(srcName).arg(destName)); +#ifdef _WIN32 + // What are links? +#else + if ( m_bSimulatedMergeStarted ) + { + return true; + } + FileAccess destFi(destName); + if ( !destFi.isLocal() || !fi.isLocal() ) + { + m_pStatusInfo->addText(i18n("Error: copyLink failed: Remote links are not yet supported.")); + return false; + } + QString linkTarget = fi.readLink(); + bool bSuccess = FileAccess::symLink( linkTarget, destName ); + if (!bSuccess) + m_pStatusInfo->addText(i18n("Error: copyLink failed.")); + return bSuccess; +#endif + } + + if ( fi.isDir() ) + { + bool bSuccess = makeDir( destName ); + return bSuccess; + } + + int pos=destName.findRev('/'); + if ( pos>0 ) + { + QString parentName = destName.left(pos); + bool bSuccess = makeDir(parentName, true /*quiet*/); + if (!bSuccess) + return false; + } + + m_pStatusInfo->addText(i18n("copy( %1 -> %2 )").arg(srcName).arg(destName)); + + if ( m_bSimulatedMergeStarted ) + { + return true; + } + + FileAccess faSrc ( srcName ); + bool bSuccess = faSrc.copyFile( destName ); + if (! bSuccess ) m_pStatusInfo->addText( faSrc.getStatusText() ); + return bSuccess; +} + +// Rename is not an operation that can be selected by the user. +// It will only be used to create backups. +// Hence it will delete an existing destination without making a backup (of the old backup.) +bool DirectoryMergeWindow::renameFLD( const QString& srcName, const QString& destName ) +{ + if ( srcName == destName ) + return true; + + if ( FileAccess(destName, true).exists() ) + { + bool bSuccess = deleteFLD( destName, false /*no backup*/ ); + if (!bSuccess) + { + m_pStatusInfo->addText( i18n("Error during rename( %1 -> %2 ): " + "Cannot delete existing destination." ).arg(srcName).arg(destName)); + return false; + } + } + + m_pStatusInfo->addText(i18n("rename( %1 -> %2 )").arg(srcName).arg(destName)); + if ( m_bSimulatedMergeStarted ) + { + return true; + } + + bool bSuccess = FileAccess( srcName ).rename( destName ); + if (!bSuccess) + { + m_pStatusInfo->addText( i18n("Error: Rename failed.") ); + return false; + } + + return true; +} + +bool DirectoryMergeWindow::makeDir( const QString& name, bool bQuiet ) +{ + FileAccess fi(name, true); + if( fi.exists() && fi.isDir() ) + return true; + + if( fi.exists() && !fi.isDir() ) + { + bool bSuccess = deleteFLD( name, true ); + if (!bSuccess) + { + m_pStatusInfo->addText( i18n("Error during makeDir of %1. " + "Cannot delete existing file." ).arg(name)); + return false; + } + } + + int pos=name.findRev('/'); + if ( pos>0 ) + { + QString parentName = name.left(pos); + bool bSuccess = makeDir(parentName,true); + if (!bSuccess) + return false; + } + + if ( ! bQuiet ) + m_pStatusInfo->addText(i18n("makeDir( %1 )").arg(name)); + + if ( m_bSimulatedMergeStarted ) + { + return true; + } + + bool bSuccess = FileAccess::makeDir( name ); + if ( bSuccess == false ) + { + m_pStatusInfo->addText( i18n("Error while creating directory.") ); + return false; + } + return true; +} + + +DirectoryMergeInfo::DirectoryMergeInfo( QWidget* pParent ) +: QFrame(pParent) +{ + QVBoxLayout *topLayout = new QVBoxLayout( this ); + + QGridLayout *grid = new QGridLayout( topLayout ); + grid->setColStretch(1,10); + + int line=0; + + m_pA = new QLabel("A",this); grid->addWidget( m_pA,line, 0 ); + m_pInfoA = new QLabel(this); grid->addWidget( m_pInfoA,line,1 ); ++line; + m_pB = new QLabel("B",this); grid->addWidget( m_pB,line, 0 ); + m_pInfoB = new QLabel(this); grid->addWidget( m_pInfoB,line,1 ); ++line; + m_pC = new QLabel("C",this); grid->addWidget( m_pC,line, 0 ); + m_pInfoC = new QLabel(this); grid->addWidget( m_pInfoC,line,1 ); ++line; + m_pDest = new QLabel(i18n("Dest"),this); grid->addWidget( m_pDest,line, 0 ); + m_pInfoDest = new QLabel(this); grid->addWidget( m_pInfoDest,line,1 ); ++line; + + m_pInfoList = new QListView(this); topLayout->addWidget( m_pInfoList ); + m_pInfoList->addColumn(i18n("Dir")); + m_pInfoList->addColumn(i18n("Type")); + m_pInfoList->addColumn(i18n("Size")); + m_pInfoList->addColumn(i18n("Attr")); + m_pInfoList->addColumn(i18n("Last Modification")); + m_pInfoList->addColumn(i18n("Link-Destination")); + setMinimumSize( 100,100 ); + + m_pInfoList->installEventFilter(this); +} + +bool DirectoryMergeInfo::eventFilter(QObject*o, QEvent* e) +{ + if ( e->type()==QEvent::FocusIn && o==m_pInfoList ) + emit gotFocus(); + return false; +} + +static void addListViewItem( QListView* pListView, const QString& dir, + const QString& basePath, FileAccess& fi ) +{ + if ( basePath.isEmpty() ) + { + return; + } + else + { + if ( fi.exists() ) + { +#if QT_VERSION==230 + QString dateString = fi.lastModified().toString(); +#else + QString dateString = fi.lastModified().toString("yyyy-MM-dd hh:mm:ss"); +#endif + + new QListViewItem( + pListView, + dir, + QString( fi.isDir() ? i18n("Dir") : i18n("File") ) + (fi.isSymLink() ? "-Link" : ""), + QString::number(fi.size()), + QString(fi.isReadable() ? "r" : " ") + (fi.isWritable()?"w" : " ") +#ifdef _WIN32 + /*Future: Use GetFileAttributes()*/, +#else + + (fi.isExecutable()?"x" : " "), +#endif + dateString, + QString(fi.isSymLink() ? (" -> " + fi.readLink()) : QString("")) + ); + } + else + { + new QListViewItem( + pListView, + dir, + i18n("not available"), + "", + "", + "", + "" + ); + } + } +} + +void DirectoryMergeInfo::setInfo( + const FileAccess& dirA, + const FileAccess& dirB, + const FileAccess& dirC, + const FileAccess& dirDest, + MergeFileInfos& mfi ) +{ + bool bHideDest = false; + if ( dirA.absFilePath()==dirDest.absFilePath() ) + { + m_pA->setText( i18n("A (Dest): ") ); bHideDest=true; + } + else + m_pA->setText( !dirC.isValid() ? QString("A: ") : i18n("A (Base): ")); + + m_pInfoA->setText( dirA.prettyAbsPath() ); + + if ( dirB.absFilePath()==dirDest.absFilePath() ) + { + m_pB->setText( i18n("B (Dest): ") ); bHideDest=true; + } + else + m_pB->setText( "B: " ); + m_pInfoB->setText( dirB.prettyAbsPath() ); + + if ( dirC.absFilePath()==dirDest.absFilePath() ) + { + m_pC->setText( i18n("C (Dest): ") ); bHideDest=true; + } + else + m_pC->setText( "C: " ); + m_pInfoC->setText( dirC.prettyAbsPath() ); + + m_pDest->setText( i18n("Dest: ") ); m_pInfoDest->setText( dirDest.prettyAbsPath() ); + + if (!dirC.isValid()) { m_pC->hide(); m_pInfoC->hide(); } + else { m_pC->show(); m_pInfoC->show(); } + + if (!dirDest.isValid()||bHideDest) { m_pDest->hide(); m_pInfoDest->hide(); } + else { m_pDest->show(); m_pInfoDest->show(); } + + m_pInfoList->clear(); + addListViewItem( m_pInfoList, "A", dirA.prettyAbsPath(), mfi.m_fileInfoA ); + addListViewItem( m_pInfoList, "B", dirB.prettyAbsPath(), mfi.m_fileInfoB ); + addListViewItem( m_pInfoList, "C", dirC.prettyAbsPath(), mfi.m_fileInfoC ); + if (!bHideDest) + { + FileAccess fiDest( dirDest.prettyAbsPath() + "/" + mfi.m_subPath, true ); + addListViewItem( m_pInfoList, i18n("Dest"), dirDest.prettyAbsPath(), fiDest ); + } +} + +QTextStream& operator<<( QTextStream& ts, MergeFileInfos& mfi ) +{ + ts << "{\n"; + ValueMap vm; + vm.writeEntry( "SubPath", mfi.m_subPath ); + vm.writeEntry( "ExistsInA", mfi.m_bExistsInA ); + vm.writeEntry( "ExistsInB", mfi.m_bExistsInB ); + vm.writeEntry( "ExistsInC", mfi.m_bExistsInC ); + vm.writeEntry( "EqualAB", mfi.m_bEqualAB ); + vm.writeEntry( "EqualAC", mfi.m_bEqualAC ); + vm.writeEntry( "EqualBC", mfi.m_bEqualBC ); + //DirMergeItem* m_pDMI; + //MergeFileInfos* m_pParent; + vm.writeEntry( "MergeOperation", (int) mfi.m_eMergeOperation ); + vm.writeEntry( "DirA", mfi.m_bDirA ); + vm.writeEntry( "DirB", mfi.m_bDirB ); + vm.writeEntry( "DirC", mfi.m_bDirC ); + vm.writeEntry( "LinkA", mfi.m_bLinkA ); + vm.writeEntry( "LinkB", mfi.m_bLinkB ); + vm.writeEntry( "LinkC", mfi.m_bLinkC ); + vm.writeEntry( "OperationComplete", mfi.m_bOperationComplete ); + //bool m_bSimOpComplete ); + + vm.writeEntry( "AgeA", (int) mfi.m_ageA ); + vm.writeEntry( "AgeB", (int) mfi.m_ageB ); + vm.writeEntry( "AgeC", (int) mfi.m_ageC ); + vm.writeEntry( "ConflictingAges", mfi.m_bConflictingAges ); // Equal age but files are not! + + //FileAccess m_fileInfoA; + //FileAccess m_fileInfoB; + //FileAccess m_fileInfoC; + + //TotalDiffStatus m_totalDiffStatus; + + vm.save(ts); + + ts << "}\n"; + + return ts; +} + +void DirectoryMergeWindow::slotSaveMergeState() +{ + //slotStatusMsg(i18n("Saving Directory Merge State ...")); + + //QString s = KFileDialog::getSaveURL( QDir::currentDirPath(), 0, this, i18n("Save As...") ).url(); + QString s = KFileDialog::getSaveFileName( QDir::currentDirPath(), 0, this, i18n("Save Directory Merge State As...") ); + if(!s.isEmpty()) + { + m_dirMergeStateFilename = s; + + + QFile file(m_dirMergeStateFilename); + bool bSuccess = file.open( IO_WriteOnly ); + if ( bSuccess ) + { + QTextStream ts( &file ); + + QListViewItemIterator it( this ); + while ( it.current() ) { + DirMergeItem* item = static_cast(it.current()); + MergeFileInfos* pMFI = item->m_pMFI; + ts << *pMFI; + ++it; + } + } + } + + //slotStatusMsg(i18n("Ready.")); + +} + +void DirectoryMergeWindow::slotLoadMergeState() +{ +} + +void DirectoryMergeWindow::updateFileVisibilities() +{ + bool bShowIdentical = m_pDirShowIdenticalFiles->isChecked(); + bool bShowDifferent = m_pDirShowDifferentFiles->isChecked(); + bool bShowOnlyInA = m_pDirShowFilesOnlyInA->isChecked(); + bool bShowOnlyInB = m_pDirShowFilesOnlyInB->isChecked(); + bool bShowOnlyInC = m_pDirShowFilesOnlyInC->isChecked(); + bool bThreeDirs = m_dirC.isValid(); + m_pSelection1Item = 0; + m_pSelection2Item = 0; + m_pSelection3Item = 0; + + QListViewItem* p = firstChild(); + while(p) + { + DirMergeItem* pDMI = static_cast(p); + MergeFileInfos* pMFI = pDMI->m_pMFI; + bool bDir = pMFI->m_bDirA || pMFI->m_bDirB || pMFI->m_bDirC; + bool bExistsEverywhere = pMFI->m_bExistsInA && pMFI->m_bExistsInB && (pMFI->m_bExistsInC || !bThreeDirs); + int existCount = int(pMFI->m_bExistsInA) + int(pMFI->m_bExistsInB) + int(pMFI->m_bExistsInC); + bool bVisible = + ( bShowIdentical && bExistsEverywhere && pMFI->m_bEqualAB && (pMFI->m_bEqualAC || !bThreeDirs) ) + || ( (bShowDifferent||bDir) && existCount>=2 && (!pMFI->m_bEqualAB || !(pMFI->m_bEqualAC || !bThreeDirs))) + || ( bShowOnlyInA && pMFI->m_bExistsInA && !pMFI->m_bExistsInB && !pMFI->m_bExistsInC ) + || ( bShowOnlyInB && !pMFI->m_bExistsInA && pMFI->m_bExistsInB && !pMFI->m_bExistsInC ) + || ( bShowOnlyInC && !pMFI->m_bExistsInA && !pMFI->m_bExistsInB && pMFI->m_bExistsInC ); + + QString fileName = pMFI->m_subPath.section( '/', -1 ); + bVisible = bVisible && ( + bDir && ! wildcardMultiMatch( m_pOptions->m_DmDirAntiPattern, fileName, m_bCaseSensitive ) + || wildcardMultiMatch( m_pOptions->m_DmFilePattern, fileName, m_bCaseSensitive ) + && !wildcardMultiMatch( m_pOptions->m_DmFileAntiPattern, fileName, m_bCaseSensitive ) ); + + p->setVisible(bVisible); + p = treeIterator( p, true, true ); + } +} + +void DirectoryMergeWindow::slotShowIdenticalFiles() { m_pOptions->m_bDmShowIdenticalFiles=m_pDirShowIdenticalFiles->isChecked(); + updateFileVisibilities(); } +void DirectoryMergeWindow::slotShowDifferentFiles() { updateFileVisibilities(); } +void DirectoryMergeWindow::slotShowFilesOnlyInA() { updateFileVisibilities(); } +void DirectoryMergeWindow::slotShowFilesOnlyInB() { updateFileVisibilities(); } +void DirectoryMergeWindow::slotShowFilesOnlyInC() { updateFileVisibilities(); } + +void DirectoryMergeWindow::slotSynchronizeDirectories() { } +void DirectoryMergeWindow::slotChooseNewerFiles() { } + +void DirectoryMergeWindow::initDirectoryMergeActions( QObject* pKDiff3App, KActionCollection* ac ) +{ +#include "xpm/startmerge.xpm" +#include "xpm/showequalfiles.xpm" +#include "xpm/showfilesonlyina.xpm" +#include "xpm/showfilesonlyinb.xpm" +#include "xpm/showfilesonlyinc.xpm" + DirectoryMergeWindow* p = this; + + m_pDirStartOperation = new KAction(i18n("Start/Continue Directory Merge"), Qt::Key_F7, p, SLOT(slotRunOperationForAllItems()), ac, "dir_start_operation"); + m_pDirRunOperationForCurrentItem = new KAction(i18n("Run Operation for Current Item"), Qt::Key_F6, p, SLOT(slotRunOperationForCurrentItem()), ac, "dir_run_operation_for_current_item"); + m_pDirCompareCurrent = new KAction(i18n("Compare Selected File"), 0, p, SLOT(compareCurrentFile()), ac, "dir_compare_current"); + m_pDirMergeCurrent = new KAction(i18n("Merge Current File"), QIconSet(QPixmap(startmerge)), 0, pKDiff3App, SLOT(slotMergeCurrentFile()), ac, "merge_current"); + m_pDirFoldAll = new KAction(i18n("Fold All Subdirs"), 0, p, SLOT(slotFoldAllSubdirs()), ac, "dir_fold_all"); + m_pDirUnfoldAll = new KAction(i18n("Unfold All Subdirs"), 0, p, SLOT(slotUnfoldAllSubdirs()), ac, "dir_unfold_all"); + m_pDirRescan = new KAction(i18n("Rescan"), Qt::SHIFT+Qt::Key_F5, p, SLOT(reload()), ac, "dir_rescan"); + m_pDirSaveMergeState = 0; //new KAction(i18n("Save Directory Merge State ..."), 0, p, SLOT(slotSaveMergeState()), ac, "dir_save_merge_state"); + m_pDirLoadMergeState = 0; //new KAction(i18n("Load Directory Merge State ..."), 0, p, SLOT(slotLoadMergeState()), ac, "dir_load_merge_state"); + m_pDirChooseAEverywhere = new KAction(i18n("Choose A for All Items"), 0, p, SLOT(slotChooseAEverywhere()), ac, "dir_choose_a_everywhere"); + m_pDirChooseBEverywhere = new KAction(i18n("Choose B for All Items"), 0, p, SLOT(slotChooseBEverywhere()), ac, "dir_choose_b_everywhere"); + m_pDirChooseCEverywhere = new KAction(i18n("Choose C for All Items"), 0, p, SLOT(slotChooseCEverywhere()), ac, "dir_choose_c_everywhere"); + m_pDirAutoChoiceEverywhere = new KAction(i18n("Auto-Choose Operation for All Items"), 0, p, SLOT(slotAutoChooseEverywhere()), ac, "dir_autochoose_everywhere"); + m_pDirDoNothingEverywhere = new KAction(i18n("No Operation for All Items"), 0, p, SLOT(slotNoOpEverywhere()), ac, "dir_nothing_everywhere"); + +// m_pDirSynchronizeDirectories = new KToggleAction(i18n("Synchronize Directories"), 0, this, SLOT(slotSynchronizeDirectories()), ac, "dir_synchronize_directories"); +// m_pDirChooseNewerFiles = new KToggleAction(i18n("Copy Newer Files Instead of Merging"), 0, this, SLOT(slotChooseNewerFiles()), ac, "dir_choose_newer_files"); + + m_pDirShowIdenticalFiles = new KToggleAction(i18n("Show Identical Files"), QIconSet(QPixmap(showequalfiles)), 0, this, SLOT(slotShowIdenticalFiles()), ac, "dir_show_identical_files"); + m_pDirShowDifferentFiles = new KToggleAction(i18n("Show Different Files"), 0, this, SLOT(slotShowDifferentFiles()), ac, "dir_show_different_files"); + m_pDirShowFilesOnlyInA = new KToggleAction(i18n("Show Files only in A"), QIconSet(QPixmap(showfilesonlyina)), 0, this, SLOT(slotShowFilesOnlyInA()), ac, "dir_show_files_only_in_a"); + m_pDirShowFilesOnlyInB = new KToggleAction(i18n("Show Files only in B"), QIconSet(QPixmap(showfilesonlyinb)), 0, this, SLOT(slotShowFilesOnlyInB()), ac, "dir_show_files_only_in_b"); + m_pDirShowFilesOnlyInC = new KToggleAction(i18n("Show Files only in C"), QIconSet(QPixmap(showfilesonlyinc)), 0, this, SLOT(slotShowFilesOnlyInC()), ac, "dir_show_files_only_in_c"); + + m_pDirShowIdenticalFiles->setChecked( m_pOptions->m_bDmShowIdenticalFiles ); + + m_pDirCompareExplicit = new KAction(i18n("Compare Explicitly Selected Files"), 0, p, SLOT(slotCompareExplicitlySelectedFiles()), ac, "dir_compare_explicitly_selected_files"); + m_pDirMergeExplicit = new KAction(i18n("Merge Explicitly Selected Files"), 0, p, SLOT(slotMergeExplicitlySelectedFiles()), ac, "dir_merge_explicitly_selected_files"); + + m_pDirCurrentDoNothing = new KAction(i18n("Do Nothing"), 0, p, SLOT(slotCurrentDoNothing()), ac, "dir_current_do_nothing"); + m_pDirCurrentChooseA = new KAction(i18n("A"), 0, p, SLOT(slotCurrentChooseA()), ac, "dir_current_choose_a"); + m_pDirCurrentChooseB = new KAction(i18n("B"), 0, p, SLOT(slotCurrentChooseB()), ac, "dir_current_choose_b"); + m_pDirCurrentChooseC = new KAction(i18n("C"), 0, p, SLOT(slotCurrentChooseC()), ac, "dir_current_choose_c"); + m_pDirCurrentMerge = new KAction(i18n("Merge"), 0, p, SLOT(slotCurrentMerge()), ac, "dir_current_merge"); + m_pDirCurrentDelete = new KAction(i18n("Delete (if exists)"), 0, p, SLOT(slotCurrentDelete()), ac, "dir_current_delete"); + + m_pDirCurrentSyncDoNothing = new KAction(i18n("Do Nothing"), 0, p, SLOT(slotCurrentDoNothing()), ac, "dir_current_sync_do_nothing"); + m_pDirCurrentSyncCopyAToB = new KAction(i18n("Copy A to B"), 0, p, SLOT(slotCurrentCopyAToB()), ac, "dir_current_sync_copy_a_to_b" ); + m_pDirCurrentSyncCopyBToA = new KAction(i18n("Copy B to A"), 0, p, SLOT(slotCurrentCopyBToA()), ac, "dir_current_sync_copy_b_to_a" ); + m_pDirCurrentSyncDeleteA = new KAction(i18n("Delete A"), 0, p, SLOT(slotCurrentDeleteA()), ac,"dir_current_sync_delete_a"); + m_pDirCurrentSyncDeleteB = new KAction(i18n("Delete B"), 0, p, SLOT(slotCurrentDeleteB()), ac,"dir_current_sync_delete_b"); + m_pDirCurrentSyncDeleteAAndB = new KAction(i18n("Delete A && B"), 0, p, SLOT(slotCurrentDeleteAAndB()), ac,"dir_current_sync_delete_a_and_b"); + m_pDirCurrentSyncMergeToA = new KAction(i18n("Merge to A"), 0, p, SLOT(slotCurrentMergeToA()), ac,"dir_current_sync_merge_to_a"); + m_pDirCurrentSyncMergeToB = new KAction(i18n("Merge to B"), 0, p, SLOT(slotCurrentMergeToB()), ac,"dir_current_sync_merge_to_b"); + m_pDirCurrentSyncMergeToAAndB = new KAction(i18n("Merge to A && B"), 0, p, SLOT(slotCurrentMergeToAAndB()), ac,"dir_current_sync_merge_to_a_and_b"); + + +} + + +void DirectoryMergeWindow::updateAvailabilities( bool bDirCompare, bool bDiffWindowVisible, + KToggleAction* chooseA, KToggleAction* chooseB, KToggleAction* chooseC ) +{ + m_pDirStartOperation->setEnabled( bDirCompare ); + m_pDirRunOperationForCurrentItem->setEnabled( bDirCompare ); + m_pDirFoldAll->setEnabled( bDirCompare ); + m_pDirUnfoldAll->setEnabled( bDirCompare ); + + m_pDirCompareCurrent->setEnabled( bDirCompare && isVisible() && isFileSelected() ); + + m_pDirMergeCurrent->setEnabled( bDirCompare && isVisible() && isFileSelected() + || bDiffWindowVisible ); + + m_pDirRescan->setEnabled( bDirCompare ); + + m_pDirAutoChoiceEverywhere->setEnabled( bDirCompare && isVisible() ); + m_pDirDoNothingEverywhere->setEnabled( bDirCompare && isVisible() ); + m_pDirChooseAEverywhere->setEnabled( bDirCompare && isVisible() ); + m_pDirChooseBEverywhere->setEnabled( bDirCompare && isVisible() ); + m_pDirChooseCEverywhere->setEnabled( bDirCompare && isVisible() ); + + bool bThreeDirs = m_dirC.isValid(); + + QListViewItem* lvi = currentItem(); + DirMergeItem* pDMI = lvi==0 ? 0 : static_cast(lvi); + MergeFileInfos* pMFI = pDMI==0 ? 0 : pDMI->m_pMFI; + + bool bItemActive = bDirCompare && isVisible() && pMFI!=0;// && hasFocus(); + bool bMergeMode = bThreeDirs || !m_bSyncMode; + bool bFTConflict = pMFI==0 ? false : conflictingFileTypes(*pMFI); + + bool bDirWindowHasFocus = isVisible() && hasFocus(); + + m_pDirShowIdenticalFiles->setEnabled( bDirCompare && isVisible() ); + m_pDirShowDifferentFiles->setEnabled( bDirCompare && isVisible() ); + m_pDirShowFilesOnlyInA->setEnabled( bDirCompare && isVisible() ); + m_pDirShowFilesOnlyInB->setEnabled( bDirCompare && isVisible() ); + m_pDirShowFilesOnlyInC->setEnabled( bDirCompare && isVisible() && bThreeDirs ); + + m_pDirCompareExplicit->setEnabled( bDirCompare && isVisible() && m_pSelection2Item!=0 ); + m_pDirMergeExplicit->setEnabled( bDirCompare && isVisible() && m_pSelection2Item!=0 ); + + m_pDirCurrentDoNothing->setEnabled( bItemActive && bMergeMode ); + m_pDirCurrentChooseA->setEnabled( bItemActive && bMergeMode && pMFI->m_bExistsInA ); + m_pDirCurrentChooseB->setEnabled( bItemActive && bMergeMode && pMFI->m_bExistsInB ); + m_pDirCurrentChooseC->setEnabled( bItemActive && bMergeMode && pMFI->m_bExistsInC ); + m_pDirCurrentMerge->setEnabled( bItemActive && bMergeMode && !bFTConflict ); + m_pDirCurrentDelete->setEnabled( bItemActive && bMergeMode ); + if ( bDirWindowHasFocus ) + { + chooseA->setEnabled( bItemActive && pMFI->m_bExistsInA ); + chooseB->setEnabled( bItemActive && pMFI->m_bExistsInB ); + chooseC->setEnabled( bItemActive && pMFI->m_bExistsInC ); + chooseA->setChecked( false ); + chooseB->setChecked( false ); + chooseC->setChecked( false ); + } + + m_pDirCurrentSyncDoNothing->setEnabled( bItemActive && !bMergeMode ); + m_pDirCurrentSyncCopyAToB->setEnabled( bItemActive && !bMergeMode && pMFI->m_bExistsInA ); + m_pDirCurrentSyncCopyBToA->setEnabled( bItemActive && !bMergeMode && pMFI->m_bExistsInB ); + m_pDirCurrentSyncDeleteA->setEnabled( bItemActive && !bMergeMode && pMFI->m_bExistsInA ); + m_pDirCurrentSyncDeleteB->setEnabled( bItemActive && !bMergeMode && pMFI->m_bExistsInB ); + m_pDirCurrentSyncDeleteAAndB->setEnabled( bItemActive && !bMergeMode && pMFI->m_bExistsInB && pMFI->m_bExistsInB ); + m_pDirCurrentSyncMergeToA->setEnabled( bItemActive && !bMergeMode && !bFTConflict ); + m_pDirCurrentSyncMergeToB->setEnabled( bItemActive && !bMergeMode && !bFTConflict ); + m_pDirCurrentSyncMergeToAAndB->setEnabled( bItemActive && !bMergeMode && !bFTConflict ); +} + + +#include "directorymergewindow.moc" diff --git a/src/directorymergewindow.h b/src/directorymergewindow.h new file mode 100644 index 0000000..77b09fd --- /dev/null +++ b/src/directorymergewindow.h @@ -0,0 +1,362 @@ +/*************************************************************************** + directorymergewindow.h + ------------------- + begin : Sat Oct 19 2002 + copyright : (C) 2002-2007 by Joachim Eibl + email : joachim.eibl at gmx.de + ***************************************************************************/ + +/*************************************************************************** + * * + * 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. * + * * + ***************************************************************************/ + +#ifndef DIRECTORY_MERGE_WINDOW_H +#define DIRECTORY_MERGE_WINDOW_H + +#include +#include +#include +#include +#include +#include +#include "common.h" +#include "fileaccess.h" +#include "diff.h" //TotalDiffStatus + +class OptionDialog; +class KIconLoader; +class StatusInfo; +class DirectoryMergeInfo; +class OneDirectoryInfo; +class QLabel; +class KAction; +class KToggleAction; +class KActionCollection; +class TotalDiffStatus; + +enum e_MergeOperation +{ + eTitleId, + eNoOperation, + // Operations in sync mode (with only two directories): + eCopyAToB, eCopyBToA, eDeleteA, eDeleteB, eDeleteAB, eMergeToA, eMergeToB, eMergeToAB, + + // Operations in merge mode (with two or three directories) + eCopyAToDest, eCopyBToDest, eCopyCToDest, eDeleteFromDest, eMergeABCToDest, + eMergeABToDest, + eConflictingFileTypes, // Error + eConflictingAges // Equal age but files are not! +}; + +class DirMergeItem; + +enum e_Age { eNew, eMiddle, eOld, eNotThere, eAgeEnd }; + +class MergeFileInfos +{ +public: + MergeFileInfos(){ m_bEqualAB=false; m_bEqualAC=false; m_bEqualBC=false; + m_pDMI=0; m_pParent=0; + m_bExistsInA=false;m_bExistsInB=false;m_bExistsInC=false; + m_bDirA=false; m_bDirB=false; m_bDirC=false; + m_bLinkA=false; m_bLinkB=false; m_bLinkC=false; + m_bOperationComplete=false; m_bSimOpComplete = false; + m_eMergeOperation=eNoOperation; + m_ageA = eNotThere; m_ageB=eNotThere; m_ageC=eNotThere; + m_bConflictingAges=false; } + bool operator>( const MergeFileInfos& ); + QString m_subPath; + + bool m_bExistsInA; + bool m_bExistsInB; + bool m_bExistsInC; + bool m_bEqualAB; + bool m_bEqualAC; + bool m_bEqualBC; + DirMergeItem* m_pDMI; + MergeFileInfos* m_pParent; + e_MergeOperation m_eMergeOperation; + void setMergeOperation( e_MergeOperation eMOp, bool bRecursive=true ); + bool m_bDirA; + bool m_bDirB; + bool m_bDirC; + bool m_bLinkA; + bool m_bLinkB; + bool m_bLinkC; + bool m_bOperationComplete; + bool m_bSimOpComplete; + e_Age m_ageA; + e_Age m_ageB; + e_Age m_ageC; + bool m_bConflictingAges; // Equal age but files are not! + + FileAccess m_fileInfoA; + FileAccess m_fileInfoB; + FileAccess m_fileInfoC; + + TotalDiffStatus m_totalDiffStatus; +}; + +class DirMergeItem : public QListViewItem +{ +public: + DirMergeItem( QListView* pParent, const QString&, MergeFileInfos*); + DirMergeItem( DirMergeItem* pParent, const QString&, MergeFileInfos*); + ~DirMergeItem(); + MergeFileInfos* m_pMFI; + virtual int compare(QListViewItem *i, int col, bool ascending) const; + virtual void paintCell(QPainter * p, const QColorGroup & cg, int column, int width, int align ); + void init(MergeFileInfos* pMFI); +}; + +class DirectoryMergeWindow : public QListView +{ + Q_OBJECT +public: + DirectoryMergeWindow( QWidget* pParent, OptionDialog* pOptions, KIconLoader* pIconLoader ); + ~DirectoryMergeWindow(); + void setDirectoryMergeInfo(DirectoryMergeInfo* p){ m_pDirectoryMergeInfo=p; } + bool init( + FileAccess& dirA, + FileAccess& dirB, + FileAccess& dirC, + FileAccess& dirDest, + bool bDirectoryMerge, + bool bReload = false + ); + bool isFileSelected(); + void allowResizeEvents(bool bAllowResizeEvents); + bool isDirectoryMergeInProgress() { return m_bRealMergeStarted; } + int totalColumnWidth(); + bool isSyncMode() { return m_bSyncMode; } + bool isScanning() { return m_bScanning; } + void initDirectoryMergeActions( QObject* pKDiff3App, KActionCollection* ac ); + void updateAvailabilities( bool bDirCompare, bool bDiffWindowVisible, + KToggleAction* chooseA, KToggleAction* chooseB, KToggleAction* chooseC ); + void updateFileVisibilities(); + + virtual void keyPressEvent( QKeyEvent* e ); + virtual void focusInEvent( QFocusEvent* e ); + virtual void focusOutEvent( QFocusEvent* e ); + + QString getDirNameA(){ return m_dirA.prettyAbsPath(); } + QString getDirNameB(){ return m_dirB.prettyAbsPath(); } + QString getDirNameC(){ return m_dirC.prettyAbsPath(); } + QString getDirNameDest(){ return m_dirDest.prettyAbsPath(); } + +public slots: + void reload(); + void mergeCurrentFile(); + void compareCurrentFile(); + void slotRunOperationForAllItems(); + void slotRunOperationForCurrentItem(); + void mergeResultSaved(const QString& fileName); + void slotChooseAEverywhere(); + void slotChooseBEverywhere(); + void slotChooseCEverywhere(); + void slotAutoChooseEverywhere(); + void slotNoOpEverywhere(); + void slotFoldAllSubdirs(); + void slotUnfoldAllSubdirs(); + void slotShowIdenticalFiles(); + void slotShowDifferentFiles(); + void slotShowFilesOnlyInA(); + void slotShowFilesOnlyInB(); + void slotShowFilesOnlyInC(); + + void slotSynchronizeDirectories(); + void slotChooseNewerFiles(); + + void slotCompareExplicitlySelectedFiles(); + void slotMergeExplicitlySelectedFiles(); + + // Merge current item (merge mode) + void slotCurrentDoNothing(); + void slotCurrentChooseA(); + void slotCurrentChooseB(); + void slotCurrentChooseC(); + void slotCurrentMerge(); + void slotCurrentDelete(); + // Sync current item + void slotCurrentCopyAToB(); + void slotCurrentCopyBToA(); + void slotCurrentDeleteA(); + void slotCurrentDeleteB(); + void slotCurrentDeleteAAndB(); + void slotCurrentMergeToA(); + void slotCurrentMergeToB(); + void slotCurrentMergeToAAndB(); + + void slotSaveMergeState(); + void slotLoadMergeState(); + +protected: + void mergeContinue( bool bStart, bool bVerbose ); + void resizeEvent(QResizeEvent* e); + bool m_bAllowResizeEvents; + + void prepareListView(ProgressProxy& pp); + void calcSuggestedOperation( MergeFileInfos& mfi, e_MergeOperation eDefaultOperation ); + void setAllMergeOperations( e_MergeOperation eDefaultOperation ); + friend class MergeFileInfos; + + bool canContinue(); + void prepareMergeStart( QListViewItem* pBegin, QListViewItem* pEnd, bool bVerbose ); + bool executeMergeOperation( MergeFileInfos& mfi, bool& bSingleFileMerge ); + + void scanDirectory( const QString& dirName, t_DirectoryList& dirList ); + void scanLocalDirectory( const QString& dirName, t_DirectoryList& dirList ); + void fastFileComparison( FileAccess& fi1, FileAccess& fi2, + bool& bEqual, bool& bError, QString& status ); + void compareFilesAndCalcAges( MergeFileInfos& mfi ); + + QString fullNameA( const MergeFileInfos& mfi ) + { return mfi.m_bExistsInA ? mfi.m_fileInfoA.absFilePath() : m_dirA.absFilePath() + "/" + mfi.m_subPath; } + QString fullNameB( const MergeFileInfos& mfi ) + { return mfi.m_bExistsInB ? mfi.m_fileInfoB.absFilePath() : m_dirB.absFilePath() + "/" + mfi.m_subPath; } + QString fullNameC( const MergeFileInfos& mfi ) + { return mfi.m_bExistsInC ? mfi.m_fileInfoC.absFilePath() : m_dirC.absFilePath() + "/" + mfi.m_subPath; } + QString fullNameDest( const MergeFileInfos& mfi ) + { if ( m_dirDestInternal.prettyAbsPath() == m_dirC.prettyAbsPath() ) return fullNameC(mfi); + else if ( m_dirDestInternal.prettyAbsPath() == m_dirB.prettyAbsPath() ) return fullNameB(mfi); + else return m_dirDestInternal.absFilePath() + "/" + mfi.m_subPath; + } + + bool copyFLD( const QString& srcName, const QString& destName ); + bool deleteFLD( const QString& name, bool bCreateBackup ); + bool makeDir( const QString& name, bool bQuiet=false ); + bool renameFLD( const QString& srcName, const QString& destName ); + bool mergeFLD( const QString& nameA,const QString& nameB,const QString& nameC, + const QString& nameDest, bool& bSingleFileMerge ); + + FileAccess m_dirA; + FileAccess m_dirB; + FileAccess m_dirC; + FileAccess m_dirDest; + FileAccess m_dirDestInternal; + + QString m_dirMergeStateFilename; + + std::map m_fileMergeMap; + + bool m_bFollowDirLinks; + bool m_bFollowFileLinks; + bool m_bSimulatedMergeStarted; + bool m_bRealMergeStarted; + bool m_bError; + bool m_bSyncMode; + bool m_bDirectoryMerge; // if true, then merge is the default operation, otherwise it's diff. + bool m_bCaseSensitive; + + bool m_bScanning; // true while in init() + + OptionDialog* m_pOptions; + KIconLoader* m_pIconLoader; + DirectoryMergeInfo* m_pDirectoryMergeInfo; + StatusInfo* m_pStatusInfo; + + typedef std::list MergeItemList; + MergeItemList m_mergeItemList; + MergeItemList::iterator m_currentItemForOperation; + + DirMergeItem* m_pSelection1Item; + int m_selection1Column; + DirMergeItem* m_pSelection2Item; + int m_selection2Column; + DirMergeItem* m_pSelection3Item; + int m_selection3Column; + void selectItemAndColumn(DirMergeItem* pDMI, int c, bool bContextMenu); + friend class DirMergeItem; + + KAction* m_pDirStartOperation; + KAction* m_pDirRunOperationForCurrentItem; + KAction* m_pDirCompareCurrent; + KAction* m_pDirMergeCurrent; + KAction* m_pDirRescan; + KAction* m_pDirChooseAEverywhere; + KAction* m_pDirChooseBEverywhere; + KAction* m_pDirChooseCEverywhere; + KAction* m_pDirAutoChoiceEverywhere; + KAction* m_pDirDoNothingEverywhere; + KAction* m_pDirFoldAll; + KAction* m_pDirUnfoldAll; + + KToggleAction* m_pDirShowIdenticalFiles; + KToggleAction* m_pDirShowDifferentFiles; + KToggleAction* m_pDirShowFilesOnlyInA; + KToggleAction* m_pDirShowFilesOnlyInB; + KToggleAction* m_pDirShowFilesOnlyInC; + + KToggleAction* m_pDirSynchronizeDirectories; + KToggleAction* m_pDirChooseNewerFiles; + + KAction* m_pDirCompareExplicit; + KAction* m_pDirMergeExplicit; + + KAction* m_pDirCurrentDoNothing; + KAction* m_pDirCurrentChooseA; + KAction* m_pDirCurrentChooseB; + KAction* m_pDirCurrentChooseC; + KAction* m_pDirCurrentMerge; + KAction* m_pDirCurrentDelete; + + KAction* m_pDirCurrentSyncDoNothing; + KAction* m_pDirCurrentSyncCopyAToB; + KAction* m_pDirCurrentSyncCopyBToA; + KAction* m_pDirCurrentSyncDeleteA; + KAction* m_pDirCurrentSyncDeleteB; + KAction* m_pDirCurrentSyncDeleteAAndB; + KAction* m_pDirCurrentSyncMergeToA; + KAction* m_pDirCurrentSyncMergeToB; + KAction* m_pDirCurrentSyncMergeToAAndB; + + KAction* m_pDirSaveMergeState; + KAction* m_pDirLoadMergeState; +signals: + void startDiffMerge(QString fn1,QString fn2, QString fn3, QString ofn, QString,QString,QString,TotalDiffStatus*); + void checkIfCanContinue( bool* pbContinue ); + void updateAvailabilities(); + void statusBarMessage( const QString& msg ); +protected slots: + void onDoubleClick( QListViewItem* lvi ); + void onClick( int button, QListViewItem* lvi, const QPoint&, int c ); + void slotShowContextMenu(QListViewItem* lvi,const QPoint &,int c); + void onSelectionChanged(QListViewItem* lvi); +}; + +class DirectoryMergeInfo : public QFrame +{ + Q_OBJECT +public: + DirectoryMergeInfo( QWidget* pParent ); + void setInfo( + const FileAccess& APath, + const FileAccess& BPath, + const FileAccess& CPath, + const FileAccess& DestPath, + MergeFileInfos& mfi ); + QListView* getInfoList() {return m_pInfoList;} + virtual bool eventFilter( QObject* o, QEvent* e ); +signals: + void gotFocus(); +private: + QLabel* m_pInfoA; + QLabel* m_pInfoB; + QLabel* m_pInfoC; + QLabel* m_pInfoDest; + + QLabel* m_pA; + QLabel* m_pB; + QLabel* m_pC; + QLabel* m_pDest; + + QListView* m_pInfoList; +}; + + +#endif diff --git a/src/fileaccess.cpp b/src/fileaccess.cpp new file mode 100644 index 0000000..8d4ce17 --- /dev/null +++ b/src/fileaccess.cpp @@ -0,0 +1,1809 @@ +/*************************************************************************** + * Copyright (C) 2003 by Joachim Eibl * + * joachim.eibl at gmx.de * + * * + * 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. * + ***************************************************************************/ + +#include "fileaccess.h" +#include +#include +#include +#include +#include "optiondialog.h" +#include +#include +#include +#include + +#include + +#include "common.h" +#include +#include +#include +#include +#include +#include + +#include +#include + +#ifdef _WIN32 +#include +#include +#include +#include +#else +#include // Needed for creating symbolic links via symlink(). +#include +#endif + + +ProgressDialog* g_pProgressDialog=0; + + +FileAccess::FileAccess( const QString& name, bool bWantToWrite ) +{ + setFile( name, bWantToWrite ); +} + +FileAccess::FileAccess() +{ + m_bValidData = false; + m_size = 0; + m_creationTime = QDateTime(); + m_accessTime = QDateTime(); + m_modificationTime = QDateTime(); + m_bReadable = false; + m_bWritable = false; + m_bExecutable = false; + m_bLocal = false; + m_bHidden = false; + m_bExists = false; + m_bFile = false; + m_bDir = false; + m_bSymLink = false; +} + +FileAccess::~FileAccess() +{ + if( !m_localCopy.isEmpty() ) + { + removeTempFile( m_localCopy ); + } +} + +void FileAccess::setFile( const QString& name, bool bWantToWrite ) +{ + m_url = KURL::fromPathOrURL( name ); + m_bValidData = false; + + m_size = 0; + m_creationTime = QDateTime(); + m_accessTime = QDateTime(); + m_modificationTime = QDateTime(); + m_bReadable = false; + m_bWritable = false; + m_bExecutable = false; + m_bHidden = false; + m_bExists = false; + m_bFile = false; + m_bDir = false; + m_bSymLink = false; + m_linkTarget = ""; + m_fileType = -1; + m_bLocal = true; + + // Note: Checking if the filename-string is empty is necessary for Win95/98/ME. + // The isFile() / isDir() queries would cause the program to crash. + // (This is a Win95-bug which has been corrected only in WinNT/2000/XP.) + if ( !name.isEmpty() ) + { + // FileAccess tries to detect if the given name is an URL or a local file. + // This is a problem if the filename looks like an URL (i.e. contains a colon ':'). + // e.g. "file:f.txt" is a valid filename. + // Most of the time it is sufficient to check if the file exists locally. + // 2 Problems remain: + // 1. When the local file exists and the remote location is wanted nevertheless. (unlikely) + // 2. When the local file doesn't exist and should be written to. + + bool bExistsLocal = QDir().exists(name); + if ( m_url.isLocalFile() || !m_url.isValid() || bExistsLocal ) // assuming that invalid means relative + { + QString localName = name; + if ( !bExistsLocal && m_url.isLocalFile() && name.left(5).lower()=="file:" ) + { + localName = m_url.path(); // I want the path without preceding "file:" + } + QFileInfo fi( localName ); +#if defined(Q_WS_WIN) + // On some windows machines in a network this takes very long. + // and it's not so important anyway. + m_bReadable = true; + m_bWritable = true; // in certain situations this might become a problem though + m_bExecutable = false; +#else + m_bReadable = fi.isReadable(); + m_bWritable = fi.isWritable(); + m_bExecutable = fi.isExecutable(); +#endif + m_creationTime = fi.created(); + m_bHidden = fi.isHidden(); + m_modificationTime = fi.lastModified(); + m_accessTime = fi.lastRead(); + m_size = fi.size(); + m_bSymLink = fi.isSymLink(); + m_bFile = fi.isFile(); + m_bDir = fi.isDir(); + m_bExists = fi.exists(); + m_name = fi.fileName(); + m_path = fi.filePath(); + m_absFilePath= fi.absFilePath(); + if ( m_bSymLink ) m_linkTarget = fi.readLink(); + m_bLocal = true; + m_bValidData = true; + if ( ! m_url.isValid() ) + { + m_url.setPath( m_absFilePath ); + } + + if ( !m_bExists && m_absFilePath.contains("@@") ) + { + // Try reading a clearcase file + m_localCopy = FileAccess::tempFileName(); + QString cmd = "cleartool get -to \"" + m_localCopy + "\" \"" + m_absFilePath + "\""; + ::system( cmd.local8Bit() ); + + QFileInfo fi( m_localCopy ); +#if defined(Q_WS_WIN) + m_bReadable = true;//fi.isReadable(); + m_bWritable = true;//fi.isWritable(); + m_bExecutable = false;//fi.isExecutable(); +#else + m_bReadable = fi.isReadable(); + m_bWritable = fi.isWritable(); + m_bExecutable = fi.isExecutable(); +#endif + m_creationTime = fi.created(); + m_bHidden = fi.isHidden(); + m_modificationTime = fi.lastModified(); + m_accessTime = fi.lastRead(); + m_size = fi.size(); + m_bSymLink = fi.isSymLink(); + m_bFile = fi.isFile(); + m_bDir = fi.isDir(); + m_bExists = fi.exists(); + } + } + else + { + m_absFilePath = name; + m_name = m_url.fileName(); + m_bLocal = false; + + FileAccessJobHandler jh( this ); // A friend, which writes to the parameters of this class! + jh.stat(2/*all details*/, bWantToWrite); // returns bSuccess, ignored + + m_path = name; + m_bValidData = true; // After running stat() the variables are initialised + // and valid even if the file doesn't exist and the stat + // query failed. + } + } +} + +void FileAccess::addPath( const QString& txt ) +{ + if ( m_url.isValid() ) + { + m_url.addPath( txt ); + setFile( m_url.url() ); // reinitialise + } + else + { + QString slash = (txt.isEmpty() || txt[0]=='/') ? "" : "/"; + setFile( absFilePath() + slash + txt ); + } +} + +/* Filetype: + S_IFMT 0170000 bitmask for the file type bitfields + S_IFSOCK 0140000 socket + S_IFLNK 0120000 symbolic link + S_IFREG 0100000 regular file + S_IFBLK 0060000 block device + S_IFDIR 0040000 directory + S_IFCHR 0020000 character device + S_IFIFO 0010000 fifo + S_ISUID 0004000 set UID bit + S_ISGID 0002000 set GID bit (see below) + S_ISVTX 0001000 sticky bit (see below) + + Access: + S_IRWXU 00700 mask for file owner permissions + S_IRUSR 00400 owner has read permission + S_IWUSR 00200 owner has write permission + S_IXUSR 00100 owner has execute permission + S_IRWXG 00070 mask for group permissions + S_IRGRP 00040 group has read permission + S_IWGRP 00020 group has write permission + S_IXGRP 00010 group has execute permission + S_IRWXO 00007 mask for permissions for others (not in group) + S_IROTH 00004 others have read permission + S_IWOTH 00002 others have write permisson + S_IXOTH 00001 others have execute permission +*/ + +#ifdef KREPLACEMENTS_H +void FileAccess::setUdsEntry( const KIO::UDSEntry& ){} // not needed if KDE is not available +#else +void FileAccess::setUdsEntry( const KIO::UDSEntry& e ) +{ + KIO::UDSEntry::const_iterator ei; + long acc = 0; + long fileType = 0; + for( ei=e.begin(); ei!=e.end(); ++ei ) + { + const KIO::UDSAtom& a = *ei; + switch( a.m_uds ) + { + case KIO::UDS_SIZE : m_size = a.m_long; break; + case KIO::UDS_USER : m_user = a.m_str; break; + case KIO::UDS_GROUP : m_group = a.m_str; break; + case KIO::UDS_NAME : m_path = a.m_str; break; // During listDir the relative path is given here. + case KIO::UDS_MODIFICATION_TIME : m_modificationTime.setTime_t( a.m_long ); break; + case KIO::UDS_ACCESS_TIME : m_accessTime.setTime_t( a.m_long ); break; + case KIO::UDS_CREATION_TIME : m_creationTime.setTime_t( a.m_long ); break; + case KIO::UDS_LINK_DEST : m_linkTarget = a.m_str; break; + case KIO::UDS_ACCESS : + { + acc = a.m_long; + m_bReadable = (acc & S_IRUSR)!=0; + m_bWritable = (acc & S_IWUSR)!=0; + m_bExecutable = (acc & S_IXUSR)!=0; + break; + } + case KIO::UDS_FILE_TYPE : + { + fileType = a.m_long; + m_bDir = ( fileType & S_IFMT ) == S_IFDIR; + m_bFile = ( fileType & S_IFMT ) == S_IFREG; + m_bSymLink = ( fileType & S_IFMT ) == S_IFLNK; + m_bExists = fileType != 0; + m_fileType = fileType; + break; + } + + case KIO::UDS_URL : // m_url = KURL( a.str ); + break; + case KIO::UDS_MIME_TYPE : break; + case KIO::UDS_GUESSED_MIME_TYPE : break; + case KIO::UDS_XML_PROPERTIES : break; + default: break; + } + } + + m_bExists = acc!=0 || fileType!=0; + + m_bLocal = false; + m_bValidData = true; + m_bSymLink = !m_linkTarget.isEmpty(); + if ( m_name.isEmpty() ) + { + int pos = m_path.findRev('/') + 1; + m_name = m_path.mid( pos ); + } + m_bHidden = m_name[0]=='.'; +} +#endif + + +bool FileAccess::isValid() const { return m_bValidData; } +bool FileAccess::isFile() const { return m_bFile; } +bool FileAccess::isDir() const { return m_bDir; } +bool FileAccess::isSymLink() const { return m_bSymLink; } +bool FileAccess::exists() const { return m_bExists; } +long FileAccess::size() const { return m_size; } +KURL FileAccess::url() const { return m_url; } +bool FileAccess::isLocal() const { return m_bLocal; } +bool FileAccess::isReadable() const { return m_bReadable; } +bool FileAccess::isWritable() const { return m_bWritable; } +bool FileAccess::isExecutable() const { return m_bExecutable; } +bool FileAccess::isHidden() const { return m_bHidden; } +QString FileAccess::readLink() const { return m_linkTarget; } +QString FileAccess::absFilePath() const{ return m_absFilePath; } // Full abs path +QString FileAccess::fileName() const { return m_name; } // Just the name-part of the path, without parent directories +QString FileAccess::filePath() const { return m_path; } // The path-string that was used during construction +QString FileAccess::prettyAbsPath() const { return isLocal() ? m_absFilePath : m_url.prettyURL(); } + +QDateTime FileAccess::created() const +{ + return ( m_creationTime.isValid() ? m_creationTime : m_modificationTime ); +} + +QDateTime FileAccess::lastModified() const +{ + return m_modificationTime; +} + +QDateTime FileAccess::lastRead() const +{ + return ( m_accessTime.isValid() ? m_accessTime : m_modificationTime ); +} + +static bool interruptableReadFile( QFile& f, void* pDestBuffer, unsigned long maxLength ) +{ + ProgressProxy pp; + const unsigned long maxChunkSize = 100000; + unsigned long i=0; + while( i " + bakName; + return false; + } + } + return true; +} + +FileAccessJobHandler::FileAccessJobHandler( FileAccess* pFileAccess ) +{ + m_pFileAccess = pFileAccess; + m_bSuccess = false; +} + +bool FileAccessJobHandler::stat( int detail, bool bWantToWrite ) +{ + m_bSuccess = false; + m_pFileAccess->m_statusText = QString(); + KIO::StatJob* pStatJob = KIO::stat( m_pFileAccess->m_url, ! bWantToWrite, detail, false ); + + connect( pStatJob, SIGNAL(result(KIO::Job*)), this, SLOT(slotStatResult(KIO::Job*))); + + g_pProgressDialog->enterEventLoop( pStatJob, i18n("Getting file status: %1").arg(m_pFileAccess->prettyAbsPath()) ); + + return m_bSuccess; +} + +void FileAccessJobHandler::slotStatResult(KIO::Job* pJob) +{ + if ( pJob->error() ) + { + //pJob->showErrorDialog(g_pProgressDialog); + m_pFileAccess->m_bExists = false; + m_bSuccess = true; + } + else + { + m_bSuccess = true; + + m_pFileAccess->m_bValidData = true; + const KIO::UDSEntry e = static_cast(pJob)->statResult(); + + m_pFileAccess->setUdsEntry( e ); + } + + g_pProgressDialog->exitEventLoop(); +} + + +bool FileAccessJobHandler::get(void* pDestBuffer, long maxLength ) +{ + ProgressProxy pp; // Implicitly used in slotPercent() + if ( maxLength>0 && !pp.wasCancelled() ) + { + KIO::TransferJob* pJob = KIO::get( m_pFileAccess->m_url, false /*reload*/, false ); + m_transferredBytes = 0; + m_pTransferBuffer = (char*)pDestBuffer; + m_maxLength = maxLength; + m_bSuccess = false; + m_pFileAccess->m_statusText = QString(); + + connect( pJob, SIGNAL(result(KIO::Job*)), this, SLOT(slotSimpleJobResult(KIO::Job*))); + connect( pJob, SIGNAL(data(KIO::Job*,const QByteArray &)), this, SLOT(slotGetData(KIO::Job*, const QByteArray&))); + connect( pJob, SIGNAL(percent(KIO::Job*,unsigned long)), this, SLOT(slotPercent(KIO::Job*, unsigned long))); + + g_pProgressDialog->enterEventLoop( pJob, i18n("Reading file: %1").arg(m_pFileAccess->prettyAbsPath()) ); + return m_bSuccess; + } + else + return true; +} + +void FileAccessJobHandler::slotGetData( KIO::Job* pJob, const QByteArray& newData ) +{ + if ( pJob->error() ) + { + pJob->showErrorDialog(g_pProgressDialog); + } + else + { + long length = min2( long(newData.size()), m_maxLength - m_transferredBytes ); + ::memcpy( m_pTransferBuffer + m_transferredBytes, newData.data(), newData.size() ); + m_transferredBytes += length; + } +} + +bool FileAccessJobHandler::put(const void* pSrcBuffer, long maxLength, bool bOverwrite, bool bResume, int permissions ) +{ + if ( maxLength>0 ) + { + KIO::TransferJob* pJob = KIO::put( m_pFileAccess->m_url, permissions, bOverwrite, bResume, false ); + m_transferredBytes = 0; + m_pTransferBuffer = (char*)pSrcBuffer; + m_maxLength = maxLength; + m_bSuccess = false; + m_pFileAccess->m_statusText = QString(); + + connect( pJob, SIGNAL(result(KIO::Job*)), this, SLOT(slotPutJobResult(KIO::Job*))); + connect( pJob, SIGNAL(dataReq(KIO::Job*, QByteArray&)), this, SLOT(slotPutData(KIO::Job*, QByteArray&))); + connect( pJob, SIGNAL(percent(KIO::Job*,unsigned long)), this, SLOT(slotPercent(KIO::Job*, unsigned long))); + + g_pProgressDialog->enterEventLoop( pJob, i18n("Writing file: %1").arg(m_pFileAccess->prettyAbsPath()) ); + return m_bSuccess; + } + else + return true; +} + +void FileAccessJobHandler::slotPutData( KIO::Job* pJob, QByteArray& data ) +{ + if ( pJob->error() ) + { + pJob->showErrorDialog(g_pProgressDialog); + } + else + { + long maxChunkSize = 100000; + long length = min2( maxChunkSize, m_maxLength - m_transferredBytes ); + bool bSuccess = data.resize( length ); + if ( bSuccess ) + { + if ( length>0 ) + { + ::memcpy( data.data(), m_pTransferBuffer + m_transferredBytes, data.size() ); + m_transferredBytes += length; + } + } + else + { + KMessageBox::error( g_pProgressDialog, i18n("Out of memory") ); + data.resize(0); + m_bSuccess = false; + } + } +} + +void FileAccessJobHandler::slotPutJobResult(KIO::Job* pJob) +{ + if ( pJob->error() ) + { + pJob->showErrorDialog(g_pProgressDialog); + } + else + { + m_bSuccess = (m_transferredBytes == m_maxLength); // Special success condition + } + g_pProgressDialog->exitEventLoop(); // Close the dialog, return from exec() +} + +bool FileAccessJobHandler::mkDir( const QString& dirName ) +{ + KURL dirURL = KURL::fromPathOrURL( dirName ); + if ( dirName.isEmpty() ) + return false; + else if ( dirURL.isLocalFile() ) + { + return QDir().mkdir( dirURL.path() ); + } + else + { + m_bSuccess = false; + KIO::SimpleJob* pJob = KIO::mkdir( dirURL ); + connect( pJob, SIGNAL(result(KIO::Job*)), this, SLOT(slotSimpleJobResult(KIO::Job*))); + + g_pProgressDialog->enterEventLoop( pJob, i18n("Making directory: %1").arg(dirName) ); + return m_bSuccess; + } +} + +bool FileAccessJobHandler::rmDir( const QString& dirName ) +{ + KURL dirURL = KURL::fromPathOrURL( dirName ); + if ( dirName.isEmpty() ) + return false; + else if ( dirURL.isLocalFile() ) + { + return QDir().rmdir( dirURL.path() ); + } + else + { + m_bSuccess = false; + KIO::SimpleJob* pJob = KIO::rmdir( dirURL ); + connect( pJob, SIGNAL(result(KIO::Job*)), this, SLOT(slotSimpleJobResult(KIO::Job*))); + + g_pProgressDialog->enterEventLoop(pJob, i18n("Removing directory: %1").arg(dirName)); + return m_bSuccess; + } +} + +bool FileAccessJobHandler::removeFile( const QString& fileName ) +{ + if ( fileName.isEmpty() ) + return false; + else + { + m_bSuccess = false; + KIO::SimpleJob* pJob = KIO::file_delete( KURL::fromPathOrURL(fileName), false ); + connect( pJob, SIGNAL(result(KIO::Job*)), this, SLOT(slotSimpleJobResult(KIO::Job*))); + + g_pProgressDialog->enterEventLoop( pJob, i18n("Removing file: %1").arg(fileName) ); + return m_bSuccess; + } +} + +bool FileAccessJobHandler::symLink( const QString& linkTarget, const QString& linkLocation ) +{ + if ( linkTarget.isEmpty() || linkLocation.isEmpty() ) + return false; + else + { + m_bSuccess = false; + KIO::CopyJob* pJob = KIO::link( KURL::fromPathOrURL(linkTarget), KURL::fromPathOrURL(linkLocation), false ); + connect( pJob, SIGNAL(result(KIO::Job*)), this, SLOT(slotSimpleJobResult(KIO::Job*))); + + g_pProgressDialog->enterEventLoop( pJob, + i18n("Creating symbolic link: %1 -> %2").arg(linkLocation).arg(linkTarget) ); + return m_bSuccess; + } +} + +bool FileAccessJobHandler::rename( const QString& dest ) +{ + if ( dest.isEmpty() ) + return false; + + KURL kurl = KURL::fromPathOrURL( dest ); + if ( !kurl.isValid() ) + kurl = KURL::fromPathOrURL( QDir().absFilePath(dest) ); // assuming that invalid means relative + + if ( m_pFileAccess->isLocal() && kurl.isLocalFile() ) + { + return QDir().rename( m_pFileAccess->absFilePath(), kurl.path() ); + } + else + { + bool bOverwrite = false; + bool bResume = false; + bool bShowProgress = false; + int permissions=-1; + m_bSuccess = false; + KIO::FileCopyJob* pJob = KIO::file_move( m_pFileAccess->m_url, kurl, permissions, bOverwrite, bResume, bShowProgress ); + connect( pJob, SIGNAL(result(KIO::Job*)), this, SLOT(slotSimpleJobResult(KIO::Job*))); + connect( pJob, SIGNAL(percent(KIO::Job*,unsigned long)), this, SLOT(slotPercent(KIO::Job*, unsigned long))); + + g_pProgressDialog->enterEventLoop( pJob, + i18n("Renaming file: %1 -> %2").arg(m_pFileAccess->prettyAbsPath()).arg(dest) ); + return m_bSuccess; + } +} + +void FileAccessJobHandler::slotSimpleJobResult(KIO::Job* pJob) +{ + if ( pJob->error() ) + { + pJob->showErrorDialog(g_pProgressDialog); + } + else + { + m_bSuccess = true; + } + g_pProgressDialog->exitEventLoop(); // Close the dialog, return from exec() +} + + +// Copy local or remote files. +bool FileAccessJobHandler::copyFile( const QString& dest ) +{ + ProgressProxy pp; + KURL destUrl = KURL::fromPathOrURL( dest ); + m_pFileAccess->m_statusText = QString(); + if ( ! m_pFileAccess->isLocal() || ! destUrl.isLocalFile() ) // if either url is nonlocal + { + bool bOverwrite = false; + bool bResume = false; + bool bShowProgress = false; + int permissions = (m_pFileAccess->isExecutable()?0111:0)+(m_pFileAccess->isWritable()?0222:0)+(m_pFileAccess->isReadable()?0444:0); + m_bSuccess = false; + KIO::FileCopyJob* pJob = KIO::file_copy ( m_pFileAccess->m_url, destUrl, permissions, bOverwrite, bResume, bShowProgress ); + connect( pJob, SIGNAL(result(KIO::Job*)), this, SLOT(slotSimpleJobResult(KIO::Job*))); + connect( pJob, SIGNAL(percent(KIO::Job*,unsigned long)), this, SLOT(slotPercent(KIO::Job*, unsigned long))); + g_pProgressDialog->enterEventLoop( pJob, + i18n("Copying file: %1 -> %2").arg(m_pFileAccess->prettyAbsPath()).arg(dest) ); + + return m_bSuccess; + // Note that the KIO-slave preserves the original date, if this is supported. + } + + // Both files are local: + QString srcName = m_pFileAccess->absFilePath(); + QString destName = dest; + QFile srcFile( srcName ); + QFile destFile( destName ); + bool bReadSuccess = srcFile.open( IO_ReadOnly ); + if ( bReadSuccess == false ) + { + m_pFileAccess->m_statusText = i18n("Error during file copy operation: Opening file for reading failed. Filename: %1").arg(srcName); + return false; + } + bool bWriteSuccess = destFile.open( IO_WriteOnly ); + if ( bWriteSuccess == false ) + { + m_pFileAccess->m_statusText = i18n("Error during file copy operation: Opening file for writing failed. Filename: %1").arg(destName); + return false; + } + +#if QT_VERSION==230 + typedef long Q_LONG; +#endif + std::vector buffer(100000); + Q_LONG bufSize = buffer.size(); + Q_LONG srcSize = srcFile.size(); + while ( srcSize > 0 && !pp.wasCancelled() ) + { + Q_LONG readSize = srcFile.readBlock( &buffer[0], min2( srcSize, bufSize ) ); + if ( readSize==-1 || readSize==0 ) + { + m_pFileAccess->m_statusText = i18n("Error during file copy operation: Reading failed. Filename: %1").arg(srcName); + return false; + } + srcSize -= readSize; + while ( readSize > 0 ) + { + Q_LONG writeSize = destFile.writeBlock( &buffer[0], readSize ); + if ( writeSize==-1 || writeSize==0 ) + { + m_pFileAccess->m_statusText = i18n("Error during file copy operation: Writing failed. Filename: %1").arg(destName); + return false; + } + readSize -= writeSize; + } + destFile.flush(); + pp.setCurrent( (double)(srcFile.size()-srcSize)/srcFile.size(), false ); + } + srcFile.close(); + destFile.close(); + + // Update the times of the destFile +#ifdef _WIN32 + struct _stat srcFileStatus; + int statResult = ::_stat( srcName.ascii(), &srcFileStatus ); + if (statResult==0) + { + _utimbuf destTimes; + destTimes.actime = srcFileStatus.st_atime;/* time of last access */ + destTimes.modtime = srcFileStatus.st_mtime;/* time of last modification */ + + _utime ( destName.ascii(), &destTimes ); + _chmod ( destName.ascii(), srcFileStatus.st_mode ); + } +#else + struct stat srcFileStatus; + int statResult = ::stat( srcName.ascii(), &srcFileStatus ); + if (statResult==0) + { + utimbuf destTimes; + destTimes.actime = srcFileStatus.st_atime;/* time of last access */ + destTimes.modtime = srcFileStatus.st_mtime;/* time of last modification */ + + utime ( destName.ascii(), &destTimes ); + chmod ( destName.ascii(), srcFileStatus.st_mode ); + } +#endif + return true; +} + +bool wildcardMultiMatch( const QString& wildcard, const QString& testString, bool bCaseSensitive ) +{ + QStringList sl = QStringList::split( ";", wildcard ); + + for ( QStringList::Iterator it = sl.begin(); it != sl.end(); ++it ) + { + QRegExp pattern( *it, bCaseSensitive, true /*wildcard mode*/); + if ( pattern.exactMatch( testString ) ) + return true; + } + + return false; +} + + +// class CvsIgnoreList from Cervisia cvsdir.cpp +// Copyright (C) 1999-2002 Bernd Gehrmann +// with elements from class StringMatcher +// Copyright (c) 2003 Andr�Woebeking +// Modifications for KDiff3 by Joachim Eibl +class CvsIgnoreList +{ +public: + CvsIgnoreList(){} + void init(FileAccess& dir, bool bUseLocalCvsIgnore ); + bool matches(const QString& fileName, bool bCaseSensitive ) const; + +private: + void addEntriesFromString(const QString& str); + void addEntriesFromFile(const QString& name); + void addEntry(const QString& entry); + + QStringList m_exactPatterns; + QStringList m_startPatterns; + QStringList m_endPatterns; + QStringList m_generalPatterns; +}; + + +void CvsIgnoreList::init( FileAccess& dir, bool bUseLocalCvsIgnore ) +{ + static const char *ignorestr = ". .. core RCSLOG tags TAGS RCS SCCS .make.state " + ".nse_depinfo #* .#* cvslog.* ,* CVS CVS.adm .del-* *.a *.olb *.o *.obj " + "*.so *.Z *~ *.old *.elc *.ln *.bak *.BAK *.orig *.rej *.exe _$* *$"; + + addEntriesFromString(QString::fromLatin1(ignorestr)); + addEntriesFromFile(QDir::homeDirPath() + "/.cvsignore"); + addEntriesFromString(QString::fromLocal8Bit(::getenv("CVSIGNORE"))); + + if (bUseLocalCvsIgnore) + { + FileAccess file(dir); + file.addPath( ".cvsignore" ); + int size = file.exists() ? file.sizeForReading() : 0; + if ( size>0 ) + { + char* buf=new char[size]; + if (buf!=0) + { + file.readFile( buf, size ); + int pos1 = 0; + for ( int pos = 0; pos<=size; ++pos ) + { + if( pos==size || buf[pos]==' ' || buf[pos]=='\t' || buf[pos]=='\n' || buf[pos]=='\r' ) + { + if (pos>pos1) + { + addEntry( QString::fromLatin1( &buf[pos1], pos-pos1 ) ); + } + ++pos1; + } + } + delete buf; + } + } + } +} + + +void CvsIgnoreList::addEntriesFromString(const QString& str) +{ + int posLast(0); + int pos; + while ((pos = str.find(' ', posLast)) >= 0) + { + if (pos > posLast) + addEntry(str.mid(posLast, pos - posLast)); + posLast = pos + 1; + } + + if (posLast < static_cast(str.length())) + addEntry(str.mid(posLast)); +} + + +void CvsIgnoreList::addEntriesFromFile(const QString &name) +{ + QFile file(name); + + if( file.open(IO_ReadOnly) ) + { + QTextStream stream(&file); + while( !stream.eof() ) + { + addEntriesFromString(stream.readLine()); + } + } +} + +void CvsIgnoreList::addEntry(const QString& pattern) +{ + if (pattern != QString("!")) + { + if (pattern.isEmpty()) return; + + // The general match is general but slow. + // Special tests for '*' and '?' at the beginning or end of a pattern + // allow fast checks. + + // Count number of '*' and '?' + unsigned int nofMetaCharacters = 0; + + const QChar* pos; + pos = pattern.unicode(); + const QChar* posEnd; + posEnd=pos + pattern.length(); + while (pos < posEnd) + { + if( *pos==QChar('*') || *pos==QChar('?') ) ++nofMetaCharacters; + ++pos; + } + + if ( nofMetaCharacters==0 ) + { + m_exactPatterns.append(pattern); + } + else if ( nofMetaCharacters==1 ) + { + if ( pattern.constref(0) == QChar('*') ) + { + m_endPatterns.append( pattern.right( pattern.length() - 1) ); + } + else if (pattern.constref(pattern.length() - 1) == QChar('*')) + { + m_startPatterns.append( pattern.left( pattern.length() - 1) ); + } + else + { + m_generalPatterns.append(pattern.local8Bit()); + } + } + else + { + m_generalPatterns.append(pattern.local8Bit()); + } + } + else + { + m_exactPatterns.clear(); + m_startPatterns.clear(); + m_endPatterns.clear(); + m_generalPatterns.clear(); + } +} + +bool CvsIgnoreList::matches(const QString& text, bool bCaseSensitive ) const +{ + if (m_exactPatterns.find(text) != m_exactPatterns.end()) + { + return true; + } + + QStringList::ConstIterator it; + QStringList::ConstIterator itEnd; + for ( it=m_startPatterns.begin(), itEnd=m_startPatterns.end(); it != itEnd; ++it) + { + if (text.startsWith(*it)) + { + return true; + } + } + + for ( it = m_endPatterns.begin(), itEnd=m_endPatterns.end(); it != itEnd; ++it) + { + if (text.mid( text.length() - (*it).length() )==*it) //(text.endsWith(*it)) + { + return true; + } + } + + /* + for (QValueList::const_iterator it(m_generalPatterns.begin()), + itEnd(m_generalPatterns.end()); + it != itEnd; ++it) + { + if (::fnmatch(*it, text.local8Bit(), FNM_PATHNAME) == 0) + { + return true; + } + } + */ + + + for ( it = m_generalPatterns.begin(); it != m_generalPatterns.end(); ++it ) + { + QRegExp pattern( *it, bCaseSensitive, true /*wildcard mode*/); +#if QT_VERSION==230 + int len=0; + if ( pattern.match( text, 0, &len )!=-1 && len==text.length()) + return true; +#else + if ( pattern.exactMatch( text ) ) + return true; +#endif + } + + return false; +} + +static QString nicePath( const QFileInfo& fi ) +{ + QString fp = fi.filePath(); + if ( fp.length()>2 && fp[0] == '.' && fp[1] == '/' ) + { + return fp.mid(2); + } + return fp; +} + +static bool cvsIgnoreExists( t_DirectoryList* pDirList ) +{ + t_DirectoryList::iterator i; + for( i = pDirList->begin(); i!=pDirList->end(); ++i ) + { + if ( i->fileName()==".cvsignore" ) + return true; + } + return false; +} + +bool FileAccessJobHandler::listDir( t_DirectoryList* pDirList, bool bRecursive, bool bFindHidden, const QString& filePattern, + const QString& fileAntiPattern, const QString& dirAntiPattern, bool bFollowDirLinks, bool bUseCvsIgnore ) +{ + ProgressProxy pp; + m_pDirList = pDirList; + m_pDirList->clear(); + m_bFindHidden = bFindHidden; + m_bRecursive = bRecursive; + m_bFollowDirLinks = bFollowDirLinks; // Only relevant if bRecursive==true. + m_fileAntiPattern = fileAntiPattern; + m_filePattern = filePattern; + m_dirAntiPattern = dirAntiPattern; + + if ( pp.wasCancelled() ) + return true; // Cancelled is not an error. + + pp.setInformation( i18n("Reading directory: ") + m_pFileAccess->absFilePath(), 0, false ); + + if( m_pFileAccess->isLocal() ) + { + QString currentPath = QDir::currentDirPath(); + m_bSuccess = QDir::setCurrent( m_pFileAccess->absFilePath() ); + if ( m_bSuccess ) + { +#ifndef _WIN32 + m_bSuccess = true; + QDir dir( "." ); + + dir.setSorting( QDir::Name | QDir::DirsFirst ); + dir.setFilter( QDir::Files | QDir::Dirs | QDir::Hidden ); + dir.setMatchAllDirs( true ); + + const QFileInfoList *fiList = dir.entryInfoList(); + if ( fiList == 0 ) + { + // No Permission to read directory or other error. + m_bSuccess = false; + } + else + { + QFileInfoListIterator it( *fiList ); // create list iterator + for ( ; it.current() != 0; ++it ) // for each file... + { + QFileInfo* fi = it.current(); + if ( fi->fileName() == "." || fi->fileName()==".." ) + continue; + + pDirList->push_back( FileAccess( nicePath(*fi) ) ); + } + } +#else + QString pattern ="*.*"; + WIN32_FIND_DATA findData; + WIN32_FIND_DATAA& findDataA=*(WIN32_FIND_DATAA*)&findData; // Needed for Win95 + + HANDLE searchHandle = QT_WA_INLINE( + FindFirstFile( (TCHAR*)pattern.ucs2(), &findData ), + FindFirstFileA( pattern.local8Bit(), &findDataA ) + ); + + if ( searchHandle != INVALID_HANDLE_VALUE ) + { + QString absPath = m_pFileAccess->absFilePath(); + QString relPath = m_pFileAccess->filePath(); + bool bFirst=true; + while( ! pp.wasCancelled() ) + { + if (!bFirst) + { + if ( ! QT_WA_INLINE( + FindNextFile(searchHandle,&findData), + FindNextFileA(searchHandle,&findDataA)) ) + break; + } + bFirst = false; + FileAccess fa; + fa.m_size = findData.nFileSizeLow ;//+ findData.nFileSizeHigh; + + FILETIME ft; + SYSTEMTIME t; + FileTimeToLocalFileTime( &findData.ftLastWriteTime, &ft ); FileTimeToSystemTime(&ft,&t); + fa.m_modificationTime = QDateTime( QDate(t.wYear, t.wMonth, t.wDay), QTime(t.wHour, t.wMinute, t.wSecond) ); + FileTimeToLocalFileTime( &findData.ftLastAccessTime, &ft ); FileTimeToSystemTime(&ft,&t); + fa.m_accessTime = QDateTime( QDate(t.wYear, t.wMonth, t.wDay), QTime(t.wHour, t.wMinute, t.wSecond) ); + FileTimeToLocalFileTime( &findData.ftCreationTime, &ft ); FileTimeToSystemTime(&ft,&t); + fa.m_creationTime = QDateTime( QDate(t.wYear, t.wMonth, t.wDay), QTime(t.wHour, t.wMinute, t.wSecond) ); + + int a = findData.dwFileAttributes; + fa.m_bWritable = ( a & FILE_ATTRIBUTE_READONLY) == 0; + fa.m_bDir = ( a & FILE_ATTRIBUTE_DIRECTORY ) != 0; + fa.m_bFile = !fa.m_bDir; + fa.m_bHidden = ( a & FILE_ATTRIBUTE_HIDDEN) != 0; + + fa.m_bExecutable = false; // Useless on windows + fa.m_bExists = true; + fa.m_bReadable = true; + fa.m_bLocal = true; + fa.m_bValidData = true; + fa.m_bSymLink = false; + fa.m_fileType = 0; + + fa.m_name = QT_WA_INLINE( + QString::fromUcs2((const ushort*)findData.cFileName), + QString::fromLocal8Bit(findDataA.cFileName) + ); + + fa.m_path = fa.m_name; + fa.m_absFilePath = absPath + "/" + fa.m_name; + fa.m_url.setPath( fa.m_absFilePath ); + if ( fa.m_name!="." && fa.m_name!=".." ) + pDirList->push_back( fa ); + } + FindClose( searchHandle ); + } + else + { + QDir::setCurrent( currentPath ); // restore current path + return false; + } +#endif + } + QDir::setCurrent( currentPath ); // restore current path + } + else + { + bool bShowProgress = false; + + KIO::ListJob* pListJob=0; + pListJob = KIO::listDir( m_pFileAccess->m_url, bShowProgress, true /*bFindHidden*/ ); + + m_bSuccess = false; + if ( pListJob!=0 ) + { + connect( pListJob, SIGNAL( entries( KIO::Job *, const KIO::UDSEntryList& ) ), + this, SLOT( slotListDirProcessNewEntries( KIO::Job *, const KIO::UDSEntryList& )) ); + connect( pListJob, SIGNAL( result( KIO::Job* )), + this, SLOT( slotSimpleJobResult(KIO::Job*) ) ); + + connect( pListJob, SIGNAL( infoMessage(KIO::Job*, const QString&)), + this, SLOT( slotListDirInfoMessage(KIO::Job*, const QString&) )); + + // This line makes the transfer via fish unreliable.:-( + //connect( pListJob, SIGNAL(percent(KIO::Job*,unsigned long)), this, SLOT(slotPercent(KIO::Job*, unsigned long))); + + g_pProgressDialog->enterEventLoop( pListJob, + i18n("Listing directory: %1").arg(m_pFileAccess->prettyAbsPath()) ); + } + } + + CvsIgnoreList cvsIgnoreList; + if ( bUseCvsIgnore ) + { + cvsIgnoreList.init( *m_pFileAccess, cvsIgnoreExists(pDirList) ); + } +#ifdef _WIN32 + bool bCaseSensitive = false; +#else + bool bCaseSensitive = true; +#endif + + // Now remove all entries that don't match: + t_DirectoryList::iterator i; + for( i = pDirList->begin(); i!=pDirList->end(); ) + { + t_DirectoryList::iterator i2=i; + ++i2; + QString fn = i->fileName(); + if ( (!bFindHidden && i->isHidden() ) + || + (i->isFile() && + ( !wildcardMultiMatch( filePattern, i->fileName(), bCaseSensitive ) || + wildcardMultiMatch( fileAntiPattern, i->fileName(), bCaseSensitive ) ) ) + || + (i->isDir() && wildcardMultiMatch( dirAntiPattern, i->fileName(), bCaseSensitive ) ) + || + cvsIgnoreList.matches( i->fileName(), bCaseSensitive ) + ) + { + // Remove it + pDirList->erase( i ); + i = i2; + } + else + { + ++i; + } + } + + if ( bRecursive ) + { + t_DirectoryList subDirsList; + + t_DirectoryList::iterator i; + for( i = m_pDirList->begin(); i!=m_pDirList->end(); ++i ) + { + if ( i->isDir() && (!i->isSymLink() || m_bFollowDirLinks)) + { + t_DirectoryList dirList; + i->listDir( &dirList, bRecursive, bFindHidden, + filePattern, fileAntiPattern, dirAntiPattern, bFollowDirLinks, bUseCvsIgnore ); + + t_DirectoryList::iterator j; + for( j = dirList.begin(); j!=dirList.end(); ++j ) + { + j->m_path = i->fileName() + "/" + j->m_path; + } + + // append data onto the main list + subDirsList.splice( subDirsList.end(), dirList ); + } + } + + m_pDirList->splice( m_pDirList->end(), subDirsList ); + } + + return m_bSuccess; +} + + +void FileAccessJobHandler::slotListDirProcessNewEntries( KIO::Job *, const KIO::UDSEntryList& l ) +{ + KURL parentUrl( m_pFileAccess->m_absFilePath ); + + KIO::UDSEntryList::ConstIterator i; + for ( i=l.begin(); i!=l.end(); ++i ) + { + const KIO::UDSEntry& e = *i; + FileAccess fa; + fa.setUdsEntry( e ); + + if ( fa.filePath() != "." && fa.filePath() != ".." ) + { + fa.m_url = parentUrl; + fa.m_url.addPath( fa.filePath() ); + fa.m_absFilePath = fa.m_url.url(); + m_pDirList->push_back( fa ); + } + } +} + +void FileAccessJobHandler::slotListDirInfoMessage( KIO::Job*, const QString& msg ) +{ + g_pProgressDialog->setInformation( msg, 0.0 ); +} + +void FileAccessJobHandler::slotPercent( KIO::Job*, unsigned long percent ) +{ + g_pProgressDialog->setCurrent( percent/100.0 ); +} + + +ProgressDialog::ProgressDialog( QWidget* pParent ) +: QDialog( pParent, 0, true ) +{ + m_bStayHidden = false; + QVBoxLayout* layout = new QVBoxLayout(this); + + m_pInformation = new QLabel( " ", this ); + layout->addWidget( m_pInformation ); + + m_pProgressBar = new KProgress(1000, this); + layout->addWidget( m_pProgressBar ); + + m_pSubInformation = new QLabel( " ", this); + layout->addWidget( m_pSubInformation ); + + m_pSubProgressBar = new KProgress(1000, this); + layout->addWidget( m_pSubProgressBar ); + + m_pSlowJobInfo = new QLabel( " ", this); + layout->addWidget( m_pSlowJobInfo ); + + QHBoxLayout* hlayout = new QHBoxLayout( layout ); + hlayout->addStretch(1); + m_pAbortButton = new QPushButton( i18n("&Cancel"), this); + hlayout->addWidget( m_pAbortButton ); + connect( m_pAbortButton, SIGNAL(clicked()), this, SLOT(slotAbort()) ); + + m_progressDelayTimer = 0; + resize( 400, 100 ); + m_t1.start(); + m_t2.start(); + m_bWasCancelled = false; + m_pJob = 0; +} + +void ProgressDialog::setStayHidden( bool bStayHidden ) +{ + m_bStayHidden = bStayHidden; +} + +void ProgressDialog::push() +{ + ProgressLevelData pld; + if ( !m_progressStack.empty() ) + { + pld.m_dRangeMax = m_progressStack.back().m_dSubRangeMax; + pld.m_dRangeMin = m_progressStack.back().m_dSubRangeMin; + } + else + { + m_bWasCancelled = false; + m_t1.restart(); + m_t2.restart(); + if ( !m_bStayHidden ) + show(); + } + + m_progressStack.push_back( pld ); +} + +void ProgressDialog::pop( bool bRedrawUpdate ) +{ + if ( !m_progressStack.empty() ) + { + m_progressStack.pop_back(); + if ( m_progressStack.empty() ) + hide(); + else + recalc(bRedrawUpdate); + } +} + +void ProgressDialog::setInformation(const QString& info, double dCurrent, bool bRedrawUpdate ) +{ + if ( m_progressStack.empty() ) + return; + ProgressLevelData& pld = m_progressStack.back(); + pld.m_dCurrent = dCurrent; + int level = m_progressStack.size(); + if ( level==1 ) + { + m_pInformation->setText( info ); + m_pSubInformation->setText(""); + } + else if ( level==2 ) + { + m_pSubInformation->setText( info ); + } + recalc(bRedrawUpdate); +} + +void ProgressDialog::setInformation(const QString& info, bool bRedrawUpdate ) +{ + if ( m_progressStack.empty() ) + return; + //ProgressLevelData& pld = m_progressStack.back(); + int level = m_progressStack.size(); + if ( level==1 ) + { + m_pInformation->setText( info ); + m_pSubInformation->setText( "" ); + } + else if ( level==2 ) + { + m_pSubInformation->setText( info ); + } + recalc(bRedrawUpdate); +} + +void ProgressDialog::setMaxNofSteps( int maxNofSteps ) +{ + if ( m_progressStack.empty() ) + return; + ProgressLevelData& pld = m_progressStack.back(); + pld.m_maxNofSteps = maxNofSteps; + pld.m_dCurrent = 0; +} + +void ProgressDialog::step( bool bRedrawUpdate ) +{ + if ( m_progressStack.empty() ) + return; + ProgressLevelData& pld = m_progressStack.back(); + pld.m_dCurrent += 1.0/pld.m_maxNofSteps; + recalc(bRedrawUpdate); +} + +void ProgressDialog::setCurrent( double dSubCurrent, bool bRedrawUpdate ) +{ + if ( m_progressStack.empty() ) + return; + ProgressLevelData& pld = m_progressStack.back(); + pld.m_dCurrent = dSubCurrent; + recalc( bRedrawUpdate ); +} + +// The progressbar goes from 0 to 1 usually. +// By supplying a subrange transformation the subCurrent-values +// 0 to 1 will be transformed to dMin to dMax instead. +// Requirement: 0 < dMin < dMax < 1 +void ProgressDialog::setRangeTransformation( double dMin, double dMax ) +{ + if ( m_progressStack.empty() ) + return; + ProgressLevelData& pld = m_progressStack.back(); + pld.m_dRangeMin = dMin; + pld.m_dRangeMax = dMax; + pld.m_dCurrent = 0; +} + +void ProgressDialog::setSubRangeTransformation( double dMin, double dMax ) +{ + if ( m_progressStack.empty() ) + return; + ProgressLevelData& pld = m_progressStack.back(); + pld.m_dSubRangeMin = dMin; + pld.m_dSubRangeMax = dMax; +} + +void qt_enter_modal(QWidget*); +void qt_leave_modal(QWidget*); + +void ProgressDialog::enterEventLoop( KIO::Job* pJob, const QString& jobInfo ) +{ + m_pJob = pJob; + m_pSlowJobInfo->setText(""); + m_currentJobInfo = jobInfo; + killTimer( m_progressDelayTimer ); + m_progressDelayTimer = startTimer( 3000 ); /* 3 s delay */ + + // instead of using exec() the eventloop is entered and exited often without hiding/showing the window. +#if QT_VERSION==230 + //qApp->enter_loop(); +#else + qt_enter_modal(this); + qApp->eventLoop()->enterLoop(); + qt_leave_modal(this); +#endif +} + +void ProgressDialog::exitEventLoop() +{ + killTimer( m_progressDelayTimer ); + m_progressDelayTimer = 0; + m_pJob = 0; + qApp->eventLoop()->exitLoop(); +} + +void ProgressDialog::recalc( bool bUpdate ) +{ + killTimer( m_progressDelayTimer ); + m_progressDelayTimer = startTimer( 3000 ); /* 3 s delay */ + + int level = m_progressStack.size(); + if( ( bUpdate && level==1) || m_t1.elapsed()>200 ) + { + if (m_progressStack.empty() ) + { + m_pProgressBar->setProgress( 0 ); + m_pSubProgressBar->setProgress( 0 ); + } + else + { + std::list::iterator i = m_progressStack.begin(); + m_pProgressBar->setProgress( int( 1000.0 * ( i->m_dCurrent * (i->m_dRangeMax - i->m_dRangeMin) + i->m_dRangeMin ) ) ); + ++i; + if ( i!=m_progressStack.end() ) + m_pSubProgressBar->setProgress( int( 1000.0 * ( i->m_dCurrent * (i->m_dRangeMax - i->m_dRangeMin) + i->m_dRangeMin ) ) ); + else + m_pSubProgressBar->setProgress( int( 1000.0 * m_progressStack.front().m_dSubRangeMin ) ); + } + + if ( !m_bStayHidden && !isVisible() ) + show(); + qApp->processEvents(); + m_t1.restart(); + } +} + + +#include +void ProgressDialog::show() +{ + killTimer( m_progressDelayTimer ); + m_progressDelayTimer = 0; + if ( !isVisible() && (parentWidget()==0 || parentWidget()->isVisible()) ) + { +#if QT_VERSION==230 + QWidget::show(); +#else + QDialog::show(); +#endif + } +} + +void ProgressDialog::hide() +{ + killTimer( m_progressDelayTimer ); + m_progressDelayTimer = 0; + // Calling QDialog::hide() directly doesn't always work. (?) + QTimer::singleShot( 100, this, SLOT(delayedHide()) ); +} + +void ProgressDialog::delayedHide() +{ + if (m_pJob!=0) + { + m_pJob->kill(false); + m_pJob = 0; + } + QDialog::hide(); + m_pInformation->setText( "" ); + + //m_progressStack.clear(); + + m_pProgressBar->setProgress( 0 ); + m_pSubProgressBar->setProgress( 0 ); + m_pSubInformation->setText(""); + m_pSlowJobInfo->setText(""); +} + +void ProgressDialog::reject() +{ + m_bWasCancelled = true; + QDialog::reject(); +} + +void ProgressDialog::slotAbort() +{ + reject(); +} + +bool ProgressDialog::wasCancelled() +{ + if( m_t2.elapsed()>100 ) + { + qApp->processEvents(); + m_t2.restart(); + } + return m_bWasCancelled; +} + + +void ProgressDialog::timerEvent(QTimerEvent*) +{ + if( !isVisible() ) + { + show(); + } + m_pSlowJobInfo->setText( m_currentJobInfo ); +} + + +ProgressProxy::ProgressProxy() +{ + g_pProgressDialog->push(); +} + +ProgressProxy::~ProgressProxy() +{ + g_pProgressDialog->pop(false); +} + +void ProgressProxy::setInformation( const QString& info, bool bRedrawUpdate ) +{ + g_pProgressDialog->setInformation( info, bRedrawUpdate ); +} + +void ProgressProxy::setInformation( const QString& info, double dCurrent, bool bRedrawUpdate ) +{ + g_pProgressDialog->setInformation( info, dCurrent, bRedrawUpdate ); +} + +void ProgressProxy::setCurrent( double dCurrent, bool bRedrawUpdate ) +{ + g_pProgressDialog->setCurrent( dCurrent, bRedrawUpdate ); +} + +void ProgressProxy::step( bool bRedrawUpdate ) +{ + g_pProgressDialog->step( bRedrawUpdate ); +} + +void ProgressProxy::setMaxNofSteps( int maxNofSteps ) +{ + g_pProgressDialog->setMaxNofSteps( maxNofSteps ); +} + +bool ProgressProxy::wasCancelled() +{ + return g_pProgressDialog->wasCancelled(); +} + +void ProgressProxy::setRangeTransformation( double dMin, double dMax ) +{ + g_pProgressDialog->setRangeTransformation( dMin, dMax ); +} + +void ProgressProxy::setSubRangeTransformation( double dMin, double dMax ) +{ + g_pProgressDialog->setSubRangeTransformation( dMin, dMax ); +} + + + + + +#include "fileaccess.moc" diff --git a/src/fileaccess.h b/src/fileaccess.h new file mode 100644 index 0000000..77b70bf --- /dev/null +++ b/src/fileaccess.h @@ -0,0 +1,265 @@ +/*************************************************************************** + * Copyright (C) 2003-2007 by Joachim Eibl * + * joachim.eibl at gmx.de * + * * + * 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. * + ***************************************************************************/ + +#ifndef FILEACCESS_H +#define FILEACCESS_H + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +bool wildcardMultiMatch( const QString& wildcard, const QString& testString, bool bCaseSensitive ); + +class t_DirectoryList; + +class FileAccess +{ +public: + FileAccess(); + ~FileAccess(); + FileAccess( const QString& name, bool bWantToWrite=false ); // name: local file or dirname or url (when supported) + void setFile( const QString& name, bool bWantToWrite=false ); + + bool isValid() const; + bool isFile() const; + bool isDir() const; + bool isSymLink() const; + bool exists() const; + long size() const; // Size as returned by stat(). + long sizeForReading(); // If the size can't be determined by stat() then the file is copied to a local temp file. + bool isReadable() const; + bool isWritable() const; + bool isExecutable() const; + bool isHidden() const; + QString readLink() const; + + QDateTime created() const; + QDateTime lastModified() const; + QDateTime lastRead() const; + + QString fileName() const; // Just the name-part of the path, without parent directories + QString filePath() const; // The path-string that was used during construction + QString prettyAbsPath() const; + KURL url() const; + QString absFilePath() const; + + bool isLocal() const; + + bool readFile(void* pDestBuffer, unsigned long maxLength ); + bool writeFile(const void* pSrcBuffer, unsigned long length ); + bool listDir( t_DirectoryList* pDirList, bool bRecursive, bool bFindHidden, + const QString& filePattern, const QString& fileAntiPattern, + const QString& dirAntiPattern, bool bFollowDirLinks, bool bUseCvsIgnore ); + bool copyFile( const QString& destUrl ); + bool createBackup( const QString& bakExtension ); + + static QString tempFileName(); + static bool removeTempFile( const QString& ); + bool removeFile(); + static bool removeFile( const QString& ); + static bool makeDir( const QString& ); + static bool removeDir( const QString& ); + static bool exists( const QString& ); + static QString cleanDirPath( const QString& ); + + //bool chmod( const QString& ); + bool rename( const QString& ); + static bool symLink( const QString& linkTarget, const QString& linkLocation ); + + void addPath( const QString& txt ); + QString getStatusText(); +private: + void setUdsEntry( const KIO::UDSEntry& e ); + KURL m_url; + bool m_bLocal; + bool m_bValidData; + + unsigned long m_size; + QDateTime m_modificationTime; + QDateTime m_accessTime; + QDateTime m_creationTime; + bool m_bReadable; + bool m_bWritable; + bool m_bExecutable; + bool m_bExists; + bool m_bFile; + bool m_bDir; + bool m_bSymLink; + bool m_bHidden; + long m_fileType; // for testing only + + QString m_linkTarget; + QString m_user; + QString m_group; + QString m_name; + QString m_path; + QString m_absFilePath; + QString m_localCopy; + QString m_statusText; // Might contain an error string, when the last operation didn't succeed. + + friend class FileAccessJobHandler; +}; + +class t_DirectoryList : public std::list +{}; + + +class FileAccessJobHandler : public QObject +{ + Q_OBJECT +public: + FileAccessJobHandler( FileAccess* pFileAccess ); + + bool get( void* pDestBuffer, long maxLength ); + bool put( const void* pSrcBuffer, long maxLength, bool bOverwrite, bool bResume=false, int permissions=-1 ); + bool stat(int detailLevel=2, bool bWantToWrite=false ); + bool copyFile( const QString& dest ); + bool rename( const QString& dest ); + bool listDir( t_DirectoryList* pDirList, bool bRecursive, bool bFindHidden, + const QString& filePattern, const QString& fileAntiPattern, + const QString& dirAntiPattern, bool bFollowDirLinks, bool bUseCvsIgnore ); + bool mkDir( const QString& dirName ); + bool rmDir( const QString& dirName ); + bool removeFile( const QString& dirName ); + bool symLink( const QString& linkTarget, const QString& linkLocation ); + +private: + FileAccess* m_pFileAccess; + bool m_bSuccess; + + // Data needed during Job + long m_transferredBytes; + char* m_pTransferBuffer; // Needed during get or put + long m_maxLength; + + QString m_filePattern; + QString m_fileAntiPattern; + QString m_dirAntiPattern; + t_DirectoryList* m_pDirList; + bool m_bFindHidden; + bool m_bRecursive; + bool m_bFollowDirLinks; + + bool scanLocalDirectory( const QString& dirName, t_DirectoryList* dirList ); + +private slots: + void slotStatResult( KIO::Job* ); + void slotSimpleJobResult( KIO::Job* pJob ); + void slotPutJobResult( KIO::Job* pJob ); + + void slotGetData(KIO::Job*,const QByteArray&); + void slotPutData(KIO::Job*, QByteArray&); + + void slotListDirInfoMessage( KIO::Job*, const QString& msg ); + void slotListDirProcessNewEntries( KIO::Job *, const KIO::UDSEntryList& l ); + + void slotPercent( KIO::Job* pJob, unsigned long percent ); +}; + +class ProgressDialog : public QDialog +{ + Q_OBJECT +public: + ProgressDialog( QWidget* pParent ); + + void setStayHidden( bool bStayHidden ); + void setInformation( const QString& info, bool bRedrawUpdate=true ); + void setInformation( const QString& info, double dCurrent, bool bRedrawUpdate=true ); + void setCurrent( double dCurrent, bool bRedrawUpdate=true ); + void step( bool bRedrawUpdate=true ); + void setMaxNofSteps( int dMaxNofSteps ); + void push(); + void pop(bool bRedrawUpdate=true); + + // The progressbar goes from 0 to 1 usually. + // By supplying a subrange transformation the subCurrent-values + // 0 to 1 will be transformed to dMin to dMax instead. + // Requirement: 0 < dMin < dMax < 1 + void setRangeTransformation( double dMin, double dMax ); + void setSubRangeTransformation( double dMin, double dMax ); + + void exitEventLoop(); + void enterEventLoop( KIO::Job* pJob, const QString& jobInfo ); + + bool wasCancelled(); + void show(); + void hide(); + + virtual void timerEvent(QTimerEvent*); +private: + + struct ProgressLevelData + { + ProgressLevelData() + { + m_dCurrent=0; m_maxNofSteps=1; m_dRangeMin=0; m_dRangeMax=1; + m_dSubRangeMin = 0; m_dSubRangeMax = 1; + } + double m_dCurrent; + int m_maxNofSteps; // when step() is used. + double m_dRangeMax; + double m_dRangeMin; + double m_dSubRangeMax; + double m_dSubRangeMin; + }; + std::list m_progressStack; + + int m_progressDelayTimer; + + KProgress* m_pProgressBar; + KProgress* m_pSubProgressBar; + QLabel* m_pInformation; + QLabel* m_pSubInformation; + QLabel* m_pSlowJobInfo; + QPushButton* m_pAbortButton; + void recalc(bool bRedrawUpdate); + QTime m_t1; + QTime m_t2; + bool m_bWasCancelled; + KIO::Job* m_pJob; + QString m_currentJobInfo; // Needed if the job doesn't stop after a reasonable time. + bool m_bStayHidden; +protected: + virtual void reject(); +private slots: + void delayedHide(); + void slotAbort(); +}; + +// When using the ProgressProxy you need not take care of the push and pop, except when explicit. +class ProgressProxy +{ +public: + ProgressProxy(); + ~ProgressProxy(); + + void setInformation( const QString& info, bool bRedrawUpdate=true ); + void setInformation( const QString& info, double dCurrent, bool bRedrawUpdate=true ); + void setCurrent( double dCurrent, bool bRedrawUpdate=true ); + void step( bool bRedrawUpdate=true ); + void setMaxNofSteps( int dMaxNofSteps ); + bool wasCancelled(); + void setRangeTransformation( double dMin, double dMax ); + void setSubRangeTransformation( double dMin, double dMax ); +private: +}; + +extern ProgressDialog* g_pProgressDialog; + + + +#endif + diff --git a/src/gnudiff_analyze.cpp b/src/gnudiff_analyze.cpp new file mode 100644 index 0000000..ea49b4e --- /dev/null +++ b/src/gnudiff_analyze.cpp @@ -0,0 +1,873 @@ +/* Analyze file differences for GNU DIFF. + + Modified for KDiff3 by Joachim Eibl 2003. + The original file was part of GNU DIFF. + + Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1998, 2001, 2002 + Free Software Foundation, Inc. + + GNU DIFF 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. + + GNU DIFF 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; see the file COPYING. + If not, write to the Free Software Foundation, + 51 Franklin Steet, Fifth Floor, Boston, MA 02110-1301, USA. */ + +/* The basic algorithm is described in: + "An O(ND) Difference Algorithm and its Variations", Eugene Myers, + Algorithmica Vol. 1 No. 2, 1986, pp. 251-266; + see especially section 4.2, which describes the variation used below. + Unless the --minimal option is specified, this code uses the TOO_EXPENSIVE + heuristic, by Paul Eggert, to limit the cost to O(N**1.5 log N) + at the price of producing suboptimal output for large inputs with + many differences. + + The basic algorithm was independently discovered as described in: + "Algorithms for Approximate String Matching", E. Ukkonen, + Information and Control Vol. 64, 1985, pp. 100-118. */ + +#define GDIFF_MAIN + +#include "gnudiff_diff.h" +//#include +#include + +static lin *xvec, *yvec; /* Vectors being compared. */ +static lin *fdiag; /* Vector, indexed by diagonal, containing + 1 + the X coordinate of the point furthest + along the given diagonal in the forward + search of the edit matrix. */ +static lin *bdiag; /* Vector, indexed by diagonal, containing + the X coordinate of the point furthest + along the given diagonal in the backward + search of the edit matrix. */ +static lin too_expensive; /* Edit scripts longer than this are too + expensive to compute. */ + +#define SNAKE_LIMIT 20 /* Snakes bigger than this are considered `big'. */ + + +struct partition +{ + lin xmid, ymid; /* Midpoints of this partition. */ + bool lo_minimal; /* Nonzero if low half will be analyzed minimally. */ + bool hi_minimal; /* Likewise for high half. */ +}; + +/* Find the midpoint of the shortest edit script for a specified + portion of the two files. + + Scan from the beginnings of the files, and simultaneously from the ends, + doing a breadth-first search through the space of edit-sequence. + When the two searches meet, we have found the midpoint of the shortest + edit sequence. + + If FIND_MINIMAL is nonzero, find the minimal edit script regardless + of expense. Otherwise, if the search is too expensive, use + heuristics to stop the search and report a suboptimal answer. + + Set PART->(xmid,ymid) to the midpoint (XMID,YMID). The diagonal number + XMID - YMID equals the number of inserted lines minus the number + of deleted lines (counting only lines before the midpoint). + Return the approximate edit cost; this is the total number of + lines inserted or deleted (counting only lines before the midpoint), + unless a heuristic is used to terminate the search prematurely. + + Set PART->lo_minimal to true iff the minimal edit script for the + left half of the partition is known; similarly for PART->hi_minimal. + + This function assumes that the first lines of the specified portions + of the two files do not match, and likewise that the last lines do not + match. The caller must trim matching lines from the beginning and end + of the portions it is going to specify. + + If we return the "wrong" partitions, + the worst this can do is cause suboptimal diff output. + It cannot cause incorrect diff output. */ + +lin +GnuDiff::diag (lin xoff, lin xlim, lin yoff, lin ylim, bool find_minimal, + struct partition *part) +{ + lin *const fd = fdiag; /* Give the compiler a chance. */ + lin *const bd = bdiag; /* Additional help for the compiler. */ + lin const *const xv = xvec; /* Still more help for the compiler. */ + lin const *const yv = yvec; /* And more and more . . . */ + lin const dmin = xoff - ylim; /* Minimum valid diagonal. */ + lin const dmax = xlim - yoff; /* Maximum valid diagonal. */ + lin const fmid = xoff - yoff; /* Center diagonal of top-down search. */ + lin const bmid = xlim - ylim; /* Center diagonal of bottom-up search. */ + lin fmin = fmid, fmax = fmid; /* Limits of top-down search. */ + lin bmin = bmid, bmax = bmid; /* Limits of bottom-up search. */ + lin c; /* Cost. */ + bool odd = (fmid - bmid) & 1; /* True if southeast corner is on an odd + diagonal with respect to the northwest. */ + + fd[fmid] = xoff; + bd[bmid] = xlim; + + for (c = 1;; ++c) + { + lin d; /* Active diagonal. */ + bool big_snake = 0; + + /* Extend the top-down search by an edit step in each diagonal. */ + fmin > dmin ? fd[--fmin - 1] = -1 : ++fmin; + fmax < dmax ? fd[++fmax + 1] = -1 : --fmax; + for (d = fmax; d >= fmin; d -= 2) + { + lin x, y, oldx, tlo = fd[d - 1], thi = fd[d + 1]; + + if (tlo >= thi) + x = tlo + 1; + else + x = thi; + oldx = x; + y = x - d; + while (x < xlim && y < ylim && xv[x] == yv[y]) + ++x, ++y; + if (x - oldx > SNAKE_LIMIT) + big_snake = 1; + fd[d] = x; + if (odd && bmin <= d && d <= bmax && bd[d] <= x) + { + part->xmid = x; + part->ymid = y; + part->lo_minimal = part->hi_minimal = 1; + return 2 * c - 1; + } + } + + /* Similarly extend the bottom-up search. */ + bmin > dmin ? bd[--bmin - 1] = LIN_MAX : ++bmin; + bmax < dmax ? bd[++bmax + 1] = LIN_MAX : --bmax; + for (d = bmax; d >= bmin; d -= 2) + { + lin x, y, oldx, tlo = bd[d - 1], thi = bd[d + 1]; + + if (tlo < thi) + x = tlo; + else + x = thi - 1; + oldx = x; + y = x - d; + while (x > xoff && y > yoff && xv[x - 1] == yv[y - 1]) + --x, --y; + if (oldx - x > SNAKE_LIMIT) + big_snake = 1; + bd[d] = x; + if (!odd && fmin <= d && d <= fmax && x <= fd[d]) + { + part->xmid = x; + part->ymid = y; + part->lo_minimal = part->hi_minimal = 1; + return 2 * c; + } + } + + if (find_minimal) + continue; + + /* Heuristic: check occasionally for a diagonal that has made + lots of progress compared with the edit distance. + If we have any such, find the one that has made the most + progress and return it as if it had succeeded. + + With this heuristic, for files with a constant small density + of changes, the algorithm is linear in the file size. */ + + if (200 < c && big_snake && speed_large_files) + { + lin best; + + best = 0; + for (d = fmax; d >= fmin; d -= 2) + { + lin dd = d - fmid; + lin x = fd[d]; + lin y = x - d; + lin v = (x - xoff) * 2 - dd; + if (v > 12 * (c + (dd < 0 ? -dd : dd))) + { + if (v > best + && xoff + SNAKE_LIMIT <= x && x < xlim + && yoff + SNAKE_LIMIT <= y && y < ylim) + { + /* We have a good enough best diagonal; + now insist that it end with a significant snake. */ + int k; + + for (k = 1; xv[x - k] == yv[y - k]; k++) + if (k == SNAKE_LIMIT) + { + best = v; + part->xmid = x; + part->ymid = y; + break; + } + } + } + } + if (best > 0) + { + part->lo_minimal = 1; + part->hi_minimal = 0; + return 2 * c - 1; + } + + best = 0; + for (d = bmax; d >= bmin; d -= 2) + { + lin dd = d - bmid; + lin x = bd[d]; + lin y = x - d; + lin v = (xlim - x) * 2 + dd; + if (v > 12 * (c + (dd < 0 ? -dd : dd))) + { + if (v > best + && xoff < x && x <= xlim - SNAKE_LIMIT + && yoff < y && y <= ylim - SNAKE_LIMIT) + { + /* We have a good enough best diagonal; + now insist that it end with a significant snake. */ + int k; + + for (k = 0; xv[x + k] == yv[y + k]; k++) + if (k == SNAKE_LIMIT - 1) + { + best = v; + part->xmid = x; + part->ymid = y; + break; + } + } + } + } + if (best > 0) + { + part->lo_minimal = 0; + part->hi_minimal = 1; + return 2 * c - 1; + } + } + + /* Heuristic: if we've gone well beyond the call of duty, + give up and report halfway between our best results so far. */ + if (c >= too_expensive) + { + lin fxybest, fxbest; + lin bxybest, bxbest; + + fxbest = bxbest = 0; /* Pacify `gcc -Wall'. */ + + /* Find forward diagonal that maximizes X + Y. */ + fxybest = -1; + for (d = fmax; d >= fmin; d -= 2) + { + lin x = MIN (fd[d], xlim); + lin y = x - d; + if (ylim < y) + x = ylim + d, y = ylim; + if (fxybest < x + y) + { + fxybest = x + y; + fxbest = x; + } + } + + /* Find backward diagonal that minimizes X + Y. */ + bxybest = LIN_MAX; + for (d = bmax; d >= bmin; d -= 2) + { + lin x = MAX (xoff, bd[d]); + lin y = x - d; + if (y < yoff) + x = yoff + d, y = yoff; + if (x + y < bxybest) + { + bxybest = x + y; + bxbest = x; + } + } + + /* Use the better of the two diagonals. */ + if ((xlim + ylim) - bxybest < fxybest - (xoff + yoff)) + { + part->xmid = fxbest; + part->ymid = fxybest - fxbest; + part->lo_minimal = 1; + part->hi_minimal = 0; + } + else + { + part->xmid = bxbest; + part->ymid = bxybest - bxbest; + part->lo_minimal = 0; + part->hi_minimal = 1; + } + return 2 * c - 1; + } + } +} + +/* Compare in detail contiguous subsequences of the two files + which are known, as a whole, to match each other. + + The results are recorded in the vectors files[N].changed, by + storing 1 in the element for each line that is an insertion or deletion. + + The subsequence of file 0 is [XOFF, XLIM) and likewise for file 1. + + Note that XLIM, YLIM are exclusive bounds. + All line numbers are origin-0 and discarded lines are not counted. + + If FIND_MINIMAL, find a minimal difference no matter how + expensive it is. */ + +void GnuDiff::compareseq (lin xoff, lin xlim, lin yoff, lin ylim, bool find_minimal) +{ + lin * const xv = xvec; /* Help the compiler. */ + lin * const yv = yvec; + + /* Slide down the bottom initial diagonal. */ + while (xoff < xlim && yoff < ylim && xv[xoff] == yv[yoff]) + ++xoff, ++yoff; + /* Slide up the top initial diagonal. */ + while (xlim > xoff && ylim > yoff && xv[xlim - 1] == yv[ylim - 1]) + --xlim, --ylim; + + /* Handle simple cases. */ + if (xoff == xlim) + while (yoff < ylim) + files[1].changed[files[1].realindexes[yoff++]] = 1; + else if (yoff == ylim) + while (xoff < xlim) + files[0].changed[files[0].realindexes[xoff++]] = 1; + else + { + lin c; + struct partition part; + + /* Find a point of correspondence in the middle of the files. */ + + c = diag (xoff, xlim, yoff, ylim, find_minimal, &part); + + if (c == 1) + { + /* This should be impossible, because it implies that + one of the two subsequences is empty, + and that case was handled above without calling `diag'. + Let's verify that this is true. */ + abort (); +#if 0 + /* The two subsequences differ by a single insert or delete; + record it and we are done. */ + if (part.xmid - part.ymid < xoff - yoff) + files[1].changed[files[1].realindexes[part.ymid - 1]] = 1; + else + files[0].changed[files[0].realindexes[part.xmid]] = 1; +#endif + } + else + { + /* Use the partitions to split this problem into subproblems. */ + compareseq (xoff, part.xmid, yoff, part.ymid, part.lo_minimal); + compareseq (part.xmid, xlim, part.ymid, ylim, part.hi_minimal); + } + } +} + +/* Discard lines from one file that have no matches in the other file. + + A line which is discarded will not be considered by the actual + comparison algorithm; it will be as if that line were not in the file. + The file's `realindexes' table maps virtual line numbers + (which don't count the discarded lines) into real line numbers; + this is how the actual comparison algorithm produces results + that are comprehensible when the discarded lines are counted. + + When we discard a line, we also mark it as a deletion or insertion + so that it will be printed in the output. */ + +void GnuDiff::discard_confusing_lines (struct file_data filevec[]) +{ + int f; + lin i; + char *discarded[2]; + lin *equiv_count[2]; + lin *p; + + /* Allocate our results. */ + p = (lin*)xmalloc ((filevec[0].buffered_lines + filevec[1].buffered_lines) + * (2 * sizeof *p)); + for (f = 0; f < 2; f++) + { + filevec[f].undiscarded = p; p += filevec[f].buffered_lines; + filevec[f].realindexes = p; p += filevec[f].buffered_lines; + } + + /* Set up equiv_count[F][I] as the number of lines in file F + that fall in equivalence class I. */ + + p = (lin*)zalloc (filevec[0].equiv_max * (2 * sizeof *p)); + equiv_count[0] = p; + equiv_count[1] = p + filevec[0].equiv_max; + + for (i = 0; i < filevec[0].buffered_lines; ++i) + ++equiv_count[0][filevec[0].equivs[i]]; + for (i = 0; i < filevec[1].buffered_lines; ++i) + ++equiv_count[1][filevec[1].equivs[i]]; + + /* Set up tables of which lines are going to be discarded. */ + + discarded[0] = (char*)zalloc (filevec[0].buffered_lines + + filevec[1].buffered_lines); + discarded[1] = discarded[0] + filevec[0].buffered_lines; + + /* Mark to be discarded each line that matches no line of the other file. + If a line matches many lines, mark it as provisionally discardable. */ + + for (f = 0; f < 2; f++) + { + size_t end = filevec[f].buffered_lines; + char *discards = discarded[f]; + lin *counts = equiv_count[1 - f]; + lin *equivs = filevec[f].equivs; + size_t many = 5; + size_t tem = end / 64; + + /* Multiply MANY by approximate square root of number of lines. + That is the threshold for provisionally discardable lines. */ + while ((tem = tem >> 2) > 0) + many *= 2; + + for (i = 0; i < (lin)end; i++) + { + lin nmatch; + if (equivs[i] == 0) + continue; + nmatch = counts[equivs[i]]; + if (nmatch == 0) + discards[i] = 1; + else if (nmatch > (lin)many) + discards[i] = 2; + } + } + + /* Don't really discard the provisional lines except when they occur + in a run of discardables, with nonprovisionals at the beginning + and end. */ + + for (f = 0; f < 2; f++) + { + lin end = filevec[f].buffered_lines; + register char *discards = discarded[f]; + + for (i = 0; i < end; i++) + { + /* Cancel provisional discards not in middle of run of discards. */ + if (discards[i] == 2) + discards[i] = 0; + else if (discards[i] != 0) + { + /* We have found a nonprovisional discard. */ + register lin j; + lin length; + lin provisional = 0; + + /* Find end of this run of discardable lines. + Count how many are provisionally discardable. */ + for (j = i; j < end; j++) + { + if (discards[j] == 0) + break; + if (discards[j] == 2) + ++provisional; + } + + /* Cancel provisional discards at end, and shrink the run. */ + while (j > i && discards[j - 1] == 2) + discards[--j] = 0, --provisional; + + /* Now we have the length of a run of discardable lines + whose first and last are not provisional. */ + length = j - i; + + /* If 1/4 of the lines in the run are provisional, + cancel discarding of all provisional lines in the run. */ + if (provisional * 4 > length) + { + while (j > i) + if (discards[--j] == 2) + discards[j] = 0; + } + else + { + register lin consec; + lin minimum = 1; + lin tem = length >> 2; + + /* MINIMUM is approximate square root of LENGTH/4. + A subrun of two or more provisionals can stand + when LENGTH is at least 16. + A subrun of 4 or more can stand when LENGTH >= 64. */ + while (0 < (tem >>= 2)) + minimum <<= 1; + minimum++; + + /* Cancel any subrun of MINIMUM or more provisionals + within the larger run. */ + for (j = 0, consec = 0; j < length; j++) + if (discards[i + j] != 2) + consec = 0; + else if (minimum == ++consec) + /* Back up to start of subrun, to cancel it all. */ + j -= consec; + else if (minimum < consec) + discards[i + j] = 0; + + /* Scan from beginning of run + until we find 3 or more nonprovisionals in a row + or until the first nonprovisional at least 8 lines in. + Until that point, cancel any provisionals. */ + for (j = 0, consec = 0; j < length; j++) + { + if (j >= 8 && discards[i + j] == 1) + break; + if (discards[i + j] == 2) + consec = 0, discards[i + j] = 0; + else if (discards[i + j] == 0) + consec = 0; + else + consec++; + if (consec == 3) + break; + } + + /* I advances to the last line of the run. */ + i += length - 1; + + /* Same thing, from end. */ + for (j = 0, consec = 0; j < length; j++) + { + if (j >= 8 && discards[i - j] == 1) + break; + if (discards[i - j] == 2) + consec = 0, discards[i - j] = 0; + else if (discards[i - j] == 0) + consec = 0; + else + consec++; + if (consec == 3) + break; + } + } + } + } + } + + /* Actually discard the lines. */ + for (f = 0; f < 2; f++) + { + char *discards = discarded[f]; + lin end = filevec[f].buffered_lines; + lin j = 0; + for (i = 0; i < end; ++i) + if (minimal || discards[i] == 0) + { + filevec[f].undiscarded[j] = filevec[f].equivs[i]; + filevec[f].realindexes[j++] = i; + } + else + filevec[f].changed[i] = 1; + filevec[f].nondiscarded_lines = j; + } + + free (discarded[0]); + free (equiv_count[0]); +} + +/* Adjust inserts/deletes of identical lines to join changes + as much as possible. + + We do something when a run of changed lines include a + line at one end and have an excluded, identical line at the other. + We are free to choose which identical line is included. + `compareseq' usually chooses the one at the beginning, + but usually it is cleaner to consider the following identical line + to be the "change". */ + +void GnuDiff::shift_boundaries (struct file_data filevec[]) +{ + int f; + + for (f = 0; f < 2; f++) + { + bool *changed = filevec[f].changed; + bool const *other_changed = filevec[1 - f].changed; + lin const *equivs = filevec[f].equivs; + lin i = 0; + lin j = 0; + lin i_end = filevec[f].buffered_lines; + + while (1) + { + lin runlength, start, corresponding; + + /* Scan forwards to find beginning of another run of changes. + Also keep track of the corresponding point in the other file. */ + + while (i < i_end && !changed[i]) + { + while (other_changed[j++]) + continue; + i++; + } + + if (i == i_end) + break; + + start = i; + + /* Find the end of this run of changes. */ + + while (changed[++i]) + continue; + while (other_changed[j]) + j++; + + do + { + /* Record the length of this run of changes, so that + we can later determine whether the run has grown. */ + runlength = i - start; + + /* Move the changed region back, so long as the + previous unchanged line matches the last changed one. + This merges with previous changed regions. */ + + while (start && equivs[start - 1] == equivs[i - 1]) + { + changed[--start] = 1; + changed[--i] = 0; + while (changed[start - 1]) + start--; + while (other_changed[--j]) + continue; + } + + /* Set CORRESPONDING to the end of the changed run, at the last + point where it corresponds to a changed run in the other file. + CORRESPONDING == I_END means no such point has been found. */ + corresponding = other_changed[j - 1] ? i : i_end; + + /* Move the changed region forward, so long as the + first changed line matches the following unchanged one. + This merges with following changed regions. + Do this second, so that if there are no merges, + the changed region is moved forward as far as possible. */ + + while (i != i_end && equivs[start] == equivs[i]) + { + changed[start++] = 0; + changed[i++] = 1; + while (changed[i]) + i++; + while (other_changed[++j]) + corresponding = i; + } + } + while (runlength != i - start); + + /* If possible, move the fully-merged run of changes + back to a corresponding run in the other file. */ + + while (corresponding < i) + { + changed[--start] = 1; + changed[--i] = 0; + while (other_changed[--j]) + continue; + } + } + } +} + +/* Cons an additional entry onto the front of an edit script OLD. + LINE0 and LINE1 are the first affected lines in the two files (origin 0). + DELETED is the number of lines deleted here from file 0. + INSERTED is the number of lines inserted here in file 1. + + If DELETED is 0 then LINE0 is the number of the line before + which the insertion was done; vice versa for INSERTED and LINE1. */ + +GnuDiff::change* GnuDiff::add_change (lin line0, lin line1, lin deleted, lin inserted, struct change *old) +{ + struct change *newChange = (change*) xmalloc (sizeof *newChange); + + newChange->line0 = line0; + newChange->line1 = line1; + newChange->inserted = inserted; + newChange->deleted = deleted; + newChange->link = old; + return newChange; +} + +/* Scan the tables of which lines are inserted and deleted, + producing an edit script in reverse order. */ + +GnuDiff::change* GnuDiff::build_reverse_script (struct file_data const filevec[]) +{ + struct change *script = 0; + bool *changed0 = filevec[0].changed; + bool *changed1 = filevec[1].changed; + lin len0 = filevec[0].buffered_lines; + lin len1 = filevec[1].buffered_lines; + + /* Note that changedN[len0] does exist, and is 0. */ + + lin i0 = 0, i1 = 0; + + while (i0 < len0 || i1 < len1) + { + if (changed0[i0] | changed1[i1]) + { + lin line0 = i0, line1 = i1; + + /* Find # lines changed here in each file. */ + while (changed0[i0]) ++i0; + while (changed1[i1]) ++i1; + + /* Record this change. */ + script = add_change (line0, line1, i0 - line0, i1 - line1, script); + } + + /* We have reached lines in the two files that match each other. */ + i0++, i1++; + } + + return script; +} + +/* Scan the tables of which lines are inserted and deleted, + producing an edit script in forward order. */ + +GnuDiff::change* GnuDiff::build_script (struct file_data const filevec[]) +{ + struct change *script = 0; + bool *changed0 = filevec[0].changed; + bool *changed1 = filevec[1].changed; + lin i0 = filevec[0].buffered_lines, i1 = filevec[1].buffered_lines; + + /* Note that changedN[-1] does exist, and is 0. */ + + while (i0 >= 0 || i1 >= 0) + { + if (changed0[i0 - 1] | changed1[i1 - 1]) + { + lin line0 = i0, line1 = i1; + + /* Find # lines changed here in each file. */ + while (changed0[i0 - 1]) --i0; + while (changed1[i1 - 1]) --i1; + + /* Record this change. */ + script = add_change (i0, i1, line0 - i0, line1 - i1, script); + } + + /* We have reached lines in the two files that match each other. */ + i0--, i1--; + } + + return script; +} + + +/* Report the differences of two files. */ +GnuDiff::change* GnuDiff::diff_2_files (struct comparison *cmp) +{ + lin diags; + int f; + //struct change *e, *p; + struct change *script; + int changes; + + read_files (cmp->file, files_can_be_treated_as_binary); + + { + /* Allocate vectors for the results of comparison: + a flag for each line of each file, saying whether that line + is an insertion or deletion. + Allocate an extra element, always 0, at each end of each vector. */ + + size_t s = cmp->file[0].buffered_lines + cmp->file[1].buffered_lines + 4; + bool *flag_space = (bool*)zalloc (s * sizeof(*flag_space)); + cmp->file[0].changed = flag_space + 1; + cmp->file[1].changed = flag_space + cmp->file[0].buffered_lines + 3; + + /* Some lines are obviously insertions or deletions + because they don't match anything. Detect them now, and + avoid even thinking about them in the main comparison algorithm. */ + + discard_confusing_lines (cmp->file); + + /* Now do the main comparison algorithm, considering just the + undiscarded lines. */ + + xvec = cmp->file[0].undiscarded; + yvec = cmp->file[1].undiscarded; + diags = (cmp->file[0].nondiscarded_lines + + cmp->file[1].nondiscarded_lines + 3); + fdiag = (lin*)xmalloc (diags * (2 * sizeof *fdiag)); + bdiag = fdiag + diags; + fdiag += cmp->file[1].nondiscarded_lines + 1; + bdiag += cmp->file[1].nondiscarded_lines + 1; + + /* Set TOO_EXPENSIVE to be approximate square root of input size, + bounded below by 256. */ + too_expensive = 1; + for (; diags != 0; diags >>= 2) + too_expensive <<= 1; + too_expensive = MAX (256, too_expensive); + + files[0] = cmp->file[0]; + files[1] = cmp->file[1]; + + compareseq (0, cmp->file[0].nondiscarded_lines, + 0, cmp->file[1].nondiscarded_lines, minimal); + + free (fdiag - (cmp->file[1].nondiscarded_lines + 1)); + + /* Modify the results slightly to make them prettier + in cases where that can validly be done. */ + + shift_boundaries (cmp->file); + + /* Get the results of comparison in the form of a chain + of `struct change's -- an edit script. */ + + script = build_script (cmp->file); + + changes = (script != 0); + + free (cmp->file[0].undiscarded); + + free (flag_space); + + for (f = 0; f < 2; f++) + { + free (cmp->file[f].equivs); + free (cmp->file[f].linbuf + cmp->file[f].linbuf_base); + } + } + + return script; +} diff --git a/src/gnudiff_diff.h b/src/gnudiff_diff.h new file mode 100644 index 0000000..930424e --- /dev/null +++ b/src/gnudiff_diff.h @@ -0,0 +1,355 @@ +/* Shared definitions for GNU DIFF + + Modified for KDiff3 by Joachim Eibl 2003, 2004, 2005. + The original file was part of GNU DIFF. + + Copyright (C) 1988, 1989, 1991, 1992, 1993, 1994, 1995, 1998, 2001, + 2002 Free Software Foundation, Inc. + + GNU DIFF 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. + + GNU DIFF 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; see the file COPYING. + If not, write to the Free Software Foundation, + 51 Franklin Steet, Fifth Floor, Boston, MA 02110-1301, USA. */ + +#ifndef GNUDIFF_DIFF_H +#define GNUDIFF_DIFF_H + +#include "gnudiff_system.h" + +#include +#include + +#define TAB_WIDTH 8 + +class GnuDiff +{ +public: +/* What kind of changes a hunk contains. */ +enum changes +{ + /* No changes: lines common to both files. */ + UNCHANGED, + + /* Deletes only: lines taken from just the first file. */ + OLD, + + /* Inserts only: lines taken from just the second file. */ + NEW, + + /* Both deletes and inserts: a hunk containing both old and new lines. */ + CHANGED +}; + +/* Variables for command line options */ + +/* Nonzero if output cannot be generated for identical files. */ +bool no_diff_means_no_output; + +/* Number of lines of context to show in each set of diffs. + This is zero when context is not to be shown. */ +lin context; + +/* Consider all files as text files (-a). + Don't interpret codes over 0177 as implying a "binary file". */ +bool text; + +/* The significance of white space during comparisons. */ +enum +{ + /* All white space is significant (the default). */ + IGNORE_NO_WHITE_SPACE, + + /* Ignore changes due to tab expansion (-E). */ + IGNORE_TAB_EXPANSION, + + /* Ignore changes in horizontal white space (-b). */ + IGNORE_SPACE_CHANGE, + + /* Ignore all horizontal white space (-w). */ + IGNORE_ALL_SPACE +} ignore_white_space; + +/* Ignore changes that affect only blank lines (-B). */ +bool ignore_blank_lines; + +/* Ignore changes that affect only numbers. (J. Eibl) */ +bool bIgnoreNumbers; +bool bIgnoreWhiteSpace; + +/* Files can be compared byte-by-byte, as if they were binary. + This depends on various options. */ +bool files_can_be_treated_as_binary; + +/* Ignore differences in case of letters (-i). */ +bool ignore_case; + +/* Ignore differences in case of letters in file names. */ +bool ignore_file_name_case; + +/* Regexp to identify function-header lines (-F). */ +//struct re_pattern_buffer function_regexp; + +/* Ignore changes that affect only lines matching this regexp (-I). */ +//struct re_pattern_buffer ignore_regexp; + +/* Say only whether files differ, not how (-q). */ +bool brief; + +/* Expand tabs in the output so the text lines up properly + despite the characters added to the front of each line (-t). */ +bool expand_tabs; + +/* Use a tab in the output, rather than a space, before the text of an + input line, so as to keep the proper alignment in the input line + without changing the characters in it (-T). */ +bool initial_tab; + +/* In directory comparison, specify file to start with (-S). + This is used for resuming an aborted comparison. + All file names less than this name are ignored. */ +const QChar *starting_file; + +/* Pipe each file's output through pr (-l). */ +bool paginate; + +/* Line group formats for unchanged, old, new, and changed groups. */ +const QChar *group_format[CHANGED + 1]; + +/* Line formats for unchanged, old, and new lines. */ +const QChar *line_format[NEW + 1]; + +/* If using OUTPUT_SDIFF print extra information to help the sdiff filter. */ +bool sdiff_merge_assist; + +/* Tell OUTPUT_SDIFF to show only the left version of common lines. */ +bool left_column; + +/* Tell OUTPUT_SDIFF to not show common lines. */ +bool suppress_common_lines; + +/* The half line width and column 2 offset for OUTPUT_SDIFF. */ +unsigned int sdiff_half_width; +unsigned int sdiff_column2_offset; + +/* Use heuristics for better speed with large files with a small + density of changes. */ +bool speed_large_files; + +/* Patterns that match file names to be excluded. */ +struct exclude *excluded; + +/* Don't discard lines. This makes things slower (sometimes much + slower) but will find a guaranteed minimal set of changes. */ +bool minimal; + + +/* The result of comparison is an "edit script": a chain of `struct change'. + Each `struct change' represents one place where some lines are deleted + and some are inserted. + + LINE0 and LINE1 are the first affected lines in the two files (origin 0). + DELETED is the number of lines deleted here from file 0. + INSERTED is the number of lines inserted here in file 1. + + If DELETED is 0 then LINE0 is the number of the line before + which the insertion was done; vice versa for INSERTED and LINE1. */ + +struct change +{ + struct change *link; /* Previous or next edit command */ + lin inserted; /* # lines of file 1 changed here. */ + lin deleted; /* # lines of file 0 changed here. */ + lin line0; /* Line number of 1st deleted line. */ + lin line1; /* Line number of 1st inserted line. */ + bool ignore; /* Flag used in context.c. */ +}; + +/* Structures that describe the input files. */ + +/* Data on one input file being compared. */ + +struct file_data { + /* Buffer in which text of file is read. */ + const QChar* buffer; + + /* Allocated size of buffer, in QChars. Always a multiple of + sizeof *buffer. */ + size_t bufsize; + + /* Number of valid bytes now in the buffer. */ + size_t buffered; + + /* Array of pointers to lines in the file. */ + const QChar **linbuf; + + /* linbuf_base <= buffered_lines <= valid_lines <= alloc_lines. + linebuf[linbuf_base ... buffered_lines - 1] are possibly differing. + linebuf[linbuf_base ... valid_lines - 1] contain valid data. + linebuf[linbuf_base ... alloc_lines - 1] are allocated. */ + lin linbuf_base, buffered_lines, valid_lines, alloc_lines; + + /* Pointer to end of prefix of this file to ignore when hashing. */ + const QChar *prefix_end; + + /* Count of lines in the prefix. + There are this many lines in the file before linbuf[0]. */ + lin prefix_lines; + + /* Pointer to start of suffix of this file to ignore when hashing. */ + const QChar *suffix_begin; + + /* Vector, indexed by line number, containing an equivalence code for + each line. It is this vector that is actually compared with that + of another file to generate differences. */ + lin *equivs; + + /* Vector, like the previous one except that + the elements for discarded lines have been squeezed out. */ + lin *undiscarded; + + /* Vector mapping virtual line numbers (not counting discarded lines) + to real ones (counting those lines). Both are origin-0. */ + lin *realindexes; + + /* Total number of nondiscarded lines. */ + lin nondiscarded_lines; + + /* Vector, indexed by real origin-0 line number, + containing TRUE for a line that is an insertion or a deletion. + The results of comparison are stored here. */ + bool *changed; + + /* 1 if at end of file. */ + bool eof; + + /* 1 more than the maximum equivalence value used for this or its + sibling file. */ + lin equiv_max; +}; + +/* Data on two input files being compared. */ + +struct comparison + { + struct file_data file[2]; + struct comparison const *parent; /* parent, if a recursive comparison */ + }; + +/* Describe the two files currently being compared. */ + +struct file_data files[2]; + +/* Stdio stream to output diffs to. */ + +FILE *outfile; + +/* Declare various functions. */ + +/* analyze.c */ +struct change* diff_2_files (struct comparison *); + +/* context.c */ +void print_context_header (struct file_data[], bool); +void print_context_script (struct change *, bool); + +/* dir.c */ +int diff_dirs (struct comparison const *, int (*) (struct comparison const *, const QChar *, const QChar *)); + +/* ed.c */ +void print_ed_script (struct change *); +void pr_forward_ed_script (struct change *); + +/* ifdef.c */ +void print_ifdef_script (struct change *); + +/* io.c */ +void file_block_read (struct file_data *, size_t); +bool read_files (struct file_data[], bool); + +/* normal.c */ +void print_normal_script (struct change *); + +/* rcs.c */ +void print_rcs_script (struct change *); + +/* side.c */ +void print_sdiff_script (struct change *); + +/* util.c */ +QChar *concat (const QChar *, const QChar *, const QChar *); +bool lines_differ ( const QChar *, size_t, const QChar *, size_t ); +lin translate_line_number (struct file_data const *, lin); +struct change *find_change (struct change *); +struct change *find_reverse_change (struct change *); +void *zalloc (size_t); +enum changes analyze_hunk (struct change *, lin *, lin *, lin *, lin *); +void begin_output (void); +void debug_script (struct change *); +void finish_output (void); +void message (const QChar *, const QChar *, const QChar *); +void message5 (const QChar *, const QChar *, const QChar *, const QChar *, const QChar *); +void output_1_line (const QChar *, const QChar *, const QChar *, const QChar *); +void perror_with_name (const QChar *); +void setup_output (const QChar *, const QChar *, bool); +void translate_range (struct file_data const *, lin, lin, long *, long *); + +/* version.c */ +//extern const QChar version_string[]; + +private: + // gnudiff_analyze.cpp + lin diag (lin xoff, lin xlim, lin yoff, lin ylim, bool find_minimal, struct partition *part); + void compareseq (lin xoff, lin xlim, lin yoff, lin ylim, bool find_minimal); + void discard_confusing_lines (struct file_data filevec[]); + void shift_boundaries (struct file_data filevec[]); + struct change * add_change (lin line0, lin line1, lin deleted, lin inserted, struct change *old); + struct change * build_reverse_script (struct file_data const filevec[]); + struct change* build_script (struct file_data const filevec[]); + + // gnudiff_io.cpp + void find_and_hash_each_line (struct file_data *current); + void find_identical_ends (struct file_data filevec[]); + + // gnudiff_xmalloc.cpp + void *xmalloc (size_t n); + void *xrealloc(void *p, size_t n); + void xalloc_die (void); + + inline bool isWhite( QChar c ) + { + return c==' ' || c=='\t' || c=='\r'; + } +}; // class GnuDiff + +# define XMALLOC(Type, N_items) ((Type *) xmalloc (sizeof (Type) * (N_items))) +# define XREALLOC(Ptr, Type, N_items) \ + ((Type *) xrealloc ((void *) (Ptr), sizeof (Type) * (N_items))) + +/* Declare and alloc memory for VAR of type TYPE. */ +# define NEW(Type, Var) Type *(Var) = XMALLOC (Type, 1) + +/* Free VAR only if non NULL. */ +# define XFREE(Var) \ + do { \ + if (Var) \ + free (Var); \ + } while (0) + +/* Return a pointer to a malloc'ed copy of the array SRC of NUM elements. */ +# define CCLONE(Src, Num) \ + (memcpy (xmalloc (sizeof (*Src) * (Num)), (Src), sizeof (*Src) * (Num))) + +/* Return a malloc'ed copy of SRC. */ +# define CLONE(Src) CCLONE (Src, 1) + +#endif diff --git a/src/gnudiff_io.cpp b/src/gnudiff_io.cpp new file mode 100644 index 0000000..922bce7 --- /dev/null +++ b/src/gnudiff_io.cpp @@ -0,0 +1,559 @@ +/* File I/O for GNU DIFF. + + Modified for KDiff3 by Joachim Eibl 2003, 2004, 2005. + The original file was part of GNU DIFF. + + Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1998, 2001, 2002 + Free Software Foundation, Inc. + + GNU DIFF 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. + + GNU DIFF 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; see the file COPYING. + If not, write to the Free Software Foundation, + 51 Franklin Steet, Fifth Floor, Boston, MA 02110-1301, USA. */ + +#include "gnudiff_diff.h" +#include + +/* Rotate an unsigned value to the left. */ +#define ROL(v, n) ((v) << (n) | (v) >> (sizeof (v) * CHAR_BIT - (n))) + +/* Given a hash value and a new character, return a new hash value. */ +#define HASH(h, c) ((c) + ROL (h, 7)) + +/* The type of a hash value. */ +typedef size_t hash_value; +verify (hash_value_is_unsigned, ! TYPE_SIGNED (hash_value)); + +/* Lines are put into equivalence classes of lines that match in lines_differ. + Each equivalence class is represented by one of these structures, + but only while the classes are being computed. + Afterward, each class is represented by a number. */ +struct equivclass +{ + lin next; /* Next item in this bucket. */ + hash_value hash; /* Hash of lines in this class. */ + const QChar *line; /* A line that fits this class. */ + size_t length; /* That line's length, not counting its newline. */ +}; + +/* Hash-table: array of buckets, each being a chain of equivalence classes. + buckets[-1] is reserved for incomplete lines. */ +static lin *buckets; + +/* Number of buckets in the hash table array, not counting buckets[-1]. */ +static size_t nbuckets; + +/* Array in which the equivalence classes are allocated. + The bucket-chains go through the elements in this array. + The number of an equivalence class is its index in this array. */ +static struct equivclass *equivs; + +/* Index of first free element in the array `equivs'. */ +static lin equivs_index; + +/* Number of elements allocated in the array `equivs'. */ +static lin equivs_alloc; + + +/* Check for binary files and compare them for exact identity. */ + +/* Return 1 if BUF contains a non text character. + SIZE is the number of characters in BUF. */ + +#define binary_file_p(buf, size) (memchr (buf, 0, size) != 0) + +/* Compare two lines (typically one from each input file) + according to the command line options. + For efficiency, this is invoked only when the lines do not match exactly + but an option like -i might cause us to ignore the difference. + Return nonzero if the lines differ. */ + +bool GnuDiff::lines_differ (const QChar *s1, size_t len1, const QChar *s2, size_t len2 ) +{ + const QChar *t1 = s1; + const QChar *t2 = s2; + const QChar *s1end = s1+len1; + const QChar *s2end = s2+len2; + + for ( ; ; ++t1, ++t2 ) + { + /* Test for exact char equality first, since it's a common case. */ + if ( t1!=s1end && t2!=s2end && *t1==*t2 ) + continue; + else + { + while ( t1!=s1end && + ( bIgnoreWhiteSpace && isWhite( *t1 ) || + bIgnoreNumbers && (t1->isDigit() || *t1=='-' || *t1=='.' ))) + { + ++t1; + } + + while ( t2 != s2end && + ( bIgnoreWhiteSpace && isWhite( *t2 ) || + bIgnoreNumbers && (t2->isDigit() || *t2=='-' || *t2=='.' ))) + { + ++t2; + } + + if ( t1!=s1end && t2!=s2end ) + { + if (ignore_case) + { /* Lowercase comparison. */ + if ( t1->lower() == t2->lower() ) + continue; + } + else if ( *t1 == *t2 ) + continue; + else + return true; + } + else if ( t1==s1end && t2==s2end ) + return false; + else + return true; + } + } + return false; +} + + +/* Split the file into lines, simultaneously computing the equivalence + class for each line. */ + +void GnuDiff::find_and_hash_each_line (struct file_data *current) +{ + hash_value h; + const QChar *p = current->prefix_end; + QChar c; + lin i, *bucket; + size_t length; + + /* Cache often-used quantities in local variables to help the compiler. */ + const QChar **linbuf = current->linbuf; + lin alloc_lines = current->alloc_lines; + lin line = 0; + lin linbuf_base = current->linbuf_base; + lin *cureqs = (lin*)xmalloc (alloc_lines * sizeof *cureqs); + struct equivclass *eqs = equivs; + lin eqs_index = equivs_index; + lin eqs_alloc = equivs_alloc; + const QChar *suffix_begin = current->suffix_begin; + const QChar *bufend = current->buffer + current->buffered; + bool diff_length_compare_anyway = + ignore_white_space != IGNORE_NO_WHITE_SPACE || bIgnoreNumbers; + bool same_length_diff_contents_compare_anyway = + diff_length_compare_anyway | ignore_case; + + while ( p < suffix_begin) + { + const QChar *ip = p; + + h = 0; + + /* Hash this line until we find a newline or bufend is reached. */ + if (ignore_case) + switch (ignore_white_space) + { + case IGNORE_ALL_SPACE: + while ( pbuffered_lines = line; + + for (i = 0; ; i++) + { + /* Record the line start for lines in the suffix that we care about. + Record one more line start than lines, + so that we can compute the length of any buffered line. */ + if (line == alloc_lines) + { + /* Double (alloc_lines - linbuf_base) by adding to alloc_lines. */ + if ((lin)(PTRDIFF_MAX / 3) <= alloc_lines + || (lin)(PTRDIFF_MAX / sizeof *cureqs) <= 2 * alloc_lines - linbuf_base + || (lin)(PTRDIFF_MAX / sizeof *linbuf) <= alloc_lines - linbuf_base) + xalloc_die (); + alloc_lines = 2 * alloc_lines - linbuf_base; + linbuf += linbuf_base; + linbuf = (const QChar**)xrealloc (linbuf, + (alloc_lines - linbuf_base) * sizeof *linbuf); + linbuf -= linbuf_base; + } + linbuf[line] = p; + + if ( p >= bufend) + break; + + if (context <= i && no_diff_means_no_output) + break; + + line++; + + while (plinbuf = linbuf; + current->valid_lines = line; + current->alloc_lines = alloc_lines; + current->equivs = cureqs; + equivs = eqs; + equivs_alloc = eqs_alloc; + equivs_index = eqs_index; +} + +/* We have found N lines in a buffer of size S; guess the + proportionate number of lines that will be found in a buffer of + size T. However, do not guess a number of lines so large that the + resulting line table might cause overflow in size calculations. */ +static lin +guess_lines (lin n, size_t s, size_t t) +{ + size_t guessed_bytes_per_line = n < 10 ? 32 : s / (n - 1); + lin guessed_lines = MAX (1, t / guessed_bytes_per_line); + return MIN (guessed_lines, (lin)(PTRDIFF_MAX / (2 * sizeof (QChar *) + 1) - 5)) + 5; +} + +/* Given a vector of two file_data objects, find the identical + prefixes and suffixes of each object. */ + +void GnuDiff::find_identical_ends (struct file_data filevec[]) +{ + /* Find identical prefix. */ + const QChar *p0, *p1, *buffer0, *buffer1; + p0 = buffer0 = filevec[0].buffer; + p1 = buffer1 = filevec[1].buffer; + size_t n0, n1; + n0 = filevec[0].buffered; + n1 = filevec[1].buffered; + const QChar* const pEnd0 = p0 + n0; + const QChar* const pEnd1 = p1 + n1; + + if (p0 == p1) + /* The buffers are the same; sentinels won't work. */ + p0 = p1 += n1; + else + { + /* Loop until first mismatch, or end. */ + while ( p0!=pEnd0 && p1!=pEnd1 && *p0 == *p1 ) + { + p0++; + p1++; + } + } + + /* Now P0 and P1 point at the first nonmatching characters. */ + + /* Skip back to last line-beginning in the prefix. */ + while (p0 != buffer0 && (p0[-1] != '\n' )) + p0--, p1--; + + /* Record the prefix. */ + filevec[0].prefix_end = p0; + filevec[1].prefix_end = p1; + + /* Find identical suffix. */ + + /* P0 and P1 point beyond the last chars not yet compared. */ + p0 = buffer0 + n0; + p1 = buffer1 + n1; + + const QChar *end0, *beg0; + end0 = p0; /* Addr of last char in file 0. */ + + /* Get value of P0 at which we should stop scanning backward: + this is when either P0 or P1 points just past the last char + of the identical prefix. */ + beg0 = filevec[0].prefix_end + (n0 < n1 ? 0 : n0 - n1); + + /* Scan back until chars don't match or we reach that point. */ + for (; p0 != beg0; p0--, p1--) + { + if (*p0 != *p1) + { + /* Point at the first char of the matching suffix. */ + beg0 = p0; + break; + } + } + + // Go to the next line (skip last line with a difference) + if ( p0 != end0 ) + { + if (*p0 != *p1) + ++p0; + while ( p0. */ + +static unsigned char const prime_offset[] = +{ + 0, 0, 1, 1, 3, 1, 3, 1, 5, 3, 3, 9, 3, 1, 3, 19, 15, 1, 5, 1, 3, 9, 3, + 15, 3, 39, 5, 39, 57, 3, 35, 1, 5, 9, 41, 31, 5, 25, 45, 7, 87, 21, + 11, 57, 17, 55, 21, 115, 59, 81, 27, 129, 47, 111, 33, 55, 5, 13, 27, + 55, 93, 1, 57, 25 +}; + +/* Verify that this host's size_t is not too wide for the above table. */ + +verify (enough_prime_offsets, + sizeof (size_t) * CHAR_BIT <= sizeof prime_offset); + +/* Given a vector of two file_data objects, read the file associated + with each one, and build the table of equivalence classes. + Return nonzero if either file appears to be a binary file. + If PRETEND_BINARY is nonzero, pretend they are binary regardless. */ + +bool +GnuDiff::read_files (struct file_data filevec[], bool /*pretend_binary*/) +{ + int i; + + find_identical_ends (filevec); + + equivs_alloc = filevec[0].alloc_lines + filevec[1].alloc_lines + 1; + if ((lin)(PTRDIFF_MAX / sizeof *equivs) <= equivs_alloc) + xalloc_die (); + equivs = (equivclass*)xmalloc (equivs_alloc * sizeof *equivs); + /* Equivalence class 0 is permanently safe for lines that were not + hashed. Real equivalence classes start at 1. */ + equivs_index = 1; + + /* Allocate (one plus) a prime number of hash buckets. Use a prime + number between 1/3 and 2/3 of the value of equiv_allocs, + approximately. */ + for (i = 9; 1 << i < equivs_alloc / 3; i++) + continue; + nbuckets = ((size_t) 1 << i) - prime_offset[i]; + if (PTRDIFF_MAX / sizeof *buckets <= nbuckets) + xalloc_die (); + buckets = (lin*)zalloc ((nbuckets + 1) * sizeof *buckets); + buckets++; + + for (i = 0; i < 2; i++) + find_and_hash_each_line (&filevec[i]); + + filevec[0].equiv_max = filevec[1].equiv_max = equivs_index; + + free (equivs); + free (buckets - 1); + + return 0; +} diff --git a/src/gnudiff_system.h b/src/gnudiff_system.h new file mode 100644 index 0000000..1d2286e --- /dev/null +++ b/src/gnudiff_system.h @@ -0,0 +1,123 @@ +/* System dependent declarations. + + Modified for KDiff3 by Joachim Eibl 2003. + The original file was part of GNU DIFF. + + Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1998, 2001, 2002 + Free Software Foundation, Inc. + + GNU DIFF 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. + + GNU DIFF 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; see the file COPYING. + If not, write to the Free Software Foundation, + 51 Franklin Steet, Fifth Floor, Boston, MA 02110-1301, USA. */ + +#ifndef GNUDIFF_SYSTEM_H +#define GNUDIFF_SYSTEM_H + +//#include + + + +/* Don't bother to support K&R C compilers any more; it's not worth + the trouble. These macros prevent some library modules from being + compiled in K&R C mode. */ +#define PARAMS(Args) Args +#define PROTOTYPES 1 + +/* Verify a requirement at compile-time (unlike assert, which is runtime). */ +#define verify(name, assertion) struct name { char a[(assertion) ? 1 : -1]; } + + +/* Determine whether an integer type is signed, and its bounds. + This code assumes two's (or one's!) complement with no holes. */ + +/* The extra casts work around common compiler bugs, + e.g. Cray C 5.0.3.0 when t == time_t. */ +#ifndef TYPE_SIGNED +# define TYPE_SIGNED(t) (! ((t) 0 < (t) -1)) +#endif +#ifndef TYPE_MINIMUM +# define TYPE_MINIMUM(t) ((t) (TYPE_SIGNED (t) \ + ? ~ (t) 0 << (sizeof (t) * CHAR_BIT - 1) \ + : (t) 0)) +#endif +#ifndef TYPE_MAXIMUM +# define TYPE_MAXIMUM(t) ((t) (~ (t) 0 - TYPE_MINIMUM (t))) +#endif + +#include +#include + + +# include +#ifndef EXIT_SUCCESS +# define EXIT_SUCCESS 0 +#endif +#if !EXIT_FAILURE +# undef EXIT_FAILURE /* Sony NEWS-OS 4.0C defines EXIT_FAILURE to 0. */ +# define EXIT_FAILURE 1 +#endif +#define EXIT_TROUBLE 2 + +#include +#ifndef SSIZE_MAX +# define SSIZE_MAX TYPE_MAXIMUM (ssize_t) +#endif + +#ifndef PTRDIFF_MAX +# define PTRDIFF_MAX TYPE_MAXIMUM (ptrdiff_t) +#endif +#ifndef SIZE_MAX +# define SIZE_MAX TYPE_MAXIMUM (size_t) +#endif +#ifndef UINTMAX_MAX +# define UINTMAX_MAX TYPE_MAXIMUM (uintmax_t) +#endif + +#include +#include +#include + +/* CTYPE_DOMAIN (C) is nonzero if the unsigned char C can safely be given + as an argument to macros like `isspace'. */ +# define CTYPE_DOMAIN(c) 1 +#define ISPRINT(c) (CTYPE_DOMAIN (c) && isprint (c)) +#define ISSPACE(c) (CTYPE_DOMAIN (c) && isspace (c)) + +# define TOLOWER(c) tolower (c) + +/* ISDIGIT differs from isdigit, as follows: + - Its arg may be any int or unsigned int; it need not be an unsigned char. + - It's guaranteed to evaluate its argument exactly once. + - It's typically faster. + POSIX 1003.1-2001 says that only '0' through '9' are digits. + Prefer ISDIGIT to isdigit unless it's important to use the locale's + definition of `digit' even when the host does not conform to POSIX. */ +#define ISDIGIT(c) ((unsigned int) (c) - '0' <= 9) + +#undef MIN +#undef MAX +#define MIN(a, b) ((a) <= (b) ? (a) : (b)) +#define MAX(a, b) ((a) >= (b) ? (a) : (b)) + + +/* The integer type of a line number. Since files are read into main + memory, ptrdiff_t should be wide enough. */ + +typedef ptrdiff_t lin; +#define LIN_MAX PTRDIFF_MAX +verify (lin_is_signed, TYPE_SIGNED (lin)); +verify (lin_is_wide_enough, sizeof (ptrdiff_t) <= sizeof (lin)); +verify (lin_is_printable_as_long, sizeof (lin) <= sizeof (long)); + +#endif diff --git a/src/gnudiff_xmalloc.cpp b/src/gnudiff_xmalloc.cpp new file mode 100644 index 0000000..858faba --- /dev/null +++ b/src/gnudiff_xmalloc.cpp @@ -0,0 +1,88 @@ +/* xmalloc.c -- malloc with out of memory checking + + Modified for KDiff3 by Joachim Eibl 2003. + The original file was part of GNU DIFF. + + Copyright (C) 1990-1999, 2000, 2002 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, write to the Free Software Foundation, + Inc., 51 Franklin Steet, Fifth Floor, Boston, MA 02110-1301, USA. */ + +#if HAVE_CONFIG_H +# include +#endif + +#include + + +#include +#include + + +#ifndef EXIT_FAILURE +# define EXIT_FAILURE 1 +#endif + +#include "gnudiff_diff.h" +/* If non NULL, call this function when memory is exhausted. */ +//void (*xalloc_fail_func) PARAMS ((void)) = 0; +void (*xalloc_fail_func)(void) = 0; + + +void GnuDiff::xalloc_die (void) +{ + if (xalloc_fail_func) + (*xalloc_fail_func) (); + //error (exit_failure, 0, "%s", _(xalloc_msg_memory_exhausted)); + /* The `noreturn' cannot be given to error, since it may return if + its first argument is 0. To help compilers understand the + xalloc_die does terminate, call exit. */ + exit (EXIT_FAILURE); +} + +/* Allocate N bytes of memory dynamically, with error checking. */ + +void * +GnuDiff::xmalloc (size_t n) +{ + void *p; + + p = malloc (n == 0 ? 1 : n); // There are systems where malloc returns 0 for n==0. + if (p == 0) + xalloc_die (); + return p; +} + +/* Change the size of an allocated block of memory P to N bytes, + with error checking. */ + +void * +GnuDiff::xrealloc (void *p, size_t n) +{ + p = realloc (p, n==0 ? 1 : n); + if (p == 0) + xalloc_die (); + return p; +} + + +/* Yield a new block of SIZE bytes, initialized to zero. */ + +void * +GnuDiff::zalloc (size_t size) +{ + void *p = xmalloc (size); + memset (p, 0, size); + return p; +} diff --git a/src/hi16-app-kdiff3.png b/src/hi16-app-kdiff3.png new file mode 100644 index 0000000..50e3397 Binary files /dev/null and b/src/hi16-app-kdiff3.png differ diff --git a/src/hi32-app-kdiff3.png b/src/hi32-app-kdiff3.png new file mode 100644 index 0000000..cd269b2 Binary files /dev/null and b/src/hi32-app-kdiff3.png differ diff --git a/src/kdiff3.cpp b/src/kdiff3.cpp new file mode 100644 index 0000000..5bc2102 --- /dev/null +++ b/src/kdiff3.cpp @@ -0,0 +1,992 @@ +/*************************************************************************** + kdiff3.cpp - description + ------------------- + begin : Don Jul 11 12:31:29 CEST 2002 + copyright : (C) 2002-2007 by Joachim Eibl + email : joachim.eibl at gmx.de + ***************************************************************************/ + +/*************************************************************************** + * * + * 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. * + * * + ***************************************************************************/ + +#include "difftextwindow.h" +#include "mergeresultwindow.h" + +#include + +// include files for QT +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +// include files for KDE +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +//#include + +// application specific includes +#include "kdiff3.h" +#include "optiondialog.h" +#include "fileaccess.h" +#include "kdiff3_part.h" +#include "directorymergewindow.h" +#include "smalldialogs.h" + +#define ID_STATUS_MSG 1 + +KActionCollection* KDiff3App::actionCollection() +{ + if ( m_pKDiff3Shell==0 ) + return m_pKDiff3Part->actionCollection(); + else + return m_pKDiff3Shell->actionCollection(); +} + +KStatusBar* KDiff3App::statusBar() +{ + if ( m_pKDiff3Shell==0 ) + return 0; + else + return m_pKDiff3Shell->statusBar(); +} + +KToolBar* KDiff3App::toolBar(const char* toolBarId ) +{ + if ( m_pKDiff3Shell==0 ) + return 0; + else + return m_pKDiff3Shell->toolBar( toolBarId ); +} + +bool KDiff3App::isPart() +{ + return m_pKDiff3Shell==0; +} + +bool KDiff3App::isFileSaved() +{ + return m_bFileSaved; +} + +KDiff3App::KDiff3App(QWidget* pParent, const char* name, KDiff3Part* pKDiff3Part ) + :QSplitter(pParent, name) //previously KMainWindow +{ + m_pKDiff3Part = pKDiff3Part; + m_pKDiff3Shell = dynamic_cast(pParent); + + setCaption( "KDiff3" ); + + m_pMainSplitter = 0; + m_pDirectoryMergeWindow = 0; + m_pCornerWidget = 0; + m_pMainWidget = 0; + m_pDiffTextWindow1 = 0; + m_pDiffTextWindow2 = 0; + m_pDiffTextWindow3 = 0; + m_pDiffTextWindowFrame1 = 0; + m_pDiffTextWindowFrame2 = 0; + m_pDiffTextWindowFrame3 = 0; + m_pDiffWindowSplitter = 0; + m_pOverview = 0; + m_bTripleDiff = false; + m_pMergeResultWindow = 0; + m_pMergeWindowFrame = 0; + m_bOutputModified = false; + m_bFileSaved = false; + m_bTimerBlock = false; + m_pHScrollBar = 0; + + // Needed before any file operations via FileAccess happen. + if (!g_pProgressDialog) + { + g_pProgressDialog = new ProgressDialog(0); + g_pProgressDialog->setStayHidden( true ); + } + + // All default values must be set before calling readOptions(). + m_pOptionDialog = new OptionDialog( m_pKDiff3Shell!=0, this ); + connect( m_pOptionDialog, SIGNAL(applyClicked()), this, SLOT(slotRefresh()) ); + + m_pOptionDialog->readOptions( isPart() ? m_pKDiff3Part->instance()->config() : kapp->config() ); + + // Option handling: Only when pParent==0 (no parent) + KCmdLineArgs *args = isPart() ? 0 : KCmdLineArgs::parsedArgs(); + + if (args) + { + QString s; + QString title; + if ( args->isSet("confighelp") ) + { + s = m_pOptionDialog->calcOptionHelp(); + title = i18n("Current Configuration:"); + } + else + { + s = m_pOptionDialog->parseOptions( args->getOptionList("cs") ); + title = i18n("Config Option Error:"); + } + if (!s.isEmpty()) + { +#ifdef _WIN32 + // A windows program has no console + //KMessageBox::information(0, s,i18n("KDiff3-Usage")); + QDialog* pDialog = new QDialog(this,"",true,Qt::WDestructiveClose); + pDialog->setCaption(title); + QVBoxLayout* pVBoxLayout = new QVBoxLayout( pDialog ); + QTextEdit* pTextEdit = new QTextEdit(pDialog); + pTextEdit->setText(s); + pTextEdit->setReadOnly(true); + pTextEdit->setWordWrap(QTextEdit::NoWrap); + pVBoxLayout->addWidget(pTextEdit); + pDialog->resize(600,400); + pDialog->exec(); +#else + std::cerr << title.latin1() << std::endl; + std::cerr << s.latin1() << std::endl; +#endif + exit(1); + } + } + + m_sd1.setOptionDialog(m_pOptionDialog); + m_sd2.setOptionDialog(m_pOptionDialog); + m_sd3.setOptionDialog(m_pOptionDialog); + + if (args!=0) + { + m_outputFilename = args->getOption("output"); + if ( m_outputFilename.isEmpty() ) + m_outputFilename = args->getOption("out"); + } + + m_bAutoFlag = args!=0 && args->isSet("auto"); + m_bAutoMode = m_bAutoFlag || m_pOptionDialog->m_bAutoSaveAndQuitOnMergeWithoutConflicts; + if ( m_bAutoMode && m_outputFilename.isEmpty() ) + { + if ( m_bAutoFlag ) + { + //KMessageBox::information(this, i18n("Option --auto used, but no output file specified.")); + std::cerr << i18n("Option --auto used, but no output file specified.").ascii()<setStayHidden( m_bAutoMode ); + + if ( m_outputFilename.isEmpty() && args!=0 && args->isSet("merge") ) + { + m_outputFilename = "unnamed.txt"; + m_bDefaultFilename = true; + } + else + m_bDefaultFilename = false; + + g_bAutoSolve = args!=0 && !args->isSet("qall"); // Note that this is effective only once. + + if ( args!=0 ) + { + m_sd1.setFilename( args->getOption("base") ); + if ( m_sd1.isEmpty() ) + { + if ( args->count() > 0 ) m_sd1.setFilename( args->url(0).url() ); // args->arg(0) + if ( args->count() > 1 ) m_sd2.setFilename( args->url(1).url() ); + if ( args->count() > 2 ) m_sd3.setFilename( args->url(2).url() ); + } + else + { + if ( args->count() > 0 ) m_sd2.setFilename( args->url(0).url() ); + if ( args->count() > 1 ) m_sd3.setFilename( args->url(1).url() ); + } + + + QCStringList aliasList = args->getOptionList("fname"); + QCStringList::Iterator ali = aliasList.begin(); + + QString an1 = args->getOption("L1"); + if ( !an1.isEmpty() ) { m_sd1.setAliasName(an1); } + else if ( ali != aliasList.end() ) { m_sd1.setAliasName(*ali); ++ali; } + + QString an2 = args->getOption("L2"); + if ( !an2.isEmpty() ) { m_sd2.setAliasName(an2); } + else if ( ali != aliasList.end() ) { m_sd2.setAliasName(*ali); ++ali; } + + QString an3 = args->getOption("L3"); + if ( !an3.isEmpty() ) { m_sd3.setAliasName(an3); } + else if ( ali != aliasList.end() ) { m_sd3.setAliasName(*ali); ++ali; } + } + /////////////////////////////////////////////////////////////////// + // call inits to invoke all other construction parts + initActions(actionCollection()); + initStatusBar(); + + m_pFindDialog = new FindDialog( this ); + connect( m_pFindDialog, SIGNAL(findNext()), this, SLOT(slotEditFindNext())); + + autoAdvance->setChecked( m_pOptionDialog->m_bAutoAdvance ); + showWhiteSpaceCharacters->setChecked( m_pOptionDialog->m_bShowWhiteSpaceCharacters ); + showWhiteSpace->setChecked( m_pOptionDialog->m_bShowWhiteSpace ); + showWhiteSpaceCharacters->setEnabled( m_pOptionDialog->m_bShowWhiteSpace ); + showLineNumbers->setChecked( m_pOptionDialog->m_bShowLineNumbers ); + wordWrap->setChecked( m_pOptionDialog->m_bWordWrap ); + if ( ! isPart() ) + { + viewToolBar->setChecked( m_pOptionDialog->m_bShowToolBar ); + viewStatusBar->setChecked( m_pOptionDialog->m_bShowStatusBar ); + slotViewToolBar(); + slotViewStatusBar(); + if( toolBar("mainToolBar")!=0 ) + toolBar("mainToolBar")->setBarPos( (KToolBar::BarPosition) m_pOptionDialog->m_toolBarPos ); +/* QSize size = m_pOptionDialog->m_geometry; + QPoint pos = m_pOptionDialog->m_position; + if(!size.isEmpty()) + { + m_pKDiff3Shell->resize( size ); + QRect visibleRect = QRect( pos, size ) & QApplication::desktop()->rect(); + if ( visibleRect.width()>100 && visibleRect.height()>100 ) + m_pKDiff3Shell->move( pos ); + }*/ + } + slotRefresh(); + + m_pMainSplitter = this; //new QSplitter(this); + m_pMainSplitter->setOrientation( Vertical ); +// setCentralWidget( m_pMainSplitter ); + m_pDirectoryMergeSplitter = new QSplitter( m_pMainSplitter ); + m_pDirectoryMergeSplitter->setOrientation( Horizontal ); + m_pDirectoryMergeWindow = new DirectoryMergeWindow( m_pDirectoryMergeSplitter, m_pOptionDialog, + KApplication::kApplication()->iconLoader() ); + m_pDirectoryMergeInfo = new DirectoryMergeInfo( m_pDirectoryMergeSplitter ); + m_pDirectoryMergeWindow->setDirectoryMergeInfo( m_pDirectoryMergeInfo ); + connect( m_pDirectoryMergeWindow, SIGNAL(startDiffMerge(QString,QString,QString,QString,QString,QString,QString,TotalDiffStatus*)), + this, SLOT( slotFileOpen2(QString,QString,QString,QString,QString,QString,QString,TotalDiffStatus*))); + connect( m_pDirectoryMergeWindow, SIGNAL(selectionChanged()), this, SLOT(slotUpdateAvailabilities())); + connect( m_pDirectoryMergeWindow, SIGNAL(currentChanged(QListViewItem*)), this, SLOT(slotUpdateAvailabilities())); + connect( m_pDirectoryMergeWindow, SIGNAL(checkIfCanContinue(bool*)), this, SLOT(slotCheckIfCanContinue(bool*))); + connect( m_pDirectoryMergeWindow, SIGNAL(updateAvailabilities()), this, SLOT(slotUpdateAvailabilities())); + connect( m_pDirectoryMergeWindow, SIGNAL(statusBarMessage(const QString&)), this, SLOT(slotStatusMsg(const QString&))); + + m_pDirectoryMergeWindow->initDirectoryMergeActions( this, actionCollection() ); + + if ( args!=0 ) args->clear(); // Free up some memory. + + if (m_pKDiff3Shell==0) + { + completeInit(); + } +} + + +void KDiff3App::completeInit( const QString& fn1, const QString& fn2, const QString& fn3 ) +{ + if (m_pKDiff3Shell!=0) + { + QSize size=m_pOptionDialog->m_geometry; + QPoint pos=m_pOptionDialog->m_position; + if(!size.isEmpty()) + { + m_pKDiff3Shell->resize( size ); + QRect visibleRect = QRect( pos, size ) & QApplication::desktop()->rect(); + if ( visibleRect.width()>100 && visibleRect.height()>100 ) + m_pKDiff3Shell->move( pos ); + if (!m_bAutoMode) + { + if ( m_pOptionDialog->m_bMaximised ) + m_pKDiff3Shell->showMaximized(); + else + m_pKDiff3Shell->show(); + } + } + } + if ( ! fn1.isEmpty() ) { m_sd1.setFilename(fn1); } + if ( ! fn2.isEmpty() ) { m_sd2.setFilename(fn2); } + if ( ! fn3.isEmpty() ) { m_sd3.setFilename(fn3); } + + bool bSuccess = improveFilenames(false); + + if ( m_bAutoFlag && m_bAutoMode && m_bDirCompare ) + { + std::cerr << i18n("Option --auto ignored for directory comparison.").ascii()<hide(); + + init( m_bAutoMode ); + if ( m_bAutoMode ) + { + SourceData* pSD=0; + if ( m_sd3.isEmpty() ) + { + if ( m_totalDiffStatus.bBinaryAEqB ){ pSD = &m_sd1; } + } + else + { + if ( m_totalDiffStatus.bBinaryBEqC ){ pSD = &m_sd3; } // B==C (assume A is old) + else if ( m_totalDiffStatus.bBinaryAEqB ){ pSD = &m_sd3; } // assuming C has changed + else if ( m_totalDiffStatus.bBinaryAEqC ){ pSD = &m_sd2; } // assuming B has changed + } + + if ( pSD!=0 ) + { + // Save this file directly, not via the merge result window. + bool bSuccess = false; + FileAccess fa( m_outputFilename ); + if ( m_pOptionDialog->m_bDmCreateBakFiles && fa.exists() ) + { + QString newName = m_outputFilename + ".orig"; + if ( FileAccess::exists( newName ) ) FileAccess::removeFile( newName ); + if ( !FileAccess::exists( newName ) ) fa.rename( newName ); + } + + bSuccess = pSD->saveNormalDataAs( m_outputFilename ); + if ( bSuccess ) ::exit(0); + else KMessageBox::error( this, i18n("Saving failed.") ); + } + else if ( m_pMergeResultWindow->getNrOfUnsolvedConflicts() == 0 ) + { + bool bSuccess = m_pMergeResultWindow->saveDocument( m_pMergeResultWindowTitle->getFileName(), m_pMergeResultWindowTitle->getEncoding() ); + if ( bSuccess ) ::exit(0); + } + } + } + m_bAutoMode = false; + + if (m_pKDiff3Shell) + { + if ( m_pOptionDialog->m_bMaximised ) + m_pKDiff3Shell->showMaximized(); + else + m_pKDiff3Shell->show(); + } + + g_pProgressDialog->setStayHidden( false ); + + if (statusBar() !=0 ) + statusBar()->setSizeGripEnabled(true); + + slotClipboardChanged(); // For initialisation. + + slotUpdateAvailabilities(); + + if ( ! m_bDirCompare && m_pKDiff3Shell!=0 ) + { + bool bFileOpenError = false; + if ( ! m_sd1.isEmpty() && !m_sd1.hasData() || + ! m_sd2.isEmpty() && !m_sd2.hasData() || + ! m_sd3.isEmpty() && !m_sd3.hasData() ) + { + QString text( i18n("Opening of these files failed:") ); + text += "\n\n"; + if ( ! m_sd1.isEmpty() && !m_sd1.hasData() ) + text += " - " + m_sd1.getAliasName() + "\n"; + if ( ! m_sd2.isEmpty() && !m_sd2.hasData() ) + text += " - " + m_sd2.getAliasName() + "\n"; + if ( ! m_sd3.isEmpty() && !m_sd3.hasData() ) + text += " - " + m_sd3.getAliasName() + "\n"; + + KMessageBox::sorry( this, text, i18n("File Open Error") ); + bFileOpenError = true; + } + + if ( m_sd1.isEmpty() || m_sd2.isEmpty() || bFileOpenError ) + slotFileOpen(); + } + else if ( !bSuccess ) // Directory open failed + { + slotFileOpen(); + } +} + +KDiff3App::~KDiff3App() +{ + +} + +void KDiff3App::initActions( KActionCollection* ac ) +{ + if (ac==0) KMessageBox::error(0, "actionCollection==0"); + + fileOpen = KStdAction::open(this, SLOT(slotFileOpen()), ac); + fileOpen->setStatusText(i18n("Opens documents for comparison...")); + + fileReload = new KAction(i18n("Reload"), /*QIconSet(QPixmap(reloadIcon)),*/ Key_F5, this, SLOT(slotReload()), ac, "file_reload"); + + fileSave = KStdAction::save(this, SLOT(slotFileSave()), ac); + fileSave->setStatusText(i18n("Saves the merge result. All conflicts must be solved!")); + fileSaveAs = KStdAction::saveAs(this, SLOT(slotFileSaveAs()), ac); + fileSaveAs->setStatusText(i18n("Saves the current document as...")); + filePrint = KStdAction::print(this, SLOT(slotFilePrint()), ac); + filePrint->setStatusText(i18n("Print the differences")); + fileQuit = KStdAction::quit(this, SLOT(slotFileQuit()), ac); + fileQuit->setStatusText(i18n("Quits the application")); + editCut = KStdAction::cut(this, SLOT(slotEditCut()), ac); + editCut->setStatusText(i18n("Cuts the selected section and puts it to the clipboard")); + editCopy = KStdAction::copy(this, SLOT(slotEditCopy()), ac); + editCopy->setStatusText(i18n("Copies the selected section to the clipboard")); + editPaste = KStdAction::paste(this, SLOT(slotEditPaste()), ac); + editPaste->setStatusText(i18n("Pastes the clipboard contents to actual position")); + editSelectAll = KStdAction::selectAll(this, SLOT(slotEditSelectAll()), ac); + editSelectAll->setStatusText(i18n("Select everything in current window")); + editFind = KStdAction::find(this, SLOT(slotEditFind()), ac); + editFind->setStatusText(i18n("Search for a string")); + editFindNext = KStdAction::findNext(this, SLOT(slotEditFindNext()), ac); + editFindNext->setStatusText(i18n("Search again for the string")); + viewToolBar = KStdAction::showToolbar(this, SLOT(slotViewToolBar()), ac); + viewToolBar->setStatusText(i18n("Enables/disables the toolbar")); + viewStatusBar = KStdAction::showStatusbar(this, SLOT(slotViewStatusBar()), ac); + viewStatusBar->setStatusText(i18n("Enables/disables the statusbar")); + KStdAction::keyBindings(this, SLOT(slotConfigureKeys()), ac); + KAction* pAction = KStdAction::preferences(this, SLOT(slotConfigure()), ac ); + if ( isPart() ) + pAction->setText(i18n("Configure KDiff3...")); + + +#include "xpm/downend.xpm" +#include "xpm/currentpos.xpm" +#include "xpm/down1arrow.xpm" +#include "xpm/down2arrow.xpm" +#include "xpm/upend.xpm" +#include "xpm/up1arrow.xpm" +#include "xpm/up2arrow.xpm" +#include "xpm/prevunsolved.xpm" +#include "xpm/nextunsolved.xpm" +#include "xpm/iconA.xpm" +#include "xpm/iconB.xpm" +#include "xpm/iconC.xpm" +#include "xpm/autoadvance.xpm" +#include "xpm/showwhitespace.xpm" +#include "xpm/showwhitespacechars.xpm" +#include "xpm/showlinenumbers.xpm" +//#include "reload.xpm" + + goCurrent = new KAction(i18n("Go to Current Delta"), QIconSet(QPixmap(currentpos)), CTRL+Key_Space, this, SLOT(slotGoCurrent()), ac, "go_current"); + goTop = new KAction(i18n("Go to First Delta"), QIconSet(QPixmap(upend)), 0, this, SLOT(slotGoTop()), ac, "go_top"); + goBottom = new KAction(i18n("Go to Last Delta"), QIconSet(QPixmap(downend)), 0, this, SLOT(slotGoBottom()), ac, "go_bottom"); + QString omitsWhitespace = ".\n" + i18n("(Skips white space differences when \"Show White Space\" is disabled.)"); + QString includeWhitespace = ".\n" + i18n("(Does not skip white space differences even when \"Show White Space\" is disabled.)"); + goPrevDelta = new KAction(i18n("Go to Previous Delta"), QIconSet(QPixmap(up1arrow)), CTRL+Key_Up, this, SLOT(slotGoPrevDelta()), ac, "go_prev_delta"); + goPrevDelta->setToolTip( goPrevDelta->text() + omitsWhitespace ); + goNextDelta = new KAction(i18n("Go to Next Delta"), QIconSet(QPixmap(down1arrow)), CTRL+Key_Down, this, SLOT(slotGoNextDelta()), ac, "go_next_delta"); + goNextDelta->setToolTip( goNextDelta->text() + omitsWhitespace ); + goPrevConflict = new KAction(i18n("Go to Previous Conflict"), QIconSet(QPixmap(up2arrow)), CTRL+Key_PageUp, this, SLOT(slotGoPrevConflict()), ac, "go_prev_conflict"); + goPrevConflict->setToolTip( goPrevConflict->text() + omitsWhitespace ); + goNextConflict = new KAction(i18n("Go to Next Conflict"), QIconSet(QPixmap(down2arrow)), CTRL+Key_PageDown, this, SLOT(slotGoNextConflict()), ac, "go_next_conflict"); + goNextConflict->setToolTip( goNextConflict->text() + omitsWhitespace ); + goPrevUnsolvedConflict = new KAction(i18n("Go to Previous Unsolved Conflict"), QIconSet(QPixmap(prevunsolved)), 0, this, SLOT(slotGoPrevUnsolvedConflict()), ac, "go_prev_unsolved_conflict"); + goPrevUnsolvedConflict->setToolTip( goPrevUnsolvedConflict->text() + includeWhitespace ); + goNextUnsolvedConflict = new KAction(i18n("Go to Next Unsolved Conflict"), QIconSet(QPixmap(nextunsolved)), 0, this, SLOT(slotGoNextUnsolvedConflict()), ac, "go_next_unsolved_conflict"); + goNextUnsolvedConflict->setToolTip( goNextUnsolvedConflict->text() + includeWhitespace ); + chooseA = new KToggleAction(i18n("Select Line(s) From A"), QIconSet(QPixmap(iconA)), CTRL+Key_1, this, SLOT(slotChooseA()), ac, "merge_choose_a"); + chooseB = new KToggleAction(i18n("Select Line(s) From B"), QIconSet(QPixmap(iconB)), CTRL+Key_2, this, SLOT(slotChooseB()), ac, "merge_choose_b"); + chooseC = new KToggleAction(i18n("Select Line(s) From C"), QIconSet(QPixmap(iconC)), CTRL+Key_3, this, SLOT(slotChooseC()), ac, "merge_choose_c"); + autoAdvance = new KToggleAction(i18n("Automatically Go to Next Unsolved Conflict After Source Selection"), QIconSet(QPixmap(autoadvance)), 0, this, SLOT(slotAutoAdvanceToggled()), ac, "merge_autoadvance"); + + showWhiteSpaceCharacters = new KToggleAction(i18n("Show Space && Tabulator Characters for Differences"), QIconSet(QPixmap(showwhitespacechars)), 0, this, SLOT(slotShowWhiteSpaceToggled()), ac, "diff_show_whitespace_characters"); + showWhiteSpace = new KToggleAction(i18n("Show White Space"), QIconSet(QPixmap(showwhitespace)), 0, this, SLOT(slotShowWhiteSpaceToggled()), ac, "diff_show_whitespace"); + + showLineNumbers = new KToggleAction(i18n("Show Line Numbers"), QIconSet(QPixmap(showlinenumbers)), 0, this, SLOT(slotShowLineNumbersToggled()), ac, "diff_showlinenumbers"); + chooseAEverywhere = new KAction(i18n("Choose A Everywhere"), CTRL+SHIFT+Key_1, this, SLOT(slotChooseAEverywhere()), ac, "merge_choose_a_everywhere"); + chooseBEverywhere = new KAction(i18n("Choose B Everywhere"), CTRL+SHIFT+Key_2, this, SLOT(slotChooseBEverywhere()), ac, "merge_choose_b_everywhere"); + chooseCEverywhere = new KAction(i18n("Choose C Everywhere"), CTRL+SHIFT+Key_3, this, SLOT(slotChooseCEverywhere()), ac, "merge_choose_c_everywhere"); + chooseAForUnsolvedConflicts = new KAction(i18n("Choose A for All Unsolved Conflicts"), 0, this, SLOT(slotChooseAForUnsolvedConflicts()), ac, "merge_choose_a_for_unsolved_conflicts"); + chooseBForUnsolvedConflicts = new KAction(i18n("Choose B for All Unsolved Conflicts"), 0, this, SLOT(slotChooseBForUnsolvedConflicts()), ac, "merge_choose_b_for_unsolved_conflicts"); + chooseCForUnsolvedConflicts = new KAction(i18n("Choose C for All Unsolved Conflicts"), 0, this, SLOT(slotChooseCForUnsolvedConflicts()), ac, "merge_choose_c_for_unsolved_conflicts"); + chooseAForUnsolvedWhiteSpaceConflicts = new KAction(i18n("Choose A for All Unsolved Whitespace Conflicts"), 0, this, SLOT(slotChooseAForUnsolvedWhiteSpaceConflicts()), ac, "merge_choose_a_for_unsolved_whitespace_conflicts"); + chooseBForUnsolvedWhiteSpaceConflicts = new KAction(i18n("Choose B for All Unsolved Whitespace Conflicts"), 0, this, SLOT(slotChooseBForUnsolvedWhiteSpaceConflicts()), ac, "merge_choose_b_for_unsolved_whitespace_conflicts"); + chooseCForUnsolvedWhiteSpaceConflicts = new KAction(i18n("Choose C for All Unsolved Whitespace Conflicts"), 0, this, SLOT(slotChooseCForUnsolvedWhiteSpaceConflicts()), ac, "merge_choose_c_for_unsolved_whitespace_conflicts"); + autoSolve = new KAction(i18n("Automatically Solve Simple Conflicts"), 0, this, SLOT(slotAutoSolve()), ac, "merge_autosolve"); + unsolve = new KAction(i18n("Set Deltas to Conflicts"), 0, this, SLOT(slotUnsolve()), ac, "merge_autounsolve"); + mergeRegExp = new KAction(i18n("Run Regular Expression Auto Merge"), 0, this, SLOT(slotRegExpAutoMerge()),ac, "merge_regexp_automerge" ); + mergeHistory = new KAction(i18n("Automatically Solve History Conflicts"), 0, this, SLOT(slotMergeHistory()), ac, "merge_versioncontrol_history" ); + splitDiff = new KAction(i18n("Split Diff At Selection"), 0, this, SLOT(slotSplitDiff()), ac, "merge_splitdiff"); + joinDiffs = new KAction(i18n("Join Selected Diffs"), 0, this, SLOT(slotJoinDiffs()), ac, "merge_joindiffs"); + + showWindowA = new KToggleAction(i18n("Show Window A"), 0, this, SLOT(slotShowWindowAToggled()), ac, "win_show_a"); + showWindowB = new KToggleAction(i18n("Show Window B"), 0, this, SLOT(slotShowWindowBToggled()), ac, "win_show_b"); + showWindowC = new KToggleAction(i18n("Show Window C"), 0, this, SLOT(slotShowWindowCToggled()), ac, "win_show_c"); + winFocusNext = new KAction(i18n("Focus Next Window"), ALT+Key_Right, this, SLOT(slotWinFocusNext()), ac, "win_focus_next"); + + overviewModeNormal = new KToggleAction(i18n("Normal Overview"), 0, this, SLOT(slotOverviewNormal()), ac, "diff_overview_normal"); + overviewModeAB = new KToggleAction(i18n("A vs. B Overview"), 0, this, SLOT(slotOverviewAB()), ac, "diff_overview_ab"); + overviewModeAC = new KToggleAction(i18n("A vs. C Overview"), 0, this, SLOT(slotOverviewAC()), ac, "diff_overview_ac"); + overviewModeBC = new KToggleAction(i18n("B vs. C Overview"), 0, this, SLOT(slotOverviewBC()), ac, "diff_overview_bc"); + wordWrap = new KToggleAction(i18n("Word Wrap Diff Windows"), 0, this, SLOT(slotWordWrapToggled()), ac, "diff_wordwrap"); + addManualDiffHelp = new KAction(i18n("Add Manual Diff Alignment"), Qt::CTRL+Qt::Key_Y, this, SLOT(slotAddManualDiffHelp()), ac, "diff_add_manual_diff_help"); + clearManualDiffHelpList = new KAction(i18n("Clear All Manual Diff Alignments"), Qt::CTRL+Qt::SHIFT+Qt::Key_Y, this, SLOT(slotClearManualDiffHelpList()), ac, "diff_clear_manual_diff_help_list"); + +#ifdef _WIN32 + new KAction(i18n("Focus Next Window"), Qt::CTRL+Qt::Key_Tab, this, SLOT(slotWinFocusNext()), ac, "win_focus_next", false, false); +#endif + winFocusPrev = new KAction(i18n("Focus Prev Window"), Qt::ALT+Qt::Key_Left, this, SLOT(slotWinFocusPrev()), ac, "win_focus_prev"); + winToggleSplitOrientation = new KAction(i18n("Toggle Split Orientation"), 0, this, SLOT(slotWinToggleSplitterOrientation()), ac, "win_toggle_split_orientation"); + + dirShowBoth = new KToggleAction(i18n("Dir && Text Split Screen View"), 0, this, SLOT(slotDirShowBoth()), ac, "win_dir_show_both"); + dirShowBoth->setChecked( true ); + dirViewToggle = new KAction(i18n("Toggle Between Dir && Text View"), 0, this, SLOT(slotDirViewToggle()), actionCollection(), "win_dir_view_toggle"); + + m_pMergeEditorPopupMenu = new QPopupMenu( this ); + chooseA->plug( m_pMergeEditorPopupMenu ); + chooseB->plug( m_pMergeEditorPopupMenu ); + chooseC->plug( m_pMergeEditorPopupMenu ); +} + + +void KDiff3App::showPopupMenu( const QPoint& point ) +{ + m_pMergeEditorPopupMenu->popup( point ); +} + +void KDiff3App::initStatusBar() +{ + /////////////////////////////////////////////////////////////////// + // STATUSBAR + if (statusBar() !=0 ) + statusBar()->message( i18n("Ready.") ); +} + +void KDiff3App::saveOptions( KConfig* config ) +{ + if ( !m_bAutoMode ) + { + if (!isPart()) + { + m_pOptionDialog->m_bMaximised = m_pKDiff3Shell->isMaximized(); + if( ! m_pKDiff3Shell->isMaximized() && m_pKDiff3Shell->isVisible() ) + { + m_pOptionDialog->m_geometry = m_pKDiff3Shell->size(); + m_pOptionDialog->m_position = m_pKDiff3Shell->pos(); + } + if ( toolBar("mainToolBar")!=0 ) + m_pOptionDialog->m_toolBarPos = (int) toolBar("mainToolBar")->barPos(); + } + + m_pOptionDialog->saveOptions( config ); + } +} + + + + +bool KDiff3App::queryClose() +{ + saveOptions( isPart() ? m_pKDiff3Part->instance()->config() : kapp->config() ); + + if(m_bOutputModified) + { + int result = KMessageBox::warningYesNoCancel(this, + i18n("The merge result hasn't been saved."), + i18n("Warning"), i18n("Save && Quit"), i18n("Quit Without Saving") ); + if ( result==KMessageBox::Cancel ) + return false; + else if ( result==KMessageBox::Yes ) + { + slotFileSave(); + if ( m_bOutputModified ) + { + KMessageBox::sorry(this, i18n("Saving the merge result failed."), i18n("Warning") ); + return false; + } + } + } + + m_bOutputModified = false; + + if ( m_pDirectoryMergeWindow->isDirectoryMergeInProgress() ) + { + int result = KMessageBox::warningYesNo(this, + i18n("You are currently doing a directory merge. Are you sure, you want to abort?"), + i18n("Warning"), i18n("Quit"), i18n("Continue Merging") ); + if ( result!=KMessageBox::Yes ) + return false; + } + + return true; +} + + +///////////////////////////////////////////////////////////////////// +// SLOT IMPLEMENTATION +///////////////////////////////////////////////////////////////////// + + +void KDiff3App::slotFileSave() +{ + if ( m_bDefaultFilename ) + { + slotFileSaveAs(); + } + else + { + slotStatusMsg(i18n("Saving file...")); + + bool bSuccess = m_pMergeResultWindow->saveDocument( m_outputFilename, m_pMergeResultWindowTitle->getEncoding() ); + if ( bSuccess ) + { + m_bFileSaved = true; + m_bOutputModified = false; + if ( m_bDirCompare ) + m_pDirectoryMergeWindow->mergeResultSaved(m_outputFilename); + } + + slotStatusMsg(i18n("Ready.")); + } +} + +void KDiff3App::slotFileSaveAs() +{ + slotStatusMsg(i18n("Saving file with a new filename...")); + + QString s = KFileDialog::getSaveURL( QDir::currentDirPath(), 0, this, i18n("Save As...") ).url(); + if(!s.isEmpty()) + { + m_outputFilename = s; + m_pMergeResultWindowTitle->setFileName( m_outputFilename ); + bool bSuccess = m_pMergeResultWindow->saveDocument( m_outputFilename, m_pMergeResultWindowTitle->getEncoding() ); + if ( bSuccess ) + { + m_bOutputModified = false; + if ( m_bDirCompare ) + m_pDirectoryMergeWindow->mergeResultSaved(m_outputFilename); + } + //setCaption(url.fileName(),doc->isModified()); + + m_bDefaultFilename = false; + } + + slotStatusMsg(i18n("Ready.")); +} + + +void printDiffTextWindow( MyPainter& painter, const QRect& view, const QString& headerText, DiffTextWindow* pDiffTextWindow, int line, int linesPerPage, QColor fgColor ) +{ + QRect clipRect = view; + clipRect.setTop(0); + painter.setClipRect( clipRect ); + painter.translate( view.left() , 0 ); + QFontMetrics fm = painter.fontMetrics(); + //if ( fm.width(headerText) > view.width() ) + { + // A simple wrapline algorithm + int l=0; + for (unsigned int p=0; pview.width()) + { + --i; + break; + } + //QString s2 = s.left(i); + painter.drawText( 0, l*fm.height() + fm.ascent(), s.left(i) ); + p+=i; + ++l; + } + painter.setPen( fgColor ); + painter.drawLine( 0, view.top()-2, view.width(), view.top()-2 ); + } + + painter.translate( 0, view.top() ); + pDiffTextWindow->print( painter, view, line, linesPerPage ); + painter.resetXForm(); +} + +void KDiff3App::slotFilePrint() +{ + if ( !m_pDiffTextWindow1 ) + return; + + KPrinter printer; + + int firstSelectionD3LIdx = -1; + int lastSelectionD3LIdx = -1; + if ( m_pDiffTextWindow1 ) { m_pDiffTextWindow1->getSelectionRange(&firstSelectionD3LIdx, &lastSelectionD3LIdx, eD3LLineCoords); } + if ( firstSelectionD3LIdx<0 && m_pDiffTextWindow2 ) { m_pDiffTextWindow2->getSelectionRange(&firstSelectionD3LIdx, &lastSelectionD3LIdx, eD3LLineCoords); } + if ( firstSelectionD3LIdx<0 && m_pDiffTextWindow3 ) { m_pDiffTextWindow3->getSelectionRange(&firstSelectionD3LIdx, &lastSelectionD3LIdx, eD3LLineCoords); } +#ifdef KREPLACEMENTS_H // Currently PrintSelection is not supported in KDEs print dialog. + if ( firstSelectionD3LIdx>=0 ) + { + printer.setOptionEnabled(KPrinter::PrintSelection,true); + } +#endif + + printer.setPageSelection(KPrinter::ApplicationSide); + printer.setMinMax(1,10000); + printer.setCurrentPage(10000); + + int currentFirstLine = m_pDiffTextWindow1->getFirstLine(); + int currentFirstD3LIdx = m_pDiffTextWindow1->convertLineToDiff3LineIdx( currentFirstLine ); + + // do some printer initialization + printer.setFullPage( false ); + + // initialize the printer using the print dialog + if ( printer.setup( this ) ) + { + slotStatusMsg( i18n( "Printing..." ) ); + // create a painter to paint on the printer object + MyPainter painter( 0, m_pOptionDialog->m_bRightToLeftLanguage, width(), fontMetrics().width('W') ); + + // start painting + if( !painter.begin( &printer ) ) { // paint on printer + slotStatusMsg( i18n( "Printing aborted." ) ); + return; + } + QPaintDeviceMetrics metrics( painter.device() ); + int dpiy = metrics.logicalDpiY(); + int columnDistance = (int) ( (0.5/2.54)*dpiy ); // 0.5 cm between the columns + + int columns = m_bTripleDiff ? 3 : 2; + int columnWidth = ( metrics.width() - (columns-1)*columnDistance ) / columns; + + QFont f = m_pOptionDialog->m_font; + f.setPointSizeFloat(f.pointSizeFloat()-1); // Print with slightly smaller font. + painter.setFont( f ); + QFontMetrics fm = painter.fontMetrics(); + + QString topLineText = i18n("Top line"); + + //int headerWidth = fm.width( m_sd1.getAliasName() + ", "+topLineText+": 01234567" ); + int headerLines = fm.width( m_sd1.getAliasName() + ", "+topLineText+": 01234567" )/columnWidth+1; + + int headerMargin = headerLines * fm.height() + 3; // Text + one horizontal line + int footerMargin = fm.height() + 3; + + QRect view ( 0, headerMargin, metrics.width(), metrics.height() - (headerMargin + footerMargin) ); + QRect view1( 0*(columnWidth + columnDistance), view.top(), columnWidth, view.height() ); + QRect view2( 1*(columnWidth + columnDistance), view.top(), columnWidth, view.height() ); + QRect view3( 2*(columnWidth + columnDistance), view.top(), columnWidth, view.height() ); + + int linesPerPage = view.height() / fm.height(); + int charactersPerLine = columnWidth / fm.width("W"); + if ( m_pOptionDialog->m_bWordWrap ) + { + // For printing the lines are wrapped differently (this invalidates the first line) + recalcWordWrap( charactersPerLine ); + } + + int totalNofLines = max2(m_pDiffTextWindow1->getNofLines(), m_pDiffTextWindow2->getNofLines()); + if ( m_bTripleDiff && m_pDiffTextWindow3) + totalNofLines = max2(totalNofLines, m_pDiffTextWindow3->getNofLines()); + + QValueList pageList = printer.pageList(); + + bool bPrintCurrentPage=false; + bool bFirstPrintedPage = false; + + bool bPrintSelection = false; + int totalNofPages = (totalNofLines+linesPerPage-1) / linesPerPage; + int line=-1; + int selectionEndLine = -1; + +#ifdef KREPLACEMENTS_H + if ( printer.printRange()==KPrinter::AllPages ) + { + pageList.clear(); + for(int i=0; i=0 ) + { + line = m_pDiffTextWindow1->convertDiff3LineIdxToLine( firstSelectionD3LIdx ); + selectionEndLine = m_pDiffTextWindow1->convertDiff3LineIdxToLine( lastSelectionD3LIdx+1 ); + totalNofPages = (selectionEndLine-line+linesPerPage-1) / linesPerPage; + } + } + + int page = 1; + + QValueList::iterator pageListIt = pageList.begin(); + for(;;) + { + if (!bPrintSelection) + { + if (pageListIt==pageList.end()) + break; + page = *pageListIt; + line = (page - 1) * linesPerPage; + if (page==10000) // This means "Print the current page" + { + bPrintCurrentPage=true; + // Detect the first visible line in the window. + line = m_pDiffTextWindow1->convertDiff3LineIdxToLine( currentFirstD3LIdx ); + } + } + else + { + if ( line>=selectionEndLine ) + { + break; + } + else + { + if ( selectionEndLine-line < linesPerPage ) + linesPerPage=selectionEndLine-line; + } + } + if (line>=0 && linem_colorA ); + QString headerText1 = m_sd1.getAliasName() + ", "+topLineText+": " + QString::number(m_pDiffTextWindow1->calcTopLineInFile(line)+1); + printDiffTextWindow( painter, view1, headerText1, m_pDiffTextWindow1, line, linesPerPage, m_pOptionDialog->m_fgColor ); + + painter.setPen( m_pOptionDialog->m_colorB ); + QString headerText2 = m_sd2.getAliasName() + ", "+topLineText+": " + QString::number(m_pDiffTextWindow2->calcTopLineInFile(line)+1); + printDiffTextWindow( painter, view2, headerText2, m_pDiffTextWindow2, line, linesPerPage, m_pOptionDialog->m_fgColor ); + + if ( m_bTripleDiff && m_pDiffTextWindow3 ) + { + painter.setPen( m_pOptionDialog->m_colorC ); + QString headerText3 = m_sd3.getAliasName() + ", "+topLineText+": " + QString::number(m_pDiffTextWindow3->calcTopLineInFile(line)+1); + printDiffTextWindow( painter, view3, headerText3, m_pDiffTextWindow3, line, linesPerPage, m_pOptionDialog->m_fgColor ); + } + painter.setClipping(false); + + painter.setPen( m_pOptionDialog->m_fgColor ); + painter.drawLine( 0, view.bottom()+3, view.width(), view.bottom()+3 ); + QString s = bPrintCurrentPage ? QString("") + : QString::number( page ) + "/" + QString::number(totalNofPages); + if ( bPrintSelection ) s+=" (" + i18n("Selection") + ")"; + painter.drawText( (view.right() - painter.fontMetrics().width( s ))/2, + view.bottom() + painter.fontMetrics().ascent() + 5, s ); + + bFirstPrintedPage = true; + } + + if ( bPrintSelection ) + { + line+=linesPerPage; + ++page; + } + else + { + ++pageListIt; + } + } + + painter.end(); + + if ( m_pOptionDialog->m_bWordWrap ) + { + recalcWordWrap(); + m_pDiffVScrollBar->setValue( m_pDiffTextWindow1->convertDiff3LineIdxToLine( currentFirstD3LIdx ) ); + } + + slotStatusMsg( i18n( "Printing completed." ) ); + } + else + { + slotStatusMsg( i18n( "Printing aborted." ) ); + } +} + +void KDiff3App::slotFileQuit() +{ + slotStatusMsg(i18n("Exiting...")); + + if( !queryClose() ) + return; // Don't quit + + KApplication::exit( isFileSaved() ? 0 : 1 ); +} + + + +void KDiff3App::slotViewToolBar() +{ + slotStatusMsg(i18n("Toggling toolbar...")); + m_pOptionDialog->m_bShowToolBar = viewToolBar->isChecked(); + /////////////////////////////////////////////////////////////////// + // turn Toolbar on or off + if ( toolBar("mainToolBar") !=0 ) + { + if(!m_pOptionDialog->m_bShowToolBar) + { + toolBar("mainToolBar")->hide(); + } + else + { + toolBar("mainToolBar")->show(); + } + } + + slotStatusMsg(i18n("Ready.")); +} + +void KDiff3App::slotViewStatusBar() +{ + slotStatusMsg(i18n("Toggle the statusbar...")); + m_pOptionDialog->m_bShowStatusBar = viewStatusBar->isChecked(); + /////////////////////////////////////////////////////////////////// + //turn Statusbar on or off + if (statusBar() !=0 ) + { + if(!viewStatusBar->isChecked()) + { + statusBar()->hide(); + } + else + { + statusBar()->show(); + } + } + + slotStatusMsg(i18n("Ready.")); +} + + +void KDiff3App::slotStatusMsg(const QString &text) +{ + /////////////////////////////////////////////////////////////////// + // change status message permanently + if (statusBar() !=0 ) + { + statusBar()->clear(); + statusBar()->message( text ); + } +} + + + + +#include "kdiff3.moc" diff --git a/src/kdiff3.desktop b/src/kdiff3.desktop new file mode 100644 index 0000000..8901094 --- /dev/null +++ b/src/kdiff3.desktop @@ -0,0 +1,91 @@ + +[Desktop Entry] +Encoding=UTF-8 +Name=KDiff3 +Name[hi]=के-डिफ3 +Name[sv]=Kdiff3 +Name[ta]=கேடிஃபà¯3 +Name[xx]=xxKDiff3xx +GenericName=Diff/Patch Frontend +GenericName[ar]=واجهة أمامية لبرامج Diff/Patch +GenericName[bg]=Ð˜Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñ Ð½Ð° Diff/Patch +GenericName[bs]=Interfejs za Diff/Patch +GenericName[ca]=Interfície per a diff/patch +GenericName[cs]=Rozhraní pro Diff/Patch +GenericName[cy]=Blaen Gwahaniaethau/Clytiau +GenericName[da]=Forende for diff/patch +GenericName[de]=Graphische Oberfläche zu Diff/Patch +GenericName[el]=ΣÏστημα υποστήÏιξης χÏήστη για τα Diff/Patch +GenericName[es]=Interfaz Diff/Patch +GenericName[et]=Võrdlemise ja liitmise rakendus +GenericName[fr]=Interface graphique à diff / patch +GenericName[ga]=Comhéadan Diff/Patch +GenericName[gl]=Interface para Diff/Patch +GenericName[hi]=डिफ/पैच फà¥à¤°à¤¨à¥à¤Ÿà¤à¤£à¥à¤¡ +GenericName[hu]=Grafikus diff/patch +GenericName[is]=Diff/Patch viðmót +GenericName[it]=Interfaccia per diff/patch +GenericName[ja]=Diff/Patch フロントエンド +GenericName[lt]=Diff/Patch naudotojo sÄ…saja +GenericName[ms]=Bahagian Depan Beza/Tampal +GenericName[nb]=Endrings-/lappeprogram +GenericName[nl]=Een schil voor Diff/Patch +GenericName[pa]=Diff/Patch ਮà©à©±à¨– +GenericName[pl]=Interfejs do programów Diff/Patch +GenericName[pt]=Interface do Diff/Patch +GenericName[pt_BR]=Interface do Diff/Patch +GenericName[ru]=ГрафичеÑкий Ð¸Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñ Ðº Diff и Patch +GenericName[sk]=Rozhranie pre diff/patch +GenericName[sr]=Ð˜Ð½Ñ‚ÐµÑ€Ñ„ÐµÑ˜Ñ Ð·Ð° diff и patch +GenericName[sr@Latn]=Interfejs za diff i patch +GenericName[sv]=Jämförelse- och programfixgränssnitt +GenericName[ta]= Diff/Patch Frontend +GenericName[tg]=ИнтерфейÑи графикӣ ба Diff ва Patch +GenericName[tr]=Diff/Patch Arayüzü +GenericName[uk]=Ð†Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñ Ð´Ð¾ diff/patch +GenericName[xx]=xxDiff/Patch Frontendxx +GenericName[zh_CN]=Diff/Patch å‰ç«¯ +GenericName[zu]=Diff/PatchIsiqalo sokugcina +Exec=kdiff3 %i %m -caption "%c" +Icon=kdiff3 +Type=Application +Categories=Qt;KDE;Development; +DocPath=kdiff3/index.html +Comment=A File And Directory Comparison And Merge Tool +Comment[ar]=أداة مقارنة Ùˆ دمج ملÙات Ùˆ دلائل (مجلًدات ) +Comment[bg]=ИнÑтрумент за ÑравнÑване и Ñливане на файлове и директории +Comment[bs]=Alat za uporeÄ‘ivanje i spajanje datoteka i direktorija +Comment[ca]=Una eina per a comparar i fusionar fitxers o directoris +Comment[cs]=Nástroj pro porovnávání a sluÄování souborů a adresářů +Comment[da]=Et indfletningsværktøj for filer og mapper +Comment[de]=Programm zum Vergleichen und Zusammenführen von Dateien und Ordnern +Comment[el]=Ένα εÏγαλείο σÏγκÏισης και συγχώνευσης αÏχείων και καταλόγων +Comment[es]=Una herramienta para mezclar y comparar archivos y directorios +Comment[et]=Failide ja kataloogide võrdlemise ja liitmise tööriist +Comment[fr]=Un outil de comparaison et de fusion de fichiers et dossiers +Comment[ga]=Uirlis a chuireann comhaid agus comhadlanna i gcomparáid agus a chumascann iad más gá +Comment[gl]=Comparazón e Unificazón de Ficheiros e Cartafoles +Comment[hi]=à¤à¤• फाइल तथा डिरेकà¥à¤Ÿà¥à¤°à¥€ तà¥à¤²à¤¨à¤¾ तथा विलीन उपकरण +Comment[hu]=Segédprogram fájlok, könyvtárak összehasonlításához +Comment[is]=Skráa og möppu samanburðar og sameiningartól +Comment[it]=Uno strumento di confronto e unione di file e directory +Comment[ja]=ファイル/ディレクトリã®æ¯”較/çµ±åˆãƒ„ール +Comment[ka]=ფáƒáƒ˜áƒšáƒ—რდრსáƒáƒ¥áƒáƒ¦áƒáƒšáƒ“ეთრშედáƒáƒ áƒ”ბის დრშერწყმის ხელსáƒáƒ¬áƒ§áƒ +Comment[ms]=Perbandingan Fail Dan Direktori Dan Alatan Gabungan +Comment[nb]=Et verktøy for Ã¥ sammenlikne og slÃ¥ sammen filer og mapper +Comment[nl]=Hulpmiddel voor het vergelijken en samenvoegen van bestanden en mappen +Comment[pa]=ਇੱਕ ਫਾਇਲ ਅਤੇ ਡਾਇਰੈਕਟਰੀ ਤà©à¨²à¨¨à¨¾ ਅਤੇ ਮਿਲਾਨ ਸੰਦ ਹੈ +Comment[pl]=NarzÄ™dzie do porównywania oraz Å‚Ä…czenia plików i katalogów +Comment[pt]=Uma Ferramenta de Comparação e Junção de Ficheiros e Pastas +Comment[pt_BR]=Uma Ferramenta de Comparação e Junção de Arquivos e Diretórios +Comment[ru]=Утилита ÑÑ€Ð°Ð²Ð½ÐµÐ½Ð¸Ñ Ð¸ Ð¾Ð±ÑŠÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ Ñ„Ð°Ð¹Ð»Ð¾Ð² и каталогов +Comment[sk]=Nástroj pre porovnanie a spájanie súborov a prieÄinkov +Comment[sr]=Ðлат за поређење и Ñтапање фајлова и директоријума +Comment[sr@Latn]=Alat za poreÄ‘enje i stapanje fajlova i direktorijuma +Comment[sv]=Ett jämförelseverktyg för fil- och katalogjämförelser +Comment[tg]=ÐÑбоби баробаркунӣ ва пайванди файлҳо ва каталогҳо +Comment[tr]=Bir Dosya Ve Klasör KarşılaÅŸtırma Ve BirleÅŸtirme Aracı +Comment[uk]=ЗаÑіб-утиліта Ð´Ð»Ñ Ð¿Ð¾Ñ€Ñ–Ð²Ð½ÑÐ½Ð½Ñ Ñ– Ð¿Ð¾Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ñ„Ð°Ð¹Ð»Ñ–Ð² та каталогів +Comment[xx]=xxA File And Directory Comparison And Merge Toolxx +Comment[zh_CN]=一个文件和目录的比较åŠåˆå¹¶å·¥å…· +Terminal=false diff --git a/src/kdiff3.h b/src/kdiff3.h new file mode 100644 index 0000000..72b1a79 --- /dev/null +++ b/src/kdiff3.h @@ -0,0 +1,410 @@ +/*************************************************************************** + kdiff3.h - description + ------------------- + begin : Don Jul 11 12:31:29 CEST 2002 + copyright : (C) 2002-2007 by Joachim Eibl + email : joachim.eibl at gmx.de + ***************************************************************************/ + +/*************************************************************************** + * * + * 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. * + * * + ***************************************************************************/ + +#ifndef KDIFF3_H +#define KDIFF3_H + +#include "diff.h" + +#ifdef HAVE_CONFIG_H +#include +#endif + +// include files for Qt +#include +#include +#include + +// include files for KDE +#include +#include +#include +#include +#include +#include + + +// forward declaration of the KDiff3 classes +class OptionDialog; +class FindDialog; +class ManualDiffHelpDialog; +class DiffTextWindow; +class DiffTextWindowFrame; +class MergeResultWindow; +class WindowTitleWidget; +class Overview; + +class QScrollBar; +class QComboBox; +class QLineEdit; +class QCheckBox; +class QSplitter; + + +class KDiff3Part; +class DirectoryMergeWindow; +class DirectoryMergeInfo; + + +class ReversibleScrollBar : public QScrollBar +{ + Q_OBJECT + bool* m_pbRightToLeftLanguage; + int m_realVal; +public: + ReversibleScrollBar( Orientation o, QWidget* pParent, bool* pbRightToLeftLanguage ) + : QScrollBar( o, pParent ) + { + m_pbRightToLeftLanguage=pbRightToLeftLanguage; + m_realVal=0; + connect( this, SIGNAL(valueChanged(int)), this, SLOT(slotValueChanged(int))); + } + void setAgain(){ setValue(m_realVal); } +public slots: + void slotValueChanged(int i) + { + m_realVal = i; + if(m_pbRightToLeftLanguage && *m_pbRightToLeftLanguage) + m_realVal = maxValue()-(i-minValue()); + emit valueChanged2(m_realVal); + } + void setValue(int i) + { + if(m_pbRightToLeftLanguage && *m_pbRightToLeftLanguage) + QScrollBar::setValue( maxValue()-(i-minValue()) ); + else + QScrollBar::setValue( i ); + } +signals: + void valueChanged2(int); +}; + +class KDiff3App : public QSplitter +{ + Q_OBJECT + + public: + /** constructor of KDiff3App, calls all init functions to create the application. + */ + KDiff3App( QWidget* parent, const char* name, KDiff3Part* pKDiff3Part ); + ~KDiff3App(); + + bool isPart(); + + /** initializes the KActions of the application */ + void initActions( KActionCollection* ); + + /** save general Options like all bar positions and status as well as the geometry + and the recent file list to the configuration file */ + void saveOptions( KConfig* ); + + /** read general Options again and initialize all variables like the recent file list */ + void readOptions( KConfig* ); + + // Finish initialisation (virtual, so that it can be called from the shell too.) + virtual void completeInit(const QString& fn1="", const QString& fn2="", const QString& fn3=""); + + /** queryClose is called by KMainWindow on each closeEvent of a window. Against the + * default implementation (only returns true), this calles saveModified() on the document object to ask if the document shall + * be saved if Modified; on cancel the closeEvent is rejected. + * @see KMainWindow#queryClose + * @see KMainWindow#closeEvent + */ + virtual bool queryClose(); + virtual bool isFileSaved(); + + signals: + void createNewInstance( const QString& fn1, const QString& fn2, const QString& fn3 ); + protected: + void initDirectoryMergeActions(); + /** sets up the statusbar for the main window by initialzing a statuslabel. */ + void initStatusBar(); + + /** creates the centerwidget of the KMainWindow instance and sets it as the view */ + void initView(); + + public slots: + + /** open a file and load it into the document*/ + void slotFileOpen(); + void slotFileOpen2( QString fn1, QString fn2, QString fn3, QString ofn, + QString an1, QString an2, QString an3, TotalDiffStatus* pTotalDiffStatus ); + + void slotFileNameChanged(const QString& fileName, int winIdx); + + /** save a document */ + void slotFileSave(); + /** save a document by a new filename*/ + void slotFileSaveAs(); + + void slotFilePrint(); + + /** closes all open windows by calling close() on each memberList item until the list is empty, then quits the application. + * If queryClose() returns false because the user canceled the saveModified() dialog, the closing breaks. + */ + void slotFileQuit(); + /** put the marked text/object into the clipboard and remove + * it from the document + */ + void slotEditCut(); + /** put the marked text/object into the clipboard + */ + void slotEditCopy(); + /** paste the clipboard into the document + */ + void slotEditPaste(); + /** toggles the toolbar + */ + void slotViewToolBar(); + /** toggles the statusbar + */ + void slotViewStatusBar(); + /** changes the statusbar contents for the standard label permanently, used to indicate current actions. + * @param text the text that is displayed in the statusbar + */ + void slotStatusMsg(const QString &text); + + private: + /** the configuration object of the application */ + //KConfig *config; + + // KAction pointers to enable/disable actions + KAction* fileOpen; + KAction* fileSave; + KAction* fileSaveAs; + KAction* filePrint; + KAction* fileQuit; + KAction* fileReload; + KAction* editCut; + KAction* editCopy; + KAction* editPaste; + KAction* editSelectAll; + KToggleAction* viewToolBar; + KToggleAction* viewStatusBar; + +//////////////////////////////////////////////////////////////////////// +// Special KDiff3 specific stuff starts here + KAction *editFind; + KAction *editFindNext; + + KAction *goCurrent; + KAction *goTop; + KAction *goBottom; + KAction *goPrevUnsolvedConflict; + KAction *goNextUnsolvedConflict; + KAction *goPrevConflict; + KAction *goNextConflict; + KAction *goPrevDelta; + KAction *goNextDelta; + KToggleAction *chooseA; + KToggleAction *chooseB; + KToggleAction *chooseC; + KToggleAction *autoAdvance; + KToggleAction *wordWrap; + KAction* splitDiff; + KAction* joinDiffs; + KAction* addManualDiffHelp; + KAction* clearManualDiffHelpList; + KToggleAction *showWhiteSpaceCharacters; + KToggleAction *showWhiteSpace; + KToggleAction *showLineNumbers; + KAction* chooseAEverywhere; + KAction* chooseBEverywhere; + KAction* chooseCEverywhere; + KAction* chooseAForUnsolvedConflicts; + KAction* chooseBForUnsolvedConflicts; + KAction* chooseCForUnsolvedConflicts; + KAction* chooseAForUnsolvedWhiteSpaceConflicts; + KAction* chooseBForUnsolvedWhiteSpaceConflicts; + KAction* chooseCForUnsolvedWhiteSpaceConflicts; + KAction* autoSolve; + KAction* unsolve; + KAction* mergeHistory; + KAction* mergeRegExp; + KToggleAction *showWindowA; + KToggleAction *showWindowB; + KToggleAction *showWindowC; + KAction *winFocusNext; + KAction *winFocusPrev; + KAction* winToggleSplitOrientation; + KToggleAction *dirShowBoth; + KAction *dirViewToggle; + KToggleAction *overviewModeNormal; + KToggleAction *overviewModeAB; + KToggleAction *overviewModeAC; + KToggleAction *overviewModeBC; + + + QPopupMenu* m_pMergeEditorPopupMenu; + + QSplitter* m_pMainSplitter; + QWidget* m_pMainWidget; + QWidget* m_pMergeWindowFrame; + ReversibleScrollBar* m_pHScrollBar; + QScrollBar* m_pDiffVScrollBar; + QScrollBar* m_pMergeVScrollBar; + + DiffTextWindow* m_pDiffTextWindow1; + DiffTextWindow* m_pDiffTextWindow2; + DiffTextWindow* m_pDiffTextWindow3; + DiffTextWindowFrame* m_pDiffTextWindowFrame1; + DiffTextWindowFrame* m_pDiffTextWindowFrame2; + DiffTextWindowFrame* m_pDiffTextWindowFrame3; + QSplitter* m_pDiffWindowSplitter; + + MergeResultWindow* m_pMergeResultWindow; + WindowTitleWidget* m_pMergeResultWindowTitle; + bool m_bTripleDiff; + + QSplitter* m_pDirectoryMergeSplitter; + DirectoryMergeWindow* m_pDirectoryMergeWindow; + DirectoryMergeInfo* m_pDirectoryMergeInfo; + bool m_bDirCompare; + + Overview* m_pOverview; + + QWidget* m_pCornerWidget; + + TotalDiffStatus m_totalDiffStatus; + + SourceData m_sd1; + SourceData m_sd2; + SourceData m_sd3; + + QString m_outputFilename; + bool m_bDefaultFilename; + + DiffList m_diffList12; + DiffList m_diffList23; + DiffList m_diffList13; + + DiffBufferInfo m_diffBufferInfo; + Diff3LineList m_diff3LineList; + Diff3LineVector m_diff3LineVector; + //ManualDiffHelpDialog* m_pManualDiffHelpDialog; + ManualDiffHelpList m_manualDiffHelpList; + + int m_neededLines; + int m_maxWidth; + int m_DTWHeight; + bool m_bOutputModified; + bool m_bFileSaved; + bool m_bTimerBlock; // Synchronisation + + OptionDialog* m_pOptionDialog; + FindDialog* m_pFindDialog; + + void init( bool bAuto=false, TotalDiffStatus* pTotalDiffStatus=0, bool bLoadFiles=true ); + + virtual bool eventFilter( QObject* o, QEvent* e ); + virtual void resizeEvent(QResizeEvent*); + + bool improveFilenames(bool bCreateNewInstance); + + bool runDiff( const LineData* p1, int size1, const LineData* p2, int size2, DiffList& diffList, int winIdx1, int winIdx2 ); + bool runDiff( const LineData* p1, int size1, const LineData* p2, int size2, DiffList& diffList ); + bool canContinue(); + + void choose(int choice); + + KActionCollection* actionCollection(); + KStatusBar* statusBar(); + KToolBar* toolBar(const char*); + KDiff3Part* m_pKDiff3Part; + KParts::MainWindow* m_pKDiff3Shell; + bool m_bAutoFlag; + bool m_bAutoMode; + void recalcWordWrap(int nofVisibleColumns=-1); + +public slots: + void resizeDiffTextWindow(int newWidth, int newHeight); + void resizeMergeResultWindow(); + void slotRecalcWordWrap(); + + void showPopupMenu( const QPoint& point ); + + void scrollDiffTextWindow( int deltaX, int deltaY ); + void scrollMergeResultWindow( int deltaX, int deltaY ); + void setDiff3Line( int line ); + void sourceMask( int srcMask, int enabledMask ); + + void slotDirShowBoth(); + void slotDirViewToggle(); + + void slotUpdateAvailabilities(); + void slotEditSelectAll(); + void slotEditFind(); + void slotEditFindNext(); + void slotGoCurrent(); + void slotGoTop(); + void slotGoBottom(); + void slotGoPrevUnsolvedConflict(); + void slotGoNextUnsolvedConflict(); + void slotGoPrevConflict(); + void slotGoNextConflict(); + void slotGoPrevDelta(); + void slotGoNextDelta(); + void slotChooseA(); + void slotChooseB(); + void slotChooseC(); + void slotAutoSolve(); + void slotUnsolve(); + void slotMergeHistory(); + void slotRegExpAutoMerge(); + void slotChooseAEverywhere(); + void slotChooseBEverywhere(); + void slotChooseCEverywhere(); + void slotChooseAForUnsolvedConflicts(); + void slotChooseBForUnsolvedConflicts(); + void slotChooseCForUnsolvedConflicts(); + void slotChooseAForUnsolvedWhiteSpaceConflicts(); + void slotChooseBForUnsolvedWhiteSpaceConflicts(); + void slotChooseCForUnsolvedWhiteSpaceConflicts(); + void slotConfigure(); + void slotConfigureKeys(); + void slotRefresh(); + void slotSelectionEnd(); + void slotSelectionStart(); + void slotClipboardChanged(); + void slotOutputModified(bool); + void slotAfterFirstPaint(); + void slotMergeCurrentFile(); + void slotReload(); + void slotCheckIfCanContinue( bool* pbContinue ); + void slotShowWhiteSpaceToggled(); + void slotShowLineNumbersToggled(); + void slotAutoAdvanceToggled(); + void slotWordWrapToggled(); + void slotShowWindowAToggled(); + void slotShowWindowBToggled(); + void slotShowWindowCToggled(); + void slotWinFocusNext(); + void slotWinFocusPrev(); + void slotWinToggleSplitterOrientation(); + void slotOverviewNormal(); + void slotOverviewAB(); + void slotOverviewAC(); + void slotOverviewBC(); + void slotSplitDiff(); + void slotJoinDiffs(); + void slotAddManualDiffHelp(); + void slotClearManualDiffHelpList(); + + void slotNoRelevantChangesDetected(); +}; + +#endif // KDIFF3_H diff --git a/src/kdiff3.ico b/src/kdiff3.ico new file mode 100644 index 0000000..a10847b Binary files /dev/null and b/src/kdiff3.ico differ diff --git a/src/kdiff3.lsm b/src/kdiff3.lsm new file mode 100644 index 0000000..3eedb77 --- /dev/null +++ b/src/kdiff3.lsm @@ -0,0 +1,16 @@ +Begin3 +Title: kdiff3 -- Comparison and Merge of Files and Directories +Version: 0.9.89 +Entered-date: +Description: Tool for comparison and merge of two or three files or directories +Keywords: KDE Qt +Author: Joachim Eibl +Maintained-by: Joachim Eibl +Home-page: http://kdiff3.sourceforge.net +Alternate-site: http://extragear.kde.org/apps/kdiff3 +Primary-site: http://sourceforge.net/project/showfiles.php?group_id=58666 + xxxxxx kdiff3-0.9.89.tar.gz + xxx kdiff3-0.9.89.lsm +Platform: Linux. Needs Qt, runs even better on KDE +Copying-policy: GPL +End diff --git a/src/kdiff3.pro b/src/kdiff3.pro new file mode 100644 index 0000000..71ff682 --- /dev/null +++ b/src/kdiff3.pro @@ -0,0 +1,57 @@ +TEMPLATE = app +# When unresolved items remain during linking: Try adding "shared" in the CONFIG. +CONFIG += qt warn_on thread release +HEADERS = version.h \ + diff.h \ + difftextwindow.h \ + mergeresultwindow.h \ + kdiff3.h \ + merger.h \ + optiondialog.h \ + kreplacements/kreplacements.h \ + directorymergewindow.h \ + fileaccess.h \ + kdiff3_shell.h \ + kdiff3_part.h \ + smalldialogs.h +SOURCES = main.cpp \ + diff.cpp \ + difftextwindow.cpp \ + kdiff3.cpp \ + merger.cpp \ + mergeresultwindow.cpp \ + optiondialog.cpp \ + pdiff.cpp \ + directorymergewindow.cpp \ + fileaccess.cpp \ + smalldialogs.cpp \ + kdiff3_shell.cpp \ + kdiff3_part.cpp \ + gnudiff_analyze.cpp \ + gnudiff_io.cpp \ + gnudiff_xmalloc.cpp \ + common.cpp \ + kreplacements/kreplacements.cpp \ + kreplacements/ShellContextMenu.cpp +TARGET = kdiff3 +INCLUDEPATH += . ./kreplacements + +win32 { +# QMAKE_CXXFLAGS_DEBUG -= -Zi +# QMAKE_CXXFLAGS_DEBUG += -GX -GR -Z7 /FR -DQT_NO_ASCII_CAST +# QMAKE_LFLAGS_DEBUG += /PDB:NONE +# QMAKE_CXXFLAGS_RELEASE += -GX -GR -DNDEBUG -DQT_NO_ASCII_CAST + + QMAKE_CXXFLAGS_DEBUG += -DQT_NO_ASCII_CAST + QMAKE_CXXFLAGS_RELEASE += -DNDEBUG -DQT_NO_ASCII_CAST + RC_FILE = kdiff3.rc +} +unix { + documentation.path = /usr/local/share/doc/kdiff3 + documentation.files = ../doc/* + + INSTALLS += documentation + + target.path = /usr/local/bin + INSTALLS += target +} diff --git a/src/kdiff3.rc b/src/kdiff3.rc new file mode 100644 index 0000000..5b38078 --- /dev/null +++ b/src/kdiff3.rc @@ -0,0 +1 @@ +IDI_ICON1 ICON DISCARDABLE "kdiff3.ico" diff --git a/src/kdiff3_meta_unload.cpp b/src/kdiff3_meta_unload.cpp new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/src/kdiff3_meta_unload.cpp @@ -0,0 +1 @@ + diff --git a/src/kdiff3_part.cpp b/src/kdiff3_part.cpp new file mode 100644 index 0000000..799673e --- /dev/null +++ b/src/kdiff3_part.cpp @@ -0,0 +1,309 @@ +/*************************************************************************** + * Copyright (C) 2003-2007 Joachim Eibl * + * * + * 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., * + * 51 Franklin Steet, Fifth Floor, Boston, MA 02110-1301, USA. * + ***************************************************************************/ + +#include "kdiff3_part.h" + +#include +#include +#include +#include + +#include +#include +#include "kdiff3.h" +#include "fileaccess.h" + +#include +#include +#include + +#include "version.h" + +KDiff3Part::KDiff3Part( QWidget *parentWidget, const char *widgetName, + QObject *parent, const char *name ) + : KParts::ReadOnlyPart(parent, name) +{ + // we need an instance + setInstance( KDiff3PartFactory::instance() ); + + // this should be your custom internal widget + m_widget = new KDiff3App( parentWidget, widgetName, this ); + + // This hack is necessary to avoid a crash when the program terminates. + m_bIsShell = dynamic_cast(parentWidget)!=0; + + // notify the part that this is our internal widget + setWidget(m_widget); + + // create our actions + //KStdAction::open(this, SLOT(fileOpen()), actionCollection()); + //KStdAction::saveAs(this, SLOT(fileSaveAs()), actionCollection()); + //KStdAction::save(this, SLOT(save()), actionCollection()); + + setXMLFile("kdiff3_part.rc"); + + // we are read-write by default + setReadWrite(true); + + // we are not modified since we haven't done anything yet + setModified(false); +} + +KDiff3Part::~KDiff3Part() +{ + if ( m_widget!=0 && ! m_bIsShell ) + { + m_widget->saveOptions( m_widget->isPart() ? instance()->config() : kapp->config() ); + } +} + +void KDiff3Part::setReadWrite(bool /*rw*/) +{ +// ReadWritePart::setReadWrite(rw); +} + +void KDiff3Part::setModified(bool /*modified*/) +{ +/* + // get a handle on our Save action and make sure it is valid + KAction *save = actionCollection()->action(KStdAction::stdName(KStdAction::Save)); + if (!save) + return; + + // if so, we either enable or disable it based on the current + // state + if (modified) + save->setEnabled(true); + else + save->setEnabled(false); + + // in any event, we want our parent to do it's thing + ReadWritePart::setModified(modified); +*/ +} + +static void getNameAndVersion( const QString& str, const QString& lineStart, QString& fileName, QString& version ) +{ + if ( str.left( lineStart.length() )==lineStart && fileName.isEmpty() ) + { + unsigned int pos = lineStart.length(); + while ( pospos ) + { + while (pos2>pos && str[pos2]!=' ' && str[pos2]!='\t') --pos2; + fileName = str.mid( pos, pos2-pos ); + std::cerr << "KDiff3: " << fileName.latin1() << std::endl; + if ( FileAccess(fileName).exists() ) break; + --pos2; + } + + int vpos = str.findRev("\t", -1); + if ( vpos>0 && vpos>(int)pos2 ) + { + version = str.mid( vpos+1 ); + while( !version.right(1)[0].isLetterOrNumber() ) + version.truncate( version.length()-1 ); + } + } +} + + +bool KDiff3Part::openFile() +{ + // m_file is always local so we can use QFile on it + std::cerr << "KDiff3: " << m_file.latin1() << std::endl; + QFile file(m_file); + if (file.open(IO_ReadOnly) == false) + return false; + + // our example widget is text-based, so we use QTextStream instead + // of a raw QDataStream + QTextStream stream(&file); + QString str; + QString fileName1; + QString fileName2; + QString version1; + QString version2; + while (!stream.eof() && (fileName1.isEmpty() || fileName2.isEmpty()) ) + { + str = stream.readLine() + "\n"; + getNameAndVersion( str, "---", fileName1, version1 ); + getNameAndVersion( str, "+++", fileName2, version2 ); + } + + file.close(); + + if ( fileName1.isEmpty() && fileName2.isEmpty() ) + { + KMessageBox::sorry(m_widget, i18n("Couldn't find files for comparison.")); + return false; + } + + FileAccess f1(fileName1); + FileAccess f2(fileName2); + + if ( f1.exists() && f2.exists() && fileName1!=fileName2 ) + { + m_widget->slotFileOpen2( fileName1, fileName2, "", "", "", "", "", 0 ); + return true; + } + else if ( version1.isEmpty() && f1.exists() ) + { + // Normal patch + // patch -f -u --ignore-whitespace -i [inputfile] -o [outfile] [patchfile] + QString tempFileName = FileAccess::tempFileName(); + QString cmd = "patch -f -u --ignore-whitespace -i \"" + m_file + + "\" -o \""+tempFileName + "\" \"" + fileName1+ "\""; + + ::system( cmd.ascii() ); + + m_widget->slotFileOpen2( fileName1, tempFileName, "", "", + "", version2.isEmpty() ? fileName2 : "REV:"+version2+":"+fileName2, "", 0 ); // alias names +// std::cerr << "KDiff3: f1:" << fileName1.latin1() <<"<->"<slotFileOpen2( tempFileName, fileName2, "", "", + version1.isEmpty() ? fileName1 : "REV:"+version1+":"+fileName1, "", "", 0 ); // alias name +// std::cerr << "KDiff3: f2:" << fileName2.latin1() <<"<->"<"< [OUTPUTFILE] + + QString tempFileName1 = FileAccess::tempFileName(); + QString cmd1 = "cvs update -p -r " + version1 + " \"" + fileName1 + "\" >\""+tempFileName1+"\""; + ::system( cmd1.ascii() ); + + QString tempFileName2 = FileAccess::tempFileName(); + QString cmd2 = "cvs update -p -r " + version2 + " \"" + fileName2 + "\" >\""+tempFileName2+"\""; + ::system( cmd2.ascii() ); + + m_widget->slotFileOpen2( tempFileName1, tempFileName2, "", "", + "REV:"+version1+":"+fileName1, + "REV:"+version2+":"+fileName2, + "", 0 + ); + +// std::cerr << "KDiff3: f1/2:" << tempFileName1.latin1() <<"<->"<text(); + + file.close(); + return true; +*/ + return false; // Not implemented +} + + +// It's usually safe to leave the factory code alone.. with the +// notable exception of the KAboutData data +#include +#include + +KInstance* KDiff3PartFactory::s_instance = 0L; +KAboutData* KDiff3PartFactory::s_about = 0L; + +KDiff3PartFactory::KDiff3PartFactory() + : KParts::Factory() +{ +} + +KDiff3PartFactory::~KDiff3PartFactory() +{ + delete s_instance; + delete s_about; + + s_instance = 0L; +} + +KParts::Part* KDiff3PartFactory::createPartObject( QWidget *parentWidget, const char *widgetName, + QObject *parent, const char *name, + const char *classname, const QStringList&/*args*/ ) +{ + // Create an instance of our Part + KDiff3Part* obj = new KDiff3Part( parentWidget, widgetName, parent, name ); + + // See if we are to be read-write or not + if (QCString(classname) == "KParts::ReadOnlyPart") + obj->setReadWrite(false); + + return obj; +} + +KInstance* KDiff3PartFactory::instance() +{ + if( !s_instance ) + { + s_about = new KAboutData("kdiff3part", I18N_NOOP("KDiff3Part"), VERSION); + s_about->addAuthor("Joachim Eibl", 0, "joachim.eibl at gmx.de"); + s_instance = new KInstance(s_about); + } + return s_instance; +} + +extern "C" +{ + void* init_libkdiff3part() + { + return new KDiff3PartFactory; + } +} + +// Suppress warning with --enable-final +#undef VERSION + +#include "kdiff3_part.moc" diff --git a/src/kdiff3_part.h b/src/kdiff3_part.h new file mode 100644 index 0000000..86b58d2 --- /dev/null +++ b/src/kdiff3_part.h @@ -0,0 +1,100 @@ +/*************************************************************************** + * Copyright (C) 2003-2007 Joachim Eibl * + * * + * 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., * + * 51 Franklin Steet, Fifth Floor, Boston, MA 02110-1301, USA. * + ***************************************************************************/ + +#ifndef _KDIFF3PART_H_ +#define _KDIFF3PART_H_ + +#include +#include + +class QWidget; +class QPainter; +class KURL; +class KDiff3App; + +/** + * This is a "Part". It that does all the real work in a KPart + * application. + * + * @short Main Part + * @author Joachim Eibl + */ +class KDiff3Part : public KParts::ReadOnlyPart +{ + Q_OBJECT +public: + /** + * Default constructor + */ + KDiff3Part(QWidget *parentWidget, const char *widgetName, + QObject *parent, const char *name); + + /** + * Destructor + */ + virtual ~KDiff3Part(); + + /** + * This is a virtual function inherited from KParts::ReadWritePart. + * A shell will use this to inform this Part if it should act + * read-only + */ + virtual void setReadWrite(bool rw); + + /** + * Reimplemented to disable and enable Save action + */ + virtual void setModified(bool modified); + +protected: + /** + * This must be implemented by each part + */ + virtual bool openFile(); + + /** + * This must be implemented by each read-write part + */ + virtual bool saveFile(); + +private: + KDiff3App* m_widget; + bool m_bIsShell; +}; + +class KInstance; +class KAboutData; + +class KDiff3PartFactory : public KParts::Factory +{ + Q_OBJECT +public: + KDiff3PartFactory(); + virtual ~KDiff3PartFactory(); + virtual KParts::Part* createPartObject( QWidget *parentWidget, const char *widgetName, + QObject *parent, const char *name, + const char *classname, const QStringList &args ); + static KInstance* instance(); + +private: + static KInstance* s_instance; + static KAboutData* s_about; +}; + +#endif // _KDIFF3PART_H_ diff --git a/src/kdiff3_part.rc b/src/kdiff3_part.rc new file mode 100644 index 0000000..72ae4c4 --- /dev/null +++ b/src/kdiff3_part.rc @@ -0,0 +1,24 @@ + + + + &KDiff3 + + + + + + + + + Configure KDiff3 + + +KDiff3 + + + + + + + + diff --git a/src/kdiff3_shell.cpp b/src/kdiff3_shell.cpp new file mode 100644 index 0000000..dd83a69 --- /dev/null +++ b/src/kdiff3_shell.cpp @@ -0,0 +1,191 @@ +/*************************************************************************** + * Copyright (C) 2003-2007 Joachim Eibl * + * * + * 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., * + * 51 Franklin Steet, Fifth Floor, Boston, MA 02110-1301, USA. * + ***************************************************************************/ + +#include "kdiff3_shell.h" +#include "kdiff3.h" + +#include +#include +#include +#include + +#include + +#include +#include + +#include +#include +#include +#include + +#include + +KDiff3Shell::KDiff3Shell(bool bCompleteInit) + : KParts::MainWindow( 0L, "kdiff3" ) +{ + m_bUnderConstruction = true; + // set the shell's ui resource file + setXMLFile("kdiff3_shell.rc"); + + // and a status bar + statusBar()->show(); + + // this routine will find and load our Part. it finds the Part by + // name which is a bad idea usually.. but it's alright in this + // case since our Part is made for this Shell + KLibFactory *factory = KLibLoader::self()->factory("libkdiff3part"); + if (factory) + { + // now that the Part is loaded, we cast it to a Part to get + // our hands on it + m_part = static_cast(factory->create(this, + "kdiff3_part", "KParts::ReadWritePart" )); + + if (m_part) + { + // and integrate the part's GUI with the shell's + createGUI(m_part); + + // tell the KParts::MainWindow that this is indeed the main widget + setCentralWidget(m_part->widget()); + + if (bCompleteInit) + ((KDiff3App*)m_part->widget())->completeInit(); + connect(((KDiff3App*)m_part->widget()), SIGNAL(createNewInstance(const QString&, const QString&, const QString&)), this, SLOT(slotNewInstance(const QString&, const QString&, const QString&))); + } + } + else + { + // if we couldn't find our Part, we exit since the Shell by + // itself can't do anything useful + KMessageBox::error(this, i18n("Could not find our part!\n" + "This usually happens due to an installation problem. " + "Please read the README-file in the source package for details.") + ); + //kapp->quit(); + + ::exit(-1); //kapp->quit() doesn't work here yet. + + // we return here, cause kapp->quit() only means "exit the + // next time we enter the event loop... + + return; + } + + // apply the saved mainwindow settings, if any, and ask the mainwindow + // to automatically save settings if changed: window size, toolbar + // position, icon size, etc. + setAutoSaveSettings(); + m_bUnderConstruction = false; +} + +KDiff3Shell::~KDiff3Shell() +{ +} + +bool KDiff3Shell::queryClose() +{ + if (m_part) + return ((KDiff3App*)m_part->widget())->queryClose(); + else + return true; +} + +bool KDiff3Shell::queryExit() +{ + return true; +} + +void KDiff3Shell::closeEvent(QCloseEvent*e) +{ + if ( queryClose() ) + { + e->accept(); + bool bFileSaved = ((KDiff3App*)m_part->widget())->isFileSaved(); + KApplication::exit( bFileSaved ? 0 : 1 ); + } + else + e->ignore(); +} + +void KDiff3Shell::optionsShowToolbar() +{ + // this is all very cut and paste code for showing/hiding the + // toolbar + if (m_toolbarAction->isChecked()) + toolBar()->show(); + else + toolBar()->hide(); +} + +void KDiff3Shell::optionsShowStatusbar() +{ + // this is all very cut and paste code for showing/hiding the + // statusbar + if (m_statusbarAction->isChecked()) + statusBar()->show(); + else + statusBar()->hide(); +} + +void KDiff3Shell::optionsConfigureKeys() +{ + KKeyDialog::configure(actionCollection(), "kdiff3_shell.rc"); +} + +void KDiff3Shell::optionsConfigureToolbars() +{ +#if defined(KDE_MAKE_VERSION) +# if KDE_VERSION >= KDE_MAKE_VERSION(3,1,0) + saveMainWindowSettings(KGlobal::config(), autoSaveGroup()); +# else + saveMainWindowSettings(KGlobal::config() ); +# endif +#else + saveMainWindowSettings(KGlobal::config() ); +#endif + + // use the standard toolbar editor + KEditToolbar dlg(factory()); + connect(&dlg, SIGNAL(newToolbarConfig()), + this, SLOT(applyNewToolbarConfig())); + dlg.exec(); +} + +void KDiff3Shell::applyNewToolbarConfig() +{ +#if defined(KDE_MAKE_VERSION) +# if KDE_VERSION >= KDE_MAKE_VERSION(3,1,0) + applyMainWindowSettings(KGlobal::config(), autoSaveGroup()); +# else + applyMainWindowSettings(KGlobal::config()); +# endif +#else + applyMainWindowSettings(KGlobal::config()); +#endif +} + +void KDiff3Shell::slotNewInstance( const QString& fn1, const QString& fn2, const QString& fn3 ) +{ + KDiff3Shell* pKDiff3Shell = new KDiff3Shell(false); + ((KDiff3App*)pKDiff3Shell->m_part->widget())->completeInit(fn1,fn2,fn3); +} + +#include "kdiff3_shell.moc" diff --git a/src/kdiff3_shell.h b/src/kdiff3_shell.h new file mode 100644 index 0000000..42a324b --- /dev/null +++ b/src/kdiff3_shell.h @@ -0,0 +1,74 @@ +/*************************************************************************** + * Copyright (C) 2003-2007 Joachim Eibl * + * * + * 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., * + * 51 Franklin Steet, Fifth Floor, Boston, MA 02110-1301, USA. * + ***************************************************************************/ + +#ifndef _KDIFF3SHELL_H_ +#define _KDIFF3SHELL_H_ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include + +class KToggleAction; + +/** + * This is the application "Shell". It has a menubar, toolbar, and + * statusbar but relies on the "Part" to do all the real work. + * + * @short Application Shell + * @author Joachim Eibl + */ +class KDiff3Shell : public KParts::MainWindow +{ + Q_OBJECT +public: + /** + * Default Constructor + */ + KDiff3Shell(bool bCompleteInit=true); + + /** + * Default Destructor + */ + virtual ~KDiff3Shell(); + + bool queryClose(); + bool queryExit(); + virtual void closeEvent(QCloseEvent*e); + +private slots: + void optionsShowToolbar(); + void optionsShowStatusbar(); + void optionsConfigureKeys(); + void optionsConfigureToolbars(); + + void applyNewToolbarConfig(); + void slotNewInstance( const QString& fn1, const QString& fn2, const QString& fn3 ); + +private: + KParts::ReadWritePart *m_part; + + KToggleAction *m_toolbarAction; + KToggleAction *m_statusbarAction; + bool m_bUnderConstruction; +}; + +#endif // _KDIFF3_H_ diff --git a/src/kdiff3_shell.rc b/src/kdiff3_shell.rc new file mode 100644 index 0000000..bf1cb19 --- /dev/null +++ b/src/kdiff3_shell.rc @@ -0,0 +1,128 @@ + + + + &File + + + &Directory + + + + + + + + + + + + + + + + + + + + + + Current Item Merge Operation + + + + + + + + Current Item Sync Operation + + + + + + + + + + + + &Movement + + + + + + + + + + + D&iffview + + + + + + + + + + + + &Merge + + + + + + + + + + + + + + + + + + + + + + &Window + + + + + + + + + + +Main Toolbar + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/kdiff3part.desktop b/src/kdiff3part.desktop new file mode 100644 index 0000000..70ca73e --- /dev/null +++ b/src/kdiff3part.desktop @@ -0,0 +1,18 @@ +[Desktop Entry] +Encoding=UTF-8 +Name=KDiff3Part +Name[cs]=Komponenta KDiff3 +Name[fr]=Composant KDiff3 +Name[hi]=के-डिफ3पारà¥à¤Ÿ +Name[nb]=KDiff3-del +Name[pt_BR]=Componente KDiff3 +Name[sv]=Kdiff3-del +Name[ta]=கேடிஃபà¯3 பகà¯à®¤à®¿ +Name[tg]=ҚиÑмиKDiff3 +Name[uk]=Комопнент KDiff3 +Name[xx]=xxKDiff3Partxx +Name[zh_CN]=KDiff3 组件 +MimeType=text/x-diff +ServiceTypes=KParts/ReadOnlyPart,KParts/ReadWritePart +X-KDE-Library=libkdiff3part +Type=Service diff --git a/src/kreplacements/README b/src/kreplacements/README new file mode 100644 index 0000000..fd9411c --- /dev/null +++ b/src/kreplacements/README @@ -0,0 +1,30 @@ +About the "kreplacements"-directory: +==================================== + +I want to be able to compile and use KDiff3 without KDE too. +Since KDiff3 is a KDE program, which uses many KDE-classes and +functions there must be some replacement. + +In many cases this is just the corresponding Qt-class, but often +I wrote something myself. For several very KDE-specific functions +there is no real replacement, but only stub functions that allow +the program to compile and link. + +This stuff is not intended to be used for anything else but KDiff3. +Think of it rather as a big hack, that only has the advantage +that I need not mess up the normal program with many ugly +#ifdef/#endif-clauses. + +Most include files in this directory only include kreplacements.h +where the actual declarations are. The implementions are in +kreplacements.cpp. + +The *.moc-files are dummies. The new KDE-philosophy seems to be +that *.moc-files are directly included into the sources. +The Qt-philosophy still is to generate moc*.cpp files which will +be compiled seperately. With these dummy-moc-files both versions +can be compiled. + + +Joachim +(2003-10-02) diff --git a/src/kreplacements/ShellContextMenu.cpp b/src/kreplacements/ShellContextMenu.cpp new file mode 100755 index 0000000..e1a6d2d --- /dev/null +++ b/src/kreplacements/ShellContextMenu.cpp @@ -0,0 +1,492 @@ +/*************************************************************************** + ShellContextMenu.cpp - description + ------------------- + begin : Sat Mar 4 2006 + copyright : (C) 2005-2007 by Joachim Eibl + email : joachim dot eibl at gmx dot de + ***************************************************************************/ + +/*************************************************************************** + * * + * 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. * + * * + ***************************************************************************/ +// ShellContextMenu.cpp: Implementierung der Klasse CShellContextMenu. +// +////////////////////////////////////////////////////////////////////// +#ifdef _WIN32 +#include +#include +#include +#include +#include +#include +#include +#include +#include "ShellContextMenu.h" + +#ifdef _DEBUG +#undef THIS_FILE +static char THIS_FILE[]=__FILE__; +#define new DEBUG_NEW +#endif + +////////////////////////////////////////////////////////////////////// +// Konstruktion/Destruktion +////////////////////////////////////////////////////////////////////// + +#define MIN_ID 100 +#define MAX_ID 10000 + + +void showShellContextMenu( const QString& itemPath, QPoint pt, QWidget* pParentWidget, QPopupMenu* pMenu ) +{ + CShellContextMenu scm; + scm.SetObjects(QDir::convertSeparators(itemPath)); + int id = scm.ShowContextMenu (pParentWidget, pt, pMenu); + if (id>=1) + pMenu->activateItemAt(id-1); +} + +IContextMenu2 * g_IContext2 = NULL; +IContextMenu3 * g_IContext3 = NULL; + +CShellContextMenu::CShellContextMenu() +{ + m_psfFolder = NULL; + m_pidlArray = NULL; + m_hMenu = NULL; +} + +CShellContextMenu::~CShellContextMenu() +{ + // free all allocated datas + if (m_psfFolder && bDelete) + m_psfFolder->Release (); + m_psfFolder = NULL; + FreePIDLArray (m_pidlArray); + m_pidlArray = NULL; + + if (m_hMenu) + DestroyMenu( m_hMenu ); +} + + + +// this functions determines which version of IContextMenu is avaibale for those objects (always the highest one) +// and returns that interface +BOOL CShellContextMenu::GetContextMenu (void ** ppContextMenu, int & iMenuType) +{ + *ppContextMenu = NULL; + LPCONTEXTMENU icm1 = NULL; + + if ( m_psfFolder==0 ) + return FALSE; + // first we retrieve the normal IContextMenu interface (every object should have it) + m_psfFolder->GetUIObjectOf (NULL, nItems, (LPCITEMIDLIST *) m_pidlArray, IID_IContextMenu, NULL, (void**) &icm1); + + if (icm1) + { // since we got an IContextMenu interface we can now obtain the higher version interfaces via that + if (icm1->QueryInterface (IID_IContextMenu3, ppContextMenu) == NOERROR) + iMenuType = 3; + else if (icm1->QueryInterface (IID_IContextMenu2, ppContextMenu) == NOERROR) + iMenuType = 2; + + if (*ppContextMenu) + icm1->Release(); // we can now release version 1 interface, cause we got a higher one + else + { + iMenuType = 1; + *ppContextMenu = icm1; // since no higher versions were found + } // redirect ppContextMenu to version 1 interface + } + else + return (FALSE); // something went wrong + + return (TRUE); // success +} + + +LRESULT CALLBACK CShellContextMenu::HookWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) +{ + switch (message) + { + case WM_MENUCHAR: // only supported by IContextMenu3 + if (g_IContext3) + { + LRESULT lResult = 0; + g_IContext3->HandleMenuMsg2 (message, wParam, lParam, &lResult); + return (lResult); + } + break; + + case WM_DRAWITEM: + case WM_MEASUREITEM: + if (wParam) + break; // if wParam != 0 then the message is not menu-related + + case WM_INITMENUPOPUP: + if (g_IContext2) + g_IContext2->HandleMenuMsg (message, wParam, lParam); + else // version 3 + g_IContext3->HandleMenuMsg (message, wParam, lParam); + return (message == WM_INITMENUPOPUP ? 0 : TRUE); // inform caller that we handled WM_INITPOPUPMENU by ourself + break; + + default: + break; + } + + // call original WndProc of window to prevent undefined bevhaviour of window + return ::CallWindowProc ((WNDPROC) GetProp ( hWnd, TEXT ("OldWndProc")), hWnd, message, wParam, lParam); +} + + +UINT CShellContextMenu::ShowContextMenu(QWidget * pParentWidget, QPoint pt, QPopupMenu* pMenu ) +{ + HWND hWnd = pParentWidget->winId(); + int iMenuType = 0; // to know which version of IContextMenu is supported + LPCONTEXTMENU pContextMenu; // common pointer to IContextMenu and higher version interface + + if (!GetContextMenu ((void**) &pContextMenu, iMenuType)) + return (0); // something went wrong + + if (!m_hMenu) + { + DestroyMenu( m_hMenu ); + m_hMenu = CreatePopupMenu (); + } + + UINT_PTR i; + for( i=0; icount(); ++i ) + { + QString s = pMenu->text(pMenu->idAt(i)); + if (!s.isEmpty()) + AppendMenuW( m_hMenu, MF_STRING, i+1, (LPCWSTR)s.ucs2() ); + } + AppendMenuW( m_hMenu, MF_SEPARATOR, i+1, L"" ); + + // lets fill the our popupmenu + pContextMenu->QueryContextMenu (m_hMenu, GetMenuItemCount (m_hMenu), MIN_ID, MAX_ID, CMF_NORMAL | CMF_EXPLORE); + + // subclass window to handle menurelated messages in CShellContextMenu + WNDPROC OldWndProc; + if (iMenuType > 1) // only subclass if its version 2 or 3 + { + OldWndProc = (WNDPROC) SetWindowLong (hWnd, GWL_WNDPROC, (DWORD) HookWndProc); + if (iMenuType == 2) + g_IContext2 = (LPCONTEXTMENU2) pContextMenu; + else // version 3 + g_IContext3 = (LPCONTEXTMENU3) pContextMenu; + } + else + OldWndProc = NULL; + + UINT idCommand = TrackPopupMenu (m_hMenu,TPM_RETURNCMD | TPM_LEFTALIGN, pt.x(), pt.y(), 0, pParentWidget->winId(), 0); + + if (OldWndProc) // unsubclass + SetWindowLong (hWnd, GWL_WNDPROC, (DWORD) OldWndProc); + + if (idCommand >= MIN_ID && idCommand <= MAX_ID) // see if returned idCommand belongs to shell menu entries + { + InvokeCommand (pContextMenu, idCommand - MIN_ID); // execute related command + idCommand = 0; + } + + pContextMenu->Release(); + g_IContext2 = NULL; + g_IContext3 = NULL; + + return (idCommand); +} + + +void CShellContextMenu::InvokeCommand (LPCONTEXTMENU pContextMenu, UINT idCommand) +{ + CMINVOKECOMMANDINFO cmi = {0}; + cmi.cbSize = sizeof (CMINVOKECOMMANDINFO); + cmi.lpVerb = (LPSTR) MAKEINTRESOURCE (idCommand); + cmi.nShow = SW_SHOWNORMAL; + + pContextMenu->InvokeCommand (&cmi); +} + + +void CShellContextMenu::SetObjects(const QString& strObject) +{ + // only one object is passed + QStringList strArray; + strArray << strObject; // create a CStringArray with one element + + SetObjects (strArray); // and pass it to SetObjects (CStringArray &strArray) + // for further processing +} + + +void CShellContextMenu::SetObjects(const QStringList &strList) +{ + // free all allocated datas + if (m_psfFolder && bDelete) + m_psfFolder->Release (); + m_psfFolder = NULL; + FreePIDLArray (m_pidlArray); + m_pidlArray = NULL; + + // get IShellFolder interface of Desktop (root of shell namespace) + IShellFolder * psfDesktop = NULL; + SHGetDesktopFolder (&psfDesktop); // needed to obtain full qualified pidl + + // ParseDisplayName creates a PIDL from a file system path relative to the IShellFolder interface + // but since we use the Desktop as our interface and the Desktop is the namespace root + // that means that it's a fully qualified PIDL, which is what we need + LPITEMIDLIST pidl = NULL; + + psfDesktop->ParseDisplayName (NULL, 0, (LPOLESTR)strList[0].ucs2(), NULL, &pidl, NULL); + + // now we need the parent IShellFolder interface of pidl, and the relative PIDL to that interface + LPITEMIDLIST pidlItem = NULL; // relative pidl + SHBindToParentEx (pidl, IID_IShellFolder, (void **) &m_psfFolder, NULL); + free (pidlItem); + // get interface to IMalloc (need to free the PIDLs allocated by the shell functions) + LPMALLOC lpMalloc = NULL; + SHGetMalloc (&lpMalloc); + lpMalloc->Free (pidl); + + // now we have the IShellFolder interface to the parent folder specified in the first element in strArray + // since we assume that all objects are in the same folder (as it's stated in the MSDN) + // we now have the IShellFolder interface to every objects parent folder + + IShellFolder * psfFolder = NULL; + nItems = strList.size (); + for (int i = 0; i < nItems; i++) + { + pidl=0; + psfDesktop->ParseDisplayName (NULL, 0, (LPOLESTR)strList[i].ucs2(), NULL, &pidl, NULL); + if (pidl) + { + m_pidlArray = (LPITEMIDLIST *) realloc (m_pidlArray, (i + 1) * sizeof (LPITEMIDLIST)); + // get relative pidl via SHBindToParent + SHBindToParentEx (pidl, IID_IShellFolder, (void **) &psfFolder, (LPCITEMIDLIST *) &pidlItem); + m_pidlArray[i] = CopyPIDL (pidlItem); // copy relative pidl to pidlArray + free (pidlItem); + lpMalloc->Free (pidl); // free pidl allocated by ParseDisplayName + psfFolder->Release (); + } + } + lpMalloc->Release (); + psfDesktop->Release (); + + bDelete = TRUE; // indicates that m_psfFolder should be deleted by CShellContextMenu +} + + +// only one full qualified PIDL has been passed +void CShellContextMenu::SetObjects(LPITEMIDLIST /*pidl*/) +{ +/* + // free all allocated datas + if (m_psfFolder && bDelete) + m_psfFolder->Release (); + m_psfFolder = NULL; + FreePIDLArray (m_pidlArray); + m_pidlArray = NULL; + + // full qualified PIDL is passed so we need + // its parent IShellFolder interface and its relative PIDL to that + LPITEMIDLIST pidlItem = NULL; + SHBindToParent ((LPCITEMIDLIST) pidl, IID_IShellFolder, (void **) &m_psfFolder, (LPCITEMIDLIST *) &pidlItem); + + m_pidlArray = (LPITEMIDLIST *) malloc (sizeof (LPITEMIDLIST)); // allocate ony for one elemnt + m_pidlArray[0] = CopyPIDL (pidlItem); + + + // now free pidlItem via IMalloc interface (but not m_psfFolder, that we need later + LPMALLOC lpMalloc = NULL; + SHGetMalloc (&lpMalloc); + lpMalloc->Free (pidlItem); + lpMalloc->Release(); + + nItems = 1; + bDelete = TRUE; // indicates that m_psfFolder should be deleted by CShellContextMenu +*/ +} + + +// IShellFolder interface with a relative pidl has been passed +void CShellContextMenu::SetObjects(IShellFolder *psfFolder, LPITEMIDLIST pidlItem) +{ + // free all allocated datas + if (m_psfFolder && bDelete) + m_psfFolder->Release (); + m_psfFolder = NULL; + FreePIDLArray (m_pidlArray); + m_pidlArray = NULL; + + m_psfFolder = psfFolder; + + m_pidlArray = (LPITEMIDLIST *) malloc (sizeof (LPITEMIDLIST)); + m_pidlArray[0] = CopyPIDL (pidlItem); + + nItems = 1; + bDelete = FALSE; // indicates wheter m_psfFolder should be deleted by CShellContextMenu +} + +void CShellContextMenu::SetObjects(IShellFolder * psfFolder, LPITEMIDLIST *pidlArray, int nItemCount) +{ + // free all allocated datas + if (m_psfFolder && bDelete) + m_psfFolder->Release (); + m_psfFolder = NULL; + FreePIDLArray (m_pidlArray); + m_pidlArray = NULL; + + m_psfFolder = psfFolder; + + m_pidlArray = (LPITEMIDLIST *) malloc (nItemCount * sizeof (LPITEMIDLIST)); + + for (int i = 0; i < nItemCount; i++) + m_pidlArray[i] = CopyPIDL (pidlArray[i]); + + nItems = nItemCount; + bDelete = FALSE; // indicates wheter m_psfFolder should be deleted by CShellContextMenu +} + + +void CShellContextMenu::FreePIDLArray(LPITEMIDLIST *pidlArray) +{ + if (!pidlArray) + return; + + int iSize = _msize (pidlArray) / sizeof (LPITEMIDLIST); + + for (int i = 0; i < iSize; i++) + free (pidlArray[i]); + free (pidlArray); +} + + +LPITEMIDLIST CShellContextMenu::CopyPIDL (LPCITEMIDLIST pidl, int cb) +{ + if (cb == -1) + cb = GetPIDLSize (pidl); // Calculate size of list. + + LPITEMIDLIST pidlRet = (LPITEMIDLIST) calloc (cb + sizeof (USHORT), sizeof (BYTE)); + if (pidlRet) + CopyMemory(pidlRet, pidl, cb); + + return (pidlRet); +} + + +UINT CShellContextMenu::GetPIDLSize (LPCITEMIDLIST pidl) +{ + if (!pidl) + return 0; + int nSize = 0; + LPITEMIDLIST pidlTemp = (LPITEMIDLIST) pidl; + while (pidlTemp->mkid.cb) + { + nSize += pidlTemp->mkid.cb; + pidlTemp = (LPITEMIDLIST) (((LPBYTE) pidlTemp) + pidlTemp->mkid.cb); + } + return nSize; +} + +HMENU CShellContextMenu::GetMenu() +{ + if (!m_hMenu) + { + m_hMenu = CreatePopupMenu(); // create the popupmenu (its empty) + } + return (m_hMenu); +} + + +// this is workaround function for the Shell API Function SHBindToParent +// SHBindToParent is not available under Win95/98 +HRESULT CShellContextMenu::SHBindToParentEx (LPCITEMIDLIST pidl, REFIID riid, VOID **ppv, LPCITEMIDLIST *ppidlLast) +{ + HRESULT hr = 0; + if (!pidl || !ppv) + return E_POINTER; + + int nCount = GetPIDLCount (pidl); + if (nCount == 0) // desktop pidl of invalid pidl + return E_POINTER; + + IShellFolder * psfDesktop = NULL; + SHGetDesktopFolder (&psfDesktop); + if (nCount == 1) // desktop pidl + { + if ((hr = psfDesktop->QueryInterface(riid, ppv)) == S_OK) + { + if (ppidlLast) + *ppidlLast = CopyPIDL (pidl); + } + psfDesktop->Release (); + return hr; + } + + LPBYTE pRel = GetPIDLPos (pidl, nCount - 1); + LPITEMIDLIST pidlParent = NULL; + pidlParent = CopyPIDL (pidl, pRel - (LPBYTE) pidl); + IShellFolder * psfFolder = NULL; + + if ((hr = psfDesktop->BindToObject (pidlParent, NULL, IID_IShellFolder, (void **) &psfFolder)) != S_OK) + { + free (pidlParent); + psfDesktop->Release (); + return hr; + } + if ((hr = psfFolder->QueryInterface (riid, ppv)) == S_OK) + { + if (ppidlLast) + *ppidlLast = CopyPIDL ((LPCITEMIDLIST) pRel); + } + free (pidlParent); + psfFolder->Release (); + psfDesktop->Release (); + return hr; +} + + +LPBYTE CShellContextMenu::GetPIDLPos (LPCITEMIDLIST pidl, int nPos) +{ + if (!pidl) + return 0; + int nCount = 0; + + BYTE * pCur = (BYTE *) pidl; + while (((LPCITEMIDLIST) pCur)->mkid.cb) + { + if (nCount == nPos) + return pCur; + nCount++; + pCur += ((LPCITEMIDLIST) pCur)->mkid.cb; // + sizeof(pidl->mkid.cb); + } + if (nCount == nPos) + return pCur; + return NULL; +} + + +int CShellContextMenu::GetPIDLCount (LPCITEMIDLIST pidl) +{ + if (!pidl) + return 0; + + int nCount = 0; + BYTE* pCur = (BYTE *) pidl; + while (((LPCITEMIDLIST) pCur)->mkid.cb) + { + nCount++; + pCur += ((LPCITEMIDLIST) pCur)->mkid.cb; + } + return nCount; +} + +#endif + diff --git a/src/kreplacements/ShellContextMenu.h b/src/kreplacements/ShellContextMenu.h new file mode 100644 index 0000000..ae67483 --- /dev/null +++ b/src/kreplacements/ShellContextMenu.h @@ -0,0 +1,60 @@ +/*************************************************************************** + ShellContextMenu.h - description + ------------------- + begin : Sat Mar 4 2006 + copyright : (C) 2005-2007 by Joachim Eibl + email : joachim dot eibl at gmx dot de + ***************************************************************************/ + +/*************************************************************************** + * * + * 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. * + * * + ***************************************************************************/ +// ShellContextMenu.h: Schnittstelle fr die Klasse CShellContextMenu. +// +////////////////////////////////////////////////////////////////////// + +#ifndef SHELLCONTEXTMENU_H +#define SHELLCONTEXTMENU_H + +///////////////////////////////////////////////////////////////////// +// class to show shell contextmenu of files/folders/shell objects +// developed by R. Engels 2003 +///////////////////////////////////////////////////////////////////// + +class CShellContextMenu +{ +public: + HMENU GetMenu (); + void SetObjects (IShellFolder * psfFolder, LPITEMIDLIST pidlItem); + void SetObjects (IShellFolder * psfFolder, LPITEMIDLIST * pidlArray, int nItemCount); + void SetObjects (LPITEMIDLIST pidl); + void SetObjects (const QString& strObject); + void SetObjects (const QStringList& strList); + UINT ShowContextMenu (QWidget* pParent, QPoint pt, QPopupMenu* pMenu); + CShellContextMenu(); + virtual ~CShellContextMenu(); + +private: + int nItems; + BOOL bDelete; + HMENU m_hMenu; + IShellFolder * m_psfFolder; + LPITEMIDLIST * m_pidlArray; + + void InvokeCommand (LPCONTEXTMENU pContextMenu, UINT idCommand); + BOOL GetContextMenu (void ** ppContextMenu, int & iMenuType); + HRESULT SHBindToParentEx (LPCITEMIDLIST pidl, REFIID riid, VOID **ppv, LPCITEMIDLIST *ppidlLast); + static LRESULT CALLBACK HookWndProc (HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam); + void FreePIDLArray (LPITEMIDLIST * pidlArray); + LPITEMIDLIST CopyPIDL (LPCITEMIDLIST pidl, int cb = -1); + UINT GetPIDLSize (LPCITEMIDLIST pidl); + LPBYTE GetPIDLPos (LPCITEMIDLIST pidl, int nPos); + int GetPIDLCount (LPCITEMIDLIST pidl); +}; + +#endif diff --git a/src/kreplacements/kaboutdata.h b/src/kreplacements/kaboutdata.h new file mode 100644 index 0000000..53443ee --- /dev/null +++ b/src/kreplacements/kaboutdata.h @@ -0,0 +1,2 @@ +#include "kreplacements.h" + diff --git a/src/kreplacements/kaccel.h b/src/kreplacements/kaccel.h new file mode 100644 index 0000000..53443ee --- /dev/null +++ b/src/kreplacements/kaccel.h @@ -0,0 +1,2 @@ +#include "kreplacements.h" + diff --git a/src/kreplacements/kaction.h b/src/kreplacements/kaction.h new file mode 100644 index 0000000..53443ee --- /dev/null +++ b/src/kreplacements/kaction.h @@ -0,0 +1,2 @@ +#include "kreplacements.h" + diff --git a/src/kreplacements/kapplication.h b/src/kreplacements/kapplication.h new file mode 100644 index 0000000..53443ee --- /dev/null +++ b/src/kreplacements/kapplication.h @@ -0,0 +1,2 @@ +#include "kreplacements.h" + diff --git a/src/kreplacements/kcmdlineargs.h b/src/kreplacements/kcmdlineargs.h new file mode 100644 index 0000000..53443ee --- /dev/null +++ b/src/kreplacements/kcmdlineargs.h @@ -0,0 +1,2 @@ +#include "kreplacements.h" + diff --git a/src/kreplacements/kcolorbtn.h b/src/kreplacements/kcolorbtn.h new file mode 100644 index 0000000..53443ee --- /dev/null +++ b/src/kreplacements/kcolorbtn.h @@ -0,0 +1,2 @@ +#include "kreplacements.h" + diff --git a/src/kreplacements/kconfig.h b/src/kreplacements/kconfig.h new file mode 100644 index 0000000..53443ee --- /dev/null +++ b/src/kreplacements/kconfig.h @@ -0,0 +1,2 @@ +#include "kreplacements.h" + diff --git a/src/kreplacements/kdialogbase.h b/src/kreplacements/kdialogbase.h new file mode 100644 index 0000000..53443ee --- /dev/null +++ b/src/kreplacements/kdialogbase.h @@ -0,0 +1,2 @@ +#include "kreplacements.h" + diff --git a/src/kreplacements/kedittoolbar.h b/src/kreplacements/kedittoolbar.h new file mode 100644 index 0000000..53443ee --- /dev/null +++ b/src/kreplacements/kedittoolbar.h @@ -0,0 +1,2 @@ +#include "kreplacements.h" + diff --git a/src/kreplacements/kfiledialog.h b/src/kreplacements/kfiledialog.h new file mode 100644 index 0000000..53443ee --- /dev/null +++ b/src/kreplacements/kfiledialog.h @@ -0,0 +1,2 @@ +#include "kreplacements.h" + diff --git a/src/kreplacements/kfontdialog.h b/src/kreplacements/kfontdialog.h new file mode 100644 index 0000000..53443ee --- /dev/null +++ b/src/kreplacements/kfontdialog.h @@ -0,0 +1,2 @@ +#include "kreplacements.h" + diff --git a/src/kreplacements/kiconloader.h b/src/kreplacements/kiconloader.h new file mode 100644 index 0000000..53443ee --- /dev/null +++ b/src/kreplacements/kiconloader.h @@ -0,0 +1,2 @@ +#include "kreplacements.h" + diff --git a/src/kreplacements/kinstance.h b/src/kreplacements/kinstance.h new file mode 100644 index 0000000..53443ee --- /dev/null +++ b/src/kreplacements/kinstance.h @@ -0,0 +1,2 @@ +#include "kreplacements.h" + diff --git a/src/kreplacements/kio/global.h b/src/kreplacements/kio/global.h new file mode 100644 index 0000000..53443ee --- /dev/null +++ b/src/kreplacements/kio/global.h @@ -0,0 +1,2 @@ +#include "kreplacements.h" + diff --git a/src/kreplacements/kio/job.h b/src/kreplacements/kio/job.h new file mode 100644 index 0000000..53443ee --- /dev/null +++ b/src/kreplacements/kio/job.h @@ -0,0 +1,2 @@ +#include "kreplacements.h" + diff --git a/src/kreplacements/kio/jobclasses.h b/src/kreplacements/kio/jobclasses.h new file mode 100644 index 0000000..53443ee --- /dev/null +++ b/src/kreplacements/kio/jobclasses.h @@ -0,0 +1,2 @@ +#include "kreplacements.h" + diff --git a/src/kreplacements/kkeydialog.h b/src/kreplacements/kkeydialog.h new file mode 100644 index 0000000..53443ee --- /dev/null +++ b/src/kreplacements/kkeydialog.h @@ -0,0 +1,2 @@ +#include "kreplacements.h" + diff --git a/src/kreplacements/klibloader.h b/src/kreplacements/klibloader.h new file mode 100644 index 0000000..53443ee --- /dev/null +++ b/src/kreplacements/klibloader.h @@ -0,0 +1,2 @@ +#include "kreplacements.h" + diff --git a/src/kreplacements/klocale.h b/src/kreplacements/klocale.h new file mode 100644 index 0000000..53443ee --- /dev/null +++ b/src/kreplacements/klocale.h @@ -0,0 +1,2 @@ +#include "kreplacements.h" + diff --git a/src/kreplacements/kmainwindow.h b/src/kreplacements/kmainwindow.h new file mode 100644 index 0000000..53443ee --- /dev/null +++ b/src/kreplacements/kmainwindow.h @@ -0,0 +1,2 @@ +#include "kreplacements.h" + diff --git a/src/kreplacements/kmenubar.h b/src/kreplacements/kmenubar.h new file mode 100644 index 0000000..53443ee --- /dev/null +++ b/src/kreplacements/kmenubar.h @@ -0,0 +1,2 @@ +#include "kreplacements.h" + diff --git a/src/kreplacements/kmessagebox.h b/src/kreplacements/kmessagebox.h new file mode 100644 index 0000000..53443ee --- /dev/null +++ b/src/kreplacements/kmessagebox.h @@ -0,0 +1,2 @@ +#include "kreplacements.h" + diff --git a/src/kreplacements/konq_popupmenu.h b/src/kreplacements/konq_popupmenu.h new file mode 100644 index 0000000..53443ee --- /dev/null +++ b/src/kreplacements/konq_popupmenu.h @@ -0,0 +1,2 @@ +#include "kreplacements.h" + diff --git a/src/kreplacements/kparts/factory.h b/src/kreplacements/kparts/factory.h new file mode 100644 index 0000000..53443ee --- /dev/null +++ b/src/kreplacements/kparts/factory.h @@ -0,0 +1,2 @@ +#include "kreplacements.h" + diff --git a/src/kreplacements/kparts/mainwindow.h b/src/kreplacements/kparts/mainwindow.h new file mode 100644 index 0000000..53443ee --- /dev/null +++ b/src/kreplacements/kparts/mainwindow.h @@ -0,0 +1,2 @@ +#include "kreplacements.h" + diff --git a/src/kreplacements/kparts/part.h b/src/kreplacements/kparts/part.h new file mode 100644 index 0000000..53443ee --- /dev/null +++ b/src/kreplacements/kparts/part.h @@ -0,0 +1,2 @@ +#include "kreplacements.h" + diff --git a/src/kreplacements/kpopupmenu.h b/src/kreplacements/kpopupmenu.h new file mode 100644 index 0000000..53443ee --- /dev/null +++ b/src/kreplacements/kpopupmenu.h @@ -0,0 +1,2 @@ +#include "kreplacements.h" + diff --git a/src/kreplacements/kprinter.h b/src/kreplacements/kprinter.h new file mode 100644 index 0000000..53443ee --- /dev/null +++ b/src/kreplacements/kprinter.h @@ -0,0 +1,2 @@ +#include "kreplacements.h" + diff --git a/src/kreplacements/kprogress.h b/src/kreplacements/kprogress.h new file mode 100644 index 0000000..53443ee --- /dev/null +++ b/src/kreplacements/kprogress.h @@ -0,0 +1,2 @@ +#include "kreplacements.h" + diff --git a/src/kreplacements/kreplacements.cpp b/src/kreplacements/kreplacements.cpp new file mode 100644 index 0000000..95885a5 --- /dev/null +++ b/src/kreplacements/kreplacements.cpp @@ -0,0 +1,1185 @@ +/*************************************************************************** + kreplacements.cpp - description + ------------------- + begin : Sat Aug 3 2002 + copyright : (C) 2002-2007 by Joachim Eibl + email : joachim.eibl at gmx.de + ***************************************************************************/ + +/*************************************************************************** + * * + * 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. * + * * + ***************************************************************************/ + + +#include "kreplacements.h" +#include "common.h" + +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include + + +static QString s_copyright; +static QString s_email; +static QString s_description; +static QString s_appName; +static QString s_version; +static QString s_homepage; +static KAboutData* s_pAboutData; + + +#ifdef _WIN32 +#include +#include +#endif + +static void showHelp() +{ + #ifdef _WIN32 + char buf[200]; + int r= SearchPathA( 0, ".", 0, sizeof(buf), buf, 0 ); + + QString exePath; + if (r!=0) { exePath = buf; } + else { exePath = "."; } + + QFileInfo helpFile( exePath + "\\doc\\en\\index.html" ); + if ( ! helpFile.exists() ) { helpFile.setFile( exePath + "\\..\\doc\\en\\index.html" ); } + if ( ! helpFile.exists() ) { helpFile.setFile( exePath + "\\doc\\index.html" ); } + if ( ! helpFile.exists() ) { helpFile.setFile( exePath + "\\..\\doc\\index.html" ); } + if ( ! helpFile.exists() ) + { + QMessageBox::warning( 0, "KDiff3 documentation not found", + "Couldn't find the documentation. \n\n" + "The documentation can also be found at the homepage:\n\n " + " http://kdiff3.sourceforge.net/"); + return; + } + + HINSTANCE hi = FindExecutableA( helpFile.fileName().ascii(), helpFile.dirPath(true).ascii(), buf ); + if ( int(hi)<=32 ) + { + static QTextBrowser* pBrowser = 0; + if (pBrowser==0) + { + pBrowser = new QTextBrowser( 0 ); + pBrowser->setMinimumSize( 600, 400 ); + } + pBrowser->setSource(helpFile.filePath()); + pBrowser->show(); + } + else + { + QFileInfo prog( buf ); + _spawnlp( _P_NOWAIT , prog.filePath().ascii(), prog.fileName().ascii(), ("\"file:///"+helpFile.absFilePath()+"\"").ascii(), NULL ); + } + + #else + static QTextBrowser* pBrowser = 0; + if (pBrowser==0) + { + pBrowser = new QTextBrowser( 0 ); + pBrowser->setMinimumSize( 600, 400 ); + } + pBrowser->setSource("/usr/local/share/doc/kdiff3/en/index.html"); + pBrowser->show(); + #endif +} + +QString getTranslationDir() +{ + #ifdef _WIN32 + char buf[200]; + int r= SearchPathA( 0, ".", 0, sizeof(buf), buf, 0 ); + + QString exePath; + if (r!=0) { exePath = buf; } + else { exePath = "."; } + return exePath+"/translations"; + #else + return "."; + #endif +} + +// static +void KMessageBox::error( QWidget* parent, const QString& text, const QString& caption ) +{ + QMessageBox::critical( parent, caption, text ); +} + +int KMessageBox::warningContinueCancel( QWidget* parent, const QString& text, const QString& caption, + const QString& button1 ) +{ + return 0 == QMessageBox::warning( parent, caption, text, button1, "Cancel" ) ? Continue : Cancel; +} + +void KMessageBox::sorry( QWidget* parent, const QString& text, const QString& caption ) +{ + QMessageBox::information( parent, caption, text ); +} + +void KMessageBox::information( QWidget* parent, const QString& text, const QString& caption ) +{ + QMessageBox::information( parent, caption, text ); +} + +int KMessageBox::warningYesNo( QWidget* parent, const QString& text, const QString& caption, + const QString& button1, const QString& button2 ) +{ + return 0 == QMessageBox::warning( parent, caption, text, button1, button2, QString::null, 1, 1 ) ? Yes : No; +} + +int KMessageBox::warningYesNoCancel( QWidget* parent, const QString& text, const QString& caption, + const QString& button1, const QString& button2 ) +{ + int val = QMessageBox::warning( parent, caption, text, + button1, button2, i18n("Cancel") ); + if ( val==0 ) return Yes; + if ( val==1 ) return No; + else return Cancel; +} + + +KDialogBase::KDialogBase( int, const QString& caption, int, int, QWidget* parent, const char* name, + bool /*modal*/, bool ) +: QTabDialog( parent, name, true /* modal */ ) +{ + setCaption( caption ); + setDefaultButton(); + setHelpButton(); + setCancelButton(); + //setApplyButton(); + setOkButton(); + setDefaultButton(); + + connect( this, SIGNAL( defaultButtonPressed() ), this, SLOT(slotDefault()) ); + connect( this, SIGNAL( helpButtonPressed() ), this, SLOT(slotHelp())); + connect( this, SIGNAL( applyButtonPressed() ), this, SLOT( slotApply() )); +} + +KDialogBase::~KDialogBase() +{ +} + +void KDialogBase::incInitialSize ( const QSize& ) +{ +} + +void KDialogBase::setHelp(const QString&, const QString& ) +{ +} + + +int KDialogBase::BarIcon(const QString& /*iconName*/, int ) +{ + return 0; // Not used for replacement. +} + + +QVBox* KDialogBase::addVBoxPage( const QString& name, const QString& /*info*/, int ) +{ + QVBox* p = new QVBox(this, name.ascii()); + addTab( p, name ); + return p; +} + +QFrame* KDialogBase::addPage( const QString& name, const QString& /*info*/, int ) +{ + QFrame* p = new QFrame( this, name.ascii() ); + addTab( p, name ); + return p; +} + +int KDialogBase::spacingHint() +{ + return 5; +} + +static bool s_inAccept = false; +static bool s_bAccepted = false; +void KDialogBase::accept() +{ + if( ! s_inAccept ) + { + s_bAccepted = false; + s_inAccept = true; + slotOk(); + s_inAccept = false; + if ( s_bAccepted ) + QTabDialog::accept(); + } + else + { + s_bAccepted = true; + } +} + +void KDialogBase::slotDefault( ) +{ +} +void KDialogBase::slotOk() +{ +} +void KDialogBase::slotCancel( ) +{ +} +void KDialogBase::slotApply( ) +{ + emit applyClicked(); +} +void KDialogBase::slotHelp( ) +{ + showHelp(); +} + +KURL KFileDialog::getSaveURL( const QString &startDir, + const QString &filter, + QWidget *parent, const QString &caption) +{ + QString s = QFileDialog::getSaveFileName(startDir, filter, parent, 0, caption); + return KURL(s); +} + +KURL KFileDialog::getOpenURL( const QString & startDir, + const QString & filter, + QWidget * parent, + const QString & caption ) +{ + QString s = QFileDialog::getOpenFileName(startDir, filter, parent, 0, caption); + return KURL(s); +} + +KURL KFileDialog::getExistingURL( const QString & startDir, + QWidget * parent, + const QString & caption) +{ + QString s = QFileDialog::getExistingDirectory(startDir, parent, 0, caption); + return KURL(s); +} + +QString KFileDialog::getSaveFileName (const QString &startDir, + const QString &filter, + QWidget *parent, + const QString &caption) +{ + return QFileDialog::getSaveFileName( startDir, filter, parent, 0, caption ); +} + + +KToolBar::BarPosition KToolBar::barPos() +{ + if ( m_pMainWindow->leftDock()->hasDockWindow(this) ) return Left; + if ( m_pMainWindow->rightDock()->hasDockWindow(this) ) return Right; + if ( m_pMainWindow->topDock()->hasDockWindow(this) ) return Top; + if ( m_pMainWindow->bottomDock()->hasDockWindow(this) ) return Bottom; + return Top; +} + +void KToolBar::setBarPos(BarPosition bp) +{ + if ( bp == Left ) m_pMainWindow->moveDockWindow( this, DockLeft ); + else if ( bp == Right ) m_pMainWindow->moveDockWindow( this, DockRight ); + else if ( bp == Bottom ) m_pMainWindow->moveDockWindow( this, DockBottom ); + else if ( bp == Top ) m_pMainWindow->moveDockWindow( this, DockTop ); +} + +KToolBar::KToolBar( QMainWindow* parent ) +: QToolBar( parent ) +{ + m_pMainWindow = parent; +} + + +KMainWindow::KMainWindow( QWidget* parent, const char* name ) +: QMainWindow( parent, name ), m_actionCollection(this) +{ + fileMenu = new QPopupMenu(); + menuBar()->insertItem(i18n("&File"), fileMenu); + editMenu = new QPopupMenu(); + menuBar()->insertItem(i18n("&Edit"), editMenu); + directoryMenu = new QPopupMenu(); + menuBar()->insertItem(i18n("&Directory"), directoryMenu); + dirCurrentItemMenu = 0; + dirCurrentSyncItemMenu = 0; + movementMenu = new QPopupMenu(); + menuBar()->insertItem(i18n("&Movement"), movementMenu); + diffMenu = new QPopupMenu(); + menuBar()->insertItem(i18n("D&iffview"), diffMenu); + mergeMenu = new QPopupMenu(); + menuBar()->insertItem(i18n("&Merge"), mergeMenu); + windowsMenu = new QPopupMenu(); + menuBar()->insertItem(i18n("&Window"), windowsMenu); + settingsMenu = new QPopupMenu(); + menuBar()->insertItem(i18n("&Settings"), settingsMenu); + helpMenu = new QPopupMenu(); + menuBar()->insertItem(i18n("&Help"), helpMenu); + + m_pToolBar = new KToolBar(this); + + memberList = new QList; + memberList->append(this); +} + +KToolBar* KMainWindow::toolBar(const QString&) +{ + return m_pToolBar; +} + +KActionCollection* KMainWindow::actionCollection() +{ + return &m_actionCollection; +} + +void KMainWindow::createGUI() +{ + KStdAction::help(this, SLOT(slotHelp()), actionCollection()); + KStdAction::about(this, SLOT(slotAbout()), actionCollection()); + KStdAction::aboutQt(actionCollection()); +} + +void KMainWindow::slotAbout() +{ + QTabDialog d; + d.setCaption("About " + s_appName); + QTextBrowser* tb1 = new QTextBrowser(&d); + tb1->setWordWrap( QTextEdit::NoWrap ); + tb1->setText( + s_appName + " Version " + s_version + + "\n\n" + s_description + + "\n\n" + s_copyright + + "\n\nHomepage: " + s_homepage + + "\n\nLicence: GNU GPL Version 2" + ); + d.addTab(tb1,i18n("&About")); + + std::list::iterator i; + + QString s2; + for( i=s_pAboutData->m_authorList.begin(); i!=s_pAboutData->m_authorList.end(); ++i ) + { + if ( !i->m_name.isEmpty() ) s2 += i->m_name + "\n"; + if ( !i->m_task.isEmpty() ) s2 += " " + i->m_task + "\n"; + if ( !i->m_email.isEmpty() ) s2 += " " + i->m_email + "\n"; + if ( !i->m_weblink.isEmpty() ) s2 += " " + i->m_weblink + "\n"; + s2 += "\n"; + } + QTextBrowser* tb2 = new QTextBrowser(&d); + tb2->setWordWrap( QTextEdit::NoWrap ); + tb2->setText(s2); + d.addTab(tb2,i18n("A&uthor")); + + QString s3; + for( i=s_pAboutData->m_creditList.begin(); i!=s_pAboutData->m_creditList.end(); ++i ) + { + if ( !i->m_name.isEmpty() ) s3 += i->m_name + "\n"; + if ( !i->m_task.isEmpty() ) s3 += " " + i->m_task + "\n"; + if ( !i->m_email.isEmpty() ) s3 += " " + i->m_email + "\n"; + if ( !i->m_weblink.isEmpty() ) s3 += " " + i->m_weblink + "\n"; + s3 += "\n"; + } + QTextBrowser* tb3 = new QTextBrowser(&d); + tb3->setWordWrap( QTextEdit::NoWrap ); + tb3->setText(s3); + d.addTab(tb3,i18n("&Thanks To")); + + d.resize(400,300); + d.exec(); +/* + QMessageBox::information( + this, + "About " + s_appName, + s_appName + " Version " + s_version + + "\n\n" + s_description + + "\n\n" + s_copyright + + "\n\nHomepage: " + s_homepage + + "\n\nLicence: GNU GPL Version 2" + ); +*/ +} + +void KMainWindow::slotHelp() +{ + showHelp(); +} + + +QString KStandardDirs::findResource(const QString& resource, const QString& /*appName*/) +{ + if (resource=="config") + { + QString home = QDir::homeDirPath(); + return home + "/.kdiff3rc"; + } + return QString(); +} + +KConfig::KConfig() +{ +} + +void KConfig::readConfigFile( const QString& configFileName ) +{ + if ( !configFileName.isEmpty() ) + { + m_fileName = configFileName; + } + else + { + m_fileName = KStandardDirs().findResource("config","kdiff3rc"); + } + + QFile f( m_fileName ); + if ( f.open(IO_ReadOnly) ) + { // file opened successfully + QTextStream t( &f ); // use a text stream + load(t); + f.close(); + } +} + +KConfig::~KConfig() +{ + QFile f(m_fileName); + if ( f.open( IO_WriteOnly | IO_Translate ) ) + { // file opened successfully + QTextStream t( &f ); // use a text stream + save(t); + f.close(); + } +} + +void KConfig::setGroup(const QString&) +{ +} + +void KAction::init(QObject* receiver, const char* slot, KActionCollection* actionCollection, + const char* name, bool bToggle, bool bMenu) +{ + QString n(name); + KMainWindow* p = actionCollection->m_pMainWindow; + if( slot!=0 ) + { + if (!bToggle) + connect(this, SIGNAL(activated()), receiver, slot); + else + { + connect(this, SIGNAL(toggled(bool)), receiver, slot); + } + } + + if (bMenu) + { + if( n[0]=='g') addTo( p->movementMenu ); + else if( n.left(16)=="dir_current_sync") + { + if ( p->dirCurrentItemMenu==0 ) + { + p->dirCurrentItemMenu = new QPopupMenu(); + p->directoryMenu->insertItem(i18n("Current Item Merge Operation"), p->dirCurrentItemMenu); + p->dirCurrentSyncItemMenu = new QPopupMenu(); + p->directoryMenu->insertItem(i18n("Current Item Sync Operation"), p->dirCurrentSyncItemMenu); + } + addTo( p->dirCurrentItemMenu ); + } + else if( n.left(11)=="dir_current") + { + if ( p->dirCurrentItemMenu==0 ) + { + p->dirCurrentItemMenu = new QPopupMenu(); + p->directoryMenu->insertItem(i18n("Current Item Merge Operation"), p->dirCurrentItemMenu); + p->dirCurrentSyncItemMenu = new QPopupMenu(); + p->directoryMenu->insertItem(i18n("Current Item Sync Operation"), p->dirCurrentSyncItemMenu); + } + addTo( p->dirCurrentSyncItemMenu ); + } + else if( n.left(4)=="diff") addTo( p->diffMenu ); + else if( name[0]=='d') addTo( p->directoryMenu ); + else if( name[0]=='f') addTo( p->fileMenu ); + else if( name[0]=='w') addTo( p->windowsMenu ); + else addTo( p->mergeMenu ); + } +} + + +KAction::KAction(const QString& text, const QIconSet& icon, int accel, + QObject* receiver, const char* slot, KActionCollection* actionCollection, + const char* name, bool bToggle, bool bMenu + ) +: QAction ( text, icon, text, accel, actionCollection->m_pMainWindow, name, bToggle ) +{ + KMainWindow* p = actionCollection->m_pMainWindow; + if ( !icon.isNull() && p ) this->addTo( p->m_pToolBar ); + + init(receiver,slot,actionCollection,name,bToggle,bMenu); +} + +KAction::KAction(const QString& text, int accel, + QObject* receiver, const char* slot, KActionCollection* actionCollection, + const char* name, bool bToggle, bool bMenu + ) +: QAction ( text, text, accel, actionCollection->m_pMainWindow, name, bToggle ) +{ + init(receiver,slot,actionCollection,name,bToggle,bMenu); +} + +void KAction::setStatusText(const QString&) +{ +} + +void KAction::plug(QPopupMenu* menu) +{ + addTo(menu); +} + + +KToggleAction::KToggleAction(const QString& text, const QIconSet& icon, int accel, QObject* receiver, const char* slot, KActionCollection* actionCollection, const char* name, bool bMenu) +: KAction( text, icon, accel, receiver, slot, actionCollection, name, true, bMenu) +{ +} + +KToggleAction::KToggleAction(const QString& text, int accel, QObject* receiver, const char* slot, KActionCollection* actionCollection, const char* name, bool bMenu) +: KAction( text, accel, receiver, slot, actionCollection, name, true, bMenu) +{ +} + +KToggleAction::KToggleAction(const QString& text, const QIconSet& icon, int accel, KActionCollection* actionCollection, const char* name, bool bMenu) +: KAction( text, icon, accel, 0, 0, actionCollection, name, true, bMenu) +{ +} + +void KToggleAction::setChecked(bool bChecked) +{ + blockSignals( true ); + setOn( bChecked ); + blockSignals( false ); +} + +bool KToggleAction::isChecked() +{ + return isOn(); +} + + + +//static +KAction* KStdAction::open( QWidget* parent, const char* slot, KActionCollection* actionCollection) +{ + #include "../xpm/fileopen.xpm" + KMainWindow* p = actionCollection->m_pMainWindow; + KAction* a = new KAction( i18n("Open"), QIconSet(QPixmap(fileopen)), Qt::CTRL+Qt::Key_O, parent, slot, actionCollection, "open", false, false); + if(p){ a->addTo( p->fileMenu ); } + return a; +} + +KAction* KStdAction::save( QWidget* parent, const char* slot, KActionCollection* actionCollection ) +{ + #include "../xpm/filesave.xpm" + KMainWindow* p = actionCollection->m_pMainWindow; + KAction* a = new KAction( i18n("Save"), QIconSet(QPixmap(filesave)), Qt::CTRL+Qt::Key_S, parent, slot, actionCollection, "save", false, false); + if(p){ a->addTo( p->fileMenu ); } + return a; +} + +KAction* KStdAction::saveAs( QWidget* parent, const char* slot, KActionCollection* actionCollection) +{ + KMainWindow* p = actionCollection->m_pMainWindow; + KAction* a = new KAction( i18n("Save As..."), 0, parent, slot, actionCollection, "saveas", false, false); + if(p) a->addTo( p->fileMenu ); + return a; +} + +KAction* KStdAction::print( QWidget* parent, const char* slot, KActionCollection* actionCollection) +{ + #include "../xpm/fileprint.xpm" + KMainWindow* p = actionCollection->m_pMainWindow; + KAction* a = new KAction( i18n("Print..."), QIconSet(QPixmap(fileprint)),Qt::CTRL+Qt::Key_P, parent, slot, actionCollection, "print", false, false); + if(p) a->addTo( p->fileMenu ); + return a; +} + +KAction* KStdAction::quit( QWidget* parent, const char* slot, KActionCollection* actionCollection) +{ + KMainWindow* p = actionCollection->m_pMainWindow; + KAction* a = new KAction( i18n("Quit"), Qt::CTRL+Qt::Key_Q, parent, slot, actionCollection, "quit", false, false); + if(p) a->addTo( p->fileMenu ); + return a; +} + +KAction* KStdAction::cut( QWidget* parent, const char* slot, KActionCollection* actionCollection) +{ + KMainWindow* p = actionCollection->m_pMainWindow; + KAction* a = new KAction( i18n("Cut"), Qt::CTRL+Qt::Key_X, parent, slot, actionCollection, "cut", false, false ); + if(p) a->addTo( p->editMenu ); + return a; +} + +KAction* KStdAction::copy( QWidget* parent, const char* slot, KActionCollection* actionCollection) +{ + KMainWindow* p = actionCollection->m_pMainWindow; + KAction* a = new KAction( i18n("Copy"), Qt::CTRL+Qt::Key_C, parent, slot, actionCollection, "copy", false, false ); + if(p) a->addTo( p->editMenu ); + return a; +} + +KAction* KStdAction::paste( QWidget* parent, const char* slot, KActionCollection* actionCollection) +{ + KMainWindow* p = actionCollection->m_pMainWindow; + KAction* a = new KAction( i18n("Paste"), Qt::CTRL+Qt::Key_V, parent, slot, actionCollection, "paste", false, false ); + if(p) a->addTo( p->editMenu ); + return a; +} + +KAction* KStdAction::selectAll( QWidget* parent, const char* slot, KActionCollection* actionCollection) +{ + KMainWindow* p = actionCollection->m_pMainWindow; + KAction* a = new KAction( i18n("Select All"), Qt::CTRL+Qt::Key_A, parent, slot, actionCollection, "selectall", false, false ); + if(p) a->addTo( p->editMenu ); + return a; +} + +KToggleAction* KStdAction::showToolbar( QWidget* parent, const char* slot, KActionCollection* actionCollection) +{ + KMainWindow* p = actionCollection->m_pMainWindow; + KToggleAction* a = new KToggleAction( i18n("Show Toolbar"), 0, parent, slot, actionCollection, "showtoolbar", false ); + if(p) a->addTo( p->settingsMenu ); + return a; +} + +KToggleAction* KStdAction::showStatusbar( QWidget* parent, const char* slot, KActionCollection* actionCollection) +{ + KMainWindow* p = actionCollection->m_pMainWindow; + KToggleAction* a = new KToggleAction( i18n("Show &Statusbar"), 0, parent, slot, actionCollection, "showstatusbar", false ); + if(p) a->addTo( p->settingsMenu ); + return a; +} + +KAction* KStdAction::preferences( QWidget* parent, const char* slot, KActionCollection* actionCollection) +{ + KMainWindow* p = actionCollection->m_pMainWindow; + KAction* a = new KAction( i18n("&Configure %1...").arg("KDiff3"), 0, parent, slot, actionCollection, "settings", false, false ); + if(p) a->addTo( p->settingsMenu ); + return a; +} +KAction* KStdAction::keyBindings( QWidget*, const char*, KActionCollection*) +{ + return 0; +} + +KAction* KStdAction::about( QWidget* parent, const char* slot, KActionCollection* actionCollection) +{ + KMainWindow* p = actionCollection->m_pMainWindow; + KAction* a = new KAction( i18n("About")+" KDiff3", 0, parent, slot, actionCollection, "about_kdiff3", false, false ); + if(p) a->addTo( p->helpMenu ); + return a; +} + +KAction* KStdAction::aboutQt( KActionCollection* actionCollection ) +{ + KMainWindow* p = actionCollection->m_pMainWindow; + KAction* a = new KAction( i18n("About")+" Qt", 0, qApp, SLOT(aboutQt()), actionCollection, "about_qt", false, false ); + if(p) a->addTo( p->helpMenu ); + return a; +} + +KAction* KStdAction::help( QWidget* parent, const char* slot, KActionCollection* actionCollection) +{ + KMainWindow* p = actionCollection->m_pMainWindow; + KAction* a = new KAction( i18n("Help"), Qt::Key_F1, parent, slot, actionCollection, "help", false, false ); + if(p) a->addTo( p->helpMenu ); + return a; +} +KAction* KStdAction::find( QWidget* parent, const char* slot, KActionCollection* actionCollection) +{ + KMainWindow* p = actionCollection->m_pMainWindow; + KAction* a = new KAction( i18n("Find"), Qt::CTRL+Qt::Key_F, parent, slot, actionCollection, "find", false, false ); + if(p) a->addTo( p->editMenu ); + return a; +} + +KAction* KStdAction::findNext( QWidget* parent, const char* slot, KActionCollection* actionCollection) +{ + KMainWindow* p = actionCollection->m_pMainWindow; + KAction* a = new KAction( i18n("Find Next"), Qt::Key_F3, parent, slot, actionCollection, "findNext", false, false ); + if(p) a->addTo( p->editMenu ); + return a; +} + + + + +KFontChooser::KFontChooser( QWidget* pParent, const QString& /*name*/, bool, const QStringList&, bool, int ) +: QWidget(pParent) +{ + m_pParent = pParent; + QVBoxLayout* pLayout = new QVBoxLayout( this ); + m_pSelectFont = new QPushButton(i18n("Select Font"), this ); + connect(m_pSelectFont, SIGNAL(clicked()), this, SLOT(slotSelectFont())); + pLayout->addWidget(m_pSelectFont); + + m_pLabel = new QLabel( "", this ); + m_pLabel->setFont( m_font ); + m_pLabel->setMinimumWidth(200); + m_pLabel->setText( "The quick brown fox jumps over the river\n" + "but the little red hen escapes with a shiver.\n" + ":-)"); + pLayout->addWidget(m_pLabel); +} + +QFont KFontChooser::font() +{ + return m_font;//QFont("courier",10); +} + +void KFontChooser::setFont( const QFont& font, bool ) +{ + m_font = font; + m_pLabel->setFont( m_font ); + //update(); +} + +void KFontChooser::slotSelectFont() +{ + for(;;) + { + bool bOk; + m_font = QFontDialog::getFont(&bOk, m_font ); + m_pLabel->setFont( m_font ); + QFontMetrics fm(m_font); + + // Variable width font. + if ( fm.width('W')!=fm.width('i') ) + { + int result = KMessageBox::warningYesNo(m_pParent, i18n( + "You selected a variable width font.\n\n" + "Because this program doesn't handle variable width fonts\n" + "correctly, you might experience problems while editing.\n\n" + "Do you want to continue or do you want to select another font."), + i18n("Incompatible font."), + i18n("Continue at my own risk"), i18n("Select another font")); + if (result==KMessageBox::Yes) + return; + } + else + return; + } +} + + +KColorButton::KColorButton(QWidget* parent) +: QPushButton(parent) +{ + connect( this, SIGNAL(clicked()), this, SLOT(slotClicked())); +} + +QColor KColorButton::color() +{ + return m_color; +} + +void KColorButton::setColor( const QColor& color ) +{ + m_color = color; + update(); +} + +void KColorButton::paintEvent( QPaintEvent* e ) +{ + QPushButton::paintEvent(e); + QPainter p(this); + + int w = width(); + int h = height(); + p.fillRect( 10, 5, w-20, h-10, m_color ); + p.drawRect( 10, 5, w-20, h-10 ); +} + +void KColorButton::slotClicked() +{ + // Under Windows ChooseColor() should be used. (Nicer if few colors exist.) + QColor c = QColorDialog::getColor ( m_color, this ); + if ( c.isValid() ) m_color = c; + update(); +} + +KPrinter::KPrinter() +{ +} +QValueList KPrinter::pageList() +{ + QValueList vl; + int to = toPage(); + for(int i=fromPage(); i<=to; ++i) + { + vl.push_back(i); + } + return vl; +} +void KPrinter::setCurrentPage(int) +{ +} +void KPrinter::setPageSelection(e_PageSelection) +{ +} + + +QPixmap KIconLoader::loadIcon( const QString&, int ) +{ + return QPixmap(); +} + +KAboutData::KAboutData( const QString& /*name*/, const QString& appName, const QString& version, + const QString& description, int, + const QString& copyright, int, const QString& homepage, const QString& email) +{ + s_copyright = copyright; + s_email = email; + s_appName = appName; + s_description = description; + s_version = version; + s_homepage = homepage; +} + +KAboutData::KAboutData( const QString& /*name*/, const QString& /*appName*/, const QString& /*version*/ ) +{ +} + +void KAboutData::addAuthor(const char* name, const char* task, const char* email, const char* weblink) +{ + m_authorList.push_back( AboutDataEntry( name, task, email, weblink) ); +} + +void KAboutData::addCredit(const char* name, const char* task, const char* email, const char* weblink) +{ + m_creditList.push_back( AboutDataEntry( name, task, email, weblink) ); +} + +/* Option structure: e.g.: + { "m", 0, 0 }, + { "merge", I18N_NOOP("Automatically merge the input."), 0 }, + { "o", 0, 0 }, + { "output file", I18N_NOOP("Output file. Implies -m. E.g.: -o newfile.txt"), 0 }, + { "+[File1]", I18N_NOOP("file1 to open (base)"), 0 }, + { "+[File2]", I18N_NOOP("file2 to open"), 0 }, + { "+[File3]", I18N_NOOP("file3 to open"), 0 }, +*/ +//////////////// +static KCmdLineArgs s_cmdLineArgs; +static int s_argc; +static char** s_argv; +static KCmdLineOptions* s_pOptions; + +static std::vector s_vOption; +static std::vector s_vArg; + +KCmdLineArgs* KCmdLineArgs::parsedArgs() // static +{ + return &s_cmdLineArgs; +} + +void KCmdLineArgs::init( int argc, char**argv, KAboutData* pAboutData ) // static +{ + s_argc = argc; + s_argv = argv; + s_pAboutData = pAboutData; +} + +void KCmdLineArgs::addCmdLineOptions( KCmdLineOptions* options ) // static +{ + s_pOptions = options; +} + +int KCmdLineArgs::count() +{ + return s_vArg.size(); +} + +QString KCmdLineArgs::arg(int idx) +{ + return QString::fromLocal8Bit( s_vArg[idx] ); +} + +void KCmdLineArgs::clear() +{ +} + +QString KCmdLineArgs::getOption( const QString& s ) +{ + // Find the option + int j=0; + for( j=0; j<(int)s_vOption.size(); ++j ) + { + const char* optName = s_pOptions[j].name; + const char* pos = strchr( optName,' ' ); + int len = pos==0 ? strlen( optName ) : pos - optName; + + if( s == (const char*)( QCString( optName, len+1) ) ) + { + return s_vOption[j].isEmpty() ? QString() : s_vOption[j].last(); + } + } + assert(false); + return QString(); +} + +QCStringList KCmdLineArgs::getOptionList( const QString& s ) +{ + // Find the option + int j=0; + for( j=0; j<(int)s_vOption.size(); ++j ) + { + const char* optName = s_pOptions[j].name; + const char* pos = strchr( optName,' ' ); + int len = pos==0 ? strlen( optName ) : pos - optName; + + if( s == (const char*)( QCString( optName, len+1) ) ) + { + return s_vOption[j]; + } + } + + assert(false); + return QCStringList(); +} + +bool KCmdLineArgs::isSet(const QString& s) +{ + // Find the option + int j=0; + for( j=0; j<(int)s_vOption.size(); ++j ) + { + const char* optName = s_pOptions[j].name; + if( s == QString( optName ) ) + { + return ! s_vOption[j].isEmpty(); + } + } + assert(false); + return false; +} + +/////////////////// +KApplication* kapp; + +KApplication::KApplication() +: QApplication( s_argc,s_argv ) +{ + kapp = this; + + int nofOptions=0; + int nofArgs=0; + int i=0; + while( s_pOptions[i].name != 0 ) + { + if ( s_pOptions[i].name[0]=='[' ) + nofArgs++; + else + nofOptions++; + + ++i; + } + + // First find the option "-config" or "--config" to allow loading of options + QString configFileName; + for( i=1; i0 && ( s_argv[i][1]=='-' && len2-2==len && memcmp( &s_argv[i][2], optName, len )==0 || + len2-1==len && memcmp( &s_argv[i][1], optName, len )==0 )) + { + if (s_pOptions[j].description == 0) // alias, because without description. + { + ++j; + optName = s_pOptions[j].name; + pos = strchr( optName,' ' ); + } + if (pos!=0){ ++i; s_vOption[j].append(s_argv[i]); } //use param + else { s_vOption[j].append("1"); } //set state + break; + } + } + if (j==nofOptions) + { + QString s; + s = QString("Unknown option: ") + s_argv[i] + "\n"; + s += "If KDiff3 should ignore this option, run KDiff3 normally and edit\n" + "the \"Command line options to ignore\" in the \"Integration Settings\".\n\n"; + + s += "KDiff3-Usage when starting via commandline: \n"; + s += "- Comparing 2 files:\t\tkdiff3 file1 file2\n"; + s += "- Merging 2 files: \t\tkdiff3 file1 file2 -o outputfile\n"; + s += "- Comparing 3 files:\t\tkdiff3 file1 file2 file3\n"; + s += "- Merging 3 files: \t\tkdiff3 file1 file2 file3 -o outputfile\n"; + s += " Note that file1 will be treated as base of file2 and file3.\n"; + s += "\n"; + s += "If you start without arguments, then a dialog will appear\n"; + s += "where you can select your files via a filebrowser.\n"; + s += "\n"; + + s += "Options:\n"; + + j=0; + int pos=s.length(); + for( j=0; j1 ) s += "-"; + } + s += s_pOptions[j].name; + s += QString().fill(' ', minMaxLimiter( 20 - ((int)s.length()-pos), 3, 20 ) ); + s += s_pOptions[j].description; + s +="\n"; + pos=s.length(); + } + else + { + s += "-"; + if ( strlen(s_pOptions[j].name)>1 ) s += "-"; + s += s_pOptions[j].name; + s += ", "; + } + } + + s += "\n"+i18n("For more documentation, see the help-menu or the subdirectory doc.")+"\n"; +#ifdef _WIN32 + // A windows program has no console + if ( 0==QMessageBox::information(0, i18n("KDiff3-Usage"), s, i18n("Ignore"),i18n("Exit") ) ) + continue; +#else + std::cerr << s.latin1() << std::endl; +#endif + + ::exit(-1); + } + } + else + s_vArg.push_back( s_argv[i] ); + } +} + +KConfig* KApplication::config() +{ + return &m_config; +} + +bool KApplication::isRestored() +{ + return false; +} + +KApplication* KApplication::kApplication() +{ + return kapp; +} + +KIconLoader* KApplication::iconLoader() +{ + return &m_iconLoader; +} + + +namespace KIO +{ + SimpleJob* mkdir( KURL ){return 0;} + SimpleJob* rmdir( KURL ){return 0;} + SimpleJob* file_delete( KURL, bool ){return 0;} + FileCopyJob* file_move( KURL, KURL, int, bool, bool, bool ) {return 0;} + FileCopyJob* file_copy( KURL, KURL, int, bool, bool, bool ) {return 0;} + CopyJob* link( KURL, KURL, bool ) {return 0;} + ListJob* listRecursive( KURL, bool, bool ){return 0;} + ListJob* listDir( KURL, bool, bool ){return 0;} + StatJob* stat( KURL, bool, int, bool ){return 0;} + TransferJob* get( KURL, bool, bool ){return (TransferJob*)0;} + TransferJob* put( KURL, int, bool, bool, bool ){return (TransferJob*)0;} +}; + +KActionCollection* KParts::Part::actionCollection() +{ + return 0; +} + +KApplication* KParts::Part::instance() +{ + return kapp; +} + + +KLibLoader* KLibLoader::self() +{ + static KLibLoader ll; + return ≪ +} + +extern "C" void* init_libkdiff3part(); +KLibFactory* KLibLoader::factory(QString const&) +{ + return (KLibFactory*) init_libkdiff3part(); +} + +QObject* KLibFactory::create(QObject* pParent, const QString& name, const QString& classname ) +{ + KParts::Factory* f = dynamic_cast(this); + if (f!=0) + return f->createPartObject( (QWidget*)pParent, name.ascii(), + pParent, name.ascii(), + classname.ascii(), QStringList() ); + else + return 0; +} + + + + +#include "kreplacements.moc" diff --git a/src/kreplacements/kreplacements.h b/src/kreplacements/kreplacements.h new file mode 100644 index 0000000..1402d51 --- /dev/null +++ b/src/kreplacements/kreplacements.h @@ -0,0 +1,505 @@ +/*************************************************************************** + kreplacements.h - description + ------------------- + begin : Sat Aug 3 2002 + copyright : (C) 2002-2007 by Joachim Eibl + email : joachim.eibl at gmx.de + ***************************************************************************/ + +/*************************************************************************** + * * + * 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. * + * * + ***************************************************************************/ + +#ifndef KREPLACEMENTS_H +#define KREPLACEMENTS_H + +#include "common.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +QString getTranslationDir(); + +class KMainWindow; + +class KURL +{ +public: + KURL(){} + KURL(const QString& s){ m_s = s; } + static KURL fromPathOrURL( const QString& s ){ return KURL(s); } + QString url() const { return m_s; } + bool isEmpty() const { return m_s.isEmpty(); } + QString prettyURL() const { return m_s; } + bool isLocalFile() const { return true; } + bool isValid() const { return true; } + QString path() const { return m_s; } + void setPath( const QString& s ){ m_s=s; } + QString fileName() const { return m_s; } // not really needed + void addPath( const QString& s ){ m_s += "/" + s; } +private: + QString m_s; +}; + +class KMessageBox +{ +public: + static void error( QWidget* parent, const QString& text, const QString& caption=QString() ); + static int warningContinueCancel( QWidget* parent, const QString& text, const QString& caption=QString(), + const QString& button1=QString("Continue") ); + static void sorry( QWidget* parent, const QString& text, const QString& caption=QString() ); + static void information( QWidget* parent, const QString& text, const QString& caption=QString() ); + static int warningYesNo( QWidget* parent, const QString& text, const QString& caption, + const QString& button1, const QString& button2 ); + static int warningYesNoCancel( + QWidget* parent, const QString& text, const QString& caption, + const QString& button1, const QString& button2 ); + + enum {Cancel=-1, No=0, Yes=1, Continue=1}; +}; + +#define i18n(x) QObject::tr(x) +#define I18N_NOOP(x) x +#define RESTORE(x) +#define _UNLOAD(x) + +typedef QPopupMenu KPopupMenu; + +class KDialogBase : public QTabDialog +{ + Q_OBJECT +public: + KDialogBase( int, const QString& caption, int, int, QWidget* parent, const char* name, + bool /*modal*/, bool ); + ~KDialogBase(); + + void incInitialSize ( const QSize& ); + void setHelp(const QString& helpfilename, const QString& ); + enum {IconList, Help, Default, Apply, Ok, Cancel }; + + int BarIcon(const QString& iconName, int ); + + QVBox* addVBoxPage( const QString& name, const QString& info, int ); + QFrame* addPage( const QString& name, const QString& info, int ); + int spacingHint(); + + virtual void accept(); +signals: + void applyClicked(); + +protected slots: + virtual void slotOk( void ); + virtual void slotApply( void ); + virtual void slotHelp( void ); + virtual void slotCancel( void ); + virtual void slotDefault( void ); +}; + +class KFileDialog : public QFileDialog +{ +public: + static KURL getSaveURL( const QString &startDir=QString::null, + const QString &filter=QString::null, + QWidget *parent=0, const QString &caption=QString::null); + static KURL getOpenURL( const QString & startDir = QString::null, + const QString & filter = QString::null, + QWidget * parent = 0, + const QString & caption = QString::null ); + static KURL getExistingURL( const QString & startDir = QString::null, + QWidget * parent = 0, + const QString & caption = QString::null ); + static QString getSaveFileName (const QString &startDir=QString::null, + const QString &filter=QString::null, + QWidget *parent=0, + const QString &caption=QString::null); +}; + +typedef QStatusBar KStatusBar; + +class KToolBar : public QToolBar +{ +public: + KToolBar(QMainWindow* parent); + + enum BarPosition {Top, Bottom, Left, Right}; + BarPosition barPos(); + void setBarPos(BarPosition); +private: + QMainWindow* m_pMainWindow; +}; + +class KActionCollection +{ +public: + KMainWindow* m_pMainWindow; + KActionCollection( KMainWindow* p){ m_pMainWindow=p; } +}; + +class KKeyDialog +{ +public: + static void configure(void*, QWidget*){} + static void configureKeys(KActionCollection*, const QString&){} + static void configure(KActionCollection*, const QString&){} +}; + +namespace KParts +{ + class ReadWritePart; +} + +class KMainWindow : public QMainWindow +{ + Q_OBJECT +private: + KStatusBar m_statusBar; + KActionCollection m_actionCollection; +protected: + virtual bool queryClose() = 0; + virtual bool queryExit() = 0; +public: + QPopupMenu* fileMenu; + QPopupMenu* editMenu; + QPopupMenu* directoryMenu; + QPopupMenu* dirCurrentItemMenu; + QPopupMenu* dirCurrentSyncItemMenu; + QPopupMenu* movementMenu; + QPopupMenu* mergeMenu; + QPopupMenu* diffMenu; + QPopupMenu* windowsMenu; + QPopupMenu* settingsMenu; + QPopupMenu* helpMenu; + + KToolBar* m_pToolBar; + + KMainWindow( QWidget* parent, const char* name ); + KToolBar* toolBar(const QString& s = QString::null); + KActionCollection* actionCollection(); + void createGUI(); + void createGUI(KParts::ReadWritePart*){createGUI();} + + QList* memberList; +public slots: + void slotHelp(); + void slotAbout(); +}; + +class KConfig : public ValueMap +{ + QString m_fileName; +public: + KConfig(); + ~KConfig(); + void readConfigFile(const QString& configFileName); + + void setGroup(const QString&); +}; + +class KAction : public QAction +{ + Q_OBJECT +public: + KAction(const QString& text, const QIconSet& icon, int accel, QObject* receiver, const char* slot, KActionCollection* actionCollection, const char* name, bool bToggle=false, bool bMenu=true); + KAction(const QString& text, int accel, QObject* receiver, const char* slot, KActionCollection* actionCollection, const char* name, bool bToggle=false, bool bMenu=true); + void init(QObject* receiver, const char* slot, KActionCollection* actionCollection, + const char* name, bool bToggle, bool bMenu); + void setStatusText(const QString&); + void plug(QPopupMenu*); +}; + +class KToggleAction : public KAction +{ +public: + KToggleAction(const QString& text, const QIconSet& icon, int accel, QObject* receiver, const char* slot, KActionCollection* actionCollection, const char* name, bool bMenu=true); + KToggleAction(const QString& text, int accel, QObject* receiver, const char* slot, KActionCollection* actionCollection, const char* name, bool bMenu=true); + KToggleAction(const QString& text, const QIconSet& icon, int accel, KActionCollection* actionCollection, const char* name, bool bMenu=true); + void setChecked(bool); + bool isChecked(); +}; + + +class KStdAction +{ +public: + static KAction* open( QWidget* parent, const char* slot, KActionCollection* ); + static KAction* save( QWidget* parent, const char* slot, KActionCollection* ); + static KAction* saveAs( QWidget* parent, const char* slot, KActionCollection* ); + static KAction* print( QWidget* parent, const char* slot, KActionCollection* ); + static KAction* quit( QWidget* parent, const char* slot, KActionCollection* ); + static KAction* cut( QWidget* parent, const char* slot, KActionCollection* ); + static KAction* copy( QWidget* parent, const char* slot, KActionCollection* ); + static KAction* paste( QWidget* parent, const char* slot, KActionCollection* ); + static KAction* selectAll( QWidget* parent, const char* slot, KActionCollection* ); + static KToggleAction* showToolbar( QWidget* parent, const char* slot, KActionCollection* ); + static KToggleAction* showStatusbar( QWidget* parent, const char* slot, KActionCollection* ); + static KAction* preferences( QWidget* parent, const char* slot, KActionCollection* ); + static KAction* about( QWidget* parent, const char* slot, KActionCollection* ); + static KAction* aboutQt( KActionCollection* ); + static KAction* help( QWidget* parent, const char* slot, KActionCollection* ); + static KAction* find( QWidget* parent, const char* slot, KActionCollection* ); + static KAction* findNext( QWidget* parent, const char* slot, KActionCollection* ); + static KAction* keyBindings( QWidget* parent, const char* slot, KActionCollection* ); +}; + +class KIcon +{ +public: + enum {SizeMedium,Small}; +}; + +class KFontChooser : public QWidget +{ + Q_OBJECT + QFont m_font; + QPushButton* m_pSelectFont; + QLabel* m_pLabel; + QWidget* m_pParent; +public: + KFontChooser( QWidget* pParent, const QString& name, bool, const QStringList&, bool, int ); + QFont font(); + void setFont( const QFont&, bool ); +private slots: + void slotSelectFont(); +}; + +class KColorButton : public QPushButton +{ + Q_OBJECT + QColor m_color; +public: + KColorButton(QWidget* parent); + QColor color(); + void setColor(const QColor&); + virtual void paintEvent(QPaintEvent* e); +public slots: + void slotClicked(); +}; + +class KPrinter : public QPrinter +{ +public: + KPrinter(); + enum e_PageSelection {ApplicationSide}; + QValueList pageList(); + void setCurrentPage(int); + void setPageSelection(e_PageSelection); +}; + +class KStandardDirs +{ +public: + QString findResource(const QString& resource, const QString& appName); +}; + +struct KCmdLineOptions +{ + const char* name; + const char* description; + int def; +}; + +#define KCmdLineLastOption {0,0,0} + +class KAboutData +{ +public: + KAboutData( const QString& name, const QString& appName, const QString& version, + const QString& description, int licence, + const QString& copyright, int w, const QString& homepage, const QString& email); + KAboutData( const QString& name, const QString& appName, const QString& version ); + void addAuthor(const char* name=0, const char* task=0, const char* email=0, const char* weblink=0); + void addCredit(const char* name=0, const char* task=0, const char* email=0, const char* weblink=0); + enum { License_GPL }; + + struct AboutDataEntry + { + AboutDataEntry(const QString& name, const QString& task, const QString& email, const QString& weblink) + : m_name(name), m_task(task), m_email(email), m_weblink(weblink) + {} + QString m_name; + QString m_task; + QString m_email; + QString m_weblink; + }; + + std::list m_authorList; + std::list m_creditList; +}; + +typedef QValueList QCStringList; + +class KCmdLineArgs +{ +public: + static KCmdLineArgs* parsedArgs(); + static void init( int argc, char**argv, KAboutData* ); + static void addCmdLineOptions( KCmdLineOptions* options ); // Add our own options. + + int count(); + QString arg(int); + KURL url(int i){ return KURL(arg(i)); } + void clear(); + QString getOption(const QString&); + QCStringList getOptionList( const QString& ); + bool isSet(const QString&); +}; + +class KIconLoader +{ +public: + QPixmap loadIcon(const QString& name, int); +}; + +class KApplication : public QApplication +{ + KConfig m_config; + KIconLoader m_iconLoader; +public: + KApplication(); + static KApplication* kApplication(); + KIconLoader* iconLoader(); + KConfig* config(); + bool isRestored(); +}; + +extern KApplication* kapp; + +class KLibFactory : public QObject +{ + Q_OBJECT +public: + QObject* create(QObject*,const QString&,const QString&); +}; + +class KLibLoader +{ +public: + static KLibLoader* self(); + KLibFactory* factory(const QString&); +}; + +class KEditToolbar : public QDialog +{ +public: + KEditToolbar( int ){} +}; + +class KGlobal +{ +public: + static KConfig* config() { return 0; } +}; + +namespace KIO +{ + enum UDSEntry {}; + typedef QValueList UDSEntryList; + class Job : public QObject + { + public: + void kill(bool){} + bool error() {return false;} + void showErrorDialog( QWidget* ) {} + }; + class SimpleJob : public Job {}; + SimpleJob* mkdir( KURL ); + SimpleJob* rmdir( KURL ); + SimpleJob* file_delete( KURL, bool ); + class FileCopyJob : public Job {}; + FileCopyJob* file_move( KURL, KURL, int, bool, bool, bool ); + FileCopyJob* file_copy( KURL, KURL, int, bool, bool, bool ); + class CopyJob : public Job {}; + CopyJob* link( KURL, KURL, bool ); + class ListJob : public Job {}; + ListJob* listRecursive( KURL, bool, bool ); + ListJob* listDir( KURL, bool, bool ); + class StatJob : public Job { + public: UDSEntry statResult(){ return (UDSEntry)0; } + }; + StatJob* stat( KURL, bool, int, bool ); + class TransferJob : public Job {}; + TransferJob* get( KURL, bool, bool ); + TransferJob* put( KURL, int, bool, bool, bool ); +}; + +typedef QProgressBar KProgress; + +class KInstance : public QObject +{ +public: + KInstance(KAboutData*){} +}; + +namespace KParts +{ + class MainWindow : public KMainWindow + { + public: + MainWindow( QWidget* parent, const char* name ) : KMainWindow(parent,name) {} + void setXMLFile(const QString&){} + void setAutoSaveSettings(){} + void saveMainWindowSettings(KConfig*){} + void applyMainWindowSettings(KConfig*){} + int factory(){return 0;} + }; + + class Part : public QObject + { + public: + KActionCollection* actionCollection(); + KApplication* instance(); + void setWidget( QWidget* w ){ m_pWidget=w; } + QWidget* widget(){return m_pWidget;} + void setXMLFile(const QString&){} + private: + QWidget* m_pWidget; + }; + + class ReadOnlyPart : public Part + { + public: + ReadOnlyPart(){} + ReadOnlyPart(QObject*,const QCString&){} + void setInstance( KInstance* ){} + QString m_file; + }; + + class ReadWritePart : public ReadOnlyPart + { + public: + ReadWritePart(QObject*,const QCString&){} + void setReadWrite(bool){} + }; + + class Factory : public KLibFactory + { + Q_OBJECT + public: + virtual KParts::Part* createPartObject( QWidget *parentWidget, const char *widgetName, + QObject *parent, const char *name, + const char *classname, const QStringList &args )=0; + }; +}; +#endif + + diff --git a/src/kreplacements/kstandarddirs.h b/src/kreplacements/kstandarddirs.h new file mode 100644 index 0000000..53443ee --- /dev/null +++ b/src/kreplacements/kstandarddirs.h @@ -0,0 +1,2 @@ +#include "kreplacements.h" + diff --git a/src/kreplacements/kstatusbar.h b/src/kreplacements/kstatusbar.h new file mode 100644 index 0000000..53443ee --- /dev/null +++ b/src/kreplacements/kstatusbar.h @@ -0,0 +1,2 @@ +#include "kreplacements.h" + diff --git a/src/kreplacements/kstdaction.h b/src/kreplacements/kstdaction.h new file mode 100644 index 0000000..53443ee --- /dev/null +++ b/src/kreplacements/kstdaction.h @@ -0,0 +1,2 @@ +#include "kreplacements.h" + diff --git a/src/kreplacements/ktempfile.h b/src/kreplacements/ktempfile.h new file mode 100644 index 0000000..53443ee --- /dev/null +++ b/src/kreplacements/ktempfile.h @@ -0,0 +1,2 @@ +#include "kreplacements.h" + diff --git a/src/kreplacements/kunload.h b/src/kreplacements/kunload.h new file mode 100644 index 0000000..53443ee --- /dev/null +++ b/src/kreplacements/kunload.h @@ -0,0 +1,2 @@ +#include "kreplacements.h" + diff --git a/src/kreplacements/kurl.h b/src/kreplacements/kurl.h new file mode 100644 index 0000000..53443ee --- /dev/null +++ b/src/kreplacements/kurl.h @@ -0,0 +1,2 @@ +#include "kreplacements.h" + diff --git a/src/kreplacements/kurldrag.h b/src/kreplacements/kurldrag.h new file mode 100644 index 0000000..53443ee --- /dev/null +++ b/src/kreplacements/kurldrag.h @@ -0,0 +1,2 @@ +#include "kreplacements.h" + diff --git a/src/lo16-app-kdiff3.png b/src/lo16-app-kdiff3.png new file mode 100644 index 0000000..50e3397 Binary files /dev/null and b/src/lo16-app-kdiff3.png differ diff --git a/src/lo32-app-kdiff3.png b/src/lo32-app-kdiff3.png new file mode 100644 index 0000000..cd269b2 Binary files /dev/null and b/src/lo32-app-kdiff3.png differ diff --git a/src/main.cpp b/src/main.cpp new file mode 100644 index 0000000..6e19b58 --- /dev/null +++ b/src/main.cpp @@ -0,0 +1,236 @@ +/*************************************************************************** + main.cpp - Where everything starts. + ------------------- + begin : Don Jul 11 12:31:29 CEST 2002 + copyright : (C) 2002-2007 by Joachim Eibl + email : joachim.eibl at gmx.de + ***************************************************************************/ + +/*************************************************************************** + * * + * 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. * + * * + ***************************************************************************/ + +#include +#include +#include +#include "kdiff3_shell.h" +#include +#include "version.h" +#include +#include +#include +#include + +#ifdef KREPLACEMENTS_H +#include "optiondialog.h" +#endif +#include "common.h" + +static const char *description = + I18N_NOOP("Tool for Comparison and Merge of Files and Directories"); + +static KCmdLineOptions options[] = +{ + { "m", 0, 0 }, + { "merge", I18N_NOOP("Merge the input."), 0 }, + { "b", 0, 0 }, + { "base file", I18N_NOOP("Explicit base file. For compatibility with certain tools."), 0 }, + { "o", 0, 0 }, + { "output file", I18N_NOOP("Output file. Implies -m. E.g.: -o newfile.txt"), 0 }, + { "out file", I18N_NOOP("Output file, again. (For compatibility with certain tools.)"), 0 }, + { "auto", I18N_NOOP("No GUI if all conflicts are auto-solvable. (Needs -o file)"), 0 }, + { "qall", I18N_NOOP("Don't solve conflicts automatically. (For compatibility...)"), 0 }, + { "L1 alias1", I18N_NOOP("Visible name replacement for input file 1 (base)."), 0 }, + { "L2 alias2", I18N_NOOP("Visible name replacement for input file 2."), 0 }, + { "L3 alias3", I18N_NOOP("Visible name replacement for input file 3."), 0 }, + { "L", 0, 0 }, + { "fname alias", I18N_NOOP("Alternative visible name replacement. Supply this once for every input."), 0 }, + { "cs string", I18N_NOOP("Override a config setting. Use once for every setting. E.g.: --cs \"AutoAdvance=1\""), 0 }, + { "confighelp", I18N_NOOP("Show list of config settings and current values."), 0 }, + { "config file", I18N_NOOP("Use a different config file."), 0 } +}; +static KCmdLineOptions options2[] = +{ + { "+[File1]", I18N_NOOP("file1 to open (base, if not specified via --base)"), 0 }, + { "+[File2]", I18N_NOOP("file2 to open"), 0 }, + { "+[File3]", I18N_NOOP("file3 to open"), 0 } +}; + + +void initialiseCmdLineArgs(std::vector& vOptions, QStringList& ignorableOptions) +{ + vOptions.insert( vOptions.end(), options, (KCmdLineOptions*)((char*)options+sizeof(options))); + QString configFileName = KStandardDirs().findResource("config","kdiff3rc"); + QFile configFile( configFileName ); + if ( configFile.open( IO_ReadOnly ) ) + { + QTextStream ts( &configFile ); + while(!ts.atEnd()) + { + QString line = ts.readLine(); + if ( line.startsWith("IgnorableCmdLineOptions=") ) + { + int pos = line.find('='); + if (pos>=0) + { + QString s = line.mid(pos+1); + QStringList sl = QStringList::split( '|', s ); + if (!sl.isEmpty()) + { + ignorableOptions = QStringList::split( ';', sl.front() ); + for (QStringList::iterator i=ignorableOptions.begin(); i!=ignorableOptions.end(); ++i) + { + KCmdLineOptions ignoreOption; + (*i).remove('-'); + if (!(*i).isEmpty()) + { + ignoreOption.name = (*i).latin1(); + ignoreOption.description = I18N_NOOP("Ignored. (User defined.)"); + ignoreOption.def = 0; + vOptions.push_back(ignoreOption); + } + } + } + } + break; + } + } + } + vOptions.insert(vOptions.end(),options2,(KCmdLineOptions*)((char*)options2+sizeof(options2))); + + KCmdLineOptions last = KCmdLineLastOption; + vOptions.push_back(last); + KCmdLineArgs::addCmdLineOptions( &vOptions[0] ); // Add our own options. +} + + +#ifdef _WIN32 +#include +// This command checks the comm +static bool isOptionUsed(const QString& s, int argc, char* argv[]) +{ + for(int j=0; j vOptions; + QStringList ignorableOptions; + initialiseCmdLineArgs(vOptions, ignorableOptions); + + KApplication app; + +#ifdef KREPLACEMENTS_H + QString locale; + + locale = app.config()->readEntry("Language", "Auto"); + int spacePos = locale.find(' '); + if (spacePos>0) locale = locale.left(spacePos); + QTranslator kdiff3Translator( 0 ); + QTranslator qtTranslator( 0 ); + if (locale != "en_orig") + { + if ( locale == "Auto" || locale.isEmpty() ) + locale = QTextCodec::locale(); + + QString translationDir = getTranslationDir(); + kdiff3Translator.load( QString("kdiff3_")+locale, translationDir ); + app.installTranslator( &kdiff3Translator ); + + qtTranslator.load( QString("qt_")+locale, translationDir ); + app.installTranslator( &qtTranslator ); + } +#endif + + if (app.isRestored()) + { + RESTORE(KDiff3Shell); + } + else + { + new KDiff3Shell(); + } + + int retVal = app.exec(); + return retVal; +} + +// Suppress warning with --enable-final +#undef VERSION diff --git a/src/merger.cpp b/src/merger.cpp new file mode 100644 index 0000000..371548c --- /dev/null +++ b/src/merger.cpp @@ -0,0 +1,87 @@ +/*************************************************************************** + merger.cpp - description + ------------------- + begin : Sun Mar 24 2002 + copyright : (C) 2002-2007 by Joachim Eibl + email : joachim.eibl at gmx.de + ***************************************************************************/ + +/*************************************************************************** + * * + * 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. * + * * + ***************************************************************************/ + +#include "merger.h" +#include +#include +#include + +Merger::Merger( const DiffList* pDiffListAB, const DiffList* pDiffListCA ) +: md1( pDiffListAB, 0 ), md2( pDiffListCA, 1 ) +{ +} + + +Merger::MergeData::MergeData( const DiffList* p, int i ) +: d(0,0,0) +{ + idx=i; + pDiffList = p; + if ( p!=0 ) + { + it=p->begin(); + update(); + } +} + +bool Merger::MergeData::eq() +{ + return pDiffList==0 || d.nofEquals > 0; +} + +bool Merger::MergeData::isEnd() +{ + return ( pDiffList==0 || ( it==pDiffList->end() && d.nofEquals==0 && + ( idx == 0 ? d.diff1==0 : d.diff2==0 ) + ) ); +} + +void Merger::MergeData::update() +{ + if ( d.nofEquals > 0 ) + --d.nofEquals; + else if ( idx==0 && d.diff1 > 0 ) + --d.diff1; + else if ( idx==1 && d.diff2 > 0 ) + --d.diff2; + + while( d.nofEquals == 0 && (idx==0 && d.diff1 == 0 || idx==1 && d.diff2 == 0) + && pDiffList!=0 && it != pDiffList->end() ) + { + d = *it; + ++it; + } +} + +void Merger::next() +{ + md1.update(); + md2.update(); +} + +int Merger::whatChanged() +{ + int changed = 0; + changed |= md1.eq() ? 0 : 1; + changed |= md2.eq() ? 0 : 2; + return changed; +} + +bool Merger::isEndReached() +{ + return md1.isEnd() && md2.isEnd(); +} diff --git a/src/merger.h b/src/merger.h new file mode 100644 index 0000000..3712a2f --- /dev/null +++ b/src/merger.h @@ -0,0 +1,61 @@ +/*************************************************************************** + merger.h - description + ------------------- + begin : Sun Mar 24 2002 + copyright : (C) 2002-2007 by Joachim Eibl + email : joachim.eibl at gmx.de + ***************************************************************************/ + +/*************************************************************************** + * * + * 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. * + * * + ***************************************************************************/ + +#ifndef MERGER_H +#define MERGER_H + +#include "diff.h" + + +class Merger +{ +public: + + Merger( const DiffList* pDiffList1, const DiffList* pDiffList2 ); + + /** Go one step. */ + void next(); + + /** Information about what changed. Can be used for coloring. + The return value is 0 if nothing changed here, + bit 1 is set if a difference from pDiffList1 was detected, + bit 2 is set if a difference from pDiffList2 was detected. + */ + int whatChanged(); + + /** End of both diff lists reached. */ + bool isEndReached(); +private: + + struct MergeData + { + DiffList::const_iterator it; + const DiffList* pDiffList; + Diff d; + int idx; + + MergeData( const DiffList* p, int i ); + bool eq(); + void update(); + bool isEnd(); + }; + + MergeData md1; + MergeData md2; +}; + +#endif diff --git a/src/mergeresultwindow.cpp b/src/mergeresultwindow.cpp new file mode 100644 index 0000000..0e0aad9 --- /dev/null +++ b/src/mergeresultwindow.cpp @@ -0,0 +1,3222 @@ +/*************************************************************************** + mergeresultwindow.cpp - description + ------------------- + begin : Sun Apr 14 2002 + copyright : (C) 2002-2007 by Joachim Eibl + email : joachim.eibl at gmx.de + ***************************************************************************/ + +/*************************************************************************** + * * + * 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. * + * * + ***************************************************************************/ + +#include "mergeresultwindow.h" +#include "optiondialog.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +int g_bAutoSolve = true; + +#undef leftInfoWidth +#define leftInfoWidth 3 + +MergeResultWindow::MergeResultWindow( + QWidget* pParent, + OptionDialog* pOptionDialog, + QStatusBar* pStatusBar + ) +: QWidget( pParent, 0, WRepaintNoErase ) +{ + setFocusPolicy( QWidget::ClickFocus ); + + m_firstLine = 0; + m_firstColumn = 0; + m_nofColumns = 0; + m_nofLines = 0; + m_totalSize = 0; + m_bMyUpdate = false; + m_bInsertMode = true; + m_scrollDeltaX = 0; + m_scrollDeltaY = 0; + m_bModified = false; + m_eOverviewMode=Overview::eOMNormal; + + m_pldA = 0; + m_pldB = 0; + m_pldC = 0; + m_sizeA = 0; + m_sizeB = 0; + m_sizeC = 0; + + m_pDiff3LineList = 0; + m_pTotalDiffStatus = 0; + m_pStatusBar = pStatusBar; + + m_pOptionDialog = pOptionDialog; + m_bPaintingAllowed = false; + m_delayedDrawTimer = 0; + + m_cursorXPos=0; + m_cursorOldXPos=0; + m_cursorYPos=0; + m_bCursorOn = true; + m_bCursorUpdate = false; + connect( &m_cursorTimer, SIGNAL(timeout()), this, SLOT( slotCursorUpdate() ) ); + m_cursorTimer.start( 500 /*ms*/, true /*single shot*/ ); + m_selection.reset(); + + setMinimumSize( QSize(20,20) ); + setFont( m_pOptionDialog->m_font ); +} + +void MergeResultWindow::init( + const LineData* pLineDataA, int sizeA, + const LineData* pLineDataB, int sizeB, + const LineData* pLineDataC, int sizeC, + const Diff3LineList* pDiff3LineList, + TotalDiffStatus* pTotalDiffStatus + ) +{ + m_firstLine = 0; + m_firstColumn = 0; + m_nofColumns = 0; + m_nofLines = 0; + m_bMyUpdate = false; + m_bInsertMode = true; + m_scrollDeltaX = 0; + m_scrollDeltaY = 0; + setModified( false ); + + m_pldA = pLineDataA; + m_pldB = pLineDataB; + m_pldC = pLineDataC; + m_sizeA = sizeA; + m_sizeB = sizeB; + m_sizeC = sizeC; + + m_pDiff3LineList = pDiff3LineList; + m_pTotalDiffStatus = pTotalDiffStatus; + + m_selection.reset(); + m_cursorXPos=0; + m_cursorOldXPos=0; + m_cursorYPos=0; + + merge( g_bAutoSolve, -1 ); + g_bAutoSolve = true; + update(); + updateSourceMask(); + + int wsc; + int nofUnsolved = getNrOfUnsolvedConflicts(&wsc); + if (m_pStatusBar) + m_pStatusBar->message( i18n("Number of remaining unsolved conflicts: %1 (of which %2 are whitespace)") + .arg(nofUnsolved).arg(wsc) ); +} + +void MergeResultWindow::reset() +{ + m_pDiff3LineList = 0; + m_pTotalDiffStatus = 0; + m_pldA = 0; + m_pldB = 0; + m_pldC = 0; +} + +// Calculate the merge information for the given Diff3Line. +// Results will be stored in mergeDetails, bConflict, bLineRemoved and src. +void mergeOneLine( + const Diff3Line& d, e_MergeDetails& mergeDetails, bool& bConflict, + bool& bLineRemoved, int& src, bool bTwoInputs + ) +{ + mergeDetails = eDefault; + bConflict = false; + bLineRemoved = false; + src = 0; + + if ( bTwoInputs ) // Only two input files + { + if ( d.lineA!=-1 && d.lineB!=-1 ) + { + if ( d.pFineAB == 0 ) + { + mergeDetails = eNoChange; src = A; + } + else + { + mergeDetails = eBChanged; bConflict = true; + } + } + else + { + if ( d.lineA!=-1 && d.lineB==-1 ) + { + mergeDetails = eBDeleted; bConflict = true; + } + else if ( d.lineA==-1 && d.lineB!=-1 ) + { + mergeDetails = eBDeleted; bConflict = true; + } + } + return; + } + + // A is base. + if ( d.lineA!=-1 && d.lineB!=-1 && d.lineC!=-1 ) + { + if ( d.pFineAB == 0 && d.pFineBC == 0 && d.pFineCA == 0) + { + mergeDetails = eNoChange; src = A; + } + else if( d.pFineAB == 0 && d.pFineBC != 0 && d.pFineCA != 0 ) + { + mergeDetails = eCChanged; src = C; + } + else if( d.pFineAB != 0 && d.pFineBC != 0 && d.pFineCA == 0 ) + { + mergeDetails = eBChanged; src = B; + } + else if( d.pFineAB != 0 && d.pFineBC == 0 && d.pFineCA != 0 ) + { + mergeDetails = eBCChangedAndEqual; src = C; + } + else if( d.pFineAB != 0 && d.pFineBC != 0 && d.pFineCA != 0 ) + { + mergeDetails = eBCChanged; bConflict = true; + } + else + assert(false); + } + else if ( d.lineA!=-1 && d.lineB!=-1 && d.lineC==-1 ) + { + if( d.pFineAB != 0 ) + { + mergeDetails = eBChanged_CDeleted; bConflict = true; + } + else + { + mergeDetails = eCDeleted; bLineRemoved = true; src = C; + } + } + else if ( d.lineA!=-1 && d.lineB==-1 && d.lineC!=-1 ) + { + if( d.pFineCA != 0 ) + { + mergeDetails = eCChanged_BDeleted; bConflict = true; + } + else + { + mergeDetails = eBDeleted; bLineRemoved = true; src = B; + } + } + else if ( d.lineA==-1 && d.lineB!=-1 && d.lineC!=-1 ) + { + if( d.pFineBC != 0 ) + { + mergeDetails = eBCAdded; bConflict = true; + } + else // B==C + { + mergeDetails = eBCAddedAndEqual; src = C; + } + } + else if ( d.lineA==-1 && d.lineB==-1 && d.lineC!= -1 ) + { + mergeDetails = eCAdded; src = C; + } + else if ( d.lineA==-1 && d.lineB!=-1 && d.lineC== -1 ) + { + mergeDetails = eBAdded; src = B; + } + else if ( d.lineA!=-1 && d.lineB==-1 && d.lineC==-1 ) + { + mergeDetails = eBCDeleted; bLineRemoved = true; src = C; + } + else + assert(false); +} + +bool MergeResultWindow::sameKindCheck( const MergeLine& ml1, const MergeLine& ml2 ) +{ + if ( ml1.bConflict && ml2.bConflict ) + { + // Both lines have conflicts: If one is only a white space conflict and + // the other one is a real conflict, then this line returns false. + return ml1.id3l->bAEqC == ml2.id3l->bAEqC && ml1.id3l->bAEqB == ml2.id3l->bAEqB; + } + else + return ( + !ml1.bConflict && !ml2.bConflict && ml1.bDelta && ml2.bDelta && ml1.srcSelect == ml2.srcSelect || + !ml1.bDelta && !ml2.bDelta + ); +} + +void MergeResultWindow::merge(bool bAutoSolve, int defaultSelector, bool bConflictsOnly, bool bWhiteSpaceOnly ) +{ + if ( !bConflictsOnly ) + { + if(m_bModified) + { + int result = KMessageBox::warningYesNo(this, + i18n("The output has been modified.\n" + "If you continue your changes will be lost."), + i18n("Warning"), i18n("C&ontinue"), i18n("&Cancel")); + if ( result==KMessageBox::No ) + return; + } + + m_mergeLineList.clear(); + m_totalSize = 0; + int lineIdx = 0; + Diff3LineList::const_iterator it; + for( it=m_pDiff3LineList->begin(); it!=m_pDiff3LineList->end(); ++it, ++lineIdx ) + { + const Diff3Line& d = *it; + + MergeLine ml; + bool bLineRemoved; + mergeOneLine( d, ml.mergeDetails, ml.bConflict, bLineRemoved, ml.srcSelect, m_pldC==0 ); + + // Automatic solving for only whitespace changes. + if ( ml.bConflict && + ( m_pldC==0 && (d.bAEqB || d.bWhiteLineA && d.bWhiteLineB) || + m_pldC!=0 && (d.bAEqB && d.bAEqC || d.bWhiteLineA && d.bWhiteLineB && d.bWhiteLineC ) ) ) + { + ml.bWhiteSpaceConflict = true; + } + + ml.d3lLineIdx = lineIdx; + ml.bDelta = ml.srcSelect != A; + ml.id3l = it; + ml.srcRangeLength = 1; + + MergeLine* back = m_mergeLineList.empty() ? 0 : &m_mergeLineList.back(); + + bool bSame = back!=0 && sameKindCheck( ml, *back ); + if( bSame ) + { + ++back->srcRangeLength; + if ( back->bWhiteSpaceConflict && !ml.bWhiteSpaceConflict ) + back->bWhiteSpaceConflict = false; + } + else + { + if (back!=0 && back->bWhiteSpaceConflict ) + { + if ( m_pldC==0 && m_pOptionDialog->m_whiteSpace2FileMergeDefault != 0 ) // Only two inputs + { + back->srcSelect = m_pOptionDialog->m_whiteSpace2FileMergeDefault; + back->bConflict = false; + } + else if ( m_pldC!=0 && m_pOptionDialog->m_whiteSpace3FileMergeDefault != 0 ) + { + back->srcSelect = m_pOptionDialog->m_whiteSpace3FileMergeDefault; + back->bConflict = false; + } + } + ml.mergeEditLineList.setTotalSizePtr(&m_totalSize); + m_mergeLineList.push_back( ml ); + } + + if ( ! ml.bConflict ) + { + MergeLine& tmpBack = m_mergeLineList.back(); + MergeEditLine mel(ml.id3l); + mel.setSource( ml.srcSelect, bLineRemoved ); + tmpBack.mergeEditLineList.push_back(mel); + } + else if ( back==0 || ! back->bConflict || !bSame ) + { + MergeLine& tmpBack = m_mergeLineList.back(); + MergeEditLine mel(ml.id3l); + mel.setConflict(); + tmpBack.mergeEditLineList.push_back(mel); + } + } + } + + if ( !bAutoSolve ) + { + // Change all auto selections + MergeLineList::iterator mlIt; + for( mlIt=m_mergeLineList.begin(); mlIt!=m_mergeLineList.end(); ++mlIt ) + { + MergeLine& ml = *mlIt; + bool bConflict = ml.mergeEditLineList.empty() || ml.mergeEditLineList.begin()->isConflict(); + if ( ml.bDelta && ( !bConflictsOnly || bConflict ) && (!bWhiteSpaceOnly || ml.bWhiteSpaceConflict )) + { + ml.mergeEditLineList.clear(); + if ( defaultSelector==-1 && ml.bDelta ) + { + MergeEditLine mel(ml.id3l);; + mel.setConflict(); + ml.bConflict = true; + ml.mergeEditLineList.push_back(mel); + } + else + { + Diff3LineList::const_iterator d3llit=ml.id3l; + int j; + + for( j=0; jlineA : + defaultSelector==2 ? d3llit->lineB : + defaultSelector==3 ? d3llit->lineC : -1; + + if ( srcLine != -1 ) + { + ml.mergeEditLineList.push_back(mel); + } + + ++d3llit; + } + + if ( ml.mergeEditLineList.empty() ) // Make a line nevertheless + { + MergeEditLine mel(ml.id3l); + mel.setRemoved( defaultSelector ); + ml.mergeEditLineList.push_back(mel); + } + } + } + } + } + + MergeLineList::iterator mlIt; + for( mlIt=m_mergeLineList.begin(); mlIt!=m_mergeLineList.end(); ++mlIt ) + { + MergeLine& ml = *mlIt; + // Remove all lines that are empty, because no src lines are there. + + int oldSrcLine = -1; + int oldSrc = -1; + MergeEditLineList::iterator melIt; + for( melIt = ml.mergeEditLineList.begin(); melIt != ml.mergeEditLineList.end(); ) + { + MergeEditLine& mel = *melIt; + int melsrc = mel.src(); + + int srcLine = mel.isRemoved() ? -1 : + melsrc==1 ? mel.id3l()->lineA : + melsrc==2 ? mel.id3l()->lineB : + melsrc==3 ? mel.id3l()->lineC : -1; + + // At least one line remains because oldSrc != melsrc for first line in list + // Other empty lines will be removed + if ( srcLine == -1 && oldSrcLine==-1 && oldSrc == melsrc ) + melIt = ml.mergeEditLineList.erase( melIt ); + else + ++melIt; + + oldSrcLine = srcLine; + oldSrc = melsrc; + } + } + + if ( bAutoSolve && !bConflictsOnly ) + { + if ( m_pOptionDialog->m_bRunHistoryAutoMergeOnMergeStart ) + slotMergeHistory(); + if ( m_pOptionDialog->m_bRunRegExpAutoMergeOnMergeStart ) + slotRegExpAutoMerge(); + if ( m_pldC != 0 && ! doRelevantChangesExist() ) + emit noRelevantChangesDetected(); + } + + int nrOfSolvedConflicts = 0; + int nrOfUnsolvedConflicts = 0; + int nrOfWhiteSpaceConflicts = 0; + + MergeLineList::iterator i; + for ( i = m_mergeLineList.begin(); i!=m_mergeLineList.end(); ++i ) + { + if ( i->bConflict ) + ++nrOfUnsolvedConflicts; + else if ( i->bDelta ) + ++nrOfSolvedConflicts; + + if ( i->bWhiteSpaceConflict ) + ++nrOfWhiteSpaceConflicts; + } + + m_pTotalDiffStatus->nofUnsolvedConflicts = nrOfUnsolvedConflicts; + m_pTotalDiffStatus->nofSolvedConflicts = nrOfSolvedConflicts; + m_pTotalDiffStatus->nofWhitespaceConflicts = nrOfWhiteSpaceConflicts; + + + m_cursorXPos=0; + m_cursorOldXPos=0; + m_cursorYPos=0; + //m_firstLine = 0; // Must not set line/column without scrolling there + //m_firstColumn = 0; + + setModified(false); + + m_currentMergeLineIt = m_mergeLineList.begin(); + slotGoTop(); + + updateAvailabilities(); + update(); +} + +void MergeResultWindow::setFirstLine(int firstLine) +{ + m_firstLine = max2(0,firstLine); + update(); +} + +void MergeResultWindow::setFirstColumn(int firstCol) +{ + m_firstColumn = max2(0,firstCol); + update(); +} + +int MergeResultWindow::getNofColumns() +{ + return m_nofColumns; +} + +int MergeResultWindow::getNofLines() +{ + return m_totalSize; +} + +int MergeResultWindow::getNofVisibleColumns() +{ + QFontMetrics fm = fontMetrics(); + return width()/fm.width('W')-4; +} + +int MergeResultWindow::getNofVisibleLines() +{ + QFontMetrics fm = fontMetrics(); + return (height()-3)/fm.height()-2; +} + +void MergeResultWindow::resizeEvent( QResizeEvent* e ) +{ + QWidget::resizeEvent(e); + emit resizeSignal(); +} + +Overview::e_OverviewMode MergeResultWindow::getOverviewMode() +{ + return m_eOverviewMode; +} + +void MergeResultWindow::setOverviewMode( Overview::e_OverviewMode eOverviewMode ) +{ + m_eOverviewMode = eOverviewMode; +} + +// Check whether we should ignore current delta when moving to next/previous delta +bool MergeResultWindow::checkOverviewIgnore(MergeLineList::iterator &i) +{ + if (m_eOverviewMode == Overview::eOMNormal) return false; + if (m_eOverviewMode == Overview::eOMAvsB) + return i->mergeDetails == eCAdded || i->mergeDetails == eCDeleted || i->mergeDetails == eCChanged; + if (m_eOverviewMode == Overview::eOMAvsC) + return i->mergeDetails == eBAdded || i->mergeDetails == eBDeleted || i->mergeDetails == eBChanged; + if (m_eOverviewMode == Overview::eOMBvsC) + return i->mergeDetails == eBCAddedAndEqual || i->mergeDetails == eBCDeleted || i->mergeDetails == eBCChangedAndEqual; + return false; +} + +// Go to prev/next delta/conflict or first/last delta. +void MergeResultWindow::go( e_Direction eDir, e_EndPoint eEndPoint ) +{ + assert( eDir==eUp || eDir==eDown ); + MergeLineList::iterator i = m_currentMergeLineIt; + bool bSkipWhiteConflicts = ! m_pOptionDialog->m_bShowWhiteSpace; + if( eEndPoint==eEnd ) + { + if (eDir==eUp) i = m_mergeLineList.begin(); // first mergeline + else i = --m_mergeLineList.end(); // last mergeline + + while ( isItAtEnd(eDir==eUp, i) && ! i->bDelta ) + { + if ( eDir==eUp ) ++i; // search downwards + else --i; // search upwards + } + } + else if ( eEndPoint == eDelta && isItAtEnd(eDir!=eUp, i) ) + { + do + { + if ( eDir==eUp ) --i; + else ++i; + } + while ( isItAtEnd(eDir!=eUp, i) && ( i->bDelta == false || checkOverviewIgnore(i) || bSkipWhiteConflicts && i->bWhiteSpaceConflict ) ); + } + else if ( eEndPoint == eConflict && isItAtEnd(eDir!=eUp, i) ) + { + do + { + if ( eDir==eUp ) --i; + else ++i; + } + while ( isItAtEnd(eDir!=eUp, i) && (i->bConflict == false || bSkipWhiteConflicts && i->bWhiteSpaceConflict ) ); + } + else if ( isItAtEnd(eDir!=eUp, i) && eEndPoint == eUnsolvedConflict ) + { + do + { + if ( eDir==eUp ) --i; + else ++i; + } + while ( isItAtEnd(eDir!=eUp, i) && ! i->mergeEditLineList.begin()->isConflict() ); + } + + if ( isVisible() ) + setFocus(); + + setFastSelector( i ); +} + +bool MergeResultWindow::isDeltaAboveCurrent() +{ + bool bSkipWhiteConflicts = ! m_pOptionDialog->m_bShowWhiteSpace; + if (m_mergeLineList.empty()) return false; + MergeLineList::iterator i = m_currentMergeLineIt; + if (i == m_mergeLineList.begin()) return false; + do + { + --i; + if ( i->bDelta && !checkOverviewIgnore(i) && !( bSkipWhiteConflicts && i->bWhiteSpaceConflict ) ) return true; + } + while (i!=m_mergeLineList.begin()); + + return false; +} + +bool MergeResultWindow::isDeltaBelowCurrent() +{ + bool bSkipWhiteConflicts = ! m_pOptionDialog->m_bShowWhiteSpace; + if (m_mergeLineList.empty()) return false; + + MergeLineList::iterator i = m_currentMergeLineIt; + if (i!=m_mergeLineList.end()) + { + ++i; + for( ; i!=m_mergeLineList.end(); ++i ) + { + if ( i->bDelta && !checkOverviewIgnore(i) && !( bSkipWhiteConflicts && i->bWhiteSpaceConflict ) ) return true; + } + } + return false; +} + +bool MergeResultWindow::isConflictAboveCurrent() +{ + if (m_mergeLineList.empty()) return false; + MergeLineList::iterator i = m_currentMergeLineIt; + if (i == m_mergeLineList.begin()) return false; + + bool bSkipWhiteConflicts = ! m_pOptionDialog->m_bShowWhiteSpace; + + do + { + --i; + if ( i->bConflict && !(bSkipWhiteConflicts && i->bWhiteSpaceConflict) ) return true; + } + while (i!=m_mergeLineList.begin()); + + return false; +} + +bool MergeResultWindow::isConflictBelowCurrent() +{ + MergeLineList::iterator i = m_currentMergeLineIt; + if (m_mergeLineList.empty()) return false; + + bool bSkipWhiteConflicts = ! m_pOptionDialog->m_bShowWhiteSpace; + + if (i!=m_mergeLineList.end()) + { + ++i; + for( ; i!=m_mergeLineList.end(); ++i ) + { + if ( i->bConflict && !(bSkipWhiteConflicts && i->bWhiteSpaceConflict) ) return true; + } + } + return false; +} + +bool MergeResultWindow::isUnsolvedConflictAtCurrent() +{ + if (m_mergeLineList.empty()) return false; + MergeLineList::iterator i = m_currentMergeLineIt; + return i->mergeEditLineList.begin()->isConflict(); +} + +bool MergeResultWindow::isUnsolvedConflictAboveCurrent() +{ + if (m_mergeLineList.empty()) return false; + MergeLineList::iterator i = m_currentMergeLineIt; + if (i == m_mergeLineList.begin()) return false; + + do + { + --i; + if ( i->mergeEditLineList.begin()->isConflict() ) return true; + } + while (i!=m_mergeLineList.begin()); + + return false; +} + +bool MergeResultWindow::isUnsolvedConflictBelowCurrent() +{ + MergeLineList::iterator i = m_currentMergeLineIt; + if (m_mergeLineList.empty()) return false; + + if (i!=m_mergeLineList.end()) + { + ++i; + for( ; i!=m_mergeLineList.end(); ++i ) + { + if ( i->mergeEditLineList.begin()->isConflict() ) return true; + } + } + return false; +} + +void MergeResultWindow::slotGoTop() +{ + go( eUp, eEnd ); +} + +void MergeResultWindow::slotGoCurrent() +{ + setFastSelector( m_currentMergeLineIt ); +} + +void MergeResultWindow::slotGoBottom() +{ + go( eDown, eEnd ); +} + +void MergeResultWindow::slotGoPrevDelta() +{ + go( eUp, eDelta ); +} + +void MergeResultWindow::slotGoNextDelta() +{ + go( eDown, eDelta ); +} + +void MergeResultWindow::slotGoPrevConflict() +{ + go( eUp, eConflict ); +} + +void MergeResultWindow::slotGoNextConflict() +{ + go( eDown, eConflict ); +} + +void MergeResultWindow::slotGoPrevUnsolvedConflict() +{ + go( eUp, eUnsolvedConflict ); +} + +void MergeResultWindow::slotGoNextUnsolvedConflict() +{ + go( eDown, eUnsolvedConflict ); +} + +/** The line is given as a index in the Diff3LineList. + The function calculates the corresponding iterator. */ +void MergeResultWindow::slotSetFastSelectorLine( int line ) +{ + MergeLineList::iterator i; + for ( i = m_mergeLineList.begin(); i!=m_mergeLineList.end(); ++i ) + { + if ( line>=i->d3lLineIdx && line < i->d3lLineIdx + i->srcRangeLength ) + { + //if ( i->bDelta ) + { + setFastSelector( i ); + } + break; + } + } +} + +int MergeResultWindow::getNrOfUnsolvedConflicts( int* pNrOfWhiteSpaceConflicts ) +{ + int nrOfUnsolvedConflicts = 0; + if (pNrOfWhiteSpaceConflicts!=0) + *pNrOfWhiteSpaceConflicts = 0; + + MergeLineList::iterator mlIt = m_mergeLineList.begin(); + for(mlIt = m_mergeLineList.begin();mlIt!=m_mergeLineList.end(); ++mlIt) + { + MergeLine& ml = *mlIt; + MergeEditLineList::iterator melIt = ml.mergeEditLineList.begin(); + if ( melIt->isConflict() ) + { + ++nrOfUnsolvedConflicts; + if ( ml.bWhiteSpaceConflict && pNrOfWhiteSpaceConflicts!=0 ) + ++ *pNrOfWhiteSpaceConflicts; + } + } + + return nrOfUnsolvedConflicts; +} + +void MergeResultWindow::showNrOfConflicts() +{ + int nrOfConflicts = 0; + MergeLineList::iterator i; + for ( i = m_mergeLineList.begin(); i!=m_mergeLineList.end(); ++i ) + { + if ( i->bConflict || i->bDelta ) + ++nrOfConflicts; + } + QString totalInfo; + if ( m_pTotalDiffStatus->bBinaryAEqB && m_pTotalDiffStatus->bBinaryAEqC ) + totalInfo += i18n("All input files are binary equal."); + else if ( m_pTotalDiffStatus->bTextAEqB && m_pTotalDiffStatus->bTextAEqC ) + totalInfo += i18n("All input files contain the same text."); + else { + if ( m_pTotalDiffStatus->bBinaryAEqB ) totalInfo += i18n("Files %1 and %2 are binary equal.\n").arg("A").arg("B"); + else if ( m_pTotalDiffStatus->bTextAEqB ) totalInfo += i18n("Files %1 and %2 have equal text.\n").arg("A").arg("B"); + if ( m_pTotalDiffStatus->bBinaryAEqC ) totalInfo += i18n("Files %1 and %2 are binary equal.\n").arg("A").arg("C"); + else if ( m_pTotalDiffStatus->bTextAEqC ) totalInfo += i18n("Files %1 and %2 have equal text.\n").arg("A").arg("C"); + if ( m_pTotalDiffStatus->bBinaryBEqC ) totalInfo += i18n("Files %1 and %2 are binary equal.\n").arg("B").arg("C"); + else if ( m_pTotalDiffStatus->bTextBEqC ) totalInfo += i18n("Files %1 and %2 have equal text.\n").arg("B").arg("C"); + } + + int nrOfUnsolvedConflicts = getNrOfUnsolvedConflicts(); + + KMessageBox::information( this, + i18n("Total number of conflicts: ") + QString::number(nrOfConflicts) + + i18n("\nNr of automatically solved conflicts: ") + QString::number(nrOfConflicts-nrOfUnsolvedConflicts) + + i18n("\nNr of unsolved conflicts: ") + QString::number(nrOfUnsolvedConflicts) + + "\n"+totalInfo, + i18n("Conflicts") + ); +} + +void MergeResultWindow::setFastSelector(MergeLineList::iterator i) +{ + if ( i==m_mergeLineList.end() ) + return; + m_currentMergeLineIt = i; + emit setFastSelectorRange( i->d3lLineIdx, i->srcRangeLength ); + + int line1 = 0; + + MergeLineList::iterator mlIt = m_mergeLineList.begin(); + for(mlIt = m_mergeLineList.begin();mlIt!=m_mergeLineList.end(); ++mlIt) + { + if(mlIt==m_currentMergeLineIt) + break; + line1 += mlIt->mergeEditLineList.size(); + } + + int nofLines = m_currentMergeLineIt->mergeEditLineList.size(); + int newFirstLine = getBestFirstLine( line1, nofLines, m_firstLine, getNofVisibleLines() ); + if ( newFirstLine != m_firstLine ) + { + scroll( 0, newFirstLine - m_firstLine ); + } + + if ( m_selection.isEmpty() ) + { + m_cursorXPos = 0; + m_cursorOldXPos = 0; + m_cursorYPos = line1; + } + + update(); + updateSourceMask(); + emit updateAvailabilities(); +} + +void MergeResultWindow::choose( int selector ) +{ + if ( m_currentMergeLineIt==m_mergeLineList.end() ) + return; + + setModified(); + + // First find range for which this change works. + MergeLine& ml = *m_currentMergeLineIt; + + MergeEditLineList::iterator melIt; + + // Now check if selector is active for this range already. + bool bActive = false; + + // Remove unneeded lines in the range. + for( melIt = ml.mergeEditLineList.begin(); melIt != ml.mergeEditLineList.end(); ) + { + MergeEditLine& mel = *melIt; + if ( mel.src()==selector ) + bActive = true; + + if ( mel.src()==selector || !mel.isEditableText() || mel.isModified() ) + melIt = ml.mergeEditLineList.erase( melIt ); + else + ++melIt; + } + + if ( !bActive ) // Selected source wasn't active. + { // Append the lines from selected source here at rangeEnd. + Diff3LineList::const_iterator d3llit=ml.id3l; + int j; + + for( j=0; jlineA : + mel.src()==2 ? mel.id3l()->lineB : + mel.src()==3 ? mel.id3l()->lineC : -1; + + if ( srcLine == -1 ) + melIt = ml.mergeEditLineList.erase( melIt ); + else + ++melIt; + } + } + + if ( ml.mergeEditLineList.empty() ) + { + // Insert a dummy line: + MergeEditLine mel(ml.id3l); + + if ( bActive ) mel.setConflict(); // All src entries deleted => conflict + else mel.setRemoved(selector); // No lines in corresponding src found. + + ml.mergeEditLineList.push_back(mel); + } + + if ( m_cursorYPos >= m_totalSize ) + { + m_cursorYPos = m_totalSize-1; + m_cursorXPos = 0; + } + + update(); + updateSourceMask(); + emit updateAvailabilities(); + int wsc; + int nofUnsolved = getNrOfUnsolvedConflicts(&wsc); + m_pStatusBar->message( i18n("Number of remaining unsolved conflicts: %1 (of which %2 are whitespace)") + .arg(nofUnsolved).arg(wsc) ); +} + +// bConflictsOnly: automatically choose for conflicts only (true) or for everywhere (false) +void MergeResultWindow::chooseGlobal(int selector, bool bConflictsOnly, bool bWhiteSpaceOnly ) +{ + resetSelection(); + + merge( false, selector, bConflictsOnly, bWhiteSpaceOnly ); + setModified( true ); + update(); + int wsc; + int nofUnsolved = getNrOfUnsolvedConflicts(&wsc); + m_pStatusBar->message( i18n("Number of remaining unsolved conflicts: %1 (of which %2 are whitespace)") + .arg(nofUnsolved).arg(wsc) ); +} + +void MergeResultWindow::slotAutoSolve() +{ + resetSelection(); + merge( true, -1 ); + setModified( true ); + update(); + int wsc; + int nofUnsolved = getNrOfUnsolvedConflicts(&wsc); + m_pStatusBar->message( i18n("Number of remaining unsolved conflicts: %1 (of which %2 are whitespace)") + .arg(nofUnsolved).arg(wsc) ); +} + +void MergeResultWindow::slotUnsolve() +{ + resetSelection(); + merge( false, -1 ); + setModified( true ); + update(); + int wsc; + int nofUnsolved = getNrOfUnsolvedConflicts(&wsc); + m_pStatusBar->message( i18n("Number of remaining unsolved conflicts: %1 (of which %2 are whitespace)") + .arg(nofUnsolved).arg(wsc) ); +} + +static QString calcHistoryLead(const QString& s ) +{ + // Return the start of the line until the first white char after the first non white char. + unsigned int i; + for( i=0; ibegin(), idxBegin=0; iBegin!=pD3LList->end(); ++iBegin, ++idxBegin ) + { + if ( historyStart.exactMatch( iBegin->getString(A) ) && + historyStart.exactMatch( iBegin->getString(B) ) && + ( !bThreeFiles || historyStart.exactMatch( iBegin->getString(C) ) ) ) + { + historyLead = calcHistoryLead( iBegin->getString(A) ); + break; + } + } + // Search for end of history + for( iEnd = iBegin, idxEnd = idxBegin; iEnd!=pD3LList->end(); ++iEnd, ++idxEnd ) + { + QString sA = iEnd->getString(A); + QString sB = iEnd->getString(B); + QString sC = iEnd->getString(C); + if ( ! ((sA.isNull() || historyLead == calcHistoryLead(sA) ) && + (sB.isNull() || historyLead == calcHistoryLead(sB) ) && + (!bThreeFiles || sC.isNull() || historyLead == calcHistoryLead(sC) ) + )) + { + break; // End of the history + } + } +} + +bool findParenthesesGroups( const QString& s, QStringList& sl ) +{ + sl.clear(); + int i=0; + std::list startPosStack; + int length = s.length(); + for( i=0; i(int)parenthesesGroupList.size() ) + continue; + QString s = matchedRegExpr.cap( groupIdx ); + if ( groupIdx == 0 ) + { + key += s + " "; + continue; + } + + QString groupRegExp = parenthesesGroupList[groupIdx-1]; + if( groupRegExp.find('|')<0 || groupRegExp.find('(')>=0 ) + { + bool bOk = false; + int i = s.toInt( &bOk ); + if ( bOk && i>=0 && i<10000 ) + s.sprintf("%04d", i); // This should help for correct sorting of numbers. + key += s + " "; + } + else + { + // Assume that the groupRegExp consists of something like "Jan|Feb|Mar|Apr" + // s is the string that managed to match. + // Now we want to know at which position it occurred. e.g. Jan=0, Feb=1, Mar=2, etc. + QStringList sl = QStringList::split( '|', groupRegExp ); + int idx = sl.findIndex( s ); + if (idx<0) + { + // Didn't match + } + else + { + QString sIdx; + sIdx.sprintf("%02d", idx+1 ); // Up to 99 words in the groupRegExp (more than 12 aren't expected) + key += sIdx + " "; + } + } + } + return key; +} + +void MergeResultWindow::collectHistoryInformation( + int src, Diff3LineList::const_iterator iHistoryBegin, Diff3LineList::const_iterator iHistoryEnd, + HistoryMap& historyMap, + std::list< HistoryMap::iterator >& hitList // list of iterators + ) +{ + std::list< HistoryMap::iterator >::iterator itHitListFront = hitList.begin(); + Diff3LineList::const_iterator id3l = iHistoryBegin; + QString historyLead; + { + const LineData* pld = id3l->getLineData(src); + QString s( pld->pLine, pld->size ); + historyLead = calcHistoryLead(s); + } + QRegExp historyStart = m_pOptionDialog->m_historyStartRegExp; + ++id3l; // Skip line with "$Log ... $" + QRegExp newHistoryEntry = m_pOptionDialog->m_historyEntryStartRegExp; + QStringList parenthesesGroups; + findParenthesesGroups( m_pOptionDialog->m_historyEntryStartRegExp, parenthesesGroups ); + QString key; + MergeEditLineList melList; + bool bPrevLineIsEmpty = true; + bool bUseRegExp = !m_pOptionDialog->m_historyEntryStartRegExp.isEmpty(); + for(; id3l != iHistoryEnd; ++id3l ) + { + const LineData* pld = id3l->getLineData(src); + if ( !pld ) continue; + QString s( pld->pLine, pld->size ); + if (historyLead.isNull()) historyLead = calcHistoryLead(s); + QString sLine = s.mid(historyLead.length()); + if ( ( !bUseRegExp && !sLine.stripWhiteSpace().isEmpty() && bPrevLineIsEmpty ) + || bUseRegExp && newHistoryEntry.exactMatch( sLine ) + ) + { + if ( !key.isEmpty() && !melList.empty() ) + { + // Only insert new HistoryMapEntry if key not found; in either case p.first is a valid iterator to element key. + std::pair p = historyMap.insert(HistoryMap::value_type(key,HistoryMapEntry())); + HistoryMapEntry& hme = p.first->second; + if ( src==A ) hme.mellA = melList; + if ( src==B ) hme.mellB = melList; + if ( src==C ) hme.mellC = melList; + if ( p.second ) // Not in list yet? + { + hitList.insert( itHitListFront, p.first ); + } + } + + if ( ! bUseRegExp ) + key = sLine; + else + key = calcHistorySortKey(m_pOptionDialog->m_historyEntryStartSortKeyOrder,newHistoryEntry,parenthesesGroups); + + melList.clear(); + melList.push_back( MergeEditLine(id3l,src) ); + } + else if ( ! historyStart.exactMatch( s ) ) + { + melList.push_back( MergeEditLine(id3l,src) ); + } + + bPrevLineIsEmpty = sLine.stripWhiteSpace().isEmpty(); + } + if ( !key.isEmpty() ) + { + // Only insert new HistoryMapEntry if key not found; in either case p.first is a valid iterator to element key. + std::pair p = historyMap.insert(HistoryMap::value_type(key,HistoryMapEntry())); + HistoryMapEntry& hme = p.first->second; + if ( src==A ) hme.mellA = melList; + if ( src==B ) hme.mellB = melList; + if ( src==C ) hme.mellC = melList; + if ( p.second ) // Not in list yet? + { + hitList.insert( itHitListFront, p.first ); + } + } + // End of the history +} + +MergeResultWindow::MergeEditLineList& MergeResultWindow::HistoryMapEntry::choice( bool bThreeInputs ) +{ + if ( !bThreeInputs ) + return mellA.empty() ? mellB : mellA; + else + { + if ( mellA.empty() ) + return mellC.empty() ? mellB : mellC; // A doesn't exist, return one that exists + else if ( ! mellB.empty() && ! mellC.empty() ) + { // A, B and C exist + return mellA; + } + else + return mellB.empty() ? mellB : mellC; // A exists, return the one that doesn't exist + } +} + +bool MergeResultWindow::HistoryMapEntry::staysInPlace( bool bThreeInputs, Diff3LineList::const_iterator& iHistoryEnd ) +{ + // The entry should stay in place if the decision made by the automerger is correct. + Diff3LineList::const_iterator& iHistoryLast = iHistoryEnd; + --iHistoryLast; + if ( !bThreeInputs ) + { + if ( !mellA.empty() && !mellB.empty() && mellA.begin()->id3l()==mellB.begin()->id3l() && + mellA.back().id3l() == iHistoryLast && mellB.back().id3l() == iHistoryLast ) + { + iHistoryEnd = mellA.begin()->id3l(); + return true; + } + else + { + return false; + } + } + else + { + if ( !mellA.empty() && !mellB.empty() && !mellC.empty() + && mellA.begin()->id3l()==mellB.begin()->id3l() && mellA.begin()->id3l()==mellC.begin()->id3l() + && mellA.back().id3l() == iHistoryLast && mellB.back().id3l() == iHistoryLast && mellC.back().id3l() == iHistoryLast ) + { + iHistoryEnd = mellA.begin()->id3l(); + return true; + } + else + { + return false; + } + } +} + +void MergeResultWindow::slotMergeHistory() +{ + Diff3LineList::const_iterator iD3LHistoryBegin; + Diff3LineList::const_iterator iD3LHistoryEnd; + int d3lHistoryBeginLineIdx = -1; + int d3lHistoryEndLineIdx = -1; + + // Search for history start, history end in the diff3LineList + findHistoryRange( m_pOptionDialog->m_historyStartRegExp, m_pldC!=0, m_pDiff3LineList, iD3LHistoryBegin, iD3LHistoryEnd, d3lHistoryBeginLineIdx, d3lHistoryEndLineIdx ); + + if ( iD3LHistoryBegin != m_pDiff3LineList->end() ) + { + // Now collect the historyMap information + HistoryMap historyMap; + std::list< HistoryMap::iterator > hitList; + if (m_pldC==0) + { + collectHistoryInformation( A, iD3LHistoryBegin, iD3LHistoryEnd, historyMap, hitList ); + collectHistoryInformation( B, iD3LHistoryBegin, iD3LHistoryEnd, historyMap, hitList ); + } + else + { + collectHistoryInformation( A, iD3LHistoryBegin, iD3LHistoryEnd, historyMap, hitList ); + collectHistoryInformation( B, iD3LHistoryBegin, iD3LHistoryEnd, historyMap, hitList ); + collectHistoryInformation( C, iD3LHistoryBegin, iD3LHistoryEnd, historyMap, hitList ); + } + + Diff3LineList::const_iterator iD3LHistoryOrigEnd = iD3LHistoryEnd; + + bool bHistoryMergeSorting = m_pOptionDialog->m_bHistoryMergeSorting && ! m_pOptionDialog->m_historyEntryStartSortKeyOrder.isEmpty() && + ! m_pOptionDialog->m_historyEntryStartRegExp.isEmpty(); + + if ( m_pOptionDialog->m_maxNofHistoryEntries==-1 ) + { + // Remove parts from the historyMap and hitList that stay in place + if ( bHistoryMergeSorting ) + { + while ( ! historyMap.empty() ) + { + HistoryMap::iterator hMapIt = historyMap.begin(); + if( hMapIt->second.staysInPlace( m_pldC!=0, iD3LHistoryEnd ) ) + historyMap.erase(hMapIt); + else + break; + } + } + else + { + while ( ! hitList.empty() ) + { + HistoryMap::iterator hMapIt = hitList.back(); + if( hMapIt->second.staysInPlace( m_pldC!=0, iD3LHistoryEnd ) ) + hitList.pop_back(); + else + break; + } + } + while (iD3LHistoryOrigEnd != iD3LHistoryEnd) + { + --iD3LHistoryOrigEnd; + --d3lHistoryEndLineIdx; + } + } + + MergeLineList::iterator iMLLStart = splitAtDiff3LineIdx(d3lHistoryBeginLineIdx); + MergeLineList::iterator iMLLEnd = splitAtDiff3LineIdx(d3lHistoryEndLineIdx); + // Now join all MergeLines in the history + MergeLineList::iterator i = iMLLStart; + if ( i != iMLLEnd ) + { + ++i; + while ( i!=iMLLEnd ) + { + iMLLStart->join(*i); + i = m_mergeLineList.erase( i ); + } + } + iMLLStart->mergeEditLineList.clear(); + // Now insert the complete history into the first MergeLine of the history + iMLLStart->mergeEditLineList.push_back( MergeEditLine( iD3LHistoryBegin, m_pldC == 0 ? B : C ) ); + QString lead = calcHistoryLead( iD3LHistoryBegin->getString(A) ); + MergeEditLine mel( m_pDiff3LineList->end() ); + mel.setString( lead ); + iMLLStart->mergeEditLineList.push_back(mel); + + int historyCount = 0; + if ( bHistoryMergeSorting ) + { + // Create a sorted history + HistoryMap::reverse_iterator hmit; + for ( hmit = historyMap.rbegin(); hmit != historyMap.rend(); ++hmit ) + { + if ( historyCount==m_pOptionDialog->m_maxNofHistoryEntries ) + break; + ++historyCount; + HistoryMapEntry& hme = hmit->second; + MergeEditLineList& mell = hme.choice(m_pldC!=0); + if (!mell.empty()) + iMLLStart->mergeEditLineList.splice( iMLLStart->mergeEditLineList.end(), mell, mell.begin(), mell.end() ); + } + } + else + { + // Create history in order of appearance + std::list< HistoryMap::iterator >::iterator hlit; + for ( hlit = hitList.begin(); hlit != hitList.end(); ++hlit ) + { + if ( historyCount==m_pOptionDialog->m_maxNofHistoryEntries ) + break; + ++historyCount; + HistoryMapEntry& hme = (*hlit)->second; + MergeEditLineList& mell = hme.choice(m_pldC!=0); + if (!mell.empty()) + iMLLStart->mergeEditLineList.splice( iMLLStart->mergeEditLineList.end(), mell, mell.begin(), mell.end() ); + } + } + setFastSelector( iMLLStart ); + update(); + } +} + +void MergeResultWindow::slotRegExpAutoMerge() +{ + if ( m_pOptionDialog->m_autoMergeRegExp.isEmpty() ) + return; + + QRegExp vcsKeywords = m_pOptionDialog->m_autoMergeRegExp; + MergeLineList::iterator i; + for ( i=m_mergeLineList.begin(); i!=m_mergeLineList.end(); ++i ) + { + if (i->bConflict ) + { + Diff3LineList::const_iterator id3l = i->id3l; + if ( vcsKeywords.exactMatch( id3l->getString(A) ) && + vcsKeywords.exactMatch( id3l->getString(B) ) && + (m_pldC==0 || vcsKeywords.exactMatch( id3l->getString(C) ))) + { + MergeEditLine& mel = *i->mergeEditLineList.begin(); + mel.setSource( m_pldC==0 ? B : C, false ); + splitAtDiff3LineIdx( i->d3lLineIdx+1 ); + } + } + } + update(); +} + +// This doesn't detect user modifications and should only be called after automatic merge +// This will only do something for three file merge. +// Irrelevant changes are those where all contributions from B are already contained in C. +// Also irrelevant are conflicts automatically solved (automerge regexp and history automerge) +// Precondition: The VCS-keyword would also be C. +bool MergeResultWindow::doRelevantChangesExist() +{ + if ( m_pldC==0 || m_mergeLineList.size() <= 1 ) + return true; + + MergeLineList::iterator i; + for ( i=m_mergeLineList.begin(); i!=m_mergeLineList.end(); ++i ) + { + if ( ( i->bConflict && i->mergeEditLineList.begin()->src()!=C ) + || i->srcSelect == B ) + { + return true; + } + } + + return false; +} + +// Returns the iterator to the MergeLine after the split +MergeResultWindow::MergeLineList::iterator MergeResultWindow::splitAtDiff3LineIdx( int d3lLineIdx ) +{ + MergeLineList::iterator i; + for ( i = m_mergeLineList.begin(); i!=m_mergeLineList.end(); ++i ) + { + if ( i->d3lLineIdx==d3lLineIdx ) + { + // No split needed, this is the beginning of a MergeLine + return i; + } + else if ( i->d3lLineIdx > d3lLineIdx ) + { + // The split must be in the previous MergeLine + --i; + MergeLine& ml = *i; + MergeLine newML; + ml.split(newML,d3lLineIdx); + ++i; + return m_mergeLineList.insert( i, newML ); + } + } + // The split must be in the previous MergeLine + --i; + MergeLine& ml = *i; + MergeLine newML; + ml.split(newML,d3lLineIdx); + ++i; + return m_mergeLineList.insert( i, newML ); +} + +void MergeResultWindow::slotSplitDiff( int firstD3lLineIdx, int lastD3lLineIdx ) +{ + if (lastD3lLineIdx>=0) + splitAtDiff3LineIdx( lastD3lLineIdx + 1 ); + setFastSelector( splitAtDiff3LineIdx(firstD3lLineIdx) ); +} + +void MergeResultWindow::slotJoinDiffs( int firstD3lLineIdx, int lastD3lLineIdx ) +{ + MergeLineList::iterator i; + MergeLineList::iterator iMLLStart = m_mergeLineList.end(); + MergeLineList::iterator iMLLEnd = m_mergeLineList.end(); + for ( i=m_mergeLineList.begin(); i!=m_mergeLineList.end(); ++i ) + { + MergeLine& ml = *i; + if ( firstD3lLineIdx >= ml.d3lLineIdx && firstD3lLineIdx < ml.d3lLineIdx + ml.srcRangeLength ) + { + iMLLStart = i; + } + if ( lastD3lLineIdx >= ml.d3lLineIdx && lastD3lLineIdx < ml.d3lLineIdx + ml.srcRangeLength ) + { + iMLLEnd = i; + ++iMLLEnd; + break; + } + } + + bool bJoined = false; + for( i=iMLLStart; i!=iMLLEnd && i!=m_mergeLineList.end(); ) + { + if ( i==iMLLStart ) + { + ++i; + } + else + { + iMLLStart->join(*i); + i = m_mergeLineList.erase( i ); + bJoined = true; + } + } + if (bJoined) + { + iMLLStart->mergeEditLineList.clear(); + // Insert a conflict line as placeholder + iMLLStart->mergeEditLineList.push_back( MergeEditLine( iMLLStart->id3l ) ); + } + setFastSelector( iMLLStart ); +} + +void MergeResultWindow::myUpdate(int afterMilliSecs) +{ + killTimer(m_delayedDrawTimer); + m_bMyUpdate = true; + m_delayedDrawTimer = startTimer( afterMilliSecs ); +} + +void MergeResultWindow::timerEvent(QTimerEvent*) +{ + killTimer(m_delayedDrawTimer); + m_delayedDrawTimer = 0; + + if ( m_bMyUpdate ) + { + update(); + m_bMyUpdate = false; + } + + if ( m_scrollDeltaX != 0 || m_scrollDeltaY != 0 ) + { + m_selection.end( m_selection.lastLine + m_scrollDeltaY, m_selection.lastPos + m_scrollDeltaX ); + emit scroll( m_scrollDeltaX, m_scrollDeltaY ); + killTimer(m_delayedDrawTimer); + m_delayedDrawTimer = startTimer(50); + } +} + +QString MergeResultWindow::MergeEditLine::getString( const MergeResultWindow* mrw ) +{ + if ( isRemoved() ) { return QString(); } + + if ( ! isModified() ) + { + int src = m_src; + if ( src == 0 ) { return QString(); } + const Diff3Line& d3l = *m_id3l; + const LineData* pld = 0; + assert( src == A || src == B || src == C ); + if ( src == A && d3l.lineA!=-1 ) pld = &mrw->m_pldA[ d3l.lineA ]; + else if ( src == B && d3l.lineB!=-1 ) pld = &mrw->m_pldB[ d3l.lineB ]; + else if ( src == C && d3l.lineC!=-1 ) pld = &mrw->m_pldC[ d3l.lineC ]; + + if ( pld == 0 ) + { + // assert(false); This is no error. + return QString(); + } + + return QString( pld->pLine, pld->size ); + } + else + { + return m_str; + } + return 0; +} + +/// Converts the cursor-posOnScreen into a text index, considering tabulators. +int convertToPosInText( const QString& s, int posOnScreen, int tabSize ) +{ + int localPosOnScreen = 0; + int size=s.length(); + for ( int i=0; i=posOnScreen ) + return i; + + // All letters except tabulator have width one. + int letterWidth = s[i]!='\t' ? 1 : tabber( localPosOnScreen, tabSize ); + + localPosOnScreen += letterWidth; + + if ( localPosOnScreen>posOnScreen ) + return i; + } + return size; +} + + +/// Converts the index into the text to a cursor-posOnScreen considering tabulators. +int convertToPosOnScreen( const QString& p, int posInText, int tabSize ) +{ + int posOnScreen = 0; + for ( int i=0; i height() ) + return; + + yOffset += topLineYOffset; + + QString srcName = " "; + if ( bUserModified ) srcName = "m"; + else if ( srcSelect == A && mergeDetails != eNoChange ) srcName = "A"; + else if ( srcSelect == B ) srcName = "B"; + else if ( srcSelect == C ) srcName = "C"; + + if ( rangeMark & 4 ) + { + p.fillRect( xOffset, yOffset, width(), fontHeight, m_pOptionDialog->m_currentRangeBgColor ); + } + + if( (srcSelect > 0 || bUserModified ) && !bLineRemoved ) + { + int outPos = 0; + QString s; + int size = str.length(); + for ( int i=0; im_tabSize ); + for( int j=0; jm_tabSize ),m_pOptionDialog->m_tabSize ); + int lastPosInLine = convertToPosOnScreen( str, convertToPosInText( str, m_selection.lastPosInLine(line), m_pOptionDialog->m_tabSize ), m_pOptionDialog->m_tabSize ); + int lengthInLine = max2(0,lastPosInLine - firstPosInLine); + if (lengthInLine>0) m_selection.bSelectionContainsData = true; + + if ( lengthInLine < int(s.length()) ) + { // Draw a normal line first + p.setPen( m_pOptionDialog->m_fgColor ); + p.drawText( xOffset, yOffset+fontAscent, s.mid(m_firstColumn), true ); + } + int firstPosInLine2 = max2( firstPosInLine, m_firstColumn ); + int lengthInLine2 = max2(0,lastPosInLine - firstPosInLine2); + + if( m_selection.lineWithin( line+1 ) ) + p.fillRect( xOffset + fontWidth*(firstPosInLine2-m_firstColumn), yOffset, + width(), fontHeight, colorGroup().highlight() ); + else if ( lengthInLine2>0 ) + p.fillRect( xOffset + fontWidth*(firstPosInLine2-m_firstColumn), yOffset, + fontWidth*lengthInLine2, fontHeight, colorGroup().highlight() ); + + p.setPen( colorGroup().highlightedText() ); + p.drawText( xOffset + fontWidth*(firstPosInLine2-m_firstColumn), yOffset+fontAscent, + s.mid(firstPosInLine2,lengthInLine2), true ); + } + else + { + p.setPen( m_pOptionDialog->m_fgColor ); + p.drawText( xOffset, yOffset+fontAscent, s.mid(m_firstColumn), true ); + } + + p.setPen( m_pOptionDialog->m_fgColor ); + if ( m_cursorYPos==line ) + { + m_cursorXPos = minMaxLimiter( m_cursorXPos, 0, outPos ); + m_cursorXPos = convertToPosOnScreen( str, convertToPosInText( str, m_cursorXPos, m_pOptionDialog->m_tabSize ),m_pOptionDialog->m_tabSize ); + } + + p.drawText( 1, yOffset+fontAscent, srcName, true ); + } + else if ( bLineRemoved ) + { + p.setPen( m_pOptionDialog->m_colorForConflict ); + p.drawText( xOffset, yOffset+fontAscent, i18n("") ); + p.drawText( 1, yOffset+fontAscent, srcName ); + if ( m_cursorYPos==line ) m_cursorXPos = 0; + } + else if ( srcSelect == 0 ) + { + p.setPen( m_pOptionDialog->m_colorForConflict ); + if ( bWhiteSpaceConflict ) + p.drawText( xOffset, yOffset+fontAscent, i18n("") ); + else + p.drawText( xOffset, yOffset+fontAscent, i18n("") ); + p.drawText( 1, yOffset+fontAscent, "?" ); + if ( m_cursorYPos==line ) m_cursorXPos = 0; + } + else assert(false); + + xOffset -= fontWidth; + p.setPen( m_pOptionDialog->m_fgColor ); + if ( rangeMark & 1 ) // begin mark + { + p.drawLine( xOffset, yOffset+1, xOffset, yOffset+fontHeight/2 ); + p.drawLine( xOffset, yOffset+1, xOffset-2, yOffset+1 ); + } + else + { + p.drawLine( xOffset, yOffset, xOffset, yOffset+fontHeight/2 ); + } + + if ( rangeMark & 2 ) // end mark + { + p.drawLine( xOffset, yOffset+fontHeight/2, xOffset, yOffset+fontHeight-1 ); + p.drawLine( xOffset, yOffset+fontHeight-1, xOffset-2, yOffset+fontHeight-1 ); + } + else + { + p.drawLine( xOffset, yOffset+fontHeight/2, xOffset, yOffset+fontHeight ); + } + + if ( rangeMark & 4 ) + { + p.fillRect( xOffset + 3, yOffset, 3, fontHeight, m_pOptionDialog->m_fgColor ); +/* p.setPen( blue ); + p.drawLine( xOffset+2, yOffset, xOffset+2, yOffset+fontHeight-1 ); + p.drawLine( xOffset+3, yOffset, xOffset+3, yOffset+fontHeight-1 );*/ + } +} + +void MergeResultWindow::setPaintingAllowed(bool bPaintingAllowed) +{ + m_bPaintingAllowed = bPaintingAllowed; + if ( !m_bPaintingAllowed ) + { + m_currentMergeLineIt = m_mergeLineList.end(); + reset(); + } +} + +void MergeResultWindow::paintEvent( QPaintEvent* ) +{ + if (m_pDiff3LineList==0 || !m_bPaintingAllowed) return; + + bool bOldSelectionContainsData = m_selection.bSelectionContainsData; + const QFontMetrics& fm = fontMetrics(); + int fontHeight = fm.height(); + int fontWidth = fm.width("W"); + int fontAscent = fm.ascent(); + + if ( !m_bCursorUpdate ) // Don't redraw everything for blinking cursor? + { + m_selection.bSelectionContainsData = false; + if ( size() != m_pixmap.size() ) + m_pixmap.resize(size()); + + MyPainter p(&m_pixmap, m_pOptionDialog->m_bRightToLeftLanguage, width(), fontWidth); + p.setFont( font() ); + p.QPainter::fillRect( rect(), m_pOptionDialog->m_bgColor ); + + //int visibleLines = height() / fontHeight; + + int lastVisibleLine = m_firstLine + getNofVisibleLines() + 5; + int nofColumns = 0; + int line = 0; + MergeLineList::iterator mlIt = m_mergeLineList.begin(); + for(mlIt = m_mergeLineList.begin();mlIt!=m_mergeLineList.end(); ++mlIt) + { + MergeLine& ml = *mlIt; + if ( line > lastVisibleLine || line + ml.mergeEditLineList.size() < m_firstLine) + { + line += ml.mergeEditLineList.size(); + } + else + { + MergeEditLineList::iterator melIt; + for( melIt = ml.mergeEditLineList.begin(); melIt != ml.mergeEditLineList.end(); ++melIt ) + { + if (line>=m_firstLine && line<=lastVisibleLine) + { + MergeEditLine& mel = *melIt; + MergeEditLineList::iterator melIt1 = melIt; + ++melIt1; + + int rangeMark = 0; + if ( melIt==ml.mergeEditLineList.begin() ) rangeMark |= 1; // Begin range mark + if ( melIt1==ml.mergeEditLineList.end() ) rangeMark |= 2; // End range mark + + if ( mlIt == m_currentMergeLineIt ) rangeMark |= 4; // Mark of the current line + + QString s; + s = mel.getString( this ); + if ( convertToPosOnScreen(s,s.length(),m_pOptionDialog->m_tabSize) >nofColumns) + nofColumns = s.length(); + + writeLine( p, line, s, mel.src(), ml.mergeDetails, rangeMark, + mel.isModified(), mel.isRemoved(), ml.bWhiteSpaceConflict ); + } + ++line; + } + } + } + + if ( line != m_nofLines || nofColumns != m_nofColumns ) + { + m_nofLines = line; + assert( m_nofLines == m_totalSize ); + + m_nofColumns = nofColumns; + emit resizeSignal(); + } + + p.end(); + } + + QPainter painter(this); + + int topLineYOffset = 0; + int xOffset = fontWidth * leftInfoWidth; + int yOffset = ( m_cursorYPos - m_firstLine ) * fontHeight + topLineYOffset; + int xCursor = ( m_cursorXPos - m_firstColumn ) * fontWidth + xOffset; + + if ( !m_bCursorUpdate ) + painter.drawPixmap(0,0, m_pixmap); + else + { + if (!m_pOptionDialog->m_bRightToLeftLanguage) + painter.drawPixmap(xCursor-2, yOffset, m_pixmap, + xCursor-2, yOffset, 5, fontAscent+2 ); + else + painter.drawPixmap(width()-1-4-(xCursor-2), yOffset, m_pixmap, + width()-1-4-(xCursor-2), yOffset, 5, fontAscent+2 ); + m_bCursorUpdate = false; + } + painter.end(); + + if ( m_bCursorOn && hasFocus() && m_cursorYPos>=m_firstLine ) + { + MyPainter painter(this, m_pOptionDialog->m_bRightToLeftLanguage, width(), fontWidth); + int topLineYOffset = 0; + int xOffset = fontWidth * leftInfoWidth; + + int yOffset = ( m_cursorYPos-m_firstLine ) * fontHeight + topLineYOffset; + + int xCursor = ( m_cursorXPos - m_firstColumn ) * fontWidth + xOffset; + + painter.setPen( m_pOptionDialog->m_fgColor ); + + painter.drawLine( xCursor, yOffset, xCursor, yOffset+fontAscent ); + painter.drawLine( xCursor-2, yOffset, xCursor+2, yOffset ); + painter.drawLine( xCursor-2, yOffset+fontAscent+1, xCursor+2, yOffset+fontAscent+1 ); + } + + if( !bOldSelectionContainsData && m_selection.bSelectionContainsData ) + emit newSelection(); +} + +void MergeResultWindow::updateSourceMask() +{ + int srcMask=0; + int enabledMask = 0; + if( !hasFocus() || m_pDiff3LineList==0 || !m_bPaintingAllowed || m_currentMergeLineIt == m_mergeLineList.end() ) + { + srcMask = 0; + enabledMask = 0; + } + else + { + enabledMask = m_pldC==0 ? 3 : 7; + MergeLine& ml = *m_currentMergeLineIt; + + srcMask = 0; + bool bModified = false; + MergeEditLineList::iterator melIt; + for( melIt = ml.mergeEditLineList.begin(); melIt != ml.mergeEditLineList.end(); ++melIt ) + { + MergeEditLine& mel = *melIt; + if ( mel.src()==1 ) srcMask |= 1; + if ( mel.src()==2 ) srcMask |= 2; + if ( mel.src()==3 ) srcMask |= 4; + if ( mel.isModified() || !mel.isEditableText() ) bModified = true; + } + + if ( ml.mergeDetails == eNoChange ) + { + srcMask = 0; + enabledMask = bModified ? 1 : 0; + } + } + + emit sourceMask( srcMask, enabledMask ); +} + +void MergeResultWindow::focusInEvent( QFocusEvent* e ) +{ + updateSourceMask(); + QWidget::focusInEvent(e); +} + +void MergeResultWindow::convertToLinePos( int x, int y, int& line, int& pos ) +{ + const QFontMetrics& fm = fontMetrics(); + int fontHeight = fm.height(); + int fontWidth = fm.width('W'); + int xOffset = (leftInfoWidth-m_firstColumn)*fontWidth; + int topLineYOffset = 0; + + int yOffset = topLineYOffset - m_firstLine * fontHeight; + + line = min2( ( y - yOffset ) / fontHeight, m_totalSize-1 ); + if ( ! m_pOptionDialog->m_bRightToLeftLanguage ) + pos = ( x - xOffset ) / fontWidth; + else + pos = ( (width() - 1 - x) - xOffset ) / fontWidth; +} + +void MergeResultWindow::mousePressEvent ( QMouseEvent* e ) +{ + m_bCursorOn = true; + + int line; + int pos; + convertToLinePos( e->x(), e->y(), line, pos ); + + bool bLMB = e->button() == Qt::LeftButton; + bool bMMB = e->button() == Qt::MidButton; + bool bRMB = e->button() == Qt::RightButton; + + if ( bLMB && pos < m_firstColumn || bRMB ) // Fast range selection + { + m_cursorXPos = 0; + m_cursorOldXPos = 0; + m_cursorYPos = max2(line,0); + int l = 0; + MergeLineList::iterator i = m_mergeLineList.begin(); + for(i = m_mergeLineList.begin();i!=m_mergeLineList.end(); ++i) + { + if (l==line) + break; + + l += i->mergeEditLineList.size(); + if (l>line) + break; + } + m_selection.reset(); // Disable current selection + + m_bCursorOn = true; + setFastSelector( i ); + + if (bRMB) + { + showPopupMenu( QCursor::pos() ); + } + } + else if ( bLMB ) // Normal cursor placement + { + pos = max2(pos,0); + line = max2(line,0); + if ( e->state() & Qt::ShiftButton ) + { + if (m_selection.firstLine==-1) + m_selection.start( line, pos ); + m_selection.end( line, pos ); + } + else + { + // Selection + m_selection.reset(); + m_selection.start( line, pos ); + m_selection.end( line, pos ); + } + m_cursorXPos = pos; + m_cursorOldXPos = pos; + m_cursorYPos = line; + + update(); + //showStatusLine( line, m_winIdx, m_pFilename, m_pDiff3LineList, m_pStatusBar ); + } + else if ( bMMB ) // Paste clipboard + { + pos = max2(pos,0); + line = max2(line,0); + + m_selection.reset(); + m_cursorXPos = pos; + m_cursorOldXPos = pos; + m_cursorYPos = line; + + pasteClipboard( true ); + } +} + +void MergeResultWindow::mouseDoubleClickEvent( QMouseEvent* e ) +{ + if ( e->button() == Qt::LeftButton ) + { + int line; + int pos; + convertToLinePos( e->x(), e->y(), line, pos ); + m_cursorXPos = pos; + m_cursorOldXPos = pos; + m_cursorYPos = line; + + // Get the string data of the current line + + MergeLineList::iterator mlIt; + MergeEditLineList::iterator melIt; + calcIteratorFromLineNr( line, mlIt, melIt ); + QString s = melIt->getString( this ); + + if ( !s.isEmpty() ) + { + int pos1, pos2; + + calcTokenPos( s, pos, pos1, pos2, m_pOptionDialog->m_tabSize ); + + resetSelection(); + m_selection.start( line, convertToPosOnScreen( s, pos1, m_pOptionDialog->m_tabSize ) ); + m_selection.end( line, convertToPosOnScreen( s, pos2, m_pOptionDialog->m_tabSize ) ); + + update(); + // emit selectionEnd() happens in the mouseReleaseEvent. + } + } +} + +void MergeResultWindow::mouseReleaseEvent ( QMouseEvent * e ) +{ + if ( e->button() == Qt::LeftButton ) + { + killTimer(m_delayedDrawTimer); + m_delayedDrawTimer = 0; + + if (m_selection.firstLine != -1 ) + { + emit selectionEnd(); + } + } +} + +void MergeResultWindow::mouseMoveEvent ( QMouseEvent * e ) +{ + int line; + int pos; + convertToLinePos( e->x(), e->y(), line, pos ); + m_cursorXPos = pos; + m_cursorOldXPos = pos; + m_cursorYPos = line; + if (m_selection.firstLine != -1 ) + { + m_selection.end( line, pos ); + myUpdate(0); + + //showStatusLine( line, m_winIdx, m_pFilename, m_pDiff3LineList, m_pStatusBar ); + + // Scroll because mouse moved out of the window + const QFontMetrics& fm = fontMetrics(); + int fontWidth = fm.width('W'); + int topLineYOffset = 0; + int deltaX=0; + int deltaY=0; + if ( ! m_pOptionDialog->m_bRightToLeftLanguage ) + { + if ( e->x() < leftInfoWidth*fontWidth ) deltaX=-1; + if ( e->x() > width() ) deltaX=+1; + } + else + { + if ( e->x() > width()-1-leftInfoWidth*fontWidth ) deltaX=-1; + if ( e->x() < fontWidth ) deltaX=+1; + } + if ( e->y() < topLineYOffset ) deltaY=-1; + if ( e->y() > height() ) deltaY=+1; + m_scrollDeltaX = deltaX; + m_scrollDeltaY = deltaY; + if ( deltaX != 0 || deltaY!= 0) + { + emit scroll( deltaX, deltaY ); + } + } +} + + +void MergeResultWindow::slotCursorUpdate() +{ + m_cursorTimer.stop(); + m_bCursorOn = !m_bCursorOn; + + if ( isVisible() ) + { + m_bCursorUpdate = true; + + const QFontMetrics& fm = fontMetrics(); + int fontWidth = fm.width("W"); + int topLineYOffset = 0; + int xOffset = fontWidth * leftInfoWidth; + int yOffset = ( m_cursorYPos - m_firstLine ) * fm.height() + topLineYOffset; + int xCursor = ( m_cursorXPos - m_firstColumn ) * fontWidth + xOffset; + + if (!m_pOptionDialog->m_bRightToLeftLanguage) + repaint( xCursor-2, yOffset, 5, fm.ascent()+2 ); + else + repaint( width()-1-4-(xCursor-2), yOffset, 5, fm.ascent()+2 ); + + m_bCursorUpdate=false; + } + + m_cursorTimer.start(500,true); +} + + +void MergeResultWindow::wheelEvent( QWheelEvent* e ) +{ + int d = -e->delta()*QApplication::wheelScrollLines()/120; + e->accept(); + scroll( 0, min2(d, getNofVisibleLines()) ); +} + + +void MergeResultWindow::keyPressEvent( QKeyEvent* e ) +{ + int y = m_cursorYPos; + MergeLineList::iterator mlIt; + MergeEditLineList::iterator melIt; + calcIteratorFromLineNr( y, mlIt, melIt ); + + QString str = melIt->getString( this ); + int x = convertToPosInText( str, m_cursorXPos, m_pOptionDialog->m_tabSize ); + + bool bCtrl = ( e->state() & Qt::ControlButton ) != 0 ; + bool bShift = ( e->state() & Qt::ShiftButton ) != 0 ; + #ifdef _WIN32 + bool bAlt = ( e->state() & Qt::AltButton ) != 0 ; + if ( bCtrl && bAlt ){ bCtrl=false; bAlt=false; } // AltGr-Key pressed. + #endif + + bool bYMoveKey = false; + // Special keys + switch ( e->key() ) + { + case Qt::Key_Escape: break; + //case Key_Tab: break; + case Qt::Key_Backtab: break; + case Qt::Key_Delete: + { + if ( deleteSelection2( str, x, y, mlIt, melIt )) break; + if( !melIt->isEditableText() ) break; + if (x>=(int)str.length()) + { + if ( yisEditableText() ) + { + QString s2 = melIt1->getString( this ); + melIt->setString( str + s2 ); + + // Remove the line + if ( mlIt1->mergeEditLineList.size()>1 ) + mlIt1->mergeEditLineList.erase( melIt1 ); + else + melIt1->setRemoved(); + } + } + } + else + { + QString s = str.left(x); + s += str.mid( x+1 ); + melIt->setString( s ); + setModified(); + } + break; + } + case Qt::Key_Backspace: + { + if ( deleteSelection2( str, x, y, mlIt, melIt )) break; + if( !melIt->isEditableText() ) break; + if (x==0) + { + if ( y>0 ) + { + setModified(); + MergeLineList::iterator mlIt1; + MergeEditLineList::iterator melIt1; + calcIteratorFromLineNr( y-1, mlIt1, melIt1 ); + if ( melIt1->isEditableText() ) + { + QString s1 = melIt1->getString( this ); + melIt1->setString( s1 + str ); + + // Remove the previous line + if ( mlIt->mergeEditLineList.size()>1 ) + mlIt->mergeEditLineList.erase( melIt ); + else + melIt->setRemoved(); + + --y; + x=str.length(); + } + } + } + else + { + QString s = str.left( x-1 ); + s += str.mid( x ); + --x; + melIt->setString( s ); + setModified(); + } + break; + } + case Qt::Key_Return: + case Qt::Key_Enter: + { + if( !melIt->isEditableText() ) break; + deleteSelection2( str, x, y, mlIt, melIt ); + setModified(); + QString indentation; + if ( m_pOptionDialog->m_bAutoIndentation ) + { // calc last indentation + MergeLineList::iterator mlIt1 = mlIt; + MergeEditLineList::iterator melIt1 = melIt; + for(;;) { + const QString s = melIt1->getString(this); + if ( !s.isEmpty() ) { + unsigned int i; + for( i=0; imergeEditLineList.begin() ) + --melIt1; + else + { + if ( mlIt1 == m_mergeLineList.begin() ) break; + --mlIt1; + melIt1 = mlIt1->mergeEditLineList.end(); + --melIt1; + } + } + } + MergeEditLine mel(mlIt->id3l); // Associate every mel with an id3l, even if not really valid. + mel.setString( indentation + str.mid(x) ); + + if ( x<(int)str.length() ) // Cut off the old line. + { + // Since ps possibly points into melIt->str, first copy it into a temporary. + QString temp = str.left(x); + melIt->setString( temp ); + } + + ++melIt; + mlIt->mergeEditLineList.insert( melIt, mel ); + x = indentation.length(); + ++y; + break; + } + case Qt::Key_Insert: m_bInsertMode = !m_bInsertMode; break; + case Qt::Key_Pause: break; + case Qt::Key_Print: break; + case Qt::Key_SysReq: break; + case Qt::Key_Home: x=0; if(bCtrl){y=0; } break; // cursor movement + case Qt::Key_End: x=INT_MAX; if(bCtrl){y=INT_MAX;} break; + + case Qt::Key_Left: + case Qt::Key_Right: + if ( (e->key()==Qt::Key_Left) ^ m_pOptionDialog->m_bRightToLeftLanguage ) // operator^: XOR + { + if ( !bCtrl ) + { + --x; + if(x<0 && y>0){--y; x=INT_MAX;} + } + else + { + while( x>0 && (str[x-1]==' ' || str[x-1]=='\t') ) --x; + while( x>0 && (str[x-1]!=' ' && str[x-1]!='\t') ) --x; + } + } + else + { + if ( !bCtrl ) + { + ++x; if(x>(int)str.length() && ytext(); + if( t.isEmpty() || bCtrl ) + { e->ignore(); return; } + else + { + if( bCtrl ) + { + e->ignore(); return; + } + else + { + if( !melIt->isEditableText() ) break; + deleteSelection2( str, x, y, mlIt, melIt ); + + setModified(); + // Characters to insert + QString s=str; + if ( t[0]=='\t' && m_pOptionDialog->m_bReplaceTabs ) + { + int spaces = (m_cursorXPos / m_pOptionDialog->m_tabSize + 1)*m_pOptionDialog->m_tabSize - m_cursorXPos; + t.fill( ' ', spaces ); + } + if ( m_bInsertMode ) + s.insert( x, t ); + else + s.replace( x, t.length(), t ); + + melIt->setString( s ); + x += t.length(); + bShift = false; + } + } + } + } + + y = minMaxLimiter( y, 0, m_totalSize-1 ); + + calcIteratorFromLineNr( y, mlIt, melIt ); + str = melIt->getString( this ); + + x = minMaxLimiter( x, 0, (int)str.length() ); + + int newFirstLine = m_firstLine; + int newFirstColumn = m_firstColumn; + + if ( y m_firstLine + getNofVisibleLines() ) + newFirstLine = y - getNofVisibleLines(); + + if (bYMoveKey) + x=convertToPosInText( str, m_cursorOldXPos, m_pOptionDialog->m_tabSize ); + + int xOnScreen = convertToPosOnScreen( str, x, m_pOptionDialog->m_tabSize ); + if ( xOnScreen m_firstColumn + getNofVisibleColumns() ) + newFirstColumn = xOnScreen - getNofVisibleColumns(); + + if ( bShift ) + { + if (m_selection.firstLine==-1) + m_selection.start( m_cursorYPos, m_cursorXPos ); + + m_selection.end( y, xOnScreen ); + } + else + m_selection.reset(); + + m_cursorYPos = y; + m_cursorXPos = xOnScreen; + if ( ! bYMoveKey ) + m_cursorOldXPos = m_cursorXPos; + + m_bCursorOn = false; + + if ( newFirstLine!=m_firstLine || newFirstColumn!=m_firstColumn ) + { + m_bCursorOn = true; + scroll( newFirstColumn-m_firstColumn, newFirstLine-m_firstLine ); + return; + } + + m_bCursorOn = true; + update(); +} + +void MergeResultWindow::calcIteratorFromLineNr( + int line, + MergeResultWindow::MergeLineList::iterator& mlIt, + MergeResultWindow::MergeEditLineList::iterator& melIt + ) +{ + for( mlIt = m_mergeLineList.begin(); mlIt!=m_mergeLineList.end(); ++mlIt) + { + MergeLine& ml = *mlIt; + if ( line > ml.mergeEditLineList.size() ) + { + line -= ml.mergeEditLineList.size(); + } + else + { + for( melIt = ml.mergeEditLineList.begin(); melIt != ml.mergeEditLineList.end(); ++melIt ) + { + --line; + if (line<0) return; + } + } + } + assert(false); +} + + +QString MergeResultWindow::getSelection() +{ + QString selectionString; + + int line = 0; + MergeLineList::iterator mlIt = m_mergeLineList.begin(); + for(mlIt = m_mergeLineList.begin();mlIt!=m_mergeLineList.end(); ++mlIt) + { + MergeLine& ml = *mlIt; + MergeEditLineList::iterator melIt; + for( melIt = ml.mergeEditLineList.begin(); melIt != ml.mergeEditLineList.end(); ++melIt ) + { + MergeEditLine& mel = *melIt; + + if ( m_selection.lineWithin(line) ) + { + int outPos = 0; + if (mel.isEditableText()) + { + const QString str = mel.getString( this ); + + // Consider tabs + + for( unsigned int i=0; im_tabSize ); + } + + if( m_selection.within( line, outPos ) ) + { + selectionString += str[i]; + } + + outPos += spaces; + } + } + else if ( mel.isConflict() ) + { + selectionString += i18n(""); + } + + if( m_selection.within( line, outPos ) ) + { + #ifdef _WIN32 + selectionString += '\r'; + #endif + selectionString += '\n'; + } + } + + ++line; + } + } + + return selectionString; +} + +bool MergeResultWindow::deleteSelection2( QString& s, int& x, int& y, + MergeLineList::iterator& mlIt, MergeEditLineList::iterator& melIt ) +{ + if (m_selection.firstLine!=-1 && m_selection.bSelectionContainsData ) + { + deleteSelection(); + y = m_cursorYPos; + calcIteratorFromLineNr( y, mlIt, melIt ); + s = melIt->getString( this ); + x = convertToPosInText( s, m_cursorXPos, m_pOptionDialog->m_tabSize ); + return true; + } + return false; +} + +void MergeResultWindow::deleteSelection() +{ + if ( m_selection.firstLine==-1 || !m_selection.bSelectionContainsData ) + { + return; + } + setModified(); + + int line = 0; + MergeLineList::iterator mlItFirst; + MergeEditLineList::iterator melItFirst; + QString firstLineString; + + int firstLine = -1; + int lastLine = -1; + + MergeLineList::iterator mlIt; + for(mlIt = m_mergeLineList.begin();mlIt!=m_mergeLineList.end(); ++mlIt) + { + MergeLine& ml = *mlIt; + MergeEditLineList::iterator melIt; + for( melIt = ml.mergeEditLineList.begin(); melIt != ml.mergeEditLineList.end(); ++melIt ) + { + MergeEditLine& mel = *melIt; + + if ( mel.isEditableText() && m_selection.lineWithin(line) ) + { + if ( firstLine==-1 ) + firstLine = line; + lastLine = line; + } + + ++line; + } + } + + if ( firstLine == -1 ) + { + return; // Nothing to delete. + } + + line = 0; + for(mlIt = m_mergeLineList.begin();mlIt!=m_mergeLineList.end(); ++mlIt) + { + MergeLine& ml = *mlIt; + MergeEditLineList::iterator melIt, melIt1; + for( melIt = ml.mergeEditLineList.begin(); melIt != ml.mergeEditLineList.end(); ) + { + MergeEditLine& mel = *melIt; + melIt1 = melIt; + ++melIt1; + + if ( mel.isEditableText() && m_selection.lineWithin(line) ) + { + QString lineString = mel.getString( this ); + + int firstPosInLine = m_selection.firstPosInLine(line); + int lastPosInLine = m_selection.lastPosInLine(line); + + if ( line==firstLine ) + { + mlItFirst = mlIt; + melItFirst = melIt; + int pos = convertToPosInText( lineString, firstPosInLine, m_pOptionDialog->m_tabSize ); + firstLineString = lineString.left( pos ); + } + + if ( line==lastLine ) + { + // This is the last line in the selection + int pos = convertToPosInText( lineString, lastPosInLine, m_pOptionDialog->m_tabSize ); + firstLineString += lineString.mid( pos ); // rest of line + melItFirst->setString( firstLineString ); + } + + if ( line!=firstLine ) + { + // Remove the line + if ( mlIt->mergeEditLineList.size()>1 ) + mlIt->mergeEditLineList.erase( melIt ); + else + melIt->setRemoved(); + } + } + + ++line; + melIt = melIt1; + } + } + + m_cursorYPos = m_selection.beginLine(); + m_cursorXPos = m_selection.beginPos(); + m_cursorOldXPos = m_cursorXPos; + + m_selection.reset(); +} + +void MergeResultWindow::pasteClipboard( bool bFromSelection ) +{ + if (m_selection.firstLine != -1 ) + deleteSelection(); + + setModified(); + + int y = m_cursorYPos; + MergeLineList::iterator mlIt; + MergeEditLineList::iterator melIt, melItAfter; + calcIteratorFromLineNr( y, mlIt, melIt ); + melItAfter = melIt; + ++melItAfter; + QString str = melIt->getString( this ); + int x = convertToPosInText( str, m_cursorXPos, m_pOptionDialog->m_tabSize ); + + if ( !QApplication::clipboard()->supportsSelection() ) + bFromSelection = false; + + QString clipBoard = QApplication::clipboard()->text( bFromSelection ? QClipboard::Selection : QClipboard::Clipboard ); + + QString currentLine = str.left(x); + QString endOfLine = str.mid(x); + int i; + int len = clipBoard.length(); + for( i=0; isetString( currentLine ); + MergeEditLine mel(mlIt->id3l); // Associate every mel with an id3l, even if not really valid. + melIt = mlIt->mergeEditLineList.insert( melItAfter, mel ); + currentLine = ""; + x=0; + ++y; + } + else + { + currentLine += c; + ++x; + } + } + + currentLine += endOfLine; + melIt->setString( currentLine ); + + m_cursorYPos = y; + m_cursorXPos = convertToPosOnScreen( currentLine, x, m_pOptionDialog->m_tabSize ); + m_cursorOldXPos = m_cursorXPos; + + update(); +} + +void MergeResultWindow::resetSelection() +{ + m_selection.reset(); + update(); +} + +void MergeResultWindow::setModified(bool bModified) +{ + if (bModified != m_bModified) + { + m_bModified = bModified; + emit modifiedChanged(m_bModified); + } +} + +/// Saves and returns true when successful. +bool MergeResultWindow::saveDocument( const QString& fileName, QTextCodec* pEncoding ) +{ + // Are still conflicts somewhere? + if ( getNrOfUnsolvedConflicts()>0 ) + { + KMessageBox::error( this, + i18n("Not all conflicts are solved yet.\n" + "File not saved.\n"), + i18n("Conflicts Left")); + return false; + } + + update(); + + FileAccess file( fileName, true /*bWantToWrite*/ ); + if ( m_pOptionDialog->m_bDmCreateBakFiles && file.exists() ) + { + bool bSuccess = file.createBackup(".orig"); + if ( !bSuccess ) + { + KMessageBox::error( this, file.getStatusText() + i18n("\n\nCreating backup failed. File not saved."), i18n("File Save Error") ); + return false; + } + } + + QByteArray dataArray; + QTextStream textOutStream(dataArray, IO_WriteOnly); + textOutStream.setCodec( pEncoding ); + + int line = 0; + MergeLineList::iterator mlIt = m_mergeLineList.begin(); + for(mlIt = m_mergeLineList.begin();mlIt!=m_mergeLineList.end(); ++mlIt) + { + MergeLine& ml = *mlIt; + MergeEditLineList::iterator melIt; + for( melIt = ml.mergeEditLineList.begin(); melIt != ml.mergeEditLineList.end(); ++melIt ) + { + MergeEditLine& mel = *melIt; + + if ( mel.isEditableText() ) + { + QString str = mel.getString( this ); + + if (line>0) // Prepend line feed, but not for first line + { + if ( m_pOptionDialog->m_lineEndStyle == eLineEndDos ) + { str.prepend("\r\n"); } + else + { str.prepend("\n"); } + } + + textOutStream << str; + ++line; + } + } + } + bool bSuccess = file.writeFile( dataArray.data(), dataArray.size() ); + if ( ! bSuccess ) + { + KMessageBox::error( this, i18n("Error while writing."), i18n("File Save Error") ); + return false; + } + + setModified( false ); + update(); + + return true; +} + +QString MergeResultWindow::getString( int lineIdx ) +{ + MergeResultWindow::MergeLineList::iterator mlIt; + MergeResultWindow::MergeEditLineList::iterator melIt; + calcIteratorFromLineNr( lineIdx, mlIt, melIt ); + QString s = melIt->getString( this ); + return s; +} + +bool MergeResultWindow::findString( const QString& s, int& d3vLine, int& posInLine, bool bDirDown, bool bCaseSensitive ) +{ + int it = d3vLine; + int endIt = bDirDown ? getNofLines() : -1; + int step = bDirDown ? 1 : -1; + int startPos = posInLine; + + for( ; it!=endIt; it+=step ) + { + QString line = getString( it ); + if ( !line.isEmpty() ) + { + int pos = line.find( s, startPos, bCaseSensitive ); + if ( pos != -1 ) + { + d3vLine = it; + posInLine = pos; + return true; + } + + startPos = 0; + } + } + return false; +} + +void MergeResultWindow::setSelection( int firstLine, int startPos, int lastLine, int endPos ) +{ + if ( lastLine >= getNofLines() ) + { + lastLine = getNofLines()-1; + QString s = getString( lastLine ); + endPos = s.length(); + } + m_selection.reset(); + m_selection.start( firstLine, convertToPosOnScreen( getString(firstLine), startPos, m_pOptionDialog->m_tabSize ) ); + m_selection.end( lastLine, convertToPosOnScreen( getString(lastLine), endPos, m_pOptionDialog->m_tabSize ) ); + update(); +} + +Overview::Overview( QWidget* pParent, OptionDialog* pOptions ) +: QWidget( pParent, 0, WRepaintNoErase ) +{ + m_pDiff3LineList = 0; + m_pOptions = pOptions; + m_bTripleDiff = false; + m_eOverviewMode = eOMNormal; + m_nofLines = 1; + m_bPaintingAllowed = false; + setFixedWidth(20); +} + +void Overview::init( Diff3LineList* pDiff3LineList, bool bTripleDiff ) +{ + m_pDiff3LineList = pDiff3LineList; + m_bTripleDiff = bTripleDiff; + m_pixmap.resize( QSize(0,0) ); // make sure that a redraw happens + update(); +} + +void Overview::reset() +{ + m_pDiff3LineList = 0; +} + +void Overview::slotRedraw() +{ + m_pixmap.resize( QSize(0,0) ); // make sure that a redraw happens + update(); +} + +void Overview::setRange( int firstLine, int pageHeight ) +{ + m_firstLine = firstLine; + m_pageHeight = pageHeight; + update(); +} +void Overview::setFirstLine( int firstLine ) +{ + m_firstLine = firstLine; + update(); +} + +void Overview::setOverviewMode( e_OverviewMode eOverviewMode ) +{ + m_eOverviewMode = eOverviewMode; + slotRedraw(); +} + +Overview::e_OverviewMode Overview::getOverviewMode() +{ + return m_eOverviewMode; +} + +void Overview::mousePressEvent( QMouseEvent* e ) +{ + int h = height()-1; + int h1 = h * m_pageHeight / max2(1,m_nofLines)+3; + if ( h>0 ) + emit setLine( ( e->y() - h1/2 )*m_nofLines/h ); +} + +void Overview::mouseMoveEvent( QMouseEvent* e ) +{ + mousePressEvent(e); +} + +void Overview::setPaintingAllowed( bool bAllowPainting ) +{ + if (m_bPaintingAllowed != bAllowPainting) + { + m_bPaintingAllowed = bAllowPainting; + if ( m_bPaintingAllowed ) update(); + else reset(); + } +} + +void Overview::drawColumn( QPainter& p, e_OverviewMode eOverviewMode, int x, int w, int h, int nofLines ) +{ + p.setPen(Qt::black); + p.drawLine( x, 0, x, h ); + + if (nofLines==0) return; + + int line = 0; + int oldY = 0; + int oldConflictY = -1; + int wrapLineIdx=0; + Diff3LineList::const_iterator i; + for( i = m_pDiff3LineList->begin(); i!= m_pDiff3LineList->end(); ) + { + const Diff3Line& d3l = *i; + int y = h * (line+1) / nofLines; + e_MergeDetails md; + bool bConflict; + bool bLineRemoved; + int src; + mergeOneLine( d3l, md, bConflict, bLineRemoved, src, !m_bTripleDiff ); + + QColor c = m_pOptions->m_bgColor; + bool bWhiteSpaceChange = false; + //if( bConflict ) c=m_pOptions->m_colorForConflict; + //else + if ( eOverviewMode==eOMNormal ) + { + switch( md ) + { + case eDefault: + case eNoChange: + c = m_pOptions->m_bgColor; + break; + + case eBAdded: + case eBDeleted: + case eBChanged: + c = bConflict ? m_pOptions->m_colorForConflict : m_pOptions->m_colorB; + bWhiteSpaceChange = d3l.bAEqB || d3l.bWhiteLineA && d3l.bWhiteLineB; + break; + + case eCAdded: + case eCDeleted: + case eCChanged: + bWhiteSpaceChange = d3l.bAEqC || d3l.bWhiteLineA && d3l.bWhiteLineC; + c = bConflict ? m_pOptions->m_colorForConflict : m_pOptions->m_colorC; + break; + + case eBCChanged: // conflict + case eBCChangedAndEqual: // possible conflict + case eBCDeleted: // possible conflict + case eBChanged_CDeleted: // conflict + case eCChanged_BDeleted: // conflict + case eBCAdded: // conflict + case eBCAddedAndEqual: // possible conflict + c=m_pOptions->m_colorForConflict; + break; + default: assert(false); break; + } + } + else if ( eOverviewMode==eOMAvsB ) + { + switch( md ) + { + case eDefault: + case eNoChange: + case eCAdded: + case eCDeleted: + case eCChanged: break; + default: c = m_pOptions->m_colorForConflict; + bWhiteSpaceChange = d3l.bAEqB || d3l.bWhiteLineA && d3l.bWhiteLineB; + break; + } + } + else if ( eOverviewMode==eOMAvsC ) + { + switch( md ) + { + case eDefault: + case eNoChange: + case eBAdded: + case eBDeleted: + case eBChanged: break; + default: c = m_pOptions->m_colorForConflict; + bWhiteSpaceChange = d3l.bAEqC || d3l.bWhiteLineA && d3l.bWhiteLineC; + break; + } + } + else if ( eOverviewMode==eOMBvsC ) + { + switch( md ) + { + case eDefault: + case eNoChange: + case eBCChangedAndEqual: + case eBCDeleted: + case eBCAddedAndEqual: break; + default: c=m_pOptions->m_colorForConflict; + bWhiteSpaceChange = d3l.bBEqC || d3l.bWhiteLineB && d3l.bWhiteLineC; + break; + } + } + + if (!bWhiteSpaceChange || m_pOptions->m_bShowWhiteSpace ) + { + // Make sure that lines with conflict are not overwritten. + if ( c == m_pOptions->m_colorForConflict ) + { + p.fillRect(x+1, oldY, w, max2(1,y-oldY), bWhiteSpaceChange ? QBrush(c,Qt::Dense4Pattern) : QBrush(c) ); + oldConflictY = oldY; + } + else if ( c!=m_pOptions->m_bgColor && oldY>oldConflictY ) + { + p.fillRect(x+1, oldY, w, max2(1,y-oldY), bWhiteSpaceChange ? QBrush(c,Qt::Dense4Pattern) : QBrush(c) ); + } + } + + oldY = y; + + ++line; + if ( m_pOptions->m_bWordWrap ) + { + ++wrapLineIdx; + if(wrapLineIdx>=d3l.linesNeededForDisplay) + { + wrapLineIdx=0; + ++i; + } + } + else + { + ++i; + } + } +} + +void Overview::paintEvent( QPaintEvent* ) +{ + if (m_pDiff3LineList==0 || !m_bPaintingAllowed ) return; + int h = height()-1; + int w = width(); + + + if ( m_pixmap.size() != size() ) + { + if ( m_pOptions->m_bWordWrap ) + { + m_nofLines = 0; + Diff3LineList::const_iterator i; + for( i = m_pDiff3LineList->begin(); i!= m_pDiff3LineList->end(); ++i ) + { + m_nofLines += i->linesNeededForDisplay; + } + } + else + { + m_nofLines = m_pDiff3LineList->size(); + } + + m_pixmap.resize( size() ); + + QPainter p(&m_pixmap); + p.fillRect( rect(), m_pOptions->m_bgColor ); + + if ( !m_bTripleDiff || m_eOverviewMode == eOMNormal ) + { + drawColumn( p, eOMNormal, 0, w, h, m_nofLines ); + } + else + { + drawColumn( p, eOMNormal, 0, w/2, h, m_nofLines ); + drawColumn( p, m_eOverviewMode, w/2, w/2, h, m_nofLines ); + } + } + + QPainter painter( this ); + painter.drawPixmap( 0,0, m_pixmap ); + + int y1 = h * m_firstLine / m_nofLines-1; + int h1 = h * m_pageHeight / m_nofLines+3; + painter.setPen(Qt::black); + painter.drawRect( 1, y1, w-1, h1 ); +} + +WindowTitleWidget::WindowTitleWidget(OptionDialog* pOptionDialog, QWidget* pParent) +:QWidget(pParent) +{ + m_pOptionDialog = pOptionDialog; + //setAutoFillBackground(true); + + QHBoxLayout* pHLayout = new QHBoxLayout(this); + pHLayout->setMargin(2); + pHLayout->setSpacing(2); + + m_pLabel = new QLabel(i18n("Output")+":", this); + pHLayout->addWidget( m_pLabel ); + + m_pFileNameLineEdit = new QLineEdit(this); + pHLayout->addWidget( m_pFileNameLineEdit, 6 ); + m_pFileNameLineEdit->installEventFilter( this ); + m_pFileNameLineEdit->setReadOnly( true ); + + //m_pBrowseButton = new QPushButton("..."); + //pHLayout->addWidget( m_pBrowseButton, 0 ); + //connect( m_pBrowseButton, SIGNAL(clicked()), this, SLOT(slotBrowseButtonClicked())); + + m_pModifiedLabel = new QLabel(i18n("[Modified]"),this); + pHLayout->addWidget( m_pModifiedLabel ); + m_pModifiedLabel->setMinimumSize( m_pModifiedLabel->sizeHint() ); + m_pModifiedLabel->setText(""); + + pHLayout->addStretch(1); + + m_pEncodingLabel = new QLabel(i18n("Encoding for saving")+":",this); + pHLayout->addWidget( m_pEncodingLabel ); + + m_pEncodingSelector = new QComboBox(this); + pHLayout->addWidget( m_pEncodingSelector, 3 ); + setEncodings(0,0,0); +} + +void WindowTitleWidget::setFileName( const QString& fileName ) +{ + m_pFileNameLineEdit->setText( QDir::convertSeparators(fileName) ); +} + +QString WindowTitleWidget::getFileName() +{ + return m_pFileNameLineEdit->text(); +} + +void WindowTitleWidget::setEncodings( QTextCodec* pCodecForA, QTextCodec* pCodecForB, QTextCodec* pCodecForC ) +{ + m_pEncodingSelector->clear(); + m_codecMap.clear(); + + // First sort codec names: + std::map names; + int i; + for(i=0;;++i) + { + QTextCodec* c = QTextCodec::codecForIndex(i); + if ( c==0 ) break; + else names[QString(c->name())]=c; + } + + i=0; + if ( pCodecForA ) + { + m_pEncodingSelector->insertItem( i18n("Codec from") + " A: " + pCodecForA->name(), i ); + m_codecMap[i]=pCodecForA; + ++i; + } + if ( pCodecForB ) + { + m_pEncodingSelector->insertItem( i18n("Codec from") + " B: " + pCodecForB->name(), i ); + m_codecMap[i]=pCodecForB; + ++i; + } + if ( pCodecForC ) + { + m_pEncodingSelector->insertItem( i18n("Codec from") + " C: " + pCodecForC->name(), i ); + m_codecMap[i]=pCodecForC; + ++i; + } + + std::map::iterator it; + for(it=names.begin();it!=names.end();++it) + { + m_pEncodingSelector->insertItem( it->first, i ); + m_codecMap[i]=it->second; + ++i; + } + m_pEncodingSelector->setMinimumSize( m_pEncodingSelector->sizeHint() ); + + if ( pCodecForC && pCodecForB && pCodecForA ) + { + if ( pCodecForA == pCodecForB ) + m_pEncodingSelector->setCurrentItem( 2 ); // C + else if ( pCodecForA == pCodecForC ) + m_pEncodingSelector->setCurrentItem( 1 ); // B + else + m_pEncodingSelector->setCurrentItem( 2 ); // C + } + else if ( pCodecForA && pCodecForB ) + m_pEncodingSelector->setCurrentItem( 1 ); // B + else + m_pEncodingSelector->setCurrentItem( 0 ); +} + +QTextCodec* WindowTitleWidget::getEncoding() +{ + return m_codecMap[ m_pEncodingSelector->currentItem() ]; +} + +void WindowTitleWidget::setEncoding(QTextCodec* pEncoding) +{ + m_pEncodingSelector->setCurrentText( QString( pEncoding->name() ) ); +} + +//void WindowTitleWidget::slotBrowseButtonClicked() +//{ +// QString current = m_pFileNameLineEdit->text(); +// +// KURL newURL = KFileDialog::getSaveURL( current, 0, this, i18n("Select file (not saving yet)")); +// if ( !newURL.isEmpty() ) +// { +// m_pFileNameLineEdit->setText( newURL.url() ); +// } +//} + +void WindowTitleWidget::slotSetModified( bool bModified ) +{ + m_pModifiedLabel->setText( bModified ? i18n("[Modified]") : "" ); +} + +bool WindowTitleWidget::eventFilter( QObject* o, QEvent* e ) +{ + if ( e->type()==QEvent::FocusIn || e->type()==QEvent::FocusOut ) + { + QPalette p = m_pLabel->palette(); + + QColor c1 = m_pOptionDialog->m_fgColor; + QColor c2 = Qt::lightGray; + if ( e->type()==QEvent::FocusOut ) + c2 = m_pOptionDialog->m_bgColor; + + p.setColor(QColorGroup::Background, c2); + setPalette( p ); + + p.setColor(QColorGroup::Foreground, c1); + m_pLabel->setPalette( p ); + m_pEncodingLabel->setPalette( p ); + m_pEncodingSelector->setPalette( p ); + } + if (o == m_pFileNameLineEdit && e->type()==QEvent::Drop) + { + QDropEvent* d = static_cast(e); + + if ( QUriDrag::canDecode( d ) ) + { + QStringList lst; + QUriDrag::decodeLocalFiles( d, lst ); + + if ( lst.count() > 0 ) + { + static_cast(o)->setText( lst[0] ); + static_cast(o)->setFocus(); + return true; + } + } + } + return false; +} + +#include "mergeresultwindow.moc" diff --git a/src/mergeresultwindow.h b/src/mergeresultwindow.h new file mode 100644 index 0000000..fdc4b5c --- /dev/null +++ b/src/mergeresultwindow.h @@ -0,0 +1,454 @@ +/*************************************************************************** + mergeresultwindow.h - description + ------------------- + begin : Mon Mar 18 2002 + copyright : (C) 2002-2007 by Joachim Eibl + email : joachim.eibl at gmx.de + ***************************************************************************/ + +/*************************************************************************** + * * + * 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. * + * * + ***************************************************************************/ + +#ifndef MERGERESULTWINDOW_H +#define MERGERESULTWINDOW_H + +#include "diff.h" + +#include +#include +#include + +class QPainter; + +class Overview : public QWidget +{ + Q_OBJECT +public: + Overview( QWidget* pParent, OptionDialog* pOptions ); + + void init( Diff3LineList* pDiff3LineList, bool bTripleDiff ); + void reset(); + void setRange( int firstLine, int pageHeight ); + void setPaintingAllowed( bool bAllowPainting ); + + enum e_OverviewMode { eOMNormal, eOMAvsB, eOMAvsC, eOMBvsC }; + void setOverviewMode( e_OverviewMode eOverviewMode ); + e_OverviewMode getOverviewMode(); + +public slots: + void setFirstLine(int firstLine); + void slotRedraw(); +signals: + void setLine(int); +private: + const Diff3LineList* m_pDiff3LineList; + OptionDialog* m_pOptions; + bool m_bTripleDiff; + int m_firstLine; + int m_pageHeight; + QPixmap m_pixmap; + bool m_bPaintingAllowed; + e_OverviewMode m_eOverviewMode; + int m_nofLines; + + virtual void paintEvent( QPaintEvent* e ); + virtual void mousePressEvent( QMouseEvent* e ); + virtual void mouseMoveEvent( QMouseEvent* e ); + void drawColumn( QPainter& p, e_OverviewMode eOverviewMode, int x, int w, int h, int nofLines ); +}; + + +enum e_MergeDetails +{ + eDefault, + eNoChange, + eBChanged, + eCChanged, + eBCChanged, // conflict + eBCChangedAndEqual, // possible conflict + eBDeleted, + eCDeleted, + eBCDeleted, // possible conflict + + eBChanged_CDeleted, // conflict + eCChanged_BDeleted, // conflict + eBAdded, + eCAdded, + eBCAdded, // conflict + eBCAddedAndEqual // possible conflict +}; + +void mergeOneLine( const Diff3Line& d, e_MergeDetails& mergeDetails, bool& bConflict, bool& bLineRemoved, int& src, bool bTwoInputs ); + +enum e_MergeSrcSelector +{ + A=1, + B=2, + C=3 +}; + +class MergeResultWindow : public QWidget +{ + Q_OBJECT +public: + MergeResultWindow( + QWidget* pParent, + OptionDialog* pOptionDialog, + QStatusBar* pStatusBar + ); + + void init( + const LineData* pLineDataA, int sizeA, + const LineData* pLineDataB, int sizeB, + const LineData* pLineDataC, int sizeC, + const Diff3LineList* pDiff3LineList, + TotalDiffStatus* pTotalDiffStatus + ); + + void reset(); + + bool saveDocument( const QString& fileName, QTextCodec* pEncoding ); + int getNrOfUnsolvedConflicts(int* pNrOfWhiteSpaceConflicts=0); + void choose(int selector); + void chooseGlobal(int selector, bool bConflictsOnly, bool bWhiteSpaceOnly ); + + int getNofColumns(); + int getNofLines(); + int getNofVisibleColumns(); + int getNofVisibleLines(); + QString getSelection(); + void resetSelection(); + void showNrOfConflicts(); + bool isDeltaAboveCurrent(); + bool isDeltaBelowCurrent(); + bool isConflictAboveCurrent(); + bool isConflictBelowCurrent(); + bool isUnsolvedConflictAtCurrent(); + bool isUnsolvedConflictAboveCurrent(); + bool isUnsolvedConflictBelowCurrent(); + bool findString( const QString& s, int& d3vLine, int& posInLine, bool bDirDown, bool bCaseSensitive ); + void setSelection( int firstLine, int startPos, int lastLine, int endPos ); + void setOverviewMode( Overview::e_OverviewMode eOverviewMode ); + Overview::e_OverviewMode getOverviewMode(); +public slots: + void setFirstLine(int firstLine); + void setFirstColumn(int firstCol); + + void slotGoCurrent(); + void slotGoTop(); + void slotGoBottom(); + void slotGoPrevDelta(); + void slotGoNextDelta(); + void slotGoPrevUnsolvedConflict(); + void slotGoNextUnsolvedConflict(); + void slotGoPrevConflict(); + void slotGoNextConflict(); + void slotAutoSolve(); + void slotUnsolve(); + void slotMergeHistory(); + void slotRegExpAutoMerge(); + void slotSplitDiff( int firstD3lLineIdx, int lastD3lLineIdx ); + void slotJoinDiffs( int firstD3lLineIdx, int lastD3lLineIdx ); + void slotSetFastSelectorLine(int); + void setPaintingAllowed(bool); + void updateSourceMask(); + +signals: + void scroll( int deltaX, int deltaY ); + void modifiedChanged(bool bModified); + void setFastSelectorRange( int line1, int nofLines ); + void sourceMask( int srcMask, int enabledMask ); + void resizeSignal(); + void selectionEnd(); + void newSelection(); + void updateAvailabilities(); + void showPopupMenu( const QPoint& point ); + void noRelevantChangesDetected(); + +private: + void merge(bool bAutoSolve, int defaultSelector, bool bConflictsOnly=false, bool bWhiteSpaceOnly=false ); + QString getString( int lineIdx ); + + OptionDialog* m_pOptionDialog; + + const LineData* m_pldA; + const LineData* m_pldB; + const LineData* m_pldC; + int m_sizeA; + int m_sizeB; + int m_sizeC; + + const Diff3LineList* m_pDiff3LineList; + TotalDiffStatus* m_pTotalDiffStatus; + + bool m_bPaintingAllowed; + int m_delayedDrawTimer; + Overview::e_OverviewMode m_eOverviewMode; + +private: + class MergeEditLine + { + public: + MergeEditLine(Diff3LineList::const_iterator i, int src=0){m_id3l=i; m_src=src; m_bLineRemoved=false; } + void setConflict() { m_src=0; m_bLineRemoved=false; m_str=QString(); } + bool isConflict() { return m_src==0 && !m_bLineRemoved && m_str.isNull(); } + void setRemoved(int src=0) { m_src=src; m_bLineRemoved=true; m_str=QString(); } + bool isRemoved() { return m_bLineRemoved; } + bool isEditableText() { return !isConflict() && !isRemoved(); } + void setString( const QString& s ){ m_str=s; m_bLineRemoved=false; m_src=0; } + QString getString( const MergeResultWindow* ); + bool isModified() { return ! m_str.isNull() || (m_bLineRemoved && m_src==0); } + + void setSource( int src, bool bLineRemoved ) { m_src=src; m_bLineRemoved =bLineRemoved; } + int src() { return m_src; } + Diff3LineList::const_iterator id3l(){return m_id3l;} + // getString() is implemented as MergeResultWindow::getString() + private: + Diff3LineList::const_iterator m_id3l; + int m_src; // 1, 2 or 3 for A, B or C respectively, or 0 when line is from neither source. + QString m_str; // String when modified by user or null-string when orig data is used. + bool m_bLineRemoved; + }; + + class MergeEditLineList : private std::list + { // I want to know the size immediately! + private: + typedef std::list BASE; + int m_size; + int* m_pTotalSize; + public: + typedef std::list::iterator iterator; + typedef std::list::reverse_iterator reverse_iterator; + typedef std::list::const_iterator const_iterator; + MergeEditLineList(){m_size=0; m_pTotalSize=0; } + void clear() { ds(-m_size); BASE::clear(); } + void push_back( const MergeEditLine& m) { ds(+1); BASE::push_back(m); } + void push_front( const MergeEditLine& m) { ds(+1); BASE::push_front(m); } + iterator erase( iterator i ) { ds(-1); return BASE::erase(i); } + iterator insert( iterator i, const MergeEditLine& m ) { ds(+1); return BASE::insert(i,m); } + int size(){ if (!m_pTotalSize) m_size = BASE::size(); return m_size; } + iterator begin(){return BASE::begin();} + iterator end(){return BASE::end();} + reverse_iterator rbegin(){return BASE::rbegin();} + reverse_iterator rend(){return BASE::rend();} + MergeEditLine& front(){return BASE::front();} + MergeEditLine& back(){return BASE::back();} + bool empty() { return m_size==0; } + void splice(iterator destPos, MergeEditLineList& srcList, iterator srcFirst, iterator srcLast) + { + int* pTotalSize = getTotalSizePtr() ? getTotalSizePtr() : srcList.getTotalSizePtr(); + srcList.setTotalSizePtr(0); // Force size-recalc after splice, because splice doesn't handle size-tracking + setTotalSizePtr(0); + BASE::splice( destPos, srcList, srcFirst, srcLast ); + srcList.setTotalSizePtr( pTotalSize ); + setTotalSizePtr( pTotalSize ); + } + + void setTotalSizePtr(int* pTotalSize) + { + if ( pTotalSize==0 && m_pTotalSize!=0 ) { *m_pTotalSize -= size(); } + else if ( pTotalSize!=0 && m_pTotalSize==0 ) { *pTotalSize += size(); } + m_pTotalSize = pTotalSize; + } + int* getTotalSizePtr() + { + return m_pTotalSize; + } + + private: + void ds(int deltaSize) + { + m_size+=deltaSize; + if (m_pTotalSize!=0) *m_pTotalSize+=deltaSize; + } + }; + + friend class MergeEditLine; + + struct MergeLine + { + MergeLine() + { + srcSelect=0; mergeDetails=eDefault; d3lLineIdx = -1; srcRangeLength=0; + bConflict=false; bDelta=false; bWhiteSpaceConflict=false; + } + Diff3LineList::const_iterator id3l; + int d3lLineIdx; // Needed to show the correct window pos. + int srcRangeLength; // how many src-lines have this properties + e_MergeDetails mergeDetails; + bool bConflict; + bool bWhiteSpaceConflict; + bool bDelta; + int srcSelect; + MergeEditLineList mergeEditLineList; + void split( MergeLine& ml2, int d3lLineIdx2 ) // The caller must insert the ml2 after this ml in the m_mergeLineList + { + if ( d3lLineIdx2= d3lLineIdx + srcRangeLength ) + return; //Error + ml2.mergeDetails = mergeDetails; + ml2.bConflict = bConflict; + ml2.bWhiteSpaceConflict = bWhiteSpaceConflict; + ml2.bDelta = bDelta; + ml2.srcSelect = srcSelect; + + ml2.d3lLineIdx = d3lLineIdx2; + ml2.srcRangeLength = srcRangeLength - (d3lLineIdx2-d3lLineIdx); + srcRangeLength = d3lLineIdx2-d3lLineIdx; // current MergeLine controls fewer lines + ml2.id3l = id3l; + for(int i=0; iid3l()==ml2.id3l) + { + ml2.mergeEditLineList.splice( ml2.mergeEditLineList.begin(), mergeEditLineList, i, mergeEditLineList.end() ); + return; + } + } + ml2.mergeEditLineList.setTotalSizePtr( mergeEditLineList.getTotalSizePtr() ); + ml2.mergeEditLineList.push_back(MergeEditLine(ml2.id3l)); + } + void join( MergeLine& ml2 ) // The caller must remove the ml2 from the m_mergeLineList after this call + { + srcRangeLength += ml2.srcRangeLength; + ml2.mergeEditLineList.clear(); + mergeEditLineList.clear(); + mergeEditLineList.push_back(MergeEditLine(id3l)); // Create a simple conflict + if ( ml2.bConflict ) bConflict = true; + if ( !ml2.bWhiteSpaceConflict ) bWhiteSpaceConflict = false; + if ( ml2.bDelta ) bDelta = true; + } + }; + +private: + static bool sameKindCheck( const MergeLine& ml1, const MergeLine& ml2 ); + struct HistoryMapEntry + { + MergeEditLineList mellA; + MergeEditLineList mellB; + MergeEditLineList mellC; + MergeEditLineList& choice( bool bThreeInputs ); + bool staysInPlace( bool bThreeInputs, Diff3LineList::const_iterator& iHistoryEnd ); + }; + typedef std::map HistoryMap; + void collectHistoryInformation( int src, Diff3LineList::const_iterator iHistoryBegin, Diff3LineList::const_iterator iHistoryEnd, HistoryMap& historyMap, std::list< HistoryMap::iterator >& hitList ); + + typedef std::list MergeLineList; + MergeLineList m_mergeLineList; + MergeLineList::iterator m_currentMergeLineIt; + bool isItAtEnd( bool bIncrement, MergeLineList::iterator i ) + { + if ( bIncrement ) return i!=m_mergeLineList.end(); + else return i!=m_mergeLineList.begin(); + } + + int m_currentPos; + bool checkOverviewIgnore(MergeLineList::iterator &i); + + enum e_Direction { eUp, eDown }; + enum e_EndPoint { eDelta, eConflict, eUnsolvedConflict, eLine, eEnd }; + void go( e_Direction eDir, e_EndPoint eEndPoint ); + void calcIteratorFromLineNr( + int line, + MergeLineList::iterator& mlIt, + MergeEditLineList::iterator& melIt + ); + MergeLineList::iterator splitAtDiff3LineIdx( int d3lLineIdx ); + + virtual void paintEvent( QPaintEvent* e ); + + + void myUpdate(int afterMilliSecs); + virtual void timerEvent(QTimerEvent*); + void writeLine( + MyPainter& p, int line, const QString& str, + int srcSelect, e_MergeDetails mergeDetails, int rangeMark, bool bUserModified, bool bLineRemoved, bool bWhiteSpaceConflict + ); + void setFastSelector(MergeLineList::iterator i); + void convertToLinePos( int x, int y, int& line, int& pos ); + virtual void mousePressEvent ( QMouseEvent* e ); + virtual void mouseDoubleClickEvent ( QMouseEvent* e ); + virtual void mouseReleaseEvent ( QMouseEvent * ); + virtual void mouseMoveEvent ( QMouseEvent * ); + virtual void resizeEvent( QResizeEvent* e ); + virtual void keyPressEvent( QKeyEvent* e ); + virtual void wheelEvent( QWheelEvent* e ); + virtual void focusInEvent( QFocusEvent* e ); + virtual bool focusNextPrevChild(bool){return false;} + + QPixmap m_pixmap; + int m_firstLine; + int m_firstColumn; + int m_nofColumns; + int m_nofLines; + int m_totalSize; //Same as m_nofLines, but calculated differently + bool m_bMyUpdate; + bool m_bInsertMode; + bool m_bModified; + void setModified(bool bModified=true); + + int m_scrollDeltaX; + int m_scrollDeltaY; + int m_cursorXPos; + int m_cursorYPos; + int m_cursorOldXPos; + bool m_bCursorOn; // blinking on and off each second + QTimer m_cursorTimer; + bool m_bCursorUpdate; + QStatusBar* m_pStatusBar; + + Selection m_selection; + + bool deleteSelection2( QString& str, int& x, int& y, + MergeLineList::iterator& mlIt, MergeEditLineList::iterator& melIt ); + bool doRelevantChangesExist(); +public slots: + void deleteSelection(); + void pasteClipboard(bool bFromSelection); +private slots: + void slotCursorUpdate(); +}; + +class QLineEdit; +class QTextCodec; +class QComboBox; +class QLabel; +class WindowTitleWidget : public QWidget +{ + Q_OBJECT +private: + QLabel* m_pLabel; + QLineEdit* m_pFileNameLineEdit; + //QPushButton* m_pBrowseButton; + QLabel* m_pModifiedLabel; + QLabel* m_pEncodingLabel; + QComboBox* m_pEncodingSelector; + OptionDialog* m_pOptionDialog; + std::map m_codecMap; +public: + WindowTitleWidget(OptionDialog* pOptionDialog, QWidget* pParent ); + QTextCodec* getEncoding(); + void setFileName(const QString& fileName ); + QString getFileName(); + void setEncodings( QTextCodec* pCodecForA, QTextCodec* pCodecForB, QTextCodec* pCodecForC ); + void setEncoding( QTextCodec* pCodec ); + + bool eventFilter( QObject* o, QEvent* e ); +public slots: + void slotSetModified( bool bModified ); +//private slots: +// void slotBrowseButtonClicked(); + +}; + +#endif + diff --git a/src/optiondialog.cpp b/src/optiondialog.cpp new file mode 100644 index 0000000..698763e --- /dev/null +++ b/src/optiondialog.cpp @@ -0,0 +1,1755 @@ +/* + * kdiff3 - Text Diff And Merge Tool + * Copyright (C) 2002-2007 Joachim Eibl, joachim.eibl at gmx.de + * + * 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., 51 Franklin Steet, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include // For KFontChooser +#include +#include +#include +#include +#include //For ktoolbar.h + +//#include +#include + +#include "optiondialog.h" +#include "diff.h" +#include "smalldialogs.h" + +#include + +#ifndef KREPLACEMENTS_H +#include +#endif + +static QString s_historyEntryStartRegExpToolTip; +static QString s_historyEntryStartSortKeyOrderToolTip; +static QString s_autoMergeRegExpToolTip; +static QString s_historyStartRegExpToolTip; + +void OptionDialog::addOptionItem(OptionItem* p) +{ + m_optionItemList.push_back(p); +} + +class OptionItem +{ +public: + OptionItem( OptionDialog* pOptionDialog, const QString& saveName ) + { + assert(pOptionDialog!=0); + pOptionDialog->addOptionItem( this ); + m_saveName = saveName; + } + virtual ~OptionItem(){} + virtual void setToDefault()=0; + virtual void setToCurrent()=0; + virtual void apply()=0; + virtual void write(ValueMap*)=0; + virtual void read(ValueMap*)=0; + QString getSaveName(){return m_saveName;} +protected: + QString m_saveName; +}; + +class OptionCheckBox : public QCheckBox, public OptionItem +{ +public: + OptionCheckBox( QString text, bool bDefaultVal, const QString& saveName, bool* pbVar, + QWidget* pParent, OptionDialog* pOD ) + : QCheckBox( text, pParent ), OptionItem( pOD, saveName ) + { + m_pbVar = pbVar; + m_bDefaultVal = bDefaultVal; + } + void setToDefault(){ setChecked( m_bDefaultVal ); } + void setToCurrent(){ setChecked( *m_pbVar ); } + void apply() { *m_pbVar = isChecked(); } + void write(ValueMap* config){ config->writeEntry(m_saveName, *m_pbVar ); } + void read (ValueMap* config){ *m_pbVar = config->readBoolEntry( m_saveName, *m_pbVar ); } +private: + OptionCheckBox( const OptionCheckBox& ); // private copy constructor without implementation + bool* m_pbVar; + bool m_bDefaultVal; +}; + +class OptionRadioButton : public QRadioButton, public OptionItem +{ +public: + OptionRadioButton( QString text, bool bDefaultVal, const QString& saveName, bool* pbVar, + QWidget* pParent, OptionDialog* pOD ) + : QRadioButton( text, pParent ), OptionItem( pOD, saveName ) + { + m_pbVar = pbVar; + m_bDefaultVal = bDefaultVal; + } + void setToDefault(){ setChecked( m_bDefaultVal ); } + void setToCurrent(){ setChecked( *m_pbVar ); } + void apply() { *m_pbVar = isChecked(); } + void write(ValueMap* config){ config->writeEntry(m_saveName, *m_pbVar ); } + void read (ValueMap* config){ *m_pbVar = config->readBoolEntry( m_saveName, *m_pbVar ); } +private: + OptionRadioButton( const OptionRadioButton& ); // private copy constructor without implementation + bool* m_pbVar; + bool m_bDefaultVal; +}; + + +template +class OptionT : public OptionItem +{ +public: + OptionT( const T& defaultVal, const QString& saveName, T* pVar, OptionDialog* pOD ) + : OptionItem( pOD, saveName ) + { + m_pVar = pVar; + *m_pVar = defaultVal; + } + OptionT( const QString& saveName, T* pVar, OptionDialog* pOD ) + : OptionItem( pOD, saveName ) + { + m_pVar = pVar; + } + void setToDefault(){} + void setToCurrent(){} + void apply() {} + void write(ValueMap* vm){ writeEntry( vm, m_saveName, *m_pVar ); } + void read (ValueMap* vm){ readEntry ( vm, m_saveName, *m_pVar ); } +private: + OptionT( const OptionT& ); // private copy constructor without implementation + T* m_pVar; +}; + +template void writeEntry(ValueMap* vm, const QString& saveName, const T& v ) { vm->writeEntry( saveName, v ); } +static void writeEntry(ValueMap* vm, const QString& saveName, const QStringList& v ) { vm->writeEntry( saveName, v, '|' ); } + +static void readEntry(ValueMap* vm, const QString& saveName, bool& v ) { v = vm->readBoolEntry( saveName, v ); } +static void readEntry(ValueMap* vm, const QString& saveName, int& v ) { v = vm->readNumEntry( saveName, v ); } +static void readEntry(ValueMap* vm, const QString& saveName, QSize& v ) { v = vm->readSizeEntry( saveName, &v ); } +static void readEntry(ValueMap* vm, const QString& saveName, QPoint& v ) { v = vm->readPointEntry( saveName, &v ); } +static void readEntry(ValueMap* vm, const QString& saveName, QStringList& v ){ v = vm->readListEntry( saveName, QStringList(), '|' ); } + +typedef OptionT OptionToggleAction; +typedef OptionT OptionNum; +typedef OptionT OptionPoint; +typedef OptionT OptionSize; +typedef OptionT OptionStringList; + +class OptionFontChooser : public KFontChooser, public OptionItem +{ +public: + OptionFontChooser( const QFont& defaultVal, const QString& saveName, QFont* pbVar, QWidget* pParent, OptionDialog* pOD ) + :KFontChooser( pParent,"font",true/*onlyFixed*/,QStringList(),false,6 ), + OptionItem( pOD, saveName ) + { + m_pbVar = pbVar; + *m_pbVar = defaultVal; + m_default = defaultVal; + } + void setToDefault(){ setFont( m_default, true /*only fixed*/ ); } + void setToCurrent(){ setFont( *m_pbVar, true /*only fixed*/ ); } + void apply() { *m_pbVar = font();} + void write(ValueMap* config){ config->writeEntry(m_saveName, *m_pbVar ); } + void read (ValueMap* config){ *m_pbVar = config->readFontEntry( m_saveName, m_pbVar ); } +private: + OptionFontChooser( const OptionToggleAction& ); // private copy constructor without implementation + QFont* m_pbVar; + QFont m_default; +}; + +class OptionColorButton : public KColorButton, public OptionItem +{ +public: + OptionColorButton( QColor defaultVal, const QString& saveName, QColor* pVar, QWidget* pParent, OptionDialog* pOD ) + : KColorButton( pParent ), OptionItem( pOD, saveName ) + { + m_pVar = pVar; + m_defaultVal = defaultVal; + } + void setToDefault(){ setColor( m_defaultVal ); } + void setToCurrent(){ setColor( *m_pVar ); } + void apply() { *m_pVar = color(); } + void write(ValueMap* config){ config->writeEntry(m_saveName, *m_pVar ); } + void read (ValueMap* config){ *m_pVar = config->readColorEntry( m_saveName, m_pVar ); } +private: + OptionColorButton( const OptionColorButton& ); // private copy constructor without implementation + QColor* m_pVar; + QColor m_defaultVal; +}; + +class OptionLineEdit : public QComboBox, public OptionItem +{ +public: + OptionLineEdit( const QString& defaultVal, const QString& saveName, QString* pVar, + QWidget* pParent, OptionDialog* pOD ) + : QComboBox( pParent ), OptionItem( pOD, saveName ) + { + setMinimumWidth(50); + setEditable(true); + m_pVar = pVar; + m_defaultVal = defaultVal; + m_list.push_back(defaultVal); + insertText(); + } + void setToDefault(){ setCurrentText( m_defaultVal ); } + void setToCurrent(){ setCurrentText( *m_pVar ); } + void apply() { *m_pVar = currentText(); insertText(); } + void write(ValueMap* config){ config->writeEntry( m_saveName, m_list, '|' ); } + void read (ValueMap* config){ + m_list = config->readListEntry( m_saveName, m_defaultVal, '|' ); + if ( !m_list.empty() ) *m_pVar = m_list.front(); + clear(); + insertStringList(m_list); + } +private: + void insertText() + { // Check if the text exists. If yes remove it and push it in as first element + QString current = currentText(); + m_list.remove( current ); + m_list.push_front( current ); + clear(); + if ( m_list.size()>10 ) + m_list.erase( m_list.at(10),m_list.end() ); + insertStringList(m_list); + } + OptionLineEdit( const OptionLineEdit& ); // private copy constructor without implementation + QString* m_pVar; + QString m_defaultVal; + QStringList m_list; +}; + +#if defined QT_NO_VALIDATOR +#error No validator +#endif +class OptionIntEdit : public QLineEdit, public OptionItem +{ +public: + OptionIntEdit( int defaultVal, const QString& saveName, int* pVar, int rangeMin, int rangeMax, + QWidget* pParent, OptionDialog* pOD ) + : QLineEdit( pParent ), OptionItem( pOD, saveName ) + { + m_pVar = pVar; + m_defaultVal = defaultVal; + QIntValidator* v = new QIntValidator(this); + v->setRange( rangeMin, rangeMax ); + setValidator( v ); + } + void setToDefault(){ QString s; s.setNum(m_defaultVal); setText( s ); } + void setToCurrent(){ QString s; s.setNum(*m_pVar); setText( s ); } + void apply() { const QIntValidator* v=static_cast(validator()); + *m_pVar = minMaxLimiter( text().toInt(), v->bottom(), v->top()); + setText( QString::number(*m_pVar) ); } + void write(ValueMap* config){ config->writeEntry(m_saveName, *m_pVar ); } + void read (ValueMap* config){ *m_pVar = config->readNumEntry( m_saveName, *m_pVar ); } +private: + OptionIntEdit( const OptionIntEdit& ); // private copy constructor without implementation + int* m_pVar; + int m_defaultVal; +}; + +class OptionComboBox : public QComboBox, public OptionItem +{ +public: + OptionComboBox( int defaultVal, const QString& saveName, int* pVarNum, + QWidget* pParent, OptionDialog* pOD ) + : QComboBox( pParent ), OptionItem( pOD, saveName ) + { + setMinimumWidth(50); + m_pVarNum = pVarNum; + m_pVarStr = 0; + m_defaultVal = defaultVal; + setEditable(false); + } + OptionComboBox( int defaultVal, const QString& saveName, QString* pVarStr, + QWidget* pParent, OptionDialog* pOD ) + : QComboBox( pParent ), OptionItem( pOD, saveName ) + { + m_pVarNum = 0; + m_pVarStr = pVarStr; + m_defaultVal = defaultVal; + setEditable(false); + } + void setToDefault() + { + setCurrentItem( m_defaultVal ); + if (m_pVarStr!=0){ *m_pVarStr=currentText(); } + } + void setToCurrent() + { + if (m_pVarNum!=0) setCurrentItem( *m_pVarNum ); + else setText( *m_pVarStr ); + } + void apply() + { + if (m_pVarNum!=0){ *m_pVarNum = currentItem(); } + else { *m_pVarStr = currentText(); } + } + void write(ValueMap* config) + { + if (m_pVarStr!=0) config->writeEntry(m_saveName, *m_pVarStr ); + else config->writeEntry(m_saveName, *m_pVarNum ); + } + void read (ValueMap* config) + { + if (m_pVarStr!=0) setText( config->readEntry( m_saveName, currentText() ) ); + else *m_pVarNum = config->readNumEntry( m_saveName, *m_pVarNum ); + } +private: + OptionComboBox( const OptionIntEdit& ); // private copy constructor without implementation + int* m_pVarNum; + QString* m_pVarStr; + int m_defaultVal; + + void setText(const QString& s) + { + // Find the string in the combobox-list, don't change the value if nothing fits. + for( int i=0; i m_codecVec; + QTextCodec** m_ppVarCodec; +public: + OptionEncodingComboBox( const QString& saveName, QTextCodec** ppVarCodec, + QWidget* pParent, OptionDialog* pOD ) + : QComboBox( pParent ), OptionItem( pOD, saveName ) + { + m_ppVarCodec = ppVarCodec; + insertCodec( i18n("Unicode, 8 bit"), QTextCodec::codecForName("UTF-8") ); + insertCodec( i18n("Unicode"), QTextCodec::codecForName("iso-10646-UCS-2") ); + insertCodec( i18n("Latin1"), QTextCodec::codecForName("iso 8859-1") ); + + // First sort codec names: + std::map names; + int i; + for(i=0;;++i) + { + QTextCodec* c = QTextCodec::codecForIndex(i); + if ( c==0 ) break; + else names[QString(c->name()).upper()]=c; + } + + std::map::iterator it; + for(it=names.begin();it!=names.end();++it) + { + insertCodec( "", it->second ); + } + + QToolTip::add( this, i18n( + "Change this if non-ASCII characters are not displayed correctly." + )); + } + void insertCodec( const QString& visibleCodecName, QTextCodec* c ) + { + if (c!=0) + { + for( unsigned int i=0; iname()) : visibleCodecName+" ("+c->name()+")", m_codecVec.size() ); + m_codecVec.push_back( c ); + } + } + void setToDefault() + { + QString defaultName = QTextCodec::codecForLocale()->name(); + for(int i=0;iwriteEntry(m_saveName, (*m_ppVarCodec)->name() ); + } + void read (ValueMap* config) + { + QString codecName = config->readEntry( m_saveName, m_codecVec[ currentItem() ]->name() ); + for(unsigned int i=0; iname() ) + { + setCurrentItem( i ); + if (m_ppVarCodec!=0) *m_ppVarCodec = m_codecVec[i]; + break; + } + } + } +}; + + +OptionDialog::OptionDialog( bool bShowDirMergeSettings, QWidget *parent, char *name ) + :KDialogBase( IconList, i18n("Configure"), Help|Default|Apply|Ok|Cancel, + Ok, parent, name, true /*modal*/, true ) +{ + setHelp( "kdiff3/index.html", QString::null ); + + setupFontPage(); + setupColorPage(); + setupEditPage(); + setupDiffPage(); + setupMergePage(); + setupOtherOptions(); + if (bShowDirMergeSettings) + setupDirectoryMergePage(); + + setupRegionalPage(); + setupIntegrationPage(); + + //setupKeysPage(); + + // Initialize all values in the dialog + resetToDefaults(); + slotApply(); +} + +OptionDialog::~OptionDialog( void ) +{ +} + +void OptionDialog::setupOtherOptions() +{ + new OptionToggleAction( false, "AutoAdvance", &m_bAutoAdvance, this ); + new OptionToggleAction( true, "ShowWhiteSpaceCharacters", &m_bShowWhiteSpaceCharacters, this ); + new OptionToggleAction( true, "ShowWhiteSpace", &m_bShowWhiteSpace, this ); + new OptionToggleAction( false, "ShowLineNumbers", &m_bShowLineNumbers, this ); + new OptionToggleAction( true, "HorizDiffWindowSplitting", &m_bHorizDiffWindowSplitting, this ); + new OptionToggleAction( false, "WordWrap", &m_bWordWrap, this ); + + new OptionToggleAction( true, "ShowIdenticalFiles", &m_bDmShowIdenticalFiles, this ); + + new OptionToggleAction( true, "Show Toolbar", &m_bShowToolBar, this ); + new OptionToggleAction( true, "Show Statusbar", &m_bShowStatusBar, this ); + + new OptionNum( (int)KToolBar::Top, "ToolBarPos", &m_toolBarPos, this ); + new OptionSize( QSize(600,400),"Geometry", &m_geometry, this ); + new OptionPoint( QPoint(0,22), "Position", &m_position, this ); + new OptionToggleAction( false, "WindowStateMaximised", &m_bMaximised, this ); + + new OptionStringList( "RecentAFiles", &m_recentAFiles, this ); + new OptionStringList( "RecentBFiles", &m_recentBFiles, this ); + new OptionStringList( "RecentCFiles", &m_recentCFiles, this ); + new OptionStringList( "RecentOutputFiles", &m_recentOutputFiles, this ); +} + +void OptionDialog::setupFontPage( void ) +{ + QFrame *page = addPage( i18n("Font"), i18n("Editor & Diff Output Font" ), + BarIcon("fonts", KIcon::SizeMedium ) ); + + QVBoxLayout *topLayout = new QVBoxLayout( page, 5, spacingHint() ); + + QFont defaultFont = +#ifdef _WIN32 + QFont("Courier New", 10 ); +#elif defined( KREPLACEMENTS_H ) + QFont("Courier", 10 ); +#else + KGlobalSettings::fixedFont(); +#endif + + OptionFontChooser* pFontChooser = new OptionFontChooser( defaultFont, "Font", &m_font, page, this ); + topLayout->addWidget( pFontChooser ); + + QGridLayout *gbox = new QGridLayout( 1, 2 ); + topLayout->addLayout( gbox ); + int line=0; + + OptionCheckBox* pItalicDeltas = new OptionCheckBox( i18n("Italic font for deltas"), false, "ItalicForDeltas", &m_bItalicForDeltas, page, this ); + gbox->addMultiCellWidget( pItalicDeltas, line, line, 0, 1 ); + QToolTip::add( pItalicDeltas, i18n( + "Selects the italic version of the font for differences.\n" + "If the font doesn't support italic characters, then this does nothing.") + ); +} + + +void OptionDialog::setupColorPage( void ) +{ + QFrame *page = addPage( i18n("Color"), i18n("Colors Settings"), + BarIcon("colorize", KIcon::SizeMedium ) ); + QVBoxLayout *topLayout = new QVBoxLayout( page, 5, spacingHint() ); + + QGridLayout *gbox = new QGridLayout( 7, 2 ); + gbox->setColStretch(1,5); + topLayout->addLayout(gbox); + + QLabel* label; + int line = 0; + + int depth = QColor::numBitPlanes(); + bool bLowColor = depth<=8; + + label = new QLabel( i18n("Editor and Diff Views:"), page ); + gbox->addWidget( label, line, 0 ); + QFont f( label->font() ); + f.setBold(true); + label->setFont(f); + ++line; + + OptionColorButton* pFgColor = new OptionColorButton( Qt::black,"FgColor", &m_fgColor, page, this ); + label = new QLabel( pFgColor, i18n("Foreground color:"), page ); + gbox->addWidget( label, line, 0 ); + gbox->addWidget( pFgColor, line, 1 ); + ++line; + + OptionColorButton* pBgColor = new OptionColorButton( Qt::white, "BgColor", &m_bgColor, page, this ); + label = new QLabel( pBgColor, i18n("Background color:"), page ); + gbox->addWidget( label, line, 0 ); + gbox->addWidget( pBgColor, line, 1 ); + + ++line; + + OptionColorButton* pDiffBgColor = new OptionColorButton( + bLowColor ? Qt::lightGray : qRgb(224,224,224), "DiffBgColor", &m_diffBgColor, page, this ); + label = new QLabel( pDiffBgColor, i18n("Diff background color:"), page ); + gbox->addWidget( label, line, 0 ); + gbox->addWidget( pDiffBgColor, line, 1 ); + ++line; + + OptionColorButton* pColorA = new OptionColorButton( + bLowColor ? qRgb(0,0,255) : qRgb(0,0,200)/*blue*/, "ColorA", &m_colorA, page, this ); + label = new QLabel( pColorA, i18n("Color A:"), page ); + gbox->addWidget( label, line, 0 ); + gbox->addWidget( pColorA, line, 1 ); + ++line; + + OptionColorButton* pColorB = new OptionColorButton( + bLowColor ? qRgb(0,128,0) : qRgb(0,150,0)/*green*/, "ColorB", &m_colorB, page, this ); + label = new QLabel( pColorB, i18n("Color B:"), page ); + gbox->addWidget( label, line, 0 ); + gbox->addWidget( pColorB, line, 1 ); + ++line; + + OptionColorButton* pColorC = new OptionColorButton( + bLowColor ? qRgb(128,0,128) : qRgb(150,0,150)/*magenta*/, "ColorC", &m_colorC, page, this ); + label = new QLabel( pColorC, i18n("Color C:"), page ); + gbox->addWidget( label, line, 0 ); + gbox->addWidget( pColorC, line, 1 ); + ++line; + + OptionColorButton* pColorForConflict = new OptionColorButton( Qt::red, "ColorForConflict", &m_colorForConflict, page, this ); + label = new QLabel( pColorForConflict, i18n("Conflict color:"), page ); + gbox->addWidget( label, line, 0 ); + gbox->addWidget( pColorForConflict, line, 1 ); + ++line; + + OptionColorButton* pColor = new OptionColorButton( + bLowColor ? qRgb(192,192,192) : qRgb(220,220,100), "CurrentRangeBgColor", &m_currentRangeBgColor, page, this ); + label = new QLabel( pColor, i18n("Current range background color:"), page ); + gbox->addWidget( label, line, 0 ); + gbox->addWidget( pColor, line, 1 ); + ++line; + + pColor = new OptionColorButton( + bLowColor ? qRgb(255,255,0) : qRgb(255,255,150), "CurrentRangeDiffBgColor", &m_currentRangeDiffBgColor, page, this ); + label = new QLabel( pColor, i18n("Current range diff background color:"), page ); + gbox->addWidget( label, line, 0 ); + gbox->addWidget( pColor, line, 1 ); + ++line; + + pColor = new OptionColorButton( qRgb(0xff,0xd0,0x80), "ManualAlignmentRangeColor", &m_manualHelpRangeColor, page, this ); + label = new QLabel( pColor, i18n("Color for manually aligned difference ranges:"), page ); + gbox->addWidget( label, line, 0 ); + gbox->addWidget( pColor, line, 1 ); + ++line; + + label = new QLabel( i18n("Directory Comparison View:"), page ); + gbox->addWidget( label, line, 0 ); + label->setFont(f); + ++line; + + pColor = new OptionColorButton( qRgb(0,0xd0,0), "NewestFileColor", &m_newestFileColor, page, this ); + label = new QLabel( pColor, i18n("Newest file color:"), page ); + gbox->addWidget( label, line, 0 ); + gbox->addWidget( pColor, line, 1 ); + QString dirColorTip = i18n( "Changing this color will only be effective when starting the next directory comparison."); + QToolTip::add( label, dirColorTip ); + ++line; + + pColor = new OptionColorButton( qRgb(0xf0,0,0), "OldestFileColor", &m_oldestFileColor, page, this ); + label = new QLabel( pColor, i18n("Oldest file color:"), page ); + gbox->addWidget( label, line, 0 ); + gbox->addWidget( pColor, line, 1 ); + QToolTip::add( label, dirColorTip ); + ++line; + + pColor = new OptionColorButton( qRgb(0xc0,0xc0,0), "MidAgeFileColor", &m_midAgeFileColor, page, this ); + label = new QLabel( pColor, i18n("Middle age file color:"), page ); + gbox->addWidget( label, line, 0 ); + gbox->addWidget( pColor, line, 1 ); + QToolTip::add( label, dirColorTip ); + ++line; + + pColor = new OptionColorButton( qRgb(0,0,0), "MissingFileColor", &m_missingFileColor, page, this ); + label = new QLabel( pColor, i18n("Color for missing files:"), page ); + gbox->addWidget( label, line, 0 ); + gbox->addWidget( pColor, line, 1 ); + QToolTip::add( label, dirColorTip ); + ++line; + + topLayout->addStretch(10); +} + + +void OptionDialog::setupEditPage( void ) +{ + QFrame *page = addPage( i18n("Editor"), i18n("Editor Behavior"), + BarIcon("edit", KIcon::SizeMedium ) ); + QVBoxLayout *topLayout = new QVBoxLayout( page, 5, spacingHint() ); + + QGridLayout *gbox = new QGridLayout( 4, 2 ); + gbox->setColStretch(1,5); + topLayout->addLayout( gbox ); + QLabel* label; + int line=0; + + OptionCheckBox* pReplaceTabs = new OptionCheckBox( i18n("Tab inserts spaces"), false, "ReplaceTabs", &m_bReplaceTabs, page, this ); + gbox->addMultiCellWidget( pReplaceTabs, line, line, 0, 1 ); + QToolTip::add( pReplaceTabs, i18n( + "On: Pressing tab generates the appropriate number of spaces.\n" + "Off: A Tab-character will be inserted.") + ); + ++line; + + OptionIntEdit* pTabSize = new OptionIntEdit( 8, "TabSize", &m_tabSize, 1, 100, page, this ); + label = new QLabel( pTabSize, i18n("Tab size:"), page ); + gbox->addWidget( label, line, 0 ); + gbox->addWidget( pTabSize, line, 1 ); + ++line; + + OptionCheckBox* pAutoIndentation = new OptionCheckBox( i18n("Auto indentation"), true, "AutoIndentation", &m_bAutoIndentation, page, this ); + gbox->addMultiCellWidget( pAutoIndentation, line, line, 0, 1 ); + QToolTip::add( pAutoIndentation, i18n( + "On: The indentation of the previous line is used for a new line.\n" + )); + ++line; + + OptionCheckBox* pAutoCopySelection = new OptionCheckBox( i18n("Auto copy selection"), false, "AutoCopySelection", &m_bAutoCopySelection, page, this ); + gbox->addMultiCellWidget( pAutoCopySelection, line, line, 0, 1 ); + QToolTip::add( pAutoCopySelection, i18n( + "On: Any selection is immediately written to the clipboard.\n" + "Off: You must explicitely copy e.g. via Ctrl-C." + )); + ++line; + + label = new QLabel( i18n("Line end style:"), page ); + gbox->addWidget( label, line, 0 ); + #ifdef _WIN32 + int defaultLineEndStyle = eLineEndDos; + #else + int defaultLineEndStyle = eLineEndUnix; + #endif + OptionComboBox* pLineEndStyle = new OptionComboBox( defaultLineEndStyle, "LineEndStyle", &m_lineEndStyle, page, this ); + gbox->addWidget( pLineEndStyle, line, 1 ); + pLineEndStyle->insertItem( "Unix", eLineEndUnix ); + pLineEndStyle->insertItem( "Dos/Windows", eLineEndDos ); + QToolTip::add( label, i18n( + "Sets the line endings for when an edited file is saved.\n" + "DOS/Windows: CR+LF; UNIX: LF; with CR=0D, LF=0A") + ); + ++line; + + topLayout->addStretch(10); +} + + +void OptionDialog::setupDiffPage( void ) +{ + QFrame *page = addPage( i18n("Diff"), i18n("Diff Settings"), + BarIcon("misc", KIcon::SizeMedium ) ); + QVBoxLayout *topLayout = new QVBoxLayout( page, 5, spacingHint() ); + + QGridLayout *gbox = new QGridLayout( 3, 2 ); + gbox->setColStretch(1,5); + topLayout->addLayout( gbox ); + int line=0; + + QLabel* label=0; + +// OptionCheckBox* pPreserveCarriageReturn = new OptionCheckBox( i18n("Preserve carriage return"), false, "PreserveCarriageReturn", &m_bPreserveCarriageReturn, page, this ); +// gbox->addMultiCellWidget( pPreserveCarriageReturn, line, line, 0, 1 ); +// QToolTip::add( pPreserveCarriageReturn, i18n( +// "Show carriage return characters '\\r' if they exist.\n" +// "Helps to compare files that were modified under different operating systems.") +// ); +// ++line; + QString treatAsWhiteSpace = " ("+i18n("Treat as white space.")+")"; + + OptionCheckBox* pIgnoreNumbers = new OptionCheckBox( i18n("Ignore numbers")+treatAsWhiteSpace, false, "IgnoreNumbers", &m_bIgnoreNumbers, page, this ); + gbox->addMultiCellWidget( pIgnoreNumbers, line, line, 0, 1 ); + QToolTip::add( pIgnoreNumbers, i18n( + "Ignore number characters during line matching phase. (Similar to Ignore white space.)\n" + "Might help to compare files with numeric data.") + ); + ++line; + + OptionCheckBox* pIgnoreComments = new OptionCheckBox( i18n("Ignore C/C++ comments")+treatAsWhiteSpace, false, "IgnoreComments", &m_bIgnoreComments, page, this ); + gbox->addMultiCellWidget( pIgnoreComments, line, line, 0, 1 ); + QToolTip::add( pIgnoreComments, i18n( "Treat C/C++ comments like white space.") + ); + ++line; + + OptionCheckBox* pIgnoreCase = new OptionCheckBox( i18n("Ignore case")+treatAsWhiteSpace, false, "IgnoreCase", &m_bIgnoreCase, page, this ); + gbox->addMultiCellWidget( pIgnoreCase, line, line, 0, 1 ); + QToolTip::add( pIgnoreCase, i18n( + "Treat case differences like white space changes. ('a'<=>'A')") + ); + ++line; + + label = new QLabel( i18n("Preprocessor command:"), page ); + gbox->addWidget( label, line, 0 ); + OptionLineEdit* pLE = new OptionLineEdit( "", "PreProcessorCmd", &m_PreProcessorCmd, page, this ); + gbox->addWidget( pLE, line, 1 ); + QToolTip::add( label, i18n("User defined pre-processing. (See the docs for details.)") ); + ++line; + + label = new QLabel( i18n("Line-matching preprocessor command:"), page ); + gbox->addWidget( label, line, 0 ); + pLE = new OptionLineEdit( "", "LineMatchingPreProcessorCmd", &m_LineMatchingPreProcessorCmd, page, this ); + gbox->addWidget( pLE, line, 1 ); + QToolTip::add( label, i18n("This pre-processor is only used during line matching.\n(See the docs for details.)") ); + ++line; + + OptionCheckBox* pTryHard = new OptionCheckBox( i18n("Try hard (slower)"), true, "TryHard", &m_bTryHard, page, this ); + gbox->addMultiCellWidget( pTryHard, line, line, 0, 1 ); + QToolTip::add( pTryHard, i18n( + "Enables the --minimal option for the external diff.\n" + "The analysis of big files will be much slower.") + ); + ++line; + + topLayout->addStretch(10); +} + +void OptionDialog::setupMergePage( void ) +{ + QFrame *page = addPage( i18n("Merge"), i18n("Merge Settings"), + BarIcon("misc", KIcon::SizeMedium ) ); + QVBoxLayout *topLayout = new QVBoxLayout( page ); + topLayout->setMargin( 5 ); + topLayout->setSpacing( spacingHint() ); + + QGridLayout *gbox = new QGridLayout(); + gbox->setColStretch(1,5); + topLayout->addLayout( gbox ); + int line=0; + + QLabel* label=0; + + label = new QLabel( i18n("Auto advance delay (ms):"), page ); + gbox->addWidget( label, line, 0 ); + OptionIntEdit* pAutoAdvanceDelay = new OptionIntEdit( 500, "AutoAdvanceDelay", &m_autoAdvanceDelay, 0, 2000, page, this ); + gbox->addWidget( pAutoAdvanceDelay, line, 1 ); + QToolTip::add( label,i18n( + "When in Auto-Advance mode the result of the current selection is shown \n" + "for the specified time, before jumping to the next conflict. Range: 0-2000 ms") + ); + ++line; + + label = new QLabel( i18n("White space 2-file merge default:"), page ); + gbox->addWidget( label, line, 0 ); + OptionComboBox* pWhiteSpace2FileMergeDefault = new OptionComboBox( 0, "WhiteSpace2FileMergeDefault", &m_whiteSpace2FileMergeDefault, page, this ); + gbox->addWidget( pWhiteSpace2FileMergeDefault, line, 1 ); + pWhiteSpace2FileMergeDefault->insertItem( i18n("Manual Choice"), 0 ); + pWhiteSpace2FileMergeDefault->insertItem( "A", 1 ); + pWhiteSpace2FileMergeDefault->insertItem( "B", 2 ); + QToolTip::add( label, i18n( + "Allow the merge algorithm to automatically select an input for " + "white-space-only changes." ) + ); + ++line; + + label = new QLabel( i18n("White space 3-file merge default:"), page ); + gbox->addWidget( label, line, 0 ); + OptionComboBox* pWhiteSpace3FileMergeDefault = new OptionComboBox( 0, "WhiteSpace3FileMergeDefault", &m_whiteSpace3FileMergeDefault, page, this ); + gbox->addWidget( pWhiteSpace3FileMergeDefault, line, 1 ); + pWhiteSpace3FileMergeDefault->insertItem( i18n("Manual Choice"), 0 ); + pWhiteSpace3FileMergeDefault->insertItem( "A", 1 ); + pWhiteSpace3FileMergeDefault->insertItem( "B", 2 ); + pWhiteSpace3FileMergeDefault->insertItem( "C", 3 ); + QToolTip::add( label, i18n( + "Allow the merge algorithm to automatically select an input for " + "white-space-only changes." ) + ); + ++line; + + QGroupBox* pGroupBox = new QGroupBox( 2, Qt::Horizontal, i18n("Automatic Merge Regular Expression"), page); + gbox->addMultiCellWidget( pGroupBox, line,line,0,1); + ++line; + { + QWidget* page = new QWidget( pGroupBox ); + QGridLayout* gbox = new QGridLayout( page, 2, 2, spacingHint() ); + gbox->setColStretch(1,10); + int line = 0; + + label = new QLabel( i18n("Auto merge regular expression:"), page ); + gbox->addWidget( label, line, 0 ); + m_pAutoMergeRegExpLineEdit = new OptionLineEdit( ".*\\$(Version|Header|Date|Author).*\\$.*", "AutoMergeRegExp", &m_autoMergeRegExp, page, this ); + gbox->addWidget( m_pAutoMergeRegExpLineEdit, line, 1 ); + s_autoMergeRegExpToolTip = i18n("Regular expression for lines where KDiff3 should automatically choose one source.\n" + "When a line with a conflict matches the regular expression then\n" + "- if available - C, otherwise B will be chosen."); + QToolTip::add( label, s_autoMergeRegExpToolTip ); + ++line; + + OptionCheckBox* pAutoMergeRegExp = new OptionCheckBox( i18n("Run regular expression auto merge on merge start"), false, "RunRegExpAutoMergeOnMergeStart", &m_bRunRegExpAutoMergeOnMergeStart, page, this ); + gbox->addMultiCellWidget( pAutoMergeRegExp, line, line, 0, 1 ); + QToolTip::add( pAutoMergeRegExp, i18n( "Run the merge for auto merge regular expressions\n" + "immediately when a merge starts.\n")); + ++line; + } + + pGroupBox = new QGroupBox( 2, Qt::Horizontal, i18n("Version Control History Merging"), page); + gbox->addMultiCellWidget( pGroupBox, line,line,0,1); + ++line; + { + QWidget* page = new QWidget( pGroupBox ); + QGridLayout* gbox = new QGridLayout( page, 2, 2, spacingHint() ); + gbox->setColStretch(1,10); + int line = 0; + + label = new QLabel( i18n("History start regular expression:"), page ); + gbox->addWidget( label, line, 0 ); + m_pHistoryStartRegExpLineEdit = new OptionLineEdit( ".*\\$Log.*\\$.*", "HistoryStartRegExp", &m_historyStartRegExp, page, this ); + gbox->addWidget( m_pHistoryStartRegExpLineEdit, line, 1 ); + s_historyStartRegExpToolTip = i18n("Regular expression for the start of the version control history entry.\n" + "Usually this line contains the \"$Log$\"-keyword.\n" + "Default value: \".*\\$Log.*\\$.*\""); + QToolTip::add( label, s_historyStartRegExpToolTip ); + ++line; + + label = new QLabel( i18n("History entry start regular expression:"), page ); + gbox->addWidget( label, line, 0 ); + // Example line: "** \main\rolle_fsp_dev_008\1 17 Aug 2001 10:45:44 rolle" + QString historyEntryStartDefault = + "\\s*\\\\main\\\\(\\S+)\\s+" // Start with "\main\" + "([0-9]+) " // day + "(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) " //month + "([0-9][0-9][0-9][0-9]) " // year + "([0-9][0-9]:[0-9][0-9]:[0-9][0-9])\\s+(.*)"; // time, name + + m_pHistoryEntryStartRegExpLineEdit = new OptionLineEdit( historyEntryStartDefault, "HistoryEntryStartRegExp", &m_historyEntryStartRegExp, page, this ); + gbox->addWidget( m_pHistoryEntryStartRegExpLineEdit, line, 1 ); + s_historyEntryStartRegExpToolTip = i18n("A version control history entry consists of several lines.\n" + "Specify the regular expression to detect the first line (without the leading comment).\n" + "Use parentheses to group the keys you want to use for sorting.\n" + "If left empty, then KDiff3 assumes that empty lines separate history entries.\n" + "See the documentation for details."); + QToolTip::add( label, s_historyEntryStartRegExpToolTip ); + ++line; + + m_pHistoryMergeSorting = new OptionCheckBox( i18n("History merge sorting"), false, "HistoryMergeSorting", &m_bHistoryMergeSorting, page, this ); + gbox->addMultiCellWidget( m_pHistoryMergeSorting, line, line, 0, 1 ); + QToolTip::add( m_pHistoryMergeSorting, i18n("Sort version control history by a key.") ); + ++line; + //QString branch = newHistoryEntry.cap(1); + //int day = newHistoryEntry.cap(2).toInt(); + //int month = QString("Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec").find(newHistoryEntry.cap(3))/4 + 1; + //int year = newHistoryEntry.cap(4).toInt(); + //QString time = newHistoryEntry.cap(5); + //QString name = newHistoryEntry.cap(6); + QString defaultSortKeyOrder = "4,3,2,5,1,6"; //QDate(year,month,day).toString(Qt::ISODate) +" "+ time + " " + branch + " " + name; + + label = new QLabel( i18n("History entry start sort key order:"), page ); + gbox->addWidget( label, line, 0 ); + m_pHistorySortKeyOrderLineEdit = new OptionLineEdit( defaultSortKeyOrder, "HistoryEntryStartSortKeyOrder", &m_historyEntryStartSortKeyOrder, page, this ); + gbox->addWidget( m_pHistorySortKeyOrderLineEdit, line, 1 ); + s_historyEntryStartSortKeyOrderToolTip = i18n("Each parentheses used in the regular expression for the history start entry\n" + "groups a key that can be used for sorting.\n" + "Specify the list of keys (that are numbered in order of occurrence\n" + "starting with 1) using ',' as separator (e.g. \"4,5,6,1,2,3,7\").\n" + "If left empty, then no sorting will be done.\n" + "See the documentation for details."); + QToolTip::add( label, s_historyEntryStartSortKeyOrderToolTip ); + m_pHistorySortKeyOrderLineEdit->setEnabled(false); + connect( m_pHistoryMergeSorting, SIGNAL(toggled(bool)), m_pHistorySortKeyOrderLineEdit, SLOT(setEnabled(bool))); + ++line; + + m_pHistoryAutoMerge = new OptionCheckBox( i18n("Merge version control history on merge start"), false, "RunHistoryAutoMergeOnMergeStart", &m_bRunHistoryAutoMergeOnMergeStart, page, this ); + gbox->addMultiCellWidget( m_pHistoryAutoMerge, line, line, 0, 1 ); + QToolTip::add( m_pHistoryAutoMerge, i18n("Run version control history automerge on merge start.") ); + ++line; + + OptionIntEdit* pMaxNofHistoryEntries = new OptionIntEdit( -1, "MaxNofHistoryEntries", &m_maxNofHistoryEntries, -1, 1000, page, this ); + label = new QLabel( pMaxNofHistoryEntries, i18n("Max number of history entries:"), page ); + gbox->addWidget( label, line, 0 ); + gbox->addWidget( pMaxNofHistoryEntries, line, 1 ); + QToolTip::add( pMaxNofHistoryEntries, i18n("Cut off after specified number. Use -1 for infinite number of entries.") ); + ++line; + } + + QPushButton* pButton = new QPushButton( i18n("Test your regular expressions"), page ); + gbox->addWidget( pButton, line, 0 ); + connect( pButton, SIGNAL(clicked()), this, SLOT(slotHistoryMergeRegExpTester())); + ++line; + + label = new QLabel( i18n("Irrelevant merge command:"), page ); + gbox->addWidget( label, line, 0 ); + OptionLineEdit* pLE = new OptionLineEdit( "", "IrrelevantMergeCmd", &m_IrrelevantMergeCmd, page, this ); + gbox->addWidget( pLE, line, 1 ); + QToolTip::add( label, i18n("If specified this script is run after automerge\n" + "when no other relevant changes were detected.\n" + "Called with the parameters: filename1 filename2 filename3") ); + ++line; + + + OptionCheckBox* pAutoSaveAndQuit = new OptionCheckBox( i18n("Auto save and quit on merge without conflicts"), false, + "AutoSaveAndQuitOnMergeWithoutConflicts", &m_bAutoSaveAndQuitOnMergeWithoutConflicts, page, this ); + gbox->addMultiCellWidget( pAutoSaveAndQuit, line, line, 0, 1 ); + QToolTip::add( pAutoSaveAndQuit, i18n("When KDiff3 was started for a file-merge from the commandline and all\n" + "conflicts are solvable without user interaction then automatically save and quit.\n" + "(Similar to command line option \"--auto\".") ); + ++line; + + topLayout->addStretch(10); +} + +void OptionDialog::setupDirectoryMergePage( void ) +{ + QFrame *page = addPage( i18n("Directory Merge"), i18n("Directory Merge"), + BarIcon("folder", KIcon::SizeMedium ) ); + QVBoxLayout *topLayout = new QVBoxLayout( page, 5, spacingHint() ); + + QGridLayout *gbox = new QGridLayout( 11, 2 ); + gbox->setColStretch(1,5); + topLayout->addLayout( gbox ); + int line=0; + + OptionCheckBox* pRecursiveDirs = new OptionCheckBox( i18n("Recursive directories"), true, "RecursiveDirs", &m_bDmRecursiveDirs, page, this ); + gbox->addMultiCellWidget( pRecursiveDirs, line, line, 0, 1 ); + QToolTip::add( pRecursiveDirs, i18n("Whether to analyze subdirectories or not.") ); + ++line; + QLabel* label = new QLabel( i18n("File pattern(s):"), page ); + gbox->addWidget( label, line, 0 ); + OptionLineEdit* pFilePattern = new OptionLineEdit( "*", "FilePattern", &m_DmFilePattern, page, this ); + gbox->addWidget( pFilePattern, line, 1 ); + QToolTip::add( label, i18n( + "Pattern(s) of files to be analyzed. \n" + "Wildcards: '*' and '?'\n" + "Several Patterns can be specified by using the separator: ';'" + )); + ++line; + + label = new QLabel( i18n("File-anti-pattern(s):"), page ); + gbox->addWidget( label, line, 0 ); + OptionLineEdit* pFileAntiPattern = new OptionLineEdit( "*.orig;*.o;*.obj", "FileAntiPattern", &m_DmFileAntiPattern, page, this ); + gbox->addWidget( pFileAntiPattern, line, 1 ); + QToolTip::add( label, i18n( + "Pattern(s) of files to be excluded from analysis. \n" + "Wildcards: '*' and '?'\n" + "Several Patterns can be specified by using the separator: ';'" + )); + ++line; + + label = new QLabel( i18n("Dir-anti-pattern(s):"), page ); + gbox->addWidget( label, line, 0 ); + OptionLineEdit* pDirAntiPattern = new OptionLineEdit( "CVS;.deps;.svn", "DirAntiPattern", &m_DmDirAntiPattern, page, this ); + gbox->addWidget( pDirAntiPattern, line, 1 ); + QToolTip::add( label, i18n( + "Pattern(s) of directories to be excluded from analysis. \n" + "Wildcards: '*' and '?'\n" + "Several Patterns can be specified by using the separator: ';'" + )); + ++line; + + OptionCheckBox* pUseCvsIgnore = new OptionCheckBox( i18n("Use .cvsignore"), false, "UseCvsIgnore", &m_bDmUseCvsIgnore, page, this ); + gbox->addMultiCellWidget( pUseCvsIgnore, line, line, 0, 1 ); + QToolTip::add( pUseCvsIgnore, i18n( + "Extends the antipattern to anything that would be ignored by CVS.\n" + "Via local \".cvsignore\"-files this can be directory specific." + )); + ++line; + + OptionCheckBox* pFindHidden = new OptionCheckBox( i18n("Find hidden files and directories"), true, "FindHidden", &m_bDmFindHidden, page, this ); + gbox->addMultiCellWidget( pFindHidden, line, line, 0, 1 ); +#ifdef _WIN32 + QToolTip::add( pFindHidden, i18n("Finds files and directories with the hidden attribute.") ); +#else + QToolTip::add( pFindHidden, i18n("Finds files and directories starting with '.'.") ); +#endif + ++line; + + OptionCheckBox* pFollowFileLinks = new OptionCheckBox( i18n("Follow file links"), false, "FollowFileLinks", &m_bDmFollowFileLinks, page, this ); + gbox->addMultiCellWidget( pFollowFileLinks, line, line, 0, 1 ); + QToolTip::add( pFollowFileLinks, i18n( + "On: Compare the file the link points to.\n" + "Off: Compare the links." + )); + ++line; + + OptionCheckBox* pFollowDirLinks = new OptionCheckBox( i18n("Follow directory links"), false, "FollowDirLinks", &m_bDmFollowDirLinks, page, this ); + gbox->addMultiCellWidget( pFollowDirLinks, line, line, 0, 1 ); + QToolTip::add( pFollowDirLinks, i18n( + "On: Compare the directory the link points to.\n" + "Off: Compare the links." + )); + ++line; + + //OptionCheckBox* pShowOnlyDeltas = new OptionCheckBox( i18n("List only deltas"),false,"ListOnlyDeltas", &m_bDmShowOnlyDeltas, page, this ); + //gbox->addMultiCellWidget( pShowOnlyDeltas, line, line, 0, 1 ); + //QToolTip::add( pShowOnlyDeltas, i18n( + // "Files and directories without change will not appear in the list.")); + //++line; + +#ifdef _WIN32 + bool bCaseSensitiveFilenameComparison = false; +#else + bool bCaseSensitiveFilenameComparison = true; +#endif + OptionCheckBox* pCaseSensitiveFileNames = new OptionCheckBox( i18n("Case sensitive filename comparison"),bCaseSensitiveFilenameComparison,"CaseSensitiveFilenameComparison", &m_bDmCaseSensitiveFilenameComparison, page, this ); + gbox->addMultiCellWidget( pCaseSensitiveFileNames, line, line, 0, 1 ); + QToolTip::add( pCaseSensitiveFileNames, i18n( + "The directory comparison will compare files or directories when their names match.\n" + "Set this option if the case of the names must match. (Default for Windows is off, otherwise on.)")); + ++line; + + QVButtonGroup* pBG = new QVButtonGroup(i18n("File Comparison Mode"),page); + gbox->addMultiCellWidget( pBG, line, line, 0, 1 ); + ++line; + + OptionRadioButton* pBinaryComparison = new OptionRadioButton( i18n("Binary comparison"), true, "BinaryComparison", &m_bDmBinaryComparison, pBG, this ); + QToolTip::add( pBinaryComparison, i18n("Binary comparison of each file. (Default)") ); + + OptionRadioButton* pFullAnalysis = new OptionRadioButton( i18n("Full analysis"), false, "FullAnalysis", &m_bDmFullAnalysis, pBG, this ); + QToolTip::add( pFullAnalysis, i18n("Do a full analysis and show statistics information in extra columns.\n" + "(Slower than a binary comparison, much slower for binary files.)") ); + + OptionRadioButton* pTrustDate = new OptionRadioButton( i18n("Trust the size and modification date (unsafe)"), false, "TrustDate", &m_bDmTrustDate, pBG, this ); + QToolTip::add( pTrustDate, i18n("Assume that files are equal if the modification date and file length are equal.\n" + "Files with equal contents but different modification dates will appear as different.\n" + "Useful for big directories or slow networks.") ); + + OptionRadioButton* pTrustDateFallbackToBinary = new OptionRadioButton( i18n("Trust the size and date, but use binary comparison if date doesn't match (unsafe)"), false, "TrustDateFallbackToBinary", &m_bDmTrustDateFallbackToBinary, pBG, this ); + QToolTip::add( pTrustDateFallbackToBinary, i18n("Assume that files are equal if the modification date and file length are equal.\n" + "If the date isn't equal but the sizes are, use binary comparison.\n" + "Useful for big directories or slow networks.") ); + + OptionRadioButton* pTrustSize = new OptionRadioButton( i18n("Trust the size (unsafe)"), false, "TrustSize", &m_bDmTrustSize, pBG, this ); + QToolTip::add( pTrustSize, i18n("Assume that files are equal if their file lengths are equal.\n" + "Useful for big directories or slow networks when the date is modified during download.") ); + + // Some two Dir-options: Affects only the default actions. + OptionCheckBox* pSyncMode = new OptionCheckBox( i18n("Synchronize directories"), false,"SyncMode", &m_bDmSyncMode, page, this ); + gbox->addMultiCellWidget( pSyncMode, line, line, 0, 1 ); + QToolTip::add( pSyncMode, i18n( + "Offers to store files in both directories so that\n" + "both directories are the same afterwards.\n" + "Works only when comparing two directories without specifying a destination." ) ); + ++line; + + // Allow white-space only differences to be considered equal + OptionCheckBox* pWhiteSpaceDiffsEqual = new OptionCheckBox( i18n("White space differences considered equal"), true,"WhiteSpaceEqual", &m_bDmWhiteSpaceEqual, page, this ); + gbox->addMultiCellWidget( pWhiteSpaceDiffsEqual, line, line, 0, 1 ); + QToolTip::add( pWhiteSpaceDiffsEqual, i18n( + "If files differ only by white space consider them equal.\n" + "This is only active when full analysis is chosen." ) ); + connect(pFullAnalysis, SIGNAL(toggled(bool)), pWhiteSpaceDiffsEqual, SLOT(setEnabled(bool))); + pWhiteSpaceDiffsEqual->setEnabled(false); + ++line; + + OptionCheckBox* pCopyNewer = new OptionCheckBox( i18n("Copy newer instead of merging (unsafe)"), false, "CopyNewer", &m_bDmCopyNewer, page, this ); + gbox->addMultiCellWidget( pCopyNewer, line, line, 0, 1 ); + QToolTip::add( pCopyNewer, i18n( + "Don't look inside, just take the newer file.\n" + "(Use this only if you know what you are doing!)\n" + "Only effective when comparing two directories." ) ); + ++line; + + OptionCheckBox* pCreateBakFiles = new OptionCheckBox( i18n("Backup files (.orig)"), true, "CreateBakFiles", &m_bDmCreateBakFiles, page, this ); + gbox->addMultiCellWidget( pCreateBakFiles, line, line, 0, 1 ); + QToolTip::add( pCreateBakFiles, i18n( + "When a file would be saved over an old file, then the old file\n" + "will be renamed with a '.orig'-extension instead of being deleted.")); + ++line; + + topLayout->addStretch(10); +} +/* +static void insertCodecs(OptionComboBox* p) +{ + std::multimap m; // Using the multimap for case-insensitive sorting. + int i; + for(i=0;;++i) + { + QTextCodec* pCodec = QTextCodec::codecForIndex ( i ); + if ( pCodec != 0 ) m.insert( std::make_pair( QString(pCodec->mimeName()).upper(), pCodec->mimeName()) ); + else break; + } + + p->insertItem( i18n("Auto"), 0 ); + std::multimap::iterator mi; + for(mi=m.begin(), i=0; mi!=m.end(); ++mi, ++i) + p->insertItem(mi->second, i+1); +} +*/ + +// UTF8-Codec that saves a BOM +class Utf8BOMCodec : public QTextCodec +{ + public: + const char * name () const { return "UTF-8-BOM"; } + int mibEnum () const { return 2123; } + int heuristicContentMatch(const char*, int) const { return 0; } + class UTF8BOMEncoder : public QTextEncoder + { + bool bBOMAdded; + public: + UTF8BOMEncoder() { bBOMAdded=false; } + QCString fromUnicode(const QString& uc, int& lenInOut ) + { + QCString r; + if (!bBOMAdded) + { + r += "\xEF\xBB\xBF"; + bBOMAdded=true; + } + r += uc.utf8(); + lenInOut = r.length(); + return r; + } + }; + QTextEncoder* makeEncoder() const + { + return new UTF8BOMEncoder; + } + + class UTF8BOMDecoder : public QTextDecoder + { + QTextDecoder *m_pDecoder; + public: + UTF8BOMDecoder() { m_pDecoder = QTextCodec::codecForName("UTF-8")->makeDecoder(); } + ~UTF8BOMDecoder() { + delete m_pDecoder; + } + QString toUnicode( const char* p, int len) + { + return m_pDecoder->toUnicode( p, len ); + } + }; + QTextDecoder* makeDecoder() const + { + return new UTF8BOMDecoder; + } +}; + +void OptionDialog::setupRegionalPage( void ) +{ + new Utf8BOMCodec(); + + QFrame *page = addPage( i18n("Regional Settings"), i18n("Regional Settings"), + BarIcon("locale"/*"charset"*/, KIcon::SizeMedium ) ); + QVBoxLayout *topLayout = new QVBoxLayout( page, 5, spacingHint() ); + + QGridLayout *gbox = new QGridLayout( 3, 2 ); + gbox->setColStretch(1,5); + topLayout->addLayout( gbox ); + int line=0; + + QLabel* label; + +#ifdef KREPLACEMENTS_H + +static char* countryMap[]={ +"af Afrikaans", +"ar Arabic", +"az Azerbaijani", +"be Belarusian", +"bg Bulgarian", +"bn Bengali", +"bo Tibetan", +"br Breton", +"bs Bosnian", +"ca Catalan", +"cs Czech", +"cy Welsh", +"da Danish", +"de German", +"el Greek", +"en_GB British English", +"eo Esperanto", +"es Spanish", +"et Estonian", +"eu Basque", +"fa Farsi (Persian)", +"fi Finnish", +"fo Faroese", +"fr French", +"ga Irish Gaelic", +"gl Galician", +"gu Gujarati", +"he Hebrew", +"hi Hindi", +"hr Croatian", +"hsb Upper Sorbian", +"hu Hungarian", +"id Indonesian", +"is Icelandic", +"it Italian", +"ja Japanese", +"ka Georgian", +"ko Korean", +"ku Kurdish", +"lo Lao", +"lt Lithuanian", +"lv Latvian", +"mi Maori", +"mk Macedonian", +"mn Mongolian", +"ms Malay", +"mt Maltese", +"nb Norwegian Bookmal", +"nds Low Saxon", +"nl Dutch", +"nn Norwegian Nynorsk", +"nso Northern Sotho", +"oc Occitan", +"pl Polish", +"pt Portuguese", +"pt_BR Brazilian Portuguese", +"ro Romanian", +"ru Russian", +"rw Kinyarwanda", +"se Northern Sami", +"sk Slovak", +"sl Slovenian", +"sq Albanian", +"sr Serbian", +"sr@Latn Serbian", +"ss Swati", +"sv Swedish", +"ta Tamil", +"tg Tajik", +"th Thai", +"tr Turkish", +"uk Ukrainian", +"uz Uzbek", +"ven Venda", +"vi Vietnamese", +"wa Walloon", +"xh Xhosa", +"zh_CN Chinese Simplified", +"zh_TW Chinese Traditional", +"zu Zulu" +}; + + label = new QLabel( i18n("Language (restart required)"), page ); + gbox->addWidget( label, line, 0 ); + OptionComboBox* pLanguage = new OptionComboBox( 0, "Language", &m_language, page, this ); + gbox->addWidget( pLanguage, line, 1 ); + pLanguage->insertItem( "Auto", 0 ); // Must not translate, won't work otherwise! + pLanguage->insertItem( "en_orig" ); + + // Read directory: Find all kdiff3_*.qm-files and insert the found files here selection + FileAccess fa( getTranslationDir() ); + t_DirectoryList dirList; + fa.listDir( &dirList, false, false, "kdiff3_*.qm", "", "*", false, false ); + t_DirectoryList::iterator i; + for( i=dirList.begin(); i!=dirList.end(); ++i) + { + QString fileName = i->fileName(); + // Skip the "kdiff3_" and omit the .qm + QString languageId = fileName.mid(7, fileName.length()-10 ); + + unsigned int countryIdx=0; + for(countryIdx=0; countryIdx< sizeof(countryMap)/sizeof(countryMap[0]); ++countryIdx ) + { + QString fullName = countryMap[countryIdx]; + if ( languageId+" " == fullName.left(languageId.length()+1) ) + { + languageId += " (" + fullName.mid(languageId.length()+1) + ")"; + } + } + + pLanguage->insertItem( languageId ); + } + + QToolTip::add( label, i18n( + "Choose the language of the GUI-strings or \"Auto\".\n" + "For a change of language to take place, quit and restart KDiff3.") + ); + ++line; +/* + label = new QLabel( i18n("Codec for file contents"), page ); + gbox->addWidget( label, line, 0 ); + OptionComboBox* pFileCodec = new OptionComboBox( 0, "FileCodec", &m_fileCodec, page, this ); + gbox->addWidget( pFileCodec, line, 1 ); + insertCodecs( pFileCodec ); + QToolTip::add( label, i18n( + "Choose the codec that should be used for your input files\n" + "or \"Auto\" if unsure." ) + ); + ++line; +*/ +#endif + + m_pSameEncoding = new OptionCheckBox( i18n("Use the same encoding for everything:"), true, "SameEncoding", &m_bSameEncoding, page, this ); + gbox->addMultiCellWidget( m_pSameEncoding, line, line, 0, 1 ); + QToolTip::add( m_pSameEncoding, i18n( + "Enable this allows to change all encodings by changing the first only.\n" + "Disable this if different individual settings are needed." + ) ); + ++line; + + label = new QLabel( i18n("Note: Local Encoding is ") + "\"" + QTextCodec::codecForLocale()->name() + "\"", page ); + gbox->addWidget( label, line, 0 ); + ++line; + + label = new QLabel( i18n("File Encoding for A:"), page ); + gbox->addWidget( label, line, 0 ); + m_pEncodingAComboBox = new OptionEncodingComboBox( "EncodingForA", &m_pEncodingA, page, this ); + gbox->addWidget( m_pEncodingAComboBox, line, 1 ); + + QString autoDetectToolTip = i18n( + "If enabled then Unicode (UTF-16 or UTF-8) encoding will be detected.\n" + "If the file encoding is not detected then the selected encoding will be used as fallback.\n" + "(Unicode detection depends on the first bytes of a file - the byte order mark \"BOM\".)" + ); + m_pAutoDetectUnicodeA = new OptionCheckBox( i18n("Auto Detect Unicode"), true, "AutoDetectUnicodeA", &m_bAutoDetectUnicodeA, page, this ); + gbox->addWidget( m_pAutoDetectUnicodeA, line, 2 ); + QToolTip::add( m_pAutoDetectUnicodeA, autoDetectToolTip ); + ++line; + + label = new QLabel( i18n("File Encoding for B:"), page ); + gbox->addWidget( label, line, 0 ); + m_pEncodingBComboBox = new OptionEncodingComboBox( "EncodingForB", &m_pEncodingB, page, this ); + gbox->addWidget( m_pEncodingBComboBox, line, 1 ); + m_pAutoDetectUnicodeB = new OptionCheckBox( i18n("Auto Detect Unicode"), true, "AutoDetectUnicodeB", &m_bAutoDetectUnicodeB, page, this ); + gbox->addWidget( m_pAutoDetectUnicodeB, line, 2 ); + QToolTip::add( m_pAutoDetectUnicodeB, autoDetectToolTip ); + ++line; + + label = new QLabel( i18n("File Encoding for C:"), page ); + gbox->addWidget( label, line, 0 ); + m_pEncodingCComboBox = new OptionEncodingComboBox( "EncodingForC", &m_pEncodingC, page, this ); + gbox->addWidget( m_pEncodingCComboBox, line, 1 ); + m_pAutoDetectUnicodeC = new OptionCheckBox( i18n("Auto Detect Unicode"), true, "AutoDetectUnicodeC", &m_bAutoDetectUnicodeC, page, this ); + gbox->addWidget( m_pAutoDetectUnicodeC, line, 2 ); + QToolTip::add( m_pAutoDetectUnicodeC, autoDetectToolTip ); + ++line; + + label = new QLabel( i18n("File Encoding for Merge Output and Saving:"), page ); + gbox->addWidget( label, line, 0 ); + m_pEncodingOutComboBox = new OptionEncodingComboBox( "EncodingForOutput", &m_pEncodingOut, page, this ); + gbox->addWidget( m_pEncodingOutComboBox, line, 1 ); + m_pAutoSelectOutEncoding = new OptionCheckBox( i18n("Auto Select"), true, "AutoSelectOutEncoding", &m_bAutoSelectOutEncoding, page, this ); + gbox->addWidget( m_pAutoSelectOutEncoding, line, 2 ); + QToolTip::add( m_pAutoSelectOutEncoding, i18n( + "If enabled then the encoding from the input files is used.\n" + "In ambiguous cases a dialog will ask the user to choose the encoding for saving." + ) ); + ++line; + label = new QLabel( i18n("File Encoding for Preprocessor Files:"), page ); + gbox->addWidget( label, line, 0 ); + m_pEncodingPPComboBox = new OptionEncodingComboBox( "EncodingForPP", &m_pEncodingPP, page, this ); + gbox->addWidget( m_pEncodingPPComboBox, line, 1 ); + ++line; + + connect(m_pSameEncoding, SIGNAL(toggled(bool)), this, SLOT(slotEncodingChanged())); + connect(m_pEncodingAComboBox, SIGNAL(activated(int)), this, SLOT(slotEncodingChanged())); + connect(m_pAutoDetectUnicodeA, SIGNAL(toggled(bool)), this, SLOT(slotEncodingChanged())); + connect(m_pAutoSelectOutEncoding, SIGNAL(toggled(bool)), this, SLOT(slotEncodingChanged())); + + OptionCheckBox* pRightToLeftLanguage = new OptionCheckBox( i18n("Right To Left Language"), false, "RightToLeftLanguage", &m_bRightToLeftLanguage, page, this ); + gbox->addMultiCellWidget( pRightToLeftLanguage, line, line, 0, 1 ); + QToolTip::add( pRightToLeftLanguage, i18n( + "Some languages are read from right to left.\n" + "This setting will change the viewer and editor accordingly.")); + ++line; + + + topLayout->addStretch(10); +} + +#ifdef _WIN32 +#include "ccInstHelper.cpp" +#endif + +void OptionDialog::setupIntegrationPage( void ) +{ + QFrame *page = addPage( i18n("Integration"), i18n("Integration Settings"), + BarIcon("launch"/*"charset"*/, KIcon::SizeMedium ) ); + QVBoxLayout *topLayout = new QVBoxLayout( page, 5, spacingHint() ); + + QGridLayout *gbox = new QGridLayout( 3, 3 ); + gbox->setColStretch(2,5); + topLayout->addLayout( gbox ); + int line=0; + + QLabel* label; + label = new QLabel( i18n("Command line options to ignore:"), page ); + gbox->addWidget( label, line, 0 ); + OptionLineEdit* pIgnorableCmdLineOptions = new OptionLineEdit( "-u;-query;-html;-abort", "IgnorableCmdLineOptions", &m_ignorableCmdLineOptions, page, this ); + gbox->addMultiCellWidget( pIgnorableCmdLineOptions, line, line, 1,2 ); + QToolTip::add( label, i18n( + "List of command line options that should be ignored when KDiff3 is used by other tools.\n" + "Several values can be specified if separated via ';'\n" + "This will suppress the \"Unknown option\"-error." + )); + ++line; + +#ifdef _WIN32 + QPushButton* pIntegrateWithClearCase = new QPushButton( i18n("Integrate with ClearCase"), page); + gbox->addWidget( pIntegrateWithClearCase, line, 0 ); + QToolTip::add( pIntegrateWithClearCase, i18n( + "Integrate with Rational ClearCase from IBM.\n" + "Modifies the \"map\" file in ClearCase-subdir \"lib/mgrs\"\n" + "(Only enabled when ClearCase \"bin\" directory is in the path.)")); + connect(pIntegrateWithClearCase, SIGNAL(clicked()),this, SLOT(slotIntegrateWithClearCase()) ); + pIntegrateWithClearCase->setEnabled( integrateWithClearCase( "existsClearCase", "" )!=0 ); + + QPushButton* pRemoveClearCaseIntegration = new QPushButton( i18n("Remove ClearCase Integration"), page); + gbox->addWidget( pRemoveClearCaseIntegration, line, 1 ); + QToolTip::add( pRemoveClearCaseIntegration, i18n( + "Restore the old \"map\" file from before doing the Clearcase integration.")); + connect(pRemoveClearCaseIntegration, SIGNAL(clicked()),this, SLOT(slotRemoveClearCaseIntegration()) ); + pRemoveClearCaseIntegration->setEnabled( integrateWithClearCase( "existsClearCase", "" )!=0 ); + + ++line; +#endif + + topLayout->addStretch(10); +} + +void OptionDialog::slotIntegrateWithClearCase() +{ +#ifdef _WIN32 + char kdiff3CommandPath[1000]; + GetModuleFileNameA( 0, kdiff3CommandPath, sizeof(kdiff3CommandPath)-1 ); + integrateWithClearCase( "install", kdiff3CommandPath ); +#endif +} + +void OptionDialog::slotRemoveClearCaseIntegration() +{ +#ifdef _WIN32 + char kdiff3CommandPath[1000]; + GetModuleFileNameA( 0, kdiff3CommandPath, sizeof(kdiff3CommandPath)-1 ); + integrateWithClearCase( "uninstall", kdiff3CommandPath ); +#endif +} + +void OptionDialog::slotEncodingChanged() +{ + if ( m_pSameEncoding->isChecked() ) + { + m_pEncodingBComboBox->setEnabled( false ); + m_pEncodingBComboBox->setCurrentItem( m_pEncodingAComboBox->currentItem() ); + m_pEncodingCComboBox->setEnabled( false ); + m_pEncodingCComboBox->setCurrentItem( m_pEncodingAComboBox->currentItem() ); + m_pEncodingOutComboBox->setEnabled( false ); + m_pEncodingOutComboBox->setCurrentItem( m_pEncodingAComboBox->currentItem() ); + m_pEncodingPPComboBox->setEnabled( false ); + m_pEncodingPPComboBox->setCurrentItem( m_pEncodingAComboBox->currentItem() ); + m_pAutoDetectUnicodeB->setEnabled( false ); + m_pAutoDetectUnicodeB->setChecked( m_pAutoDetectUnicodeA->isChecked() ); + m_pAutoDetectUnicodeC->setEnabled( false ); + m_pAutoDetectUnicodeC->setChecked( m_pAutoDetectUnicodeA->isChecked() ); + m_pAutoSelectOutEncoding->setEnabled( false ); + m_pAutoSelectOutEncoding->setChecked( m_pAutoDetectUnicodeA->isChecked() ); + } + else + { + m_pEncodingBComboBox->setEnabled( true ); + m_pEncodingCComboBox->setEnabled( true ); + m_pEncodingOutComboBox->setEnabled( true ); + m_pEncodingPPComboBox->setEnabled( true ); + m_pAutoDetectUnicodeB->setEnabled( true ); + m_pAutoDetectUnicodeC->setEnabled( true ); + m_pAutoSelectOutEncoding->setEnabled( true ); + m_pEncodingOutComboBox->setEnabled( !m_pAutoSelectOutEncoding->isChecked() ); + } +} + +void OptionDialog::setupKeysPage( void ) +{ + //QVBox *page = addVBoxPage( i18n("Keys"), i18n("KeyDialog" ), + // BarIcon("fonts", KIcon::SizeMedium ) ); + + //QVBoxLayout *topLayout = new QVBoxLayout( page, 0, spacingHint() ); + // new KFontChooser( page,"font",false/*onlyFixed*/,QStringList(),false,6 ); + //m_pKeyDialog=new KKeyDialog( false, 0 ); + //topLayout->addWidget( m_pKeyDialog ); +} + +void OptionDialog::slotOk( void ) +{ + slotApply(); + + // My system returns variable width fonts even though I + // disabled this. Even QFont::fixedPitch() doesn't work. + QFontMetrics fm(m_font); + if ( fm.width('W')!=fm.width('i') ) + { + int result = KMessageBox::warningYesNo(this, i18n( + "You selected a variable width font.\n\n" + "Because this program doesn't handle variable width fonts\n" + "correctly, you might experience problems while editing.\n\n" + "Do you want to continue or do you want to select another font."), + i18n("Incompatible Font"), + i18n("Continue at Own Risk"), i18n("Select Another Font")); + if (result==KMessageBox::No) + return; + } + + accept(); +} + + +/** Copy the values from the widgets to the public variables.*/ +void OptionDialog::slotApply( void ) +{ + std::list::iterator i; + for(i=m_optionItemList.begin(); i!=m_optionItemList.end(); ++i) + { + (*i)->apply(); + } + + emit applyClicked(); + +#ifdef _WIN32 + QString locale = m_language; + if ( locale == "Auto" || locale.isEmpty() ) + locale = locale = QTextCodec::locale(); + int spacePos = locale.find(' '); + if (spacePos>0) locale = locale.left(spacePos); + QSettings settings; + settings.setPath("KDiff3", "diff-ext", QSettings::User ); + settings.writeEntry( "Language", locale ); +#endif +} + +/** Set the default values in the widgets only, while the + public variables remain unchanged. */ +void OptionDialog::slotDefault() +{ + int result = KMessageBox::warningContinueCancel(this, i18n("This resets all options. Not only those of the current topic.") ); + if ( result==KMessageBox::Cancel ) return; + else resetToDefaults(); +} + +void OptionDialog::resetToDefaults() +{ + std::list::iterator i; + for(i=m_optionItemList.begin(); i!=m_optionItemList.end(); ++i) + { + (*i)->setToDefault(); + } + + slotEncodingChanged(); +} + +/** Initialise the widgets using the values in the public varibles. */ +void OptionDialog::setState() +{ + std::list::iterator i; + for(i=m_optionItemList.begin(); i!=m_optionItemList.end(); ++i) + { + (*i)->setToCurrent(); + } + + slotEncodingChanged(); +} + +class ConfigValueMap : public ValueMap +{ +private: + KConfig* m_pConfig; +public: + ConfigValueMap( KConfig* pConfig ) { m_pConfig = pConfig; } + + void writeEntry(const QString& s, const QFont& v ){ m_pConfig->writeEntry(s,v); } + void writeEntry(const QString& s, const QColor& v ){ m_pConfig->writeEntry(s,v); } + void writeEntry(const QString& s, const QSize& v ){ m_pConfig->writeEntry(s,v); } + void writeEntry(const QString& s, const QPoint& v ){ m_pConfig->writeEntry(s,v); } + void writeEntry(const QString& s, int v ) { m_pConfig->writeEntry(s,v); } + void writeEntry(const QString& s, bool v ) { m_pConfig->writeEntry(s,v); } + void writeEntry(const QString& s, const QStringList& v, char separator ){ m_pConfig->writeEntry(s,v,separator); } + void writeEntry(const QString& s, const QString& v ){ m_pConfig->writeEntry(s,v); } + void writeEntry(const QString& s, const char* v ) { m_pConfig->writeEntry(s,v); } + + QFont readFontEntry (const QString& s, QFont* defaultVal ) { return m_pConfig->readFontEntry(s,defaultVal); } + QColor readColorEntry(const QString& s, QColor* defaultVal ){ return m_pConfig->readColorEntry(s,defaultVal); } + QSize readSizeEntry (const QString& s, QSize* defaultVal ) { return m_pConfig->readSizeEntry(s,defaultVal); } + QPoint readPointEntry(const QString& s, QPoint* defaultVal) { return m_pConfig->readPointEntry(s,defaultVal); } + bool readBoolEntry (const QString& s, bool defaultVal ) { return m_pConfig->readBoolEntry(s,defaultVal); } + int readNumEntry (const QString& s, int defaultVal ) { return m_pConfig->readNumEntry(s,defaultVal); } + QStringList readListEntry (const QString& s, const QStringList& def, char separator ) { return m_pConfig->readListEntry(s.latin1(),def,separator); } + QString readEntry (const QString& s, const QString& defaultVal){ return m_pConfig->readEntry(s,defaultVal); } +}; + +void OptionDialog::saveOptions( KConfig* config ) +{ + // No i18n()-Translations here! + + config->setGroup("KDiff3 Options"); + + ConfigValueMap cvm(config); + std::list::iterator i; + for(i=m_optionItemList.begin(); i!=m_optionItemList.end(); ++i) + { + (*i)->write(&cvm); + } +} + +void OptionDialog::readOptions( KConfig* config ) +{ + // No i18n()-Translations here! + + config->setGroup("KDiff3 Options"); + + ConfigValueMap cvm(config); + std::list::iterator i; + for(i=m_optionItemList.begin(); i!=m_optionItemList.end(); ++i) + { + (*i)->read(&cvm); + } + + setState(); +} + +void OptionDialog::slotHelp( void ) +{ + KDialogBase::slotHelp(); +} + +QString OptionDialog::parseOptions( const QCStringList& optionList ) +{ + QString result; + QCStringList::const_iterator i; + for ( i=optionList.begin(); i!=optionList.end(); ++i ) + { + QString s = *i; + + int pos = s.find('='); + if( pos > 0 ) // seems not to have a tag + { + QString key = s.left(pos); + QString val = s.mid(pos+1); + std::list::iterator j; + bool bFound = false; + for(j=m_optionItemList.begin(); j!=m_optionItemList.end(); ++j) + { + if ( (*j)->getSaveName()==key ) + { + ValueMap config; + config.writeEntry( key, val ); // Write the value as a string and + (*j)->read(&config); // use the internal conversion from string to the needed value. + bFound = true; + break; + } + } + if ( ! bFound ) + { + result += "No config item named \"" + key + "\"\n"; + } + } + else + { + result += "No '=' found in \"" + s + "\"\n"; + } + } + return result; +} + +QString OptionDialog::calcOptionHelp() +{ + ValueMap config; + std::list::iterator j; + for(j=m_optionItemList.begin(); j!=m_optionItemList.end(); ++j) + { + (*j)->write( &config ); + } + return config.getAsString(); +} + +void OptionDialog::slotHistoryMergeRegExpTester() +{ + RegExpTester dlg(this, s_autoMergeRegExpToolTip, s_historyStartRegExpToolTip, + s_historyEntryStartRegExpToolTip, s_historyEntryStartSortKeyOrderToolTip ); + dlg.init(m_pAutoMergeRegExpLineEdit->currentText(), m_pHistoryStartRegExpLineEdit->currentText(), + m_pHistoryEntryStartRegExpLineEdit->currentText(), m_pHistorySortKeyOrderLineEdit->currentText()); + if ( dlg.exec() ) + { + m_pAutoMergeRegExpLineEdit->setCurrentText( dlg.autoMergeRegExp() ); + m_pHistoryStartRegExpLineEdit->setCurrentText( dlg.historyStartRegExp() ); + m_pHistoryEntryStartRegExpLineEdit->setCurrentText( dlg.historyEntryStartRegExp() ); + m_pHistorySortKeyOrderLineEdit->setCurrentText( dlg.historySortKeyOrder() ); + } +} + + +#include "optiondialog.moc" diff --git a/src/optiondialog.h b/src/optiondialog.h new file mode 100644 index 0000000..98ea0ff --- /dev/null +++ b/src/optiondialog.h @@ -0,0 +1,229 @@ + +/* + * kdiff3 - Text Diff And Merge Tool + * Copyright (C) 2002-2007 Joachim Eibl, joachim.eibl at gmx.de + * + * 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., 51 Franklin Steet, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#ifndef OPTION_DIALOG_H +#define OPTION_DIALOG_H + +class QCheckBox; +class QLabel; +class QLineEdit; +class KColorButton; +class KFontChooser; +class KConfig; + +#include +#include +#include +#include + +class OptionItem; +class OptionCheckBox; +class OptionEncodingComboBox; +class OptionLineEdit; +class KKeyDialog; + +enum e_LineEndStyle +{ + eLineEndUnix=0, + eLineEndDos +}; + +class OptionDialog : public KDialogBase +{ + Q_OBJECT + +public: + + OptionDialog( bool bShowDirMergeSettings, QWidget *parent = 0, char *name = 0 ); + ~OptionDialog( void ); + QString parseOptions( const QCStringList& optionList ); + QString calcOptionHelp(); + + // Some settings are not available in the option dialog: + QSize m_geometry; + QPoint m_position; + bool m_bMaximised; + bool m_bShowToolBar; + bool m_bShowStatusBar; + int m_toolBarPos; + + // These are the results of the option dialog. + QFont m_font; + bool m_bItalicForDeltas; + + QColor m_fgColor; + QColor m_bgColor; + QColor m_diffBgColor; + QColor m_colorA; + QColor m_colorB; + QColor m_colorC; + QColor m_colorForConflict; + QColor m_currentRangeBgColor; + QColor m_currentRangeDiffBgColor; + QColor m_oldestFileColor; + QColor m_midAgeFileColor; + QColor m_newestFileColor; + QColor m_missingFileColor; + QColor m_manualHelpRangeColor; + + bool m_bWordWrap; + + bool m_bReplaceTabs; + bool m_bAutoIndentation; + int m_tabSize; + bool m_bAutoCopySelection; + bool m_bSameEncoding; + QTextCodec* m_pEncodingA; + bool m_bAutoDetectUnicodeA; + QTextCodec* m_pEncodingB; + bool m_bAutoDetectUnicodeB; + QTextCodec* m_pEncodingC; + bool m_bAutoDetectUnicodeC; + QTextCodec* m_pEncodingOut; + bool m_bAutoSelectOutEncoding; + QTextCodec* m_pEncodingPP; + int m_lineEndStyle; + + bool m_bPreserveCarriageReturn; + bool m_bTryHard; + bool m_bShowWhiteSpaceCharacters; + bool m_bShowWhiteSpace; + bool m_bShowLineNumbers; + bool m_bHorizDiffWindowSplitting; + + int m_whiteSpace2FileMergeDefault; + int m_whiteSpace3FileMergeDefault; + bool m_bIgnoreCase; + bool m_bIgnoreNumbers; + bool m_bIgnoreComments; + QString m_PreProcessorCmd; + QString m_LineMatchingPreProcessorCmd; + bool m_bRunRegExpAutoMergeOnMergeStart; + QString m_autoMergeRegExp; + bool m_bRunHistoryAutoMergeOnMergeStart; + QString m_historyStartRegExp; + QString m_historyEntryStartRegExp; + bool m_bHistoryMergeSorting; + QString m_historyEntryStartSortKeyOrder; + int m_maxNofHistoryEntries; + QString m_IrrelevantMergeCmd; + bool m_bAutoSaveAndQuitOnMergeWithoutConflicts; + + bool m_bAutoAdvance; + int m_autoAdvanceDelay; + + QStringList m_recentAFiles; + QStringList m_recentBFiles; + QStringList m_recentCFiles; + + QStringList m_recentOutputFiles; + + // Directory Merge options + bool m_bDmSyncMode; + bool m_bDmRecursiveDirs; + bool m_bDmFollowFileLinks; + bool m_bDmFollowDirLinks; + bool m_bDmFindHidden; + bool m_bDmCreateBakFiles; + bool m_bDmBinaryComparison; + bool m_bDmFullAnalysis; + bool m_bDmTrustDate; + bool m_bDmTrustDateFallbackToBinary; + bool m_bDmTrustSize; + bool m_bDmCopyNewer; + //bool m_bDmShowOnlyDeltas; + bool m_bDmShowIdenticalFiles; + bool m_bDmUseCvsIgnore; + bool m_bDmWhiteSpaceEqual; + bool m_bDmCaseSensitiveFilenameComparison; + QString m_DmFilePattern; + QString m_DmFileAntiPattern; + QString m_DmDirAntiPattern; + + QString m_language; + bool m_bRightToLeftLanguage; + + QString m_ignorableCmdLineOptions; + bool m_bIntegrateWithClearCase; + + void saveOptions(KConfig* config); + void readOptions(KConfig* config); + + void setState(); // Must be called before calling exec(); + + void addOptionItem(OptionItem*); + KKeyDialog* m_pKeyDialog; +protected slots: + virtual void slotDefault( void ); + virtual void slotOk( void ); + virtual void slotApply( void ); + virtual void slotHelp( void ); + + void slotEncodingChanged(); + void slotHistoryMergeRegExpTester(); + void slotIntegrateWithClearCase(); + void slotRemoveClearCaseIntegration(); +private: + void resetToDefaults(); + + std::list m_optionItemList; + + OptionCheckBox* m_pSameEncoding; + OptionEncodingComboBox* m_pEncodingAComboBox; + OptionCheckBox* m_pAutoDetectUnicodeA; + OptionEncodingComboBox* m_pEncodingBComboBox; + OptionCheckBox* m_pAutoDetectUnicodeB; + OptionEncodingComboBox* m_pEncodingCComboBox; + OptionCheckBox* m_pAutoDetectUnicodeC; + OptionEncodingComboBox* m_pEncodingOutComboBox; + OptionCheckBox* m_pAutoSelectOutEncoding; + OptionEncodingComboBox* m_pEncodingPPComboBox; + OptionCheckBox* m_pHistoryAutoMerge; + OptionLineEdit* m_pAutoMergeRegExpLineEdit; + OptionLineEdit* m_pHistoryStartRegExpLineEdit; + OptionLineEdit* m_pHistoryEntryStartRegExpLineEdit; + OptionCheckBox* m_pHistoryMergeSorting; + OptionLineEdit* m_pHistorySortKeyOrderLineEdit; + +private: + void setupFontPage(); + void setupColorPage(); + void setupEditPage(); + void setupDiffPage(); + void setupMergePage(); + void setupDirectoryMergePage(); + void setupKeysPage(); + void setupRegionalPage(); + void setupIntegrationPage(); + void setupOtherOptions(); +}; + + + + +#endif + + + + + + + diff --git a/src/pdiff.cpp b/src/pdiff.cpp new file mode 100644 index 0000000..abb26bc --- /dev/null +++ b/src/pdiff.cpp @@ -0,0 +1,2268 @@ +/*************************************************************************** + pdiff.cpp - Implementation for class KDiff3App + --------------- + begin : Mon March 18 20:04:50 CET 2002 + copyright : (C) 2002-2007 by Joachim Eibl + email : joachim.eibl at gmx.de + ***************************************************************************/ + +/*************************************************************************** + * * + * 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. * + * * + ***************************************************************************/ + +#include "difftextwindow.h" +#include "mergeresultwindow.h" +#include "directorymergewindow.h" +#include "smalldialogs.h" + +#include +#include +#include +#include + +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "kdiff3.h" +#include "optiondialog.h" +#include "fileaccess.h" +#ifdef _WIN32 +#include +#else +#include +#endif + +#include "gnudiff_diff.h" + +bool g_bIgnoreWhiteSpace = true; +bool g_bIgnoreTrivialMatches = true; + + +bool KDiff3App::runDiff( const LineData* p1, int size1, const LineData* p2, int size2, DiffList& diffList ) +{ + ProgressProxy pp; + static GnuDiff gnuDiff; // All values are initialized with zeros. + + pp.setCurrent(0); + + diffList.clear(); + if ( p1[0].pLine==0 || p2[0].pLine==0 || size1==0 || size2==0 ) + { + Diff d( 0,0,0); + if ( p1[0].pLine==0 && p2[0].pLine==0 && size1 == size2 ) + d.nofEquals = size1; + else + { + d.diff1=size1; + d.diff2=size2; + } + + diffList.push_back(d); + } + else + { + GnuDiff::comparison comparisonInput; + memset( &comparisonInput, 0, sizeof(comparisonInput) ); + comparisonInput.parent = 0; + comparisonInput.file[0].buffer = p1[0].pLine;//ptr to buffer + comparisonInput.file[0].buffered = (p1[size1-1].pLine-p1[0].pLine+p1[size1-1].size); // size of buffer + comparisonInput.file[1].buffer = p2[0].pLine;//ptr to buffer + comparisonInput.file[1].buffered = (p2[size2-1].pLine-p2[0].pLine+p2[size2-1].size); // size of buffer + + gnuDiff.ignore_white_space = GnuDiff::IGNORE_ALL_SPACE; // I think nobody needs anything else ... + gnuDiff.bIgnoreWhiteSpace = true; + gnuDiff.bIgnoreNumbers = m_pOptionDialog->m_bIgnoreNumbers; + gnuDiff.minimal = m_pOptionDialog->m_bTryHard; + gnuDiff.ignore_case = false; + GnuDiff::change* script = gnuDiff.diff_2_files( &comparisonInput ); + + int equalLinesAtStart = comparisonInput.file[0].prefix_lines; + int currentLine1 = 0; + int currentLine2 = 0; + GnuDiff::change* p=0; + for (GnuDiff::change* e = script; e; e = p) + { + Diff d(0,0,0); + d.nofEquals = e->line0 - currentLine1; + assert( d.nofEquals == e->line1 - currentLine2 ); + d.diff1 = e->deleted; + d.diff2 = e->inserted; + currentLine1 += d.nofEquals + d.diff1; + currentLine2 += d.nofEquals + d.diff2; + diffList.push_back(d); + + p = e->link; + free (e); + } + + if ( diffList.empty() ) + { + Diff d(0,0,0); + d.nofEquals = min2(size1,size2); + d.diff1 = size1 - d.nofEquals; + d.diff2 = size2 - d.nofEquals; + diffList.push_back(d); +/* Diff d(0,0,0); + d.nofEquals = equalLinesAtStart; + if ( gnuDiff.files[0].missing_newline != gnuDiff.files[1].missing_newline ) + { + d.diff1 = gnuDiff.files[0].missing_newline ? 0 : 1; + d.diff2 = gnuDiff.files[1].missing_newline ? 0 : 1; + ++d.nofEquals; + } + else if ( !gnuDiff.files[0].missing_newline ) + { + ++d.nofEquals; + } + diffList.push_back(d); +*/ + } + else + { + diffList.front().nofEquals += equalLinesAtStart; + currentLine1 += equalLinesAtStart; + currentLine2 += equalLinesAtStart; + + int nofEquals = min2(size1-currentLine1,size2-currentLine2); + if ( nofEquals==0 ) + { + diffList.back().diff1 += size1-currentLine1; + diffList.back().diff2 += size2-currentLine2; + } + else + { + Diff d( nofEquals,size1-currentLine1-nofEquals,size2-currentLine2-nofEquals); + diffList.push_back(d); + } + + /* + if ( gnuDiff.files[0].missing_newline != gnuDiff.files[1].missing_newline ) + { + diffList.back().diff1 += gnuDiff.files[0].missing_newline ? 0 : 1; + diffList.back().diff2 += gnuDiff.files[1].missing_newline ? 0 : 1; + } + else if ( !gnuDiff.files[0].missing_newline ) + { + ++ diffList.back().nofEquals; + } + */ + } + } + +#ifndef NDEBUG + // Verify difflist + { + int l1=0; + int l2=0; + DiffList::iterator i; + for( i = diffList.begin(); i!=diffList.end(); ++i ) + { + l1+= i->nofEquals + i->diff1; + l2+= i->nofEquals + i->diff2; + } + + //if( l1!=p1-p1start || l2!=p2-p2start ) + if( l1!=size1 || l2!=size2 ) + assert( false ); + } +#endif + + pp.setCurrent(1.0); + + return true; +} + +bool KDiff3App::runDiff( const LineData* p1, int size1, const LineData* p2, int size2, DiffList& diffList, + int winIdx1, int winIdx2 ) +{ + diffList.clear(); + DiffList diffList2; + + int l1begin = 0; + int l2begin = 0; + ManualDiffHelpList::const_iterator i; + for( i = m_manualDiffHelpList.begin(); i!=m_manualDiffHelpList.end(); ++i ) + { + const ManualDiffHelpEntry& mdhe = *i; + + int l1end = winIdx1 == 1 ? mdhe.lineA1 : winIdx1==2 ? mdhe.lineB1 : mdhe.lineC1 ; + int l2end = winIdx2 == 1 ? mdhe.lineA1 : winIdx2==2 ? mdhe.lineB1 : mdhe.lineC1 ; + + if ( l1end>=0 && l2end>=0 ) + { + runDiff( p1+l1begin, l1end-l1begin, p2+l2begin, l2end-l2begin, diffList2 ); + diffList.splice( diffList.end(), diffList2 ); + l1begin = l1end; + l2begin = l2end; + + l1end = winIdx1 == 1 ? mdhe.lineA2 : winIdx1==2 ? mdhe.lineB2 : mdhe.lineC2 ; + l2end = winIdx2 == 1 ? mdhe.lineA2 : winIdx2==2 ? mdhe.lineB2 : mdhe.lineC2 ; + + if ( l1end>=0 && l2end>=0 ) + { + ++l1end; // point to line after last selected line + ++l2end; + runDiff( p1+l1begin, l1end-l1begin, p2+l2begin, l2end-l2begin, diffList2 ); + diffList.splice( diffList.end(), diffList2 ); + l1begin = l1end; + l2begin = l2end; + } + } + } + runDiff( p1+l1begin, size1-l1begin, p2+l2begin, size2-l2begin, diffList2 ); + diffList.splice( diffList.end(), diffList2 ); + return true; +} + +void KDiff3App::init( bool bAuto, TotalDiffStatus* pTotalDiffStatus, bool bLoadFiles ) +{ + ProgressProxy pp; + // When doing a full analysis in the directory-comparison, then the statistics-results + // will be stored in the given TotalDiffStatus. Otherwise it will be 0. + bool bGUI = pTotalDiffStatus == 0; + if (pTotalDiffStatus==0) + pTotalDiffStatus = &m_totalDiffStatus; + + bool bPreserveCarriageReturn = m_pOptionDialog->m_bPreserveCarriageReturn; + + bool bVisibleMergeResultWindow = ! m_outputFilename.isEmpty(); + if ( bVisibleMergeResultWindow && bGUI ) + { + bPreserveCarriageReturn = false; + + QString msg; + + if ( !m_pOptionDialog->m_PreProcessorCmd.isEmpty() ) + { + msg += "- " + i18n("PreprocessorCmd: ") + m_pOptionDialog->m_PreProcessorCmd + "\n"; + } + if ( !msg.isEmpty() ) + { + int result = KMessageBox::warningYesNo( this, + i18n("The following option(s) you selected might change data:\n") + msg + + i18n("\nMost likely this is not wanted during a merge.\n" + "Do you want to disable these settings or continue with these settings active?"), + i18n("Option Unsafe for Merging"), + i18n("Use These Options During Merge"), i18n("Disable Unsafe Options") + ); + + if (result == KMessageBox::No ) + { + m_pOptionDialog->m_PreProcessorCmd = ""; + } + } + } + + // Because of the progressdialog paintevents can occur, but data is invalid, + // so painting must be suppressed. + if (m_pDiffTextWindow1) m_pDiffTextWindow1->setPaintingAllowed( false ); + if (m_pDiffTextWindow2) m_pDiffTextWindow2->setPaintingAllowed( false ); + if (m_pDiffTextWindow3) m_pDiffTextWindow3->setPaintingAllowed( false ); + if (m_pOverview) m_pOverview->setPaintingAllowed( false ); + if (m_pMergeResultWindow) m_pMergeResultWindow->setPaintingAllowed( false ); + + m_diff3LineList.clear(); + + if ( bLoadFiles ) + { + m_manualDiffHelpList.clear(); + + if( m_sd3.isEmpty() ) + pp.setMaxNofSteps( 4 ); // Read 2 files, 1 comparison, 1 finediff + else + pp.setMaxNofSteps( 9 ); // Read 3 files, 3 comparisons, 3 finediffs + + // First get all input data. + pp.setInformation(i18n("Loading A")); + m_sd1.readAndPreprocess(m_pOptionDialog->m_pEncodingA, m_pOptionDialog->m_bAutoDetectUnicodeA ); + pp.step(); + + pp.setInformation(i18n("Loading B")); + m_sd2.readAndPreprocess(m_pOptionDialog->m_pEncodingB, m_pOptionDialog->m_bAutoDetectUnicodeB ); + pp.step(); + } + else + { + if( m_sd3.isEmpty() ) + pp.setMaxNofSteps( 2 ); // 1 comparison, 1 finediff + else + pp.setMaxNofSteps( 6 ); // 3 comparisons, 3 finediffs + } + + pTotalDiffStatus->reset(); + // Run the diff. + if ( m_sd3.isEmpty() ) + { + pTotalDiffStatus->bBinaryAEqB = m_sd1.isBinaryEqualWith( m_sd2 ); + pp.setInformation(i18n("Diff: A <-> B")); + + runDiff( m_sd1.getLineDataForDiff(), m_sd1.getSizeLines(), m_sd2.getLineDataForDiff(), m_sd2.getSizeLines(), m_diffList12,1,2 ); + + pp.step(); + + pp.setInformation(i18n("Linediff: A <-> B")); + calcDiff3LineListUsingAB( &m_diffList12, m_diff3LineList ); + fineDiff( m_diff3LineList, 1, m_sd1.getLineDataForDisplay(), m_sd2.getLineDataForDisplay(), pTotalDiffStatus->bTextAEqB ); + if ( m_sd1.getSizeBytes()==0 ) pTotalDiffStatus->bTextAEqB=false; + + pp.step(); + } + else + { + if (bLoadFiles) + { + pp.setInformation(i18n("Loading C")); + m_sd3.readAndPreprocess(m_pOptionDialog->m_pEncodingC, m_pOptionDialog->m_bAutoDetectUnicodeC ); + pp.step(); + } + + pTotalDiffStatus->bBinaryAEqB = m_sd1.isBinaryEqualWith( m_sd2 ); + pTotalDiffStatus->bBinaryAEqC = m_sd1.isBinaryEqualWith( m_sd3 ); + pTotalDiffStatus->bBinaryBEqC = m_sd3.isBinaryEqualWith( m_sd2 ); + + pp.setInformation(i18n("Diff: A <-> B")); + runDiff( m_sd1.getLineDataForDiff(), m_sd1.getSizeLines(), m_sd2.getLineDataForDiff(), m_sd2.getSizeLines(), m_diffList12,1,2 ); + pp.step(); + pp.setInformation(i18n("Diff: B <-> C")); + runDiff( m_sd2.getLineDataForDiff(), m_sd2.getSizeLines(), m_sd3.getLineDataForDiff(), m_sd3.getSizeLines(), m_diffList23,2,3 ); + pp.step(); + pp.setInformation(i18n("Diff: A <-> C")); + runDiff( m_sd1.getLineDataForDiff(), m_sd1.getSizeLines(), m_sd3.getLineDataForDiff(), m_sd3.getSizeLines(), m_diffList13,1,3 ); + pp.step(); + + calcDiff3LineListUsingAB( &m_diffList12, m_diff3LineList ); + calcDiff3LineListUsingAC( &m_diffList13, m_diff3LineList ); + correctManualDiffAlignment( m_diff3LineList, &m_manualDiffHelpList ); + calcDiff3LineListTrim( m_diff3LineList, m_sd1.getLineDataForDiff(), m_sd2.getLineDataForDiff(), m_sd3.getLineDataForDiff(), &m_manualDiffHelpList ); + + calcDiff3LineListUsingBC( &m_diffList23, m_diff3LineList ); + correctManualDiffAlignment( m_diff3LineList, &m_manualDiffHelpList ); + calcDiff3LineListTrim( m_diff3LineList, m_sd1.getLineDataForDiff(), m_sd2.getLineDataForDiff(), m_sd3.getLineDataForDiff(), &m_manualDiffHelpList ); + debugLineCheck( m_diff3LineList, m_sd1.getSizeLines(), 1 ); + debugLineCheck( m_diff3LineList, m_sd2.getSizeLines(), 2 ); + debugLineCheck( m_diff3LineList, m_sd3.getSizeLines(), 3 ); + + pp.setInformation(i18n("Linediff: A <-> B")); + fineDiff( m_diff3LineList, 1, m_sd1.getLineDataForDisplay(), m_sd2.getLineDataForDisplay(), pTotalDiffStatus->bTextAEqB ); + pp.step(); + pp.setInformation(i18n("Linediff: B <-> C")); + fineDiff( m_diff3LineList, 2, m_sd2.getLineDataForDisplay(), m_sd3.getLineDataForDisplay(), pTotalDiffStatus->bTextBEqC ); + pp.step(); + pp.setInformation(i18n("Linediff: A <-> C")); + fineDiff( m_diff3LineList, 3, m_sd3.getLineDataForDisplay(), m_sd1.getLineDataForDisplay(), pTotalDiffStatus->bTextAEqC ); + pp.step(); + if ( m_sd1.getSizeBytes()==0 ) { pTotalDiffStatus->bTextAEqB=false; pTotalDiffStatus->bTextAEqC=false; } + if ( m_sd2.getSizeBytes()==0 ) { pTotalDiffStatus->bTextAEqB=false; pTotalDiffStatus->bTextBEqC=false; } + } + m_diffBufferInfo.init( &m_diff3LineList, &m_diff3LineVector, + m_sd1.getLineDataForDiff(), m_sd1.getSizeLines(), + m_sd2.getLineDataForDiff(), m_sd2.getSizeLines(), + m_sd3.getLineDataForDiff(), m_sd3.getSizeLines() ); + calcWhiteDiff3Lines( m_diff3LineList, m_sd1.getLineDataForDiff(), m_sd2.getLineDataForDiff(), m_sd3.getLineDataForDiff() ); + calcDiff3LineVector( m_diff3LineList, m_diff3LineVector ); + + // Calc needed lines for display + m_neededLines = m_diff3LineList.size(); + + m_pDirectoryMergeWindow->allowResizeEvents(false); + initView(); + if ( !bGUI ) + { + m_pMainWidget->hide(); + } + m_pDirectoryMergeWindow->allowResizeEvents(true); + + m_bTripleDiff = ! m_sd3.isEmpty(); + + m_pMergeResultWindowTitle->setEncodings( m_sd1.getEncoding(), m_sd2.getEncoding(), m_sd3.getEncoding() ); + if ( ! m_pOptionDialog->m_bAutoSelectOutEncoding ) + m_pMergeResultWindowTitle->setEncoding( m_pOptionDialog->m_pEncodingOut ); + + if ( bGUI ) + { + const ManualDiffHelpList* pMDHL = &m_manualDiffHelpList; + m_pDiffTextWindow1->init( m_sd1.getAliasName(), + m_sd1.getLineDataForDisplay(), m_sd1.getSizeLines(), &m_diff3LineVector, pMDHL, m_bTripleDiff ); + m_pDiffTextWindow2->init( m_sd2.getAliasName(), + m_sd2.getLineDataForDisplay(), m_sd2.getSizeLines(), &m_diff3LineVector, pMDHL, m_bTripleDiff ); + m_pDiffTextWindow3->init( m_sd3.getAliasName(), + m_sd3.getLineDataForDisplay(), m_sd3.getSizeLines(), &m_diff3LineVector, pMDHL, m_bTripleDiff ); + + if (m_bTripleDiff) m_pDiffTextWindowFrame3->show(); + else m_pDiffTextWindowFrame3->hide(); + } + + m_bOutputModified = bVisibleMergeResultWindow; + + m_pMergeResultWindow->init( + m_sd1.getLineDataForDisplay(), m_sd1.getSizeLines(), + m_sd2.getLineDataForDisplay(), m_sd2.getSizeLines(), + m_bTripleDiff ? m_sd3.getLineDataForDisplay() : 0, m_sd3.getSizeLines(), + &m_diff3LineList, + pTotalDiffStatus + ); + m_pMergeResultWindowTitle->setFileName( m_outputFilename.isEmpty() ? QString("unnamed.txt") : m_outputFilename ); + + if ( !bGUI ) + { + // We now have all needed information. The rest below is only for GUI-activation. + m_sd1.reset(); + m_sd2.reset(); + m_sd3.reset(); + return; + } + + m_pOverview->init(&m_diff3LineList, m_bTripleDiff ); + m_pDiffVScrollBar->setValue( 0 ); + m_pHScrollBar->setValue( 0 ); + m_pMergeVScrollBar->setValue( 0 ); + + m_pDiffTextWindow1->setPaintingAllowed( true ); + m_pDiffTextWindow2->setPaintingAllowed( true ); + m_pDiffTextWindow3->setPaintingAllowed( true ); + m_pOverview->setPaintingAllowed( true ); + m_pMergeResultWindow->setPaintingAllowed( true ); + + + if ( !bVisibleMergeResultWindow ) + m_pMergeWindowFrame->hide(); + else + m_pMergeWindowFrame->show(); + + // Calc max width for display + m_maxWidth = max2( m_pDiffTextWindow1->getNofColumns(), m_pDiffTextWindow2->getNofColumns() ); + m_maxWidth = max2( m_maxWidth, m_pDiffTextWindow3->getNofColumns() ); + m_maxWidth += 5; + + // Try to create a meaningful but not too long caption + if ( !isPart() ) + { + // 1. If the filenames are equal then show only one filename + QString caption; + QString a1 = m_sd1.getAliasName(); + QString a2 = m_sd2.getAliasName(); + QString a3 = m_sd3.getAliasName(); + QString f1, f2, f3; + int p1,p2,p3; + if ( !a1.isEmpty() && (p1=a1.findRev('/'))>=0 ) + f1 = a1.mid( p1+1 ); + if ( !a2.isEmpty() && (p2=a2.findRev('/'))>=0 ) + f2 = a2.mid( p2+1 ); + if ( !a3.isEmpty() && (p3=a3.findRev('/'))>=0 ) + f3 = a3.mid( p3+1 ); + if ( !f1.isEmpty() ) + { + if ( ( f2.isEmpty() && f3.isEmpty() ) || + (f2.isEmpty() && f1==f3) || ( f3.isEmpty() && f1==f2 ) || (f1==f2 && f1==f3)) + caption = ".../"+f1; + } + else if ( ! f2.isEmpty() ) + { + if ( f3.isEmpty() || f2==f3 ) + caption = ".../"+f2; + } + else if ( ! f3.isEmpty() ) + caption = ".../"+f3; + + // 2. If the files don't have the same name then show all names + if ( caption.isEmpty() && (!f1.isEmpty() || !f2.isEmpty() || !f3.isEmpty()) ) + { + caption = ( f1.isEmpty()? QString("") : QString(".../")+f1 ); + caption += QString(caption.isEmpty() || f2.isEmpty() ? "" : " <-> ") + ( f2.isEmpty()? QString("") : QString(".../")+f2 ); + caption += QString(caption.isEmpty() || f3.isEmpty() ? "" : " <-> ") + ( f3.isEmpty()? QString("") : QString(".../")+f3 ) ; + } + + m_pKDiff3Shell->setCaption( caption.isEmpty() ? QString("KDiff3") : caption+QString(" - KDiff3")); + } + + if ( bLoadFiles ) + { + if ( bVisibleMergeResultWindow && !bAuto ) + m_pMergeResultWindow->showNrOfConflicts(); + else if ( !bAuto && + // Avoid showing this message during startup without parameters. + !( m_sd1.getAliasName().isEmpty() && m_sd2.getAliasName().isEmpty() && m_sd3.getAliasName().isEmpty() ) && + ( m_sd1.isValid() && m_sd2.isValid() && m_sd3.isValid() ) + ) + { + QString totalInfo; + if ( pTotalDiffStatus->bBinaryAEqB && pTotalDiffStatus->bBinaryAEqC ) + totalInfo += i18n("All input files are binary equal."); + else if ( pTotalDiffStatus->bTextAEqB && pTotalDiffStatus->bTextAEqC ) + totalInfo += i18n("All input files contain the same text, but are not binary equal."); + else { + if ( pTotalDiffStatus->bBinaryAEqB ) totalInfo += i18n("Files %1 and %2 are binary equal.\n" ).arg("A").arg("B"); + else if ( pTotalDiffStatus->bTextAEqB ) totalInfo += i18n("Files %1 and %2 have equal text, but are not binary equal. \n").arg("A").arg("B"); + if ( pTotalDiffStatus->bBinaryAEqC ) totalInfo += i18n("Files %1 and %2 are binary equal.\n" ).arg("A").arg("C"); + else if ( pTotalDiffStatus->bTextAEqC ) totalInfo += i18n("Files %1 and %2 have equal text, but are not binary equal. \n").arg("A").arg("C"); + if ( pTotalDiffStatus->bBinaryBEqC ) totalInfo += i18n("Files %1 and %2 are binary equal.\n" ).arg("B").arg("C"); + else if ( pTotalDiffStatus->bTextBEqC ) totalInfo += i18n("Files %1 and %2 have equal text, but are not binary equal. \n").arg("B").arg("C"); + } + + if ( !totalInfo.isEmpty() ) + KMessageBox::information( this, totalInfo ); + } + + if ( bVisibleMergeResultWindow && (!m_sd1.isText() || !m_sd2.isText() || !m_sd3.isText()) ) + { + KMessageBox::information( this, i18n( + "Some inputfiles don't seem to be pure textfiles.\n" + "Note that the KDiff3-merge was not meant for binary data.\n" + "Continue at your own risk.") ); + } + } + + QTimer::singleShot( 10, this, SLOT(slotAfterFirstPaint()) ); + + if ( bVisibleMergeResultWindow && m_pMergeResultWindow ) + { + m_pMergeResultWindow->setFocus(); + } + else if(m_pDiffTextWindow1) + { + m_pDiffTextWindow1->setFocus(); + } +} + + +void KDiff3App::resizeDiffTextWindow(int newWidth, int newHeight) +{ + m_DTWHeight = newHeight; + + recalcWordWrap(); + + m_pDiffVScrollBar->setRange(0, max2(0, m_neededLines+1 - newHeight) ); + m_pDiffVScrollBar->setPageStep( newHeight ); + m_pOverview->setRange( m_pDiffVScrollBar->value(), m_pDiffVScrollBar->pageStep() ); + + // The second window has a somewhat inverse width + + m_pHScrollBar->setRange(0, max2(0, m_maxWidth - newWidth) ); + m_pHScrollBar->setPageStep( newWidth ); +} + +void KDiff3App::resizeMergeResultWindow() +{ + MergeResultWindow* p = m_pMergeResultWindow; + m_pMergeVScrollBar->setRange(0, max2(0, p->getNofLines() - p->getNofVisibleLines()) ); + m_pMergeVScrollBar->setPageStep( p->getNofVisibleLines() ); + + // The second window has a somewhat inverse width +// m_pHScrollBar->setRange(0, max2(0, m_maxWidth - newWidth) ); +// m_pHScrollBar->setPageStep( newWidth ); +} + +void KDiff3App::scrollDiffTextWindow( int deltaX, int deltaY ) +{ + if ( deltaY!= 0 ) + { + m_pDiffVScrollBar->setValue( m_pDiffVScrollBar->value() + deltaY ); + m_pOverview->setRange( m_pDiffVScrollBar->value(), m_pDiffVScrollBar->pageStep() ); + } + if ( deltaX!= 0) + m_pHScrollBar->QScrollBar::setValue( m_pHScrollBar->value() + deltaX ); +} + +void KDiff3App::scrollMergeResultWindow( int deltaX, int deltaY ) +{ + if ( deltaY!= 0 ) + m_pMergeVScrollBar->setValue( m_pMergeVScrollBar->value() + deltaY ); + if ( deltaX!= 0) + m_pHScrollBar->setValue( m_pHScrollBar->value() + deltaX ); +} + +void KDiff3App::setDiff3Line( int line ) +{ + m_pDiffVScrollBar->setValue( line ); +} + +void KDiff3App::sourceMask( int srcMask, int enabledMask ) +{ + chooseA->setChecked( (srcMask & 1) != 0 ); + chooseB->setChecked( (srcMask & 2) != 0 ); + chooseC->setChecked( (srcMask & 4) != 0 ); + chooseA->setEnabled( (enabledMask & 1) != 0 ); + chooseB->setEnabled( (enabledMask & 2) != 0 ); + chooseC->setEnabled( (enabledMask & 4) != 0 ); +} + + + +// Function uses setMinSize( sizeHint ) before adding the widget. +// void addWidget(QBoxLayout* layout, QWidget* widget); +template +void addWidget( L* layout, W* widget) +{ + QSize s = widget->sizeHint(); + widget->setMinimumSize( QSize(max2(s.width(),0),max2(s.height(),0) ) ); + layout->addWidget( widget ); +} + +void KDiff3App::initView() +{ + // set the main widget here + QValueList oldHeights; + if ( m_pDirectoryMergeSplitter->isVisible() ) + { + oldHeights = m_pMainSplitter->sizes(); + } + + if ( m_pMainWidget != 0 ) + { + return; + //delete m_pMainWidget; + } + m_pMainWidget = new QWidget(m_pMainSplitter); + + QVBoxLayout* pVLayout = new QVBoxLayout(m_pMainWidget,0,0); + + QSplitter* pVSplitter = new QSplitter( m_pMainWidget ); + pVSplitter->setOrientation( Qt::Vertical ); + pVLayout->addWidget( pVSplitter ); + + QWidget* pDiffWindowFrame = new QWidget( pVSplitter ); + QHBoxLayout* pDiffHLayout = new QHBoxLayout( pDiffWindowFrame,0,0 ); + + m_pDiffWindowSplitter = new QSplitter( pDiffWindowFrame ); + m_pDiffWindowSplitter->setOrientation( m_pOptionDialog->m_bHorizDiffWindowSplitting ? Qt::Horizontal : Qt::Vertical ); + pDiffHLayout->addWidget( m_pDiffWindowSplitter ); + + m_pOverview = new Overview( pDiffWindowFrame, m_pOptionDialog ); + pDiffHLayout->addWidget(m_pOverview); + connect( m_pOverview, SIGNAL(setLine(int)), this, SLOT(setDiff3Line(int)) ); + //connect( m_pOverview, SIGNAL(afterFirstPaint()), this, SLOT(slotAfterFirstPaint())); + + m_pDiffVScrollBar = new QScrollBar( Qt::Vertical, pDiffWindowFrame ); + pDiffHLayout->addWidget( m_pDiffVScrollBar ); + + m_pDiffTextWindowFrame1 = new DiffTextWindowFrame( m_pDiffWindowSplitter, statusBar(), m_pOptionDialog, 1 ); + m_pDiffTextWindowFrame2 = new DiffTextWindowFrame( m_pDiffWindowSplitter, statusBar(), m_pOptionDialog, 2 ); + m_pDiffTextWindowFrame3 = new DiffTextWindowFrame( m_pDiffWindowSplitter, statusBar(), m_pOptionDialog, 3 ); + m_pDiffTextWindow1 = m_pDiffTextWindowFrame1->getDiffTextWindow(); + m_pDiffTextWindow2 = m_pDiffTextWindowFrame2->getDiffTextWindow(); + m_pDiffTextWindow3 = m_pDiffTextWindowFrame3->getDiffTextWindow(); + connect(m_pDiffTextWindowFrame1, SIGNAL(fileNameChanged(const QString&,int)), this, SLOT(slotFileNameChanged(const QString&,int))); + connect(m_pDiffTextWindowFrame2, SIGNAL(fileNameChanged(const QString&,int)), this, SLOT(slotFileNameChanged(const QString&,int))); + connect(m_pDiffTextWindowFrame3, SIGNAL(fileNameChanged(const QString&,int)), this, SLOT(slotFileNameChanged(const QString&,int))); + + // Merge window + m_pMergeWindowFrame = new QWidget( pVSplitter ); + QHBoxLayout* pMergeHLayout = new QHBoxLayout( m_pMergeWindowFrame,0,0 ); + + QVBoxLayout* pMergeVLayout = new QVBoxLayout(); + pMergeHLayout->addLayout( pMergeVLayout, 1 ); + + m_pMergeResultWindowTitle = new WindowTitleWidget(m_pOptionDialog, m_pMergeWindowFrame); + pMergeVLayout->addWidget( m_pMergeResultWindowTitle ); + + m_pMergeResultWindow = new MergeResultWindow( m_pMergeWindowFrame, m_pOptionDialog, statusBar() ); + pMergeVLayout->addWidget( m_pMergeResultWindow, 1 ); + + m_pMergeVScrollBar = new QScrollBar( Qt::Vertical, m_pMergeWindowFrame ); + pMergeHLayout->addWidget( m_pMergeVScrollBar ); + + autoAdvance->setEnabled(true); + + QValueList sizes = pVSplitter->sizes(); + int total = sizes[0] + sizes[1]; + sizes[0]=total/2; sizes[1]=total/2; + pVSplitter->setSizes( sizes ); + + m_pMergeResultWindow->installEventFilter( this ); // for Cut/Copy/Paste-shortcuts + m_pMergeResultWindow->installEventFilter( m_pMergeResultWindowTitle ); // for focus tracking + + QHBoxLayout* pHScrollBarLayout = new QHBoxLayout( pVLayout ); + m_pHScrollBar = new ReversibleScrollBar( Qt::Horizontal, m_pMainWidget, &m_pOptionDialog->m_bRightToLeftLanguage ); + pHScrollBarLayout->addWidget( m_pHScrollBar ); + m_pCornerWidget = new QWidget( m_pMainWidget ); + pHScrollBarLayout->addWidget( m_pCornerWidget ); + + + connect( m_pDiffVScrollBar, SIGNAL(valueChanged(int)), m_pOverview, SLOT(setFirstLine(int))); + connect( m_pDiffVScrollBar, SIGNAL(valueChanged(int)), m_pDiffTextWindow1, SLOT(setFirstLine(int))); + connect( m_pHScrollBar, SIGNAL(valueChanged2(int)), m_pDiffTextWindow1, SLOT(setFirstColumn(int))); + connect( m_pDiffTextWindow1, SIGNAL(newSelection()), this, SLOT(slotSelectionStart())); + connect( m_pDiffTextWindow1, SIGNAL(selectionEnd()), this, SLOT(slotSelectionEnd())); + connect( m_pDiffTextWindow1, SIGNAL(scroll(int,int)), this, SLOT(scrollDiffTextWindow(int,int))); + m_pDiffTextWindow1->installEventFilter( this ); + + connect( m_pDiffVScrollBar, SIGNAL(valueChanged(int)), m_pDiffTextWindow2, SLOT(setFirstLine(int))); + connect( m_pHScrollBar, SIGNAL(valueChanged2(int)), m_pDiffTextWindow2, SLOT(setFirstColumn(int))); + connect( m_pDiffTextWindow2, SIGNAL(newSelection()), this, SLOT(slotSelectionStart())); + connect( m_pDiffTextWindow2, SIGNAL(selectionEnd()), this, SLOT(slotSelectionEnd())); + connect( m_pDiffTextWindow2, SIGNAL(scroll(int,int)), this, SLOT(scrollDiffTextWindow(int,int))); + m_pDiffTextWindow2->installEventFilter( this ); + + connect( m_pDiffVScrollBar, SIGNAL(valueChanged(int)), m_pDiffTextWindow3, SLOT(setFirstLine(int))); + connect( m_pHScrollBar, SIGNAL(valueChanged2(int)), m_pDiffTextWindow3, SLOT(setFirstColumn(int))); + connect( m_pDiffTextWindow3, SIGNAL(newSelection()), this, SLOT(slotSelectionStart())); + connect( m_pDiffTextWindow3, SIGNAL(selectionEnd()), this, SLOT(slotSelectionEnd())); + connect( m_pDiffTextWindow3, SIGNAL(scroll(int,int)), this, SLOT(scrollDiffTextWindow(int,int))); + m_pDiffTextWindow3->installEventFilter( this ); + + + MergeResultWindow* p = m_pMergeResultWindow; + connect( m_pMergeVScrollBar, SIGNAL(valueChanged(int)), p, SLOT(setFirstLine(int))); + + connect( m_pHScrollBar, SIGNAL(valueChanged2(int)), p, SLOT(setFirstColumn(int))); + connect( p, SIGNAL(scroll(int,int)), this, SLOT(scrollMergeResultWindow(int,int))); + connect( p, SIGNAL(sourceMask(int,int)), this, SLOT(sourceMask(int,int))); + connect( p, SIGNAL( resizeSignal() ),this, SLOT(resizeMergeResultWindow())); + connect( p, SIGNAL( selectionEnd() ), this, SLOT( slotSelectionEnd() ) ); + connect( p, SIGNAL( newSelection() ), this, SLOT( slotSelectionStart() ) ); + connect( p, SIGNAL( modifiedChanged(bool) ), this, SLOT( slotOutputModified(bool) ) ); + connect( p, SIGNAL( modifiedChanged(bool) ), m_pMergeResultWindowTitle, SLOT( slotSetModified(bool) ) ); + connect( p, SIGNAL( updateAvailabilities() ), this, SLOT( slotUpdateAvailabilities() ) ); + connect( p, SIGNAL( showPopupMenu(const QPoint&) ), this, SLOT(showPopupMenu(const QPoint&))); + connect( p, SIGNAL( noRelevantChangesDetected() ), this, SLOT(slotNoRelevantChangesDetected())); + sourceMask(0,0); + + + connect( p, SIGNAL(setFastSelectorRange(int,int)), m_pDiffTextWindow1, SLOT(setFastSelectorRange(int,int))); + connect( p, SIGNAL(setFastSelectorRange(int,int)), m_pDiffTextWindow2, SLOT(setFastSelectorRange(int,int))); + connect( p, SIGNAL(setFastSelectorRange(int,int)), m_pDiffTextWindow3, SLOT(setFastSelectorRange(int,int))); + connect(m_pDiffTextWindow1, SIGNAL(setFastSelectorLine(int)), p, SLOT(slotSetFastSelectorLine(int))); + connect(m_pDiffTextWindow2, SIGNAL(setFastSelectorLine(int)), p, SLOT(slotSetFastSelectorLine(int))); + connect(m_pDiffTextWindow3, SIGNAL(setFastSelectorLine(int)), p, SLOT(slotSetFastSelectorLine(int))); + connect(m_pDiffTextWindow1, SIGNAL(gotFocus()), p, SLOT(updateSourceMask())); + connect(m_pDiffTextWindow2, SIGNAL(gotFocus()), p, SLOT(updateSourceMask())); + connect(m_pDiffTextWindow3, SIGNAL(gotFocus()), p, SLOT(updateSourceMask())); + connect(m_pDirectoryMergeInfo, SIGNAL(gotFocus()), p, SLOT(updateSourceMask())); + + connect( m_pDiffTextWindow1, SIGNAL( resizeSignal(int,int) ),this, SLOT(resizeDiffTextWindow(int,int))); + // The following two connects cause the wordwrap to be recalced thrice, just to make sure. Better than forgetting one. + connect( m_pDiffTextWindow2, SIGNAL( resizeSignal(int,int) ),this, SLOT(slotRecalcWordWrap())); + connect( m_pDiffTextWindow3, SIGNAL( resizeSignal(int,int) ),this, SLOT(slotRecalcWordWrap())); + + m_pDiffTextWindow1->setFocus(); + m_pMainWidget->setMinimumSize(50,50); + if ( m_pDirectoryMergeSplitter->isVisible() ) + { + if (oldHeights.count() < 2) + oldHeights.append(0); + if (oldHeights[1]==0) // Distribute the available space evenly between the two widgets. + { + oldHeights[1] = oldHeights[0]/2; + oldHeights[0] -= oldHeights[1]; + } + m_pMainSplitter->setSizes( oldHeights ); + } + m_pCornerWidget->setFixedSize( m_pDiffVScrollBar->width(), m_pHScrollBar->height() ); + //show(); + m_pMainWidget->show(); + showWindowA->setChecked( true ); + showWindowB->setChecked( true ); + showWindowC->setChecked( true ); +} + +static int calcManualDiffFirstDiff3LineIdx( const Diff3LineVector& d3lv, const ManualDiffHelpEntry& mdhe ) +{ + unsigned int i; + for( i = 0; i=0 && mdhe.lineA1==d3l.lineA || + mdhe.lineB1>=0 && mdhe.lineB1==d3l.lineB || + mdhe.lineC1>=0 && mdhe.lineC1==d3l.lineC ) + return i; + } + return -1; +} + +void KDiff3App::slotAfterFirstPaint() +{ + int newHeight = m_pDiffTextWindow1->getNofVisibleLines(); + int newWidth = m_pDiffTextWindow1->getNofVisibleColumns(); + m_DTWHeight = newHeight; + + recalcWordWrap(); + + m_pDiffVScrollBar->setRange(0, max2(0, m_neededLines+1 - newHeight) ); + m_pDiffVScrollBar->setPageStep( newHeight ); + m_pOverview->setRange( m_pDiffVScrollBar->value(), m_pDiffVScrollBar->pageStep() ); + + // The second window has a somewhat inverse width + m_pHScrollBar->setRange(0, max2(0, m_maxWidth - newWidth) ); + m_pHScrollBar->setPageStep( newWidth ); + + int d3l=-1; + if ( ! m_manualDiffHelpList.empty() ) + d3l = calcManualDiffFirstDiff3LineIdx( m_diff3LineVector, m_manualDiffHelpList.front() ); + if ( d3l>=0 && m_pDiffTextWindow1 ) + { + int line = m_pDiffTextWindow1->convertDiff3LineIdxToLine( d3l ); + m_pDiffVScrollBar->setValue( max2(0,line-1) ); + } + else + { + m_pMergeResultWindow->slotGoTop(); + if ( ! m_outputFilename.isEmpty() && ! m_pMergeResultWindow->isUnsolvedConflictAtCurrent() ) + m_pMergeResultWindow->slotGoNextUnsolvedConflict(); + } + + if (m_pCornerWidget) + m_pCornerWidget->setFixedSize( m_pDiffVScrollBar->width(), m_pHScrollBar->height() ); + + slotUpdateAvailabilities(); +} + +void KDiff3App::resizeEvent(QResizeEvent* e) +{ + QSplitter::resizeEvent(e); + if (m_pCornerWidget) + m_pCornerWidget->setFixedSize( m_pDiffVScrollBar->width(), m_pHScrollBar->height() ); +} + + +bool KDiff3App::eventFilter( QObject* o, QEvent* e ) +{ + if( o == m_pMergeResultWindow ) + { + if ( e->type() == QEvent::KeyPress ) + { // key press + QKeyEvent *k = (QKeyEvent*)e; + if (k->key()==Qt::Key_Insert && (k->state() & Qt::ControlButton)!=0 ) + { + slotEditCopy(); + return true; + } + if (k->key()==Qt::Key_Insert && (k->state() & Qt::ShiftButton)!=0 ) + { + slotEditPaste(); + return true; + } + if (k->key()==Qt::Key_Delete && (k->state() & Qt::ShiftButton)!=0 ) + { + slotEditCut(); + return true; + } + } + return QSplitter::eventFilter( o, e ); // standard event processing + } + + if ( e->type() == QEvent::KeyPress ) // key press + { + QKeyEvent *k = (QKeyEvent*)e; + + bool bCtrl = (k->state() & Qt::ControlButton) != 0; + if (k->key()==Qt::Key_Insert && bCtrl ) + { + slotEditCopy(); + return true; + } + if (k->key()==Qt::Key_Insert && (k->state() & Qt::ShiftButton)!=0 ) + { + slotEditPaste(); + return true; + } + int deltaX=0; + int deltaY=0; + int pageSize = m_DTWHeight; + switch( k->key() ) + { + case Qt::Key_Down: if (!bCtrl) + ++deltaY; + break; + case Qt::Key_Up: if (!bCtrl) --deltaY; break; + case Qt::Key_PageDown: if (!bCtrl) deltaY+=pageSize; break; + case Qt::Key_PageUp: if (!bCtrl) deltaY-=pageSize; break; + case Qt::Key_Left: if (!bCtrl) --deltaX; break; + case Qt::Key_Right: if (!bCtrl) ++deltaX; break; + case Qt::Key_Home: if ( bCtrl ) m_pDiffVScrollBar->setValue( 0 ); + else m_pHScrollBar->setValue( 0 ); + break; + case Qt::Key_End: if ( bCtrl ) m_pDiffVScrollBar->setValue( m_pDiffVScrollBar->maxValue() ); + else m_pHScrollBar->setValue( m_pHScrollBar->maxValue() ); + break; + default: break; + } + + scrollDiffTextWindow( deltaX, deltaY ); + + return true; // eat event + } + else if (e->type() == QEvent::Wheel ) // wheel event + { + QWheelEvent *w = (QWheelEvent*)e; + w->accept(); + + int deltaX=0; + + int d=w->delta(); + int deltaY = -d/120 * QApplication::wheelScrollLines(); + + scrollDiffTextWindow( deltaX, deltaY ); + return true; + } + else if (e->type() == QEvent::Drop ) + { + QDropEvent* pDropEvent = static_cast(e); + pDropEvent->accept(); + + if ( QUriDrag::canDecode(pDropEvent) ) + { +#ifdef KREPLACEMENTS_H + QStringList stringList; + QUriDrag::decodeLocalFiles( pDropEvent, stringList ); + if ( canContinue() && !stringList.isEmpty() ) + { + raise(); + QString filename = stringList.first(); + if ( o == m_pDiffTextWindow1 ) m_sd1.setFilename( filename ); + else if ( o == m_pDiffTextWindow2 ) m_sd2.setFilename( filename ); + else if ( o == m_pDiffTextWindow3 ) m_sd3.setFilename( filename ); + init(); + } +#else + KURL::List urlList; + KURLDrag::decode( pDropEvent, urlList ); + if ( canContinue() && !urlList.isEmpty() ) + { + raise(); + FileAccess fa( urlList.first().url() ); + if ( o == m_pDiffTextWindow1 ) m_sd1.setFileAccess( fa ); + else if ( o == m_pDiffTextWindow2 ) m_sd2.setFileAccess( fa ); + else if ( o == m_pDiffTextWindow3 ) m_sd3.setFileAccess( fa ); + init(); + } +#endif + } + else if ( QTextDrag::canDecode(pDropEvent) ) + { + QString text; + bool bDecodeSuccess = QTextDrag::decode( pDropEvent, text ); + if ( bDecodeSuccess && canContinue() ) + { + raise(); + if ( o == m_pDiffTextWindow1 ) m_sd1.setData(text); + else if ( o == m_pDiffTextWindow2 ) m_sd2.setData(text); + else if ( o == m_pDiffTextWindow3 ) m_sd3.setData(text); + init(); + } + } + + return true; + } + return QSplitter::eventFilter( o, e ); // standard event processing +} + + + + +void KDiff3App::slotFileOpen() +{ + if ( !canContinue() ) return; + + if ( m_pDirectoryMergeWindow->isDirectoryMergeInProgress() ) + { + int result = KMessageBox::warningYesNo(this, + i18n("You are currently doing a directory merge. Are you sure, you want to abort?"), + i18n("Warning"), i18n("Abort"), i18n("Continue Merging") ); + if ( result!=KMessageBox::Yes ) + return; + } + + + slotStatusMsg(i18n("Opening files...")); + + for(;;) + { + + OpenDialog d(this, + QDir::convertSeparators( m_bDirCompare ? m_pDirectoryMergeWindow->getDirNameA() : m_sd1.isFromBuffer() ? QString("") : m_sd1.getAliasName() ), + QDir::convertSeparators( m_bDirCompare ? m_pDirectoryMergeWindow->getDirNameB() : m_sd2.isFromBuffer() ? QString("") : m_sd2.getAliasName() ), + QDir::convertSeparators( m_bDirCompare ? m_pDirectoryMergeWindow->getDirNameC() : m_sd3.isFromBuffer() ? QString("") : m_sd3.getAliasName() ), + m_bDirCompare ? ! m_pDirectoryMergeWindow->getDirNameDest().isEmpty() : !m_outputFilename.isEmpty(), + QDir::convertSeparators( m_bDirCompare ? m_pDirectoryMergeWindow->getDirNameDest() : m_bDefaultFilename ? QString("") : m_outputFilename ), + SLOT(slotConfigure()), m_pOptionDialog ); + + /*OpenDialog d(this, + m_sd1.isFromBuffer() ? QString("") : m_sd1.getAliasName(), + m_sd2.isFromBuffer() ? QString("") : m_sd2.getAliasName(), + m_sd3.isFromBuffer() ? QString("") : m_sd3.getAliasName(), + !m_outputFilename.isEmpty(), + m_bDefaultFilename ? QString("") : m_outputFilename, + SLOT(slotConfigure()), m_pOptionDialog );*/ + int status = d.exec(); + if ( status == QDialog::Accepted ) + { + m_sd1.setFilename( d.m_pLineA->currentText() ); + m_sd2.setFilename( d.m_pLineB->currentText() ); + m_sd3.setFilename( d.m_pLineC->currentText() ); + + if( d.m_pMerge->isChecked() ) + { + if ( d.m_pLineOut->currentText().isEmpty() ) + { + m_outputFilename = "unnamed.txt"; + m_bDefaultFilename = true; + } + else + { + m_outputFilename = d.m_pLineOut->currentText(); + m_bDefaultFilename = false; + } + } + else + m_outputFilename = ""; + + bool bSuccess = improveFilenames(false); + if ( !bSuccess ) + continue; + + if ( m_bDirCompare ) + { + m_pDirectoryMergeSplitter->show(); + if ( m_pMainWidget!=0 ) + { + m_pMainWidget->hide(); + } + break; + } + else + { + m_pDirectoryMergeSplitter->hide(); + init(); + + if ( ! m_sd1.isEmpty() && !m_sd1.hasData() || + ! m_sd2.isEmpty() && !m_sd2.hasData() || + ! m_sd3.isEmpty() && !m_sd3.hasData() ) + { + QString text( i18n("Opening of these files failed:") ); + text += "\n\n"; + if ( ! m_sd1.isEmpty() && !m_sd1.hasData() ) + text += " - " + m_sd1.getAliasName() + "\n"; + if ( ! m_sd2.isEmpty() && !m_sd2.hasData() ) + text += " - " + m_sd2.getAliasName() + "\n"; + if ( ! m_sd3.isEmpty() && !m_sd3.hasData() ) + text += " - " + m_sd3.getAliasName() + "\n"; + + KMessageBox::sorry( this, text, i18n("File open error") ); + continue; + } + } + } + break; + } + + slotUpdateAvailabilities(); + slotStatusMsg(i18n("Ready.")); +} + +void KDiff3App::slotFileOpen2(QString fn1, QString fn2, QString fn3, QString ofn, + QString an1, QString an2, QString an3, TotalDiffStatus* pTotalDiffStatus ) +{ + if ( !canContinue() ) return; + + if(fn1=="" && fn2=="" && fn3=="" && ofn=="" && m_pMainWidget!=0 ) + { + m_pMainWidget->hide(); + return; + } + + slotStatusMsg(i18n("Opening files...")); + + m_sd1.setFilename( fn1 ); + m_sd2.setFilename( fn2 ); + m_sd3.setFilename( fn3 ); + + m_sd1.setAliasName( an1 ); + m_sd2.setAliasName( an2 ); + m_sd3.setAliasName( an3 ); + + if ( ! ofn.isEmpty() ) + { + m_outputFilename = ofn; + m_bDefaultFilename = false; + } + else + { + m_outputFilename = ""; + m_bDefaultFilename = true; + } + + bool bDirCompare = m_bDirCompare; + improveFilenames(true); // Create new window for KDiff3 for directory comparison. + + if( m_bDirCompare ) + { + } + else + { + m_bDirCompare = bDirCompare; // Don't allow this to change here. + init( false, pTotalDiffStatus ); + + if ( pTotalDiffStatus!=0 ) + return; + + if ( ! m_sd1.isEmpty() && ! m_sd1.hasData() || + ! m_sd2.isEmpty() && ! m_sd2.hasData() || + ! m_sd3.isEmpty() && ! m_sd3.hasData() ) + { + QString text( i18n("Opening of these files failed:") ); + text += "\n\n"; + if ( ! m_sd1.isEmpty() && !m_sd1.hasData() ) + text += " - " + m_sd1.getAliasName() + "\n"; + if ( ! m_sd2.isEmpty() && !m_sd2.hasData() ) + text += " - " + m_sd2.getAliasName() + "\n"; + if ( ! m_sd3.isEmpty() && !m_sd3.hasData() ) + text += " - " + m_sd3.getAliasName() + "\n"; + + KMessageBox::sorry( this, text, i18n("File open error") ); + } + else + { + if ( m_pDirectoryMergeWindow!=0 && m_pDirectoryMergeWindow->isVisible() && ! dirShowBoth->isChecked() ) + { + slotDirViewToggle(); + } + } + } + slotStatusMsg(i18n("Ready.")); +} + + +void KDiff3App::slotFileNameChanged(const QString& fileName, int winIdx) +{ + QString fn1 = m_sd1.getFilename(); + QString an1 = m_sd1.getAliasName(); + QString fn2 = m_sd2.getFilename(); + QString an2 = m_sd2.getAliasName(); + QString fn3 = m_sd3.getFilename(); + QString an3 = m_sd3.getAliasName(); + if (winIdx==1) { fn1 = fileName; an1 = ""; } + if (winIdx==2) { fn2 = fileName; an2 = ""; } + if (winIdx==3) { fn3 = fileName; an3 = ""; } + + slotFileOpen2( fn1, fn2, fn3, m_outputFilename, an1, an2, an3, 0 ); +} + + +void KDiff3App::slotEditCut() +{ + slotStatusMsg(i18n("Cutting selection...")); + + QString s; + if ( m_pMergeResultWindow!=0 ) + { + s = m_pMergeResultWindow->getSelection(); + m_pMergeResultWindow->deleteSelection(); + + m_pMergeResultWindow->update(); + } + + if ( !s.isNull() ) + { + QApplication::clipboard()->setText( s, QClipboard::Clipboard ); + } + + slotStatusMsg(i18n("Ready.")); +} + +void KDiff3App::slotEditCopy() +{ + slotStatusMsg(i18n("Copying selection to clipboard...")); + QString s; + if ( m_pDiffTextWindow1!=0 ) s = m_pDiffTextWindow1->getSelection(); + if ( s.isNull() && m_pDiffTextWindow2!=0 ) s = m_pDiffTextWindow2->getSelection(); + if ( s.isNull() && m_pDiffTextWindow3!=0 ) s = m_pDiffTextWindow3->getSelection(); + if ( s.isNull() && m_pMergeResultWindow!=0 ) s = m_pMergeResultWindow->getSelection(); + if ( !s.isNull() ) + { + QApplication::clipboard()->setText( s, QClipboard::Clipboard ); + } + + slotStatusMsg(i18n("Ready.")); +} + +void KDiff3App::slotEditPaste() +{ + slotStatusMsg(i18n("Inserting clipboard contents...")); + + if ( m_pMergeResultWindow!=0 && m_pMergeResultWindow->isVisible() ) + { + m_pMergeResultWindow->pasteClipboard(false); + } + else if ( canContinue() ) + { + if ( m_pDiffTextWindow1->hasFocus() ) + { + m_sd1.setData( QApplication::clipboard()->text(QClipboard::Clipboard) ); + init(); + } + else if ( m_pDiffTextWindow2->hasFocus() ) + { + m_sd2.setData( QApplication::clipboard()->text(QClipboard::Clipboard) ); + init(); + } + else if ( m_pDiffTextWindow3->hasFocus() ) + { + m_sd3.setData( QApplication::clipboard()->text(QClipboard::Clipboard) ); + init(); + } + } + + slotStatusMsg(i18n("Ready.")); +} + +void KDiff3App::slotEditSelectAll() +{ + int l=0,p=0; // needed as dummy return values + if ( m_pMergeResultWindow && m_pMergeResultWindow->hasFocus() ) { m_pMergeResultWindow->setSelection( 0,0,m_pMergeResultWindow->getNofLines(),0); } + else if ( m_pDiffTextWindow1 && m_pDiffTextWindow1->hasFocus() ) { m_pDiffTextWindow1 ->setSelection( 0,0,m_pDiffTextWindow1->getNofLines(),0,l,p); } + else if ( m_pDiffTextWindow2 && m_pDiffTextWindow2->hasFocus() ) { m_pDiffTextWindow2 ->setSelection( 0,0,m_pDiffTextWindow2->getNofLines(),0,l,p); } + else if ( m_pDiffTextWindow3 && m_pDiffTextWindow3->hasFocus() ) { m_pDiffTextWindow3 ->setSelection( 0,0,m_pDiffTextWindow3->getNofLines(),0,l,p); } + + slotStatusMsg(i18n("Ready.")); +} + +void KDiff3App::slotGoCurrent() +{ + if (m_pMergeResultWindow) m_pMergeResultWindow->slotGoCurrent(); +} +void KDiff3App::slotGoTop() +{ + if (m_pMergeResultWindow) m_pMergeResultWindow->slotGoTop(); +} +void KDiff3App::slotGoBottom() +{ + if (m_pMergeResultWindow) m_pMergeResultWindow->slotGoBottom(); +} +void KDiff3App::slotGoPrevUnsolvedConflict() +{ + if (m_pMergeResultWindow) m_pMergeResultWindow->slotGoPrevUnsolvedConflict(); +} +void KDiff3App::slotGoNextUnsolvedConflict() +{ + m_bTimerBlock = false; + if (m_pMergeResultWindow) m_pMergeResultWindow->slotGoNextUnsolvedConflict(); +} +void KDiff3App::slotGoPrevConflict() +{ + if (m_pMergeResultWindow) m_pMergeResultWindow->slotGoPrevConflict(); +} +void KDiff3App::slotGoNextConflict() +{ + m_bTimerBlock = false; + if (m_pMergeResultWindow) m_pMergeResultWindow->slotGoNextConflict(); +} +void KDiff3App::slotGoPrevDelta() +{ + if (m_pMergeResultWindow) m_pMergeResultWindow->slotGoPrevDelta(); +} +void KDiff3App::slotGoNextDelta() +{ + if (m_pMergeResultWindow) m_pMergeResultWindow->slotGoNextDelta(); +} + +void KDiff3App::choose( int choice ) +{ + if (!m_bTimerBlock ) + { + if ( m_pDirectoryMergeWindow && m_pDirectoryMergeWindow->hasFocus() ) + { + if (choice==A) m_pDirectoryMergeWindow->slotCurrentChooseA(); + if (choice==B) m_pDirectoryMergeWindow->slotCurrentChooseB(); + if (choice==C) m_pDirectoryMergeWindow->slotCurrentChooseC(); + + chooseA->setChecked(false); + chooseB->setChecked(false); + chooseC->setChecked(false); + } + else if ( m_pMergeResultWindow ) + { + m_pMergeResultWindow->choose( choice ); + if ( autoAdvance->isChecked() ) + { + m_bTimerBlock = true; + QTimer::singleShot( m_pOptionDialog->m_autoAdvanceDelay, this, SLOT( slotGoNextUnsolvedConflict() ) ); + } + } + } +} + +void KDiff3App::slotChooseA() { choose( A ); } +void KDiff3App::slotChooseB() { choose( B ); } +void KDiff3App::slotChooseC() { choose( C ); } + +// bConflictsOnly automatically choose for conflicts only (true) or for everywhere +static void mergeChooseGlobal( MergeResultWindow* pMRW, int selector, bool bConflictsOnly, bool bWhiteSpaceOnly ) +{ + if ( pMRW ) + { + pMRW->chooseGlobal(selector, bConflictsOnly, bWhiteSpaceOnly ); + } +} + +void KDiff3App::slotChooseAEverywhere() { mergeChooseGlobal( m_pMergeResultWindow, A, false, false ); } +void KDiff3App::slotChooseBEverywhere() { mergeChooseGlobal( m_pMergeResultWindow, B, false, false ); } +void KDiff3App::slotChooseCEverywhere() { mergeChooseGlobal( m_pMergeResultWindow, C, false, false ); } +void KDiff3App::slotChooseAForUnsolvedConflicts() { mergeChooseGlobal( m_pMergeResultWindow, A, true, false ); } +void KDiff3App::slotChooseBForUnsolvedConflicts() { mergeChooseGlobal( m_pMergeResultWindow, B, true, false ); } +void KDiff3App::slotChooseCForUnsolvedConflicts() { mergeChooseGlobal( m_pMergeResultWindow, C, true, false ); } +void KDiff3App::slotChooseAForUnsolvedWhiteSpaceConflicts() { mergeChooseGlobal( m_pMergeResultWindow, A, true, true ); } +void KDiff3App::slotChooseBForUnsolvedWhiteSpaceConflicts() { mergeChooseGlobal( m_pMergeResultWindow, B, true, true ); } +void KDiff3App::slotChooseCForUnsolvedWhiteSpaceConflicts() { mergeChooseGlobal( m_pMergeResultWindow, C, true, true ); } + + +void KDiff3App::slotAutoSolve() +{ + if (m_pMergeResultWindow ) + { + m_pMergeResultWindow->slotAutoSolve(); + // m_pMergeWindowFrame->show(); incompatible with bPreserveCarriageReturn + m_pMergeResultWindow->showNrOfConflicts(); + slotUpdateAvailabilities(); + } +} + +void KDiff3App::slotUnsolve() +{ + if (m_pMergeResultWindow ) + { + m_pMergeResultWindow->slotUnsolve(); + } +} + +void KDiff3App::slotMergeHistory() +{ + if (m_pMergeResultWindow ) + { + m_pMergeResultWindow->slotMergeHistory(); + } +} + +void KDiff3App::slotRegExpAutoMerge() +{ + if (m_pMergeResultWindow ) + { + m_pMergeResultWindow->slotRegExpAutoMerge(); + } +} + +void KDiff3App::slotSplitDiff() +{ + int firstLine = -1; + int lastLine = -1; + DiffTextWindow* pDTW=0; + if ( m_pDiffTextWindow1 ) { pDTW=m_pDiffTextWindow1; pDTW->getSelectionRange(&firstLine, &lastLine, eD3LLineCoords); } + if ( firstLine<0 && m_pDiffTextWindow2 ) { pDTW=m_pDiffTextWindow2; pDTW->getSelectionRange(&firstLine, &lastLine, eD3LLineCoords); } + if ( firstLine<0 && m_pDiffTextWindow3 ) { pDTW=m_pDiffTextWindow3; pDTW->getSelectionRange(&firstLine, &lastLine, eD3LLineCoords); } + if ( pDTW && firstLine>=0 && m_pMergeResultWindow) + { + pDTW->resetSelection(); + + m_pMergeResultWindow->slotSplitDiff( firstLine, lastLine ); + } +} + +void KDiff3App::slotJoinDiffs() +{ + int firstLine = -1; + int lastLine = -1; + DiffTextWindow* pDTW=0; + if ( m_pDiffTextWindow1 ) { pDTW=m_pDiffTextWindow1; pDTW->getSelectionRange(&firstLine, &lastLine, eD3LLineCoords); } + if ( firstLine<0 && m_pDiffTextWindow2 ) { pDTW=m_pDiffTextWindow2; pDTW->getSelectionRange(&firstLine, &lastLine, eD3LLineCoords); } + if ( firstLine<0 && m_pDiffTextWindow3 ) { pDTW=m_pDiffTextWindow3; pDTW->getSelectionRange(&firstLine, &lastLine, eD3LLineCoords); } + if ( pDTW && firstLine>=0 && m_pMergeResultWindow) + { + pDTW->resetSelection(); + + m_pMergeResultWindow->slotJoinDiffs( firstLine, lastLine ); + } +} + +void KDiff3App::slotConfigure() +{ + m_pOptionDialog->setState(); + m_pOptionDialog->incInitialSize ( QSize(0,40) ); + m_pOptionDialog->exec(); + slotRefresh(); +} + +void KDiff3App::slotConfigureKeys() +{ + KKeyDialog::configure(actionCollection(), this); +} + +void KDiff3App::slotRefresh() +{ + if (m_pDiffTextWindow1!=0) + { + m_pDiffTextWindow1->setFont(m_pOptionDialog->m_font); + m_pDiffTextWindow1->update(); + } + if (m_pDiffTextWindow2!=0) + { + m_pDiffTextWindow2->setFont(m_pOptionDialog->m_font); + m_pDiffTextWindow2->update(); + } + if (m_pDiffTextWindow3!=0) + { + m_pDiffTextWindow3->setFont(m_pOptionDialog->m_font); + m_pDiffTextWindow3->update(); + } + if (m_pMergeResultWindow!=0) + { + m_pMergeResultWindow->setFont(m_pOptionDialog->m_font); + m_pMergeResultWindow->update(); + } + if (m_pHScrollBar!=0) + { + m_pHScrollBar->setAgain(); + } + if ( m_pDiffWindowSplitter!=0 ) + { + m_pDiffWindowSplitter->setOrientation( m_pOptionDialog->m_bHorizDiffWindowSplitting ? Qt::Horizontal : Qt::Vertical ); + } + if ( m_pDirectoryMergeWindow ) + { + m_pDirectoryMergeWindow->updateFileVisibilities(); + } +} + +void KDiff3App::slotSelectionStart() +{ + //editCopy->setEnabled( false ); + //editCut->setEnabled( false ); + + const QObject* s = sender(); + if (m_pDiffTextWindow1 && s!=m_pDiffTextWindow1) m_pDiffTextWindow1->resetSelection(); + if (m_pDiffTextWindow2 && s!=m_pDiffTextWindow2) m_pDiffTextWindow2->resetSelection(); + if (m_pDiffTextWindow3 && s!=m_pDiffTextWindow3) m_pDiffTextWindow3->resetSelection(); + if (m_pMergeResultWindow && s!=m_pMergeResultWindow) m_pMergeResultWindow->resetSelection(); +} + +void KDiff3App::slotSelectionEnd() +{ + //const QObject* s = sender(); + //editCopy->setEnabled(true); + //editCut->setEnabled( s==m_pMergeResultWindow ); + if ( m_pOptionDialog->m_bAutoCopySelection ) + { + slotEditCopy(); + } + else + { + QClipboard *clipBoard = QApplication::clipboard(); + + if (clipBoard->supportsSelection ()) + { + QString s; + if ( m_pDiffTextWindow1!=0 ) s = m_pDiffTextWindow1->getSelection(); + if ( s.isNull() && m_pDiffTextWindow2!=0 ) s = m_pDiffTextWindow2->getSelection(); + if ( s.isNull() && m_pDiffTextWindow3!=0 ) s = m_pDiffTextWindow3->getSelection(); + if ( s.isNull() && m_pMergeResultWindow!=0 ) s = m_pMergeResultWindow->getSelection(); + if ( !s.isNull() ) + { + clipBoard->setText( s, QClipboard::Selection ); + } + } + } +} + +void KDiff3App::slotClipboardChanged() +{ + QString s = QApplication::clipboard()->text(); + //editPaste->setEnabled(!s.isEmpty()); +} + +void KDiff3App::slotOutputModified(bool bModified) +{ + if ( bModified && !m_bOutputModified ) + { + m_bOutputModified=true; + slotUpdateAvailabilities(); + } +} + +void KDiff3App::slotAutoAdvanceToggled() +{ + m_pOptionDialog->m_bAutoAdvance = autoAdvance->isChecked(); +} + +void KDiff3App::slotWordWrapToggled() +{ + m_pOptionDialog->m_bWordWrap = wordWrap->isChecked(); + recalcWordWrap(); +} + +void KDiff3App::slotRecalcWordWrap() +{ + recalcWordWrap(); +} + +void KDiff3App::recalcWordWrap(int nofVisibleColumns) // nofVisibleColumns is >=0 only for printing, otherwise the really visible width is used +{ + bool bPrinting = nofVisibleColumns>=0; + int firstD3LIdx = 0; + if( m_pDiffTextWindow1 ) + firstD3LIdx = m_pDiffTextWindow1->convertLineToDiff3LineIdx( m_pDiffTextWindow1->getFirstLine() ); + + // Convert selection to D3L-coords (converting back happens in DiffTextWindow::recalcWordWrap() + if ( m_pDiffTextWindow1 ) + m_pDiffTextWindow1->convertSelectionToD3LCoords(); + if ( m_pDiffTextWindow2 ) + m_pDiffTextWindow2->convertSelectionToD3LCoords(); + if ( m_pDiffTextWindow3 ) + m_pDiffTextWindow3->convertSelectionToD3LCoords(); + + + if ( !m_diff3LineList.empty() && m_pOptionDialog->m_bWordWrap ) + { + Diff3LineList::iterator i; + int sumOfLines=0; + for ( i=m_diff3LineList.begin(); i!=m_diff3LineList.end(); ++i ) + { + Diff3Line& d3l = *i; + d3l.linesNeededForDisplay = 1; + d3l.sumLinesNeededForDisplay = sumOfLines; + sumOfLines += d3l.linesNeededForDisplay; + } + + // Let every window calc how many lines will be needed. + if ( m_pDiffTextWindow1 ) + m_pDiffTextWindow1->recalcWordWrap(true,0,nofVisibleColumns); + if ( m_pDiffTextWindow2 ) + m_pDiffTextWindow2->recalcWordWrap(true,0,nofVisibleColumns); + if ( m_pDiffTextWindow3 ) + m_pDiffTextWindow3->recalcWordWrap(true,0,nofVisibleColumns); + + sumOfLines=0; + for ( i=m_diff3LineList.begin(); i!=m_diff3LineList.end(); ++i ) + { + Diff3Line& d3l = *i; + d3l.sumLinesNeededForDisplay = sumOfLines; + sumOfLines += d3l.linesNeededForDisplay; + } + + // Finish the initialisation: + if ( m_pDiffTextWindow1 ) + m_pDiffTextWindow1->recalcWordWrap(true,sumOfLines,nofVisibleColumns); + if ( m_pDiffTextWindow2 ) + m_pDiffTextWindow2->recalcWordWrap(true,sumOfLines,nofVisibleColumns); + if ( m_pDiffTextWindow3 ) + m_pDiffTextWindow3->recalcWordWrap(true,sumOfLines,nofVisibleColumns); + + m_neededLines = sumOfLines; + } + else + { + m_neededLines = m_diff3LineVector.size(); + if ( m_pDiffTextWindow1 ) + m_pDiffTextWindow1->recalcWordWrap(false,0,0); + if ( m_pDiffTextWindow2 ) + m_pDiffTextWindow2->recalcWordWrap(false,0,0); + if ( m_pDiffTextWindow3 ) + m_pDiffTextWindow3->recalcWordWrap(false,0,0); + } + if (bPrinting) + return; + + m_pOverview->slotRedraw(); + if ( m_pDiffTextWindow1 ) + { + m_pDiffTextWindow1->setFirstLine( m_pDiffTextWindow1->convertDiff3LineIdxToLine( firstD3LIdx ) ); + m_pDiffTextWindow1->update(); + } + if ( m_pDiffTextWindow2 ) + { + m_pDiffTextWindow2->setFirstLine( m_pDiffTextWindow2->convertDiff3LineIdxToLine( firstD3LIdx ) ); + m_pDiffTextWindow2->update(); + } + if ( m_pDiffTextWindow3 ) + { + m_pDiffTextWindow3->setFirstLine( m_pDiffTextWindow3->convertDiff3LineIdxToLine( firstD3LIdx ) ); + m_pDiffTextWindow3->update(); + } + + m_pDiffVScrollBar->setRange(0, max2(0, m_neededLines+1 - m_DTWHeight) ); + if ( m_pDiffTextWindow1 ) + { + m_pDiffVScrollBar->setValue( m_pDiffTextWindow1->convertDiff3LineIdxToLine( firstD3LIdx ) ); + + m_maxWidth = max3( m_pDiffTextWindow1->getNofColumns(), + m_pDiffTextWindow2->getNofColumns(), + m_pDiffTextWindow3->getNofColumns() ) + (m_pOptionDialog->m_bWordWrap ? 0 : 5); + + m_pHScrollBar->setRange(0, max2( 0, m_maxWidth - m_pDiffTextWindow1->getNofVisibleColumns() ) ); + m_pHScrollBar->setPageStep( m_pDiffTextWindow1->getNofVisibleColumns() ); + m_pHScrollBar->setValue(0); + } +} + +void KDiff3App::slotShowWhiteSpaceToggled() +{ + m_pOptionDialog->m_bShowWhiteSpaceCharacters = showWhiteSpaceCharacters->isChecked(); + m_pOptionDialog->m_bShowWhiteSpace = showWhiteSpace->isChecked(); + showWhiteSpaceCharacters->setEnabled( showWhiteSpace->isChecked() ); + if ( m_pDiffTextWindow1!=0 ) + m_pDiffTextWindow1->update(); + if ( m_pDiffTextWindow2!=0 ) + m_pDiffTextWindow2->update(); + if ( m_pDiffTextWindow3!=0 ) + m_pDiffTextWindow3->update(); + if ( m_pOverview!=0 ) + m_pOverview->slotRedraw(); +} + +void KDiff3App::slotShowLineNumbersToggled() +{ + m_pOptionDialog->m_bShowLineNumbers = showLineNumbers->isChecked(); + if ( m_pDiffTextWindow1!=0 ) + m_pDiffTextWindow1->update(); + if ( m_pDiffTextWindow2!=0 ) + m_pDiffTextWindow2->update(); + if ( m_pDiffTextWindow3!=0 ) + m_pDiffTextWindow3->update(); +} + +/// Return true for success, else false +bool KDiff3App::improveFilenames( bool bCreateNewInstance ) +{ + m_bDirCompare = false; + + FileAccess f1(m_sd1.getFilename()); + FileAccess f2(m_sd2.getFilename()); + FileAccess f3(m_sd3.getFilename()); + FileAccess f4(m_outputFilename); + + if ( f1.isFile() && f1.exists() ) + { + if ( f2.isDir() ) + { + f2.addPath( f1.fileName() ); + if ( f2.isFile() && f2.exists() ) + m_sd2.setFileAccess( f2 ); + } + if ( f3.isDir() ) + { + f3.addPath( f1.fileName() ); + if ( f3.isFile() && f3.exists() ) + m_sd3.setFileAccess( f3 ); + } + if ( f4.isDir() ) + { + f4.addPath( f1.fileName() ); + if ( f4.isFile() && f4.exists() ) + m_outputFilename = f4.absFilePath(); + } + } + else if ( f1.isDir() ) + { + m_bDirCompare = true; + if (bCreateNewInstance) + { + emit createNewInstance( f1.absFilePath(), f2.absFilePath(), f3.absFilePath() ); + } + else + { + FileAccess destDir; + if (!m_bDefaultFilename) destDir = f4; + m_pDirectoryMergeSplitter->show(); + if (m_pMainWidget!=0) m_pMainWidget->hide(); + + bool bSuccess = m_pDirectoryMergeWindow->init( + f1, f2, f3, + destDir, // Destdirname + !m_outputFilename.isEmpty() + ); + + m_bDirCompare = true; // This seems redundant but it might have been reset during full analysis. + + if (bSuccess) + { + m_sd1.reset(); + if (m_pDiffTextWindow1!=0) m_pDiffTextWindow1->init(0,0,0,0,0,false); + m_sd2.reset(); + if (m_pDiffTextWindow2!=0) m_pDiffTextWindow2->init(0,0,0,0,0,false); + m_sd3.reset(); + if (m_pDiffTextWindow3!=0) m_pDiffTextWindow3->init(0,0,0,0,0,false); + } + slotUpdateAvailabilities(); + return bSuccess; + } + } + return true; +} + +void KDiff3App::slotReload() +{ + if ( !canContinue() ) return; + + init(); +} + +bool KDiff3App::canContinue() +{ + // First test if anything must be saved. + if(m_bOutputModified) + { + int result = KMessageBox::warningYesNoCancel(this, + i18n("The merge result hasn't been saved."), + i18n("Warning"), i18n("Save && Continue"), i18n("Continue Without Saving") ); + if ( result==KMessageBox::Cancel ) + return false; + else if ( result==KMessageBox::Yes ) + { + slotFileSave(); + if ( m_bOutputModified ) + { + KMessageBox::sorry(this, i18n("Saving the merge result failed."), i18n("Warning") ); + return false; + } + } + } + + m_bOutputModified = false; + return true; +} + +void KDiff3App::slotCheckIfCanContinue( bool* pbContinue ) +{ + if (pbContinue!=0) *pbContinue = canContinue(); +} + + +void KDiff3App::slotDirShowBoth() +{ + if( dirShowBoth->isChecked() ) + { + if ( m_bDirCompare ) + m_pDirectoryMergeSplitter->show(); + else + m_pDirectoryMergeSplitter->hide(); + + if ( m_pMainWidget!=0 ) + m_pMainWidget->show(); + } + else + { + if ( m_pMainWidget!=0 ) + { + m_pMainWidget->show(); + m_pDirectoryMergeSplitter->hide(); + } + else if ( m_bDirCompare ) + { + m_pDirectoryMergeSplitter->show(); + } + } + + slotUpdateAvailabilities(); +} + + +void KDiff3App::slotDirViewToggle() +{ + if ( m_bDirCompare ) + { + if( ! m_pDirectoryMergeSplitter->isVisible() ) + { + m_pDirectoryMergeSplitter->show(); + if (m_pMainWidget!=0) + m_pMainWidget->hide(); + } + else + { + if (m_pMainWidget!=0) + { + m_pDirectoryMergeSplitter->hide(); + m_pMainWidget->show(); + } + } + } + slotUpdateAvailabilities(); +} + +void KDiff3App::slotShowWindowAToggled() +{ + if ( m_pDiffTextWindow1!=0 ) + { + if ( showWindowA->isChecked() ) m_pDiffTextWindowFrame1->show(); + else m_pDiffTextWindowFrame1->hide(); + slotUpdateAvailabilities(); + } +} + +void KDiff3App::slotShowWindowBToggled() +{ + if ( m_pDiffTextWindow2!=0 ) + { + if ( showWindowB->isChecked() ) m_pDiffTextWindowFrame2->show(); + else m_pDiffTextWindowFrame2->hide(); + slotUpdateAvailabilities(); + } +} + +void KDiff3App::slotShowWindowCToggled() +{ + if ( m_pDiffTextWindow3!=0 ) + { + if ( showWindowC->isChecked() ) m_pDiffTextWindowFrame3->show(); + else m_pDiffTextWindowFrame3->hide(); + slotUpdateAvailabilities(); + } +} + +void KDiff3App::slotEditFind() +{ + m_pFindDialog->currentLine = 0; + m_pFindDialog->currentPos = 0; + m_pFindDialog->currentWindow = 1; + + if ( QDialog::Accepted == m_pFindDialog->exec() ) + { + slotEditFindNext(); + } +} + +void KDiff3App::slotEditFindNext() +{ + QString s = m_pFindDialog->m_pSearchString->text(); + if ( s.isEmpty() ) + { + slotEditFind(); + return; + } + + bool bDirDown = true; + bool bCaseSensitive = m_pFindDialog->m_pCaseSensitive->isChecked(); + + int d3vLine = m_pFindDialog->currentLine; + int posInLine = m_pFindDialog->currentPos; + int l=0; + int p=0; + if ( m_pFindDialog->currentWindow == 1 ) + { + if ( m_pFindDialog->m_pSearchInA->isChecked() && m_pDiffTextWindow1!=0 && + m_pDiffTextWindow1->findString( s, d3vLine, posInLine, bDirDown, bCaseSensitive ) ) + { + m_pDiffTextWindow1->setSelection( d3vLine, posInLine, d3vLine, posInLine+s.length(), l, p ); + m_pDiffVScrollBar->setValue(l-m_pDiffVScrollBar->pageStep()/2); + m_pHScrollBar->setValue( max2( 0, p+(int)s.length()-m_pHScrollBar->pageStep()) ); + m_pFindDialog->currentLine = d3vLine; + m_pFindDialog->currentPos = posInLine + 1; + return; + } + m_pFindDialog->currentWindow = 2; + m_pFindDialog->currentLine = 0; + m_pFindDialog->currentPos = 0; + } + + d3vLine = m_pFindDialog->currentLine; + posInLine = m_pFindDialog->currentPos; + if ( m_pFindDialog->currentWindow == 2 ) + { + if ( m_pFindDialog->m_pSearchInB->isChecked() && m_pDiffTextWindow2!=0 && + m_pDiffTextWindow2->findString( s, d3vLine, posInLine, bDirDown, bCaseSensitive ) ) + { + m_pDiffTextWindow2->setSelection( d3vLine, posInLine, d3vLine, posInLine+s.length(),l,p ); + m_pDiffVScrollBar->setValue(l-m_pDiffVScrollBar->pageStep()/2); + m_pHScrollBar->setValue( max2( 0, p+(int)s.length()-m_pHScrollBar->pageStep()) ); + m_pFindDialog->currentLine = d3vLine; + m_pFindDialog->currentPos = posInLine + 1; + return; + } + m_pFindDialog->currentWindow = 3; + m_pFindDialog->currentLine = 0; + m_pFindDialog->currentPos = 0; + } + + d3vLine = m_pFindDialog->currentLine; + posInLine = m_pFindDialog->currentPos; + if ( m_pFindDialog->currentWindow == 3 ) + { + if ( m_pFindDialog->m_pSearchInC->isChecked() && m_pDiffTextWindow3!=0 && + m_pDiffTextWindow3->findString( s, d3vLine, posInLine, bDirDown, bCaseSensitive ) ) + { + m_pDiffTextWindow3->setSelection( d3vLine, posInLine, d3vLine, posInLine+s.length(),l,p ); + m_pDiffVScrollBar->setValue(l-m_pDiffVScrollBar->pageStep()/2); + m_pHScrollBar->setValue( max2( 0, p+(int)s.length()-m_pHScrollBar->pageStep()) ); + m_pFindDialog->currentLine = d3vLine; + m_pFindDialog->currentPos = posInLine + 1; + return; + } + m_pFindDialog->currentWindow = 4; + m_pFindDialog->currentLine = 0; + m_pFindDialog->currentPos = 0; + } + + d3vLine = m_pFindDialog->currentLine; + posInLine = m_pFindDialog->currentPos; + if ( m_pFindDialog->currentWindow == 4 ) + { + if ( m_pFindDialog->m_pSearchInOutput->isChecked() && m_pMergeResultWindow!=0 && m_pMergeResultWindow->isVisible() && + m_pMergeResultWindow->findString( s, d3vLine, posInLine, bDirDown, bCaseSensitive ) ) + { + m_pMergeResultWindow->setSelection( d3vLine, posInLine, d3vLine, posInLine+s.length() ); + m_pMergeVScrollBar->setValue(d3vLine - m_pMergeVScrollBar->pageStep()/2); + m_pHScrollBar->setValue( max2( 0, posInLine+(int)s.length()-m_pHScrollBar->pageStep()) ); + m_pFindDialog->currentLine = d3vLine; + m_pFindDialog->currentPos = posInLine + 1; + return; + } + m_pFindDialog->currentWindow = 5; + m_pFindDialog->currentLine = 0; + m_pFindDialog->currentPos = 0; + } + + KMessageBox::information(this,i18n("Search complete."),i18n("Search Complete")); + m_pFindDialog->currentWindow = 1; + m_pFindDialog->currentLine = 0; + m_pFindDialog->currentPos = 0; +} + +void KDiff3App::slotMergeCurrentFile() +{ + if ( m_bDirCompare && m_pDirectoryMergeWindow->isVisible() && m_pDirectoryMergeWindow->isFileSelected() ) + { + m_pDirectoryMergeWindow->mergeCurrentFile(); + } + else if ( m_pMainWidget != 0 && m_pMainWidget->isVisible() ) + { + if ( !canContinue() ) return; + if ( m_outputFilename.isEmpty() ) + { + if ( !m_sd3.isEmpty() && !m_sd3.isFromBuffer() ) + { + m_outputFilename = m_sd3.getFilename(); + } + else if ( !m_sd2.isEmpty() && !m_sd2.isFromBuffer() ) + { + m_outputFilename = m_sd2.getFilename(); + } + else if ( !m_sd1.isEmpty() && !m_sd1.isFromBuffer() ) + { + m_outputFilename = m_sd1.getFilename(); + } + else + { + m_outputFilename = "unnamed.txt"; + m_bDefaultFilename = true; + } + } + init(); + } +} + +void KDiff3App::slotWinFocusNext() +{ + QWidget* focus = qApp->focusWidget(); + if ( focus == m_pDirectoryMergeWindow && m_pDirectoryMergeWindow->isVisible() && ! dirShowBoth->isChecked() ) + { + slotDirViewToggle(); + } + + std::list visibleWidgetList; + if ( m_pDiffTextWindow1 && m_pDiffTextWindow1->isVisible() ) visibleWidgetList.push_back(m_pDiffTextWindow1); + if ( m_pDiffTextWindow2 && m_pDiffTextWindow2->isVisible() ) visibleWidgetList.push_back(m_pDiffTextWindow2); + if ( m_pDiffTextWindow3 && m_pDiffTextWindow3->isVisible() ) visibleWidgetList.push_back(m_pDiffTextWindow3); + if ( m_pMergeResultWindow && m_pMergeResultWindow->isVisible() ) visibleWidgetList.push_back(m_pMergeResultWindow); + if ( m_bDirCompare /*m_pDirectoryMergeWindow->isVisible()*/ ) visibleWidgetList.push_back(m_pDirectoryMergeWindow); + //if ( m_pDirectoryMergeInfo->isVisible() ) visibleWidgetList.push_back(m_pDirectoryMergeInfo->getInfoList()); + + std::list::iterator i = std::find( visibleWidgetList.begin(), visibleWidgetList.end(), focus); + ++i; + if ( i==visibleWidgetList.end() ) + i = visibleWidgetList.begin(); + if ( i!=visibleWidgetList.end() ) + { + if ( *i == m_pDirectoryMergeWindow && ! dirShowBoth->isChecked() ) + { + slotDirViewToggle(); + } + (*i)->setFocus(); + } +} + +void KDiff3App::slotWinFocusPrev() +{ + QWidget* focus = qApp->focusWidget(); + if ( focus == m_pDirectoryMergeWindow && m_pDirectoryMergeWindow->isVisible() && ! dirShowBoth->isChecked() ) + { + slotDirViewToggle(); + } + + std::list visibleWidgetList; + if ( m_pDiffTextWindow1 && m_pDiffTextWindow1->isVisible() ) visibleWidgetList.push_back(m_pDiffTextWindow1); + if ( m_pDiffTextWindow2 && m_pDiffTextWindow2->isVisible() ) visibleWidgetList.push_back(m_pDiffTextWindow2); + if ( m_pDiffTextWindow3 && m_pDiffTextWindow3->isVisible() ) visibleWidgetList.push_back(m_pDiffTextWindow3); + if ( m_pMergeResultWindow && m_pMergeResultWindow->isVisible() ) visibleWidgetList.push_back(m_pMergeResultWindow); + if (m_bDirCompare /* m_pDirectoryMergeWindow->isVisible() */ ) visibleWidgetList.push_back(m_pDirectoryMergeWindow); + //if ( m_pDirectoryMergeInfo->isVisible() ) visibleWidgetList.push_back(m_pDirectoryMergeInfo->getInfoList()); + + std::list::iterator i = std::find( visibleWidgetList.begin(), visibleWidgetList.end(), focus); + if ( i==visibleWidgetList.begin() ) + i=visibleWidgetList.end(); + --i; + if ( i!=visibleWidgetList.end() ) + { + if ( *i == m_pDirectoryMergeWindow && ! dirShowBoth->isChecked() ) + { + slotDirViewToggle(); + } + (*i)->setFocus(); + } +} + +void KDiff3App::slotWinToggleSplitterOrientation() +{ + if ( m_pDiffWindowSplitter!=0 ) + { + m_pDiffWindowSplitter->setOrientation( + m_pDiffWindowSplitter->orientation()==Qt::Vertical ? Qt::Horizontal : Qt::Vertical + ); + + m_pOptionDialog->m_bHorizDiffWindowSplitting = m_pDiffWindowSplitter->orientation()==Qt::Horizontal; + } +} + +void KDiff3App::slotOverviewNormal() +{ + m_pOverview->setOverviewMode( Overview::eOMNormal ); + m_pMergeResultWindow->setOverviewMode( Overview::eOMNormal ); + slotUpdateAvailabilities(); +} + +void KDiff3App::slotOverviewAB() +{ + m_pOverview->setOverviewMode( Overview::eOMAvsB ); + m_pMergeResultWindow->setOverviewMode( Overview::eOMAvsB ); + slotUpdateAvailabilities(); +} + +void KDiff3App::slotOverviewAC() +{ + m_pOverview->setOverviewMode( Overview::eOMAvsC ); + m_pMergeResultWindow->setOverviewMode( Overview::eOMAvsC ); + slotUpdateAvailabilities(); +} + +void KDiff3App::slotOverviewBC() +{ + m_pOverview->setOverviewMode( Overview::eOMBvsC ); + m_pMergeResultWindow->setOverviewMode( Overview::eOMBvsC ); + slotUpdateAvailabilities(); +} + +void KDiff3App::slotNoRelevantChangesDetected() +{ + if ( m_bTripleDiff && ! m_outputFilename.isEmpty() ) + { + //KMessageBox::information( this, "No relevant changes detected", "KDiff3" ); + if (!m_pOptionDialog->m_IrrelevantMergeCmd.isEmpty()) + { + QString cmd = m_pOptionDialog->m_IrrelevantMergeCmd + " \"" + m_sd1.getAliasName()+ "\" \"" + m_sd2.getAliasName() + "\" \"" + m_sd3.getAliasName(); + ::system( cmd.local8Bit() ); + } + } +} + +static void insertManualDiffHelp( ManualDiffHelpList* pManualDiffHelpList, int winIdx, int firstLine, int lastLine ) +{ + // The manual diff help list must be sorted and compact. + // "Compact" means that upper items can't be empty if lower items contain data. + + // First insert the new item without regarding compactness. + // If the new item overlaps with previous items then the previous items will be removed. + + ManualDiffHelpEntry mdhe; + mdhe.firstLine( winIdx ) = firstLine; + mdhe.lastLine( winIdx ) = lastLine; + + ManualDiffHelpList::iterator i; + for( i=pManualDiffHelpList->begin(); i!=pManualDiffHelpList->end(); ++i ) + { + int& l1 = i->firstLine( winIdx ); + int& l2 = i->lastLine( winIdx ); + if (l1>=0 && l2>=0) + { + if ( firstLine<=l1 && lastLine>=l1 || firstLine <=l2 && lastLine>=l2 ) + { + // overlap + l1 = -1; + l2 = -1; + } + if ( firstLineinsert( i, mdhe ); + break; + } + } + } + if ( i == pManualDiffHelpList->end() ) + { + pManualDiffHelpList->insert( i, mdhe ); + } + + // Now make the list compact + for( int wIdx=1; wIdx<=3; ++wIdx ) + { + ManualDiffHelpList::iterator iEmpty = pManualDiffHelpList->begin(); + for( i=pManualDiffHelpList->begin(); i!=pManualDiffHelpList->end(); ++i ) + { + if ( iEmpty->firstLine(wIdx) >= 0 ) + { + ++iEmpty; + continue; + } + if ( i->firstLine(wIdx)>=0 ) // Current item is not empty -> move it to the empty place + { + iEmpty->firstLine(wIdx) = i->firstLine(wIdx); + iEmpty->lastLine(wIdx) = i->lastLine(wIdx); + i->firstLine(wIdx) = -1; + i->lastLine(wIdx) = -1; + ++iEmpty; + } + } + } + pManualDiffHelpList->remove( ManualDiffHelpEntry() ); // Remove all completely empty items. +} + +void KDiff3App::slotAddManualDiffHelp() +{ + int firstLine = -1; + int lastLine = -1; + int winIdx = -1; + if ( m_pDiffTextWindow1 ) { m_pDiffTextWindow1->getSelectionRange(&firstLine, &lastLine, eFileCoords); winIdx=1; } + if ( firstLine<0 && m_pDiffTextWindow2 ) { m_pDiffTextWindow2->getSelectionRange(&firstLine, &lastLine, eFileCoords); winIdx=2; } + if ( firstLine<0 && m_pDiffTextWindow3 ) { m_pDiffTextWindow3->getSelectionRange(&firstLine, &lastLine, eFileCoords); winIdx=3; } + + if ( firstLine<0 || lastLine <0 || lastLineisChecked() ) + { + if ( m_bDirCompare ) + m_pDirectoryMergeSplitter->show(); + else + m_pDirectoryMergeSplitter->hide(); + + if ( m_pMainWidget!=0 && !m_pMainWidget->isVisible() && + bTextDataAvailable && !m_pDirectoryMergeWindow->isScanning() + ) + m_pMainWidget->show(); + } + + + bool bDiffWindowVisible = m_pMainWidget != 0 && m_pMainWidget->isVisible(); + bool bMergeEditorVisible = m_pMergeWindowFrame !=0 && m_pMergeWindowFrame->isVisible(); + + m_pDirectoryMergeWindow->updateAvailabilities( m_bDirCompare, bDiffWindowVisible, chooseA, chooseB, chooseC ); + + dirShowBoth->setEnabled( m_bDirCompare ); + dirViewToggle->setEnabled( + m_bDirCompare && + (!m_pDirectoryMergeSplitter->isVisible() && m_pMainWidget!=0 && m_pMainWidget->isVisible() || + m_pDirectoryMergeSplitter->isVisible() && m_pMainWidget!=0 && !m_pMainWidget->isVisible() && bTextDataAvailable ) + ); + + bool bDirWindowHasFocus = m_pDirectoryMergeSplitter->isVisible() && m_pDirectoryMergeWindow->hasFocus(); + + showWhiteSpaceCharacters->setEnabled( bDiffWindowVisible ); + autoAdvance->setEnabled( bMergeEditorVisible ); + autoSolve->setEnabled( bMergeEditorVisible && m_bTripleDiff ); + unsolve->setEnabled( bMergeEditorVisible ); + if ( !bDirWindowHasFocus ) + { + chooseA->setEnabled( bMergeEditorVisible ); + chooseB->setEnabled( bMergeEditorVisible ); + chooseC->setEnabled( bMergeEditorVisible && m_bTripleDiff ); + } + chooseAEverywhere->setEnabled( bMergeEditorVisible ); + chooseBEverywhere->setEnabled( bMergeEditorVisible ); + chooseCEverywhere->setEnabled( bMergeEditorVisible && m_bTripleDiff ); + chooseAForUnsolvedConflicts->setEnabled( bMergeEditorVisible ); + chooseBForUnsolvedConflicts->setEnabled( bMergeEditorVisible ); + chooseCForUnsolvedConflicts->setEnabled( bMergeEditorVisible && m_bTripleDiff ); + chooseAForUnsolvedWhiteSpaceConflicts->setEnabled( bMergeEditorVisible ); + chooseBForUnsolvedWhiteSpaceConflicts->setEnabled( bMergeEditorVisible ); + chooseCForUnsolvedWhiteSpaceConflicts->setEnabled( bMergeEditorVisible && m_bTripleDiff ); + mergeHistory->setEnabled( bMergeEditorVisible ); + mergeRegExp->setEnabled( bMergeEditorVisible ); + showWindowA->setEnabled( bDiffWindowVisible && ( m_pDiffTextWindow2->isVisible() || m_pDiffTextWindow3->isVisible() ) ); + showWindowB->setEnabled( bDiffWindowVisible && ( m_pDiffTextWindow1->isVisible() || m_pDiffTextWindow3->isVisible() )); + showWindowC->setEnabled( bDiffWindowVisible && m_bTripleDiff && ( m_pDiffTextWindow1->isVisible() || m_pDiffTextWindow2->isVisible() ) ); + editFind->setEnabled( bDiffWindowVisible ); + editFindNext->setEnabled( bDiffWindowVisible ); + m_pFindDialog->m_pSearchInC->setEnabled( m_bTripleDiff ); + m_pFindDialog->m_pSearchInOutput->setEnabled( bMergeEditorVisible ); + + bool bSavable = bMergeEditorVisible && m_pMergeResultWindow->getNrOfUnsolvedConflicts()==0; + fileSave->setEnabled( m_bOutputModified && bSavable ); + fileSaveAs->setEnabled( bSavable ); + + goTop->setEnabled( bDiffWindowVisible && m_pMergeResultWindow->isDeltaAboveCurrent() ); + goBottom->setEnabled( bDiffWindowVisible && m_pMergeResultWindow->isDeltaBelowCurrent() ); + goCurrent->setEnabled( bDiffWindowVisible ); + goPrevUnsolvedConflict->setEnabled( bMergeEditorVisible && m_pMergeResultWindow->isUnsolvedConflictAboveCurrent() ); + goNextUnsolvedConflict->setEnabled( bMergeEditorVisible && m_pMergeResultWindow->isUnsolvedConflictBelowCurrent() ); + goPrevConflict->setEnabled( bDiffWindowVisible && m_pMergeResultWindow->isConflictAboveCurrent() ); + goNextConflict->setEnabled( bDiffWindowVisible && m_pMergeResultWindow->isConflictBelowCurrent() ); + goPrevDelta->setEnabled( bDiffWindowVisible && m_pMergeResultWindow->isDeltaAboveCurrent() ); + goNextDelta->setEnabled( bDiffWindowVisible && m_pMergeResultWindow->isDeltaBelowCurrent() ); + + overviewModeNormal->setEnabled( m_bTripleDiff && bDiffWindowVisible ); + overviewModeAB->setEnabled( m_bTripleDiff && bDiffWindowVisible ); + overviewModeAC->setEnabled( m_bTripleDiff && bDiffWindowVisible ); + overviewModeBC->setEnabled( m_bTripleDiff && bDiffWindowVisible ); + Overview::e_OverviewMode overviewMode = m_pOverview==0 ? Overview::eOMNormal : m_pOverview->getOverviewMode(); + overviewModeNormal->setChecked( overviewMode == Overview::eOMNormal ); + overviewModeAB->setChecked( overviewMode == Overview::eOMAvsB ); + overviewModeAC->setChecked( overviewMode == Overview::eOMAvsC ); + overviewModeBC->setChecked( overviewMode == Overview::eOMBvsC ); + + winToggleSplitOrientation->setEnabled( bDiffWindowVisible && m_pDiffWindowSplitter!=0 ); +} diff --git a/src/smalldialogs.cpp b/src/smalldialogs.cpp new file mode 100644 index 0000000..d748611 --- /dev/null +++ b/src/smalldialogs.cpp @@ -0,0 +1,579 @@ +/*************************************************************************** + * Copyright (C) 2005-2007 by Joachim Eibl * + * joachim.eibl at gmx.de * + * * + * 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., * + * 51 Franklin Steet, Fifth Floor, Boston, MA 02110-1301, USA. * + ***************************************************************************/ + +#include "smalldialogs.h" +#include "optiondialog.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + + +#include +#include + +// OpenDialog ************************************************************** + +OpenDialog::OpenDialog( + QWidget* pParent, const QString& n1, const QString& n2, const QString& n3, + bool bMerge, const QString& outputName, const char* slotConfigure, OptionDialog* pOptions ) +: QDialog( pParent, "OpenDialog", true /*modal*/ ) +{ + m_pOptions = pOptions; + + QVBoxLayout* v = new QVBoxLayout( this, 5 ); + QGridLayout* h = new QGridLayout( v, 5, 4, 5 ); + h->setColStretch( 1, 10 ); + + QLabel* label = new QLabel( i18n("A (Base):"), this ); + + m_pLineA = new QComboBox( true, this ); + m_pLineA->insertStringList( m_pOptions->m_recentAFiles ); + m_pLineA->setEditText( KURL(n1).prettyURL() ); + m_pLineA->setMinimumSize( 200, m_pLineA->size().height() ); + QPushButton * button = new QPushButton( i18n("File..."), this ); + connect( button, SIGNAL(clicked()), this, SLOT( selectFileA() ) ); + QPushButton * button2 = new QPushButton( i18n("Dir..."), this ); + connect( button2, SIGNAL(clicked()), this, SLOT( selectDirA() ) ); + connect( m_pLineA, SIGNAL(textChanged(const QString&)), this, SLOT(inputFilenameChanged() ) ); + + h->addWidget( label, 0, 0 ); + h->addWidget( m_pLineA, 0, 1 ); + h->addWidget( button, 0, 2 ); + h->addWidget( button2, 0, 3 ); + + label = new QLabel( "B:", this ); + m_pLineB = new QComboBox( true, this ); + m_pLineB->insertStringList( m_pOptions->m_recentBFiles ); + m_pLineB->setEditText( KURL(n2).prettyURL() ); + m_pLineB->setMinimumSize( 200, m_pLineB->size().height() ); + button = new QPushButton( i18n("File..."), this ); + connect( button, SIGNAL(clicked()), this, SLOT( selectFileB() ) ); + button2 = new QPushButton( i18n("Dir..."), this ); + connect( button2, SIGNAL(clicked()), this, SLOT( selectDirB() ) ); + connect( m_pLineB, SIGNAL(textChanged(const QString&)), this, SLOT(inputFilenameChanged() ) ); + + h->addWidget( label, 1, 0 ); + h->addWidget( m_pLineB, 1, 1 ); + h->addWidget( button, 1, 2 ); + h->addWidget( button2, 1, 3 ); + + label = new QLabel( i18n("C (Optional):"), this ); + m_pLineC= new QComboBox( true, this ); + m_pLineC->insertStringList( m_pOptions->m_recentCFiles ); + m_pLineC->setEditText( KURL(n3).prettyURL() ); + m_pLineC->setMinimumSize( 200, m_pLineC->size().height() ); + button = new QPushButton( i18n("File..."), this ); + connect( button, SIGNAL(clicked()), this, SLOT( selectFileC() ) ); + button2 = new QPushButton( i18n("Dir..."), this ); + connect( button2, SIGNAL(clicked()), this, SLOT( selectDirC() ) ); + connect( m_pLineC, SIGNAL(textChanged(const QString&)), this, SLOT(inputFilenameChanged() ) ); + + h->addWidget( label, 2, 0 ); + h->addWidget( m_pLineC, 2, 1 ); + h->addWidget( button, 2, 2 ); + h->addWidget( button2, 2, 3 ); + + m_pMerge = new QCheckBox( i18n("Merge"), this ); + h->addWidget( m_pMerge, 3, 0 ); + + QHBoxLayout* hl = new QHBoxLayout(); + h->addLayout( hl, 3, 1 ); + hl->addStretch(2); + button = new QPushButton(i18n("Swap/Copy Names ..."), this); + //button->setToggleButton(false); + hl->addWidget( button ); + + QPopupMenu* m = new QPopupMenu(this); + int id=0; + m->insertItem( i18n("Swap %1<->%2").arg("A").arg("B"), id++ ); + m->insertItem( i18n("Swap %1<->%2").arg("B").arg("C"), id++ ); + m->insertItem( i18n("Swap %1<->%2").arg("C").arg("A"), id++ ); + m->insertItem( i18n("Copy %1->Output").arg("A"), id++ ); + m->insertItem( i18n("Copy %1->Output").arg("B"), id++ ); + m->insertItem( i18n("Copy %1->Output").arg("C"), id++ ); + m->insertItem( i18n("Swap %1<->Output").arg("A"), id++ ); + m->insertItem( i18n("Swap %1<->Output").arg("B"), id++ ); + m->insertItem( i18n("Swap %1<->Output").arg("C"), id++ ); + connect( m, SIGNAL(activated(int)), this, SLOT(slotSwapCopyNames(int))); + button->setPopup(m); + + + hl->addStretch(2); + + label = new QLabel( i18n("Output (optional):"), this ); + m_pLineOut = new QComboBox( true, this ); + m_pLineOut->insertStringList( m_pOptions->m_recentOutputFiles ); + m_pLineOut->setEditText( KURL(outputName).prettyURL() ); + m_pLineOut->setMinimumSize( 200, m_pLineOut->size().height() ); + button = new QPushButton( i18n("File..."), this ); + connect( button, SIGNAL(clicked()), this, SLOT( selectOutputName() ) ); + button2 = new QPushButton( i18n("Dir..."), this ); + connect( button2, SIGNAL(clicked()), this, SLOT( selectOutputDir() ) ); + connect( m_pMerge, SIGNAL(stateChanged(int)), this, SLOT(internalSlot(int)) ); + connect( this, SIGNAL(internalSignal(bool)), m_pLineOut, SLOT(setEnabled(bool)) ); + connect( this, SIGNAL(internalSignal(bool)), button, SLOT(setEnabled(bool)) ); + connect( this, SIGNAL(internalSignal(bool)), button2, SLOT(setEnabled(bool)) ); + + m_pMerge->setChecked( !bMerge ); + m_pMerge->setChecked( bMerge ); +// m_pLineOutput->setEnabled( bMerge ); + +// button->setEnabled( bMerge ); + + h->addWidget( label, 4, 0 ); + h->addWidget( m_pLineOut, 4, 1 ); + h->addWidget( button, 4, 2 ); + h->addWidget( button2, 4, 3 ); + + h->addColSpacing( 1, 200 ); + + QHBoxLayout* l = new QHBoxLayout( v, 5 ); + + button = new QPushButton( i18n("Configure..."), this ); + connect( button, SIGNAL(clicked()), pParent, slotConfigure ); + l->addWidget( button, 1 ); + + l->addStretch(1); + + button = new QPushButton( i18n("&OK"), this ); + button->setDefault( true ); + connect( button, SIGNAL(clicked()), this, SLOT( accept() ) ); + l->addWidget( button, 1 ); + + button = new QPushButton( i18n("&Cancel"), this ); + connect( button, SIGNAL(clicked()), this, SLOT( reject() ) ); + l->addWidget( button,1 ); + + QSize sh = sizeHint(); + setFixedHeight( sh.height() ); + m_bInputFileNameChanged = false; + +#ifdef KREPLACEMENTS_H + m_pLineA->lineEdit()->installEventFilter( this ); + m_pLineB->lineEdit()->installEventFilter( this ); + m_pLineC->lineEdit()->installEventFilter( this ); + m_pLineOut->lineEdit()->installEventFilter( this ); +#endif +} + +// Eventfilter: Only needed under Windows. +// Without this, files dropped in the line edit have URL-encoding. +// This eventfilter decodes the filenames as needed by KDiff3. +bool OpenDialog::eventFilter(QObject* o, QEvent* e) +{ + if (e->type()==QEvent::Drop) + { + QDropEvent* d = static_cast(e); + + if ( !QUriDrag::canDecode( d ) ) { + return false; + } + + QStringList lst; + QUriDrag::decodeLocalFiles( d, lst ); + + if ( lst.count() > 0 ) + { + static_cast(o)->setText( lst[0] ); + static_cast(o)->setFocus(); + } + + return true; + } + return false; +} + + +void OpenDialog::selectURL( QComboBox* pLine, bool bDir, int i, bool bSave ) +{ + QString current = pLine->currentText(); + if (current.isEmpty() && i>3 ){ current = m_pLineC->currentText(); } + if (current.isEmpty() ){ current = m_pLineB->currentText(); } + if (current.isEmpty() ){ current = m_pLineA->currentText(); } + KURL newURL = bDir ? KFileDialog::getExistingURL( current, this) + : bSave ? KFileDialog::getSaveURL( current, 0, this) + : KFileDialog::getOpenURL( current, 0, this); + if ( !newURL.isEmpty() ) + { + pLine->setEditText( newURL.url() ); + } + // newURL won't be modified if nothing was selected. +} + +void OpenDialog::selectFileA() { selectURL( m_pLineA, false, 1, false ); } +void OpenDialog::selectFileB() { selectURL( m_pLineB, false, 2, false ); } +void OpenDialog::selectFileC() { selectURL( m_pLineC, false, 3, false ); } +void OpenDialog::selectOutputName(){ selectURL( m_pLineOut, false, 4, true ); } +void OpenDialog::selectDirA() { selectURL( m_pLineA, true, 1, false ); } +void OpenDialog::selectDirB() { selectURL( m_pLineB, true, 2, false ); } +void OpenDialog::selectDirC() { selectURL( m_pLineC, true, 3, false ); } +void OpenDialog::selectOutputDir() { selectURL( m_pLineOut, true, 4, true ); } + +void OpenDialog::internalSlot(int i) +{ + emit internalSignal(i!=0); +} + +// Clear the output-filename when any input-filename changed, +// because users forgot to change the output and accidently overwrote it with +// wrong data during a merge. +void OpenDialog::inputFilenameChanged() +{ + if(!m_bInputFileNameChanged) + { + m_bInputFileNameChanged=true; + m_pLineOut->clearEdit(); + } +} + +static void fixCurrentText( QComboBox* pCB ) +{ + QString s = pCB->currentText(); + + int pos = s.find( '\n' ); + if ( pos>=0 ) + s=s.left(pos); + pos = s.find( '\r' ); + if ( pos>=0 ) + s=s.left(pos); + + pCB->setCurrentText( s ); +} + +void OpenDialog::accept() +{ + unsigned int maxNofRecentFiles = 10; + + fixCurrentText( m_pLineA ); + QString s = m_pLineA->currentText(); + s = KURL::fromPathOrURL(s).prettyURL(); + QStringList* sl = &m_pOptions->m_recentAFiles; + // If an item exist, remove it from the list and reinsert it at the beginning. + sl->remove(s); + if ( !s.isEmpty() ) sl->prepend( s ); + if (sl->count()>maxNofRecentFiles) sl->erase( sl->at(maxNofRecentFiles), sl->end() ); + + fixCurrentText( m_pLineB ); + s = m_pLineB->currentText(); + s = KURL::fromPathOrURL(s).prettyURL(); + sl = &m_pOptions->m_recentBFiles; + sl->remove(s); + if ( !s.isEmpty() ) sl->prepend( s ); + if (sl->count()>maxNofRecentFiles) sl->erase( sl->at(maxNofRecentFiles), sl->end() ); + + fixCurrentText( m_pLineC ); + s = m_pLineC->currentText(); + s = KURL::fromPathOrURL(s).prettyURL(); + sl = &m_pOptions->m_recentCFiles; + sl->remove(s); + if ( !s.isEmpty() ) sl->prepend( s ); + if (sl->count()>maxNofRecentFiles) sl->erase( sl->at(maxNofRecentFiles), sl->end() ); + + fixCurrentText( m_pLineOut ); + s = m_pLineOut->currentText(); + s = KURL::fromPathOrURL(s).prettyURL(); + sl = &m_pOptions->m_recentOutputFiles; + sl->remove(s); + if ( !s.isEmpty() ) sl->prepend( s ); + if (sl->count()>maxNofRecentFiles) sl->erase( sl->at(maxNofRecentFiles), sl->end() ); + + QDialog::accept(); +} + +void OpenDialog::slotSwapCopyNames( int id ) // id selected in the popup menu +{ + QComboBox* cb1=0; + QComboBox* cb2=0; + switch(id) + { + case 0: cb1=m_pLineA; cb2=m_pLineB; break; + case 1: cb1=m_pLineB; cb2=m_pLineC; break; + case 2: cb1=m_pLineC; cb2=m_pLineA; break; + case 3: cb1=m_pLineA; cb2=m_pLineOut; break; + case 4: cb1=m_pLineB; cb2=m_pLineOut; break; + case 5: cb1=m_pLineC; cb2=m_pLineOut; break; + case 6: cb1=m_pLineA; cb2=m_pLineOut; break; + case 7: cb1=m_pLineB; cb2=m_pLineOut; break; + case 8: cb1=m_pLineC; cb2=m_pLineOut; break; + } + if ( cb1 && cb2 ) + { + QString t1 = cb1->currentText(); + QString t2 = cb2->currentText(); + cb2->setCurrentText(t1); + if ( id<=2 || id>=6 ) + { + cb1->setCurrentText( t2 ); + } + } +} + +// FindDialog ********************************************* + +FindDialog::FindDialog(QWidget* pParent) +: QDialog( pParent ) +{ + QGridLayout* layout = new QGridLayout( this ); + layout->setMargin(5); + layout->setSpacing(5); + + int line=0; + layout->addMultiCellWidget( new QLabel(i18n("Search text:"),this), line,line,0,1 ); + ++line; + + m_pSearchString = new QLineEdit( this ); + layout->addMultiCellWidget( m_pSearchString, line,line,0,1 ); + ++line; + + m_pCaseSensitive = new QCheckBox(i18n("Case sensitive"),this); + layout->addWidget( m_pCaseSensitive, line, 1 ); + + m_pSearchInA = new QCheckBox(i18n("Search A"),this); + layout->addWidget( m_pSearchInA, line, 0 ); + m_pSearchInA->setChecked( true ); + ++line; + + m_pSearchInB = new QCheckBox(i18n("Search B"),this); + layout->addWidget( m_pSearchInB, line, 0 ); + m_pSearchInB->setChecked( true ); + ++line; + + m_pSearchInC = new QCheckBox(i18n("Search C"),this); + layout->addWidget( m_pSearchInC, line, 0 ); + m_pSearchInC->setChecked( true ); + ++line; + + m_pSearchInOutput = new QCheckBox(i18n("Search output"),this); + layout->addWidget( m_pSearchInOutput, line, 0 ); + m_pSearchInOutput->setChecked( true ); + ++line; + + QPushButton* pButton = new QPushButton( i18n("&Search"), this ); + layout->addWidget( pButton, line, 0 ); + connect( pButton, SIGNAL(clicked()), this, SLOT(accept())); + + pButton = new QPushButton( i18n("&Cancel"), this ); + layout->addWidget( pButton, line, 1 ); + connect( pButton, SIGNAL(clicked()), this, SLOT(reject())); + + hide(); +} + + +RegExpTester::RegExpTester( QWidget* pParent, const QString& autoMergeRegExpToolTip, + const QString& historyStartRegExpToolTip, const QString& historyEntryStartRegExpToolTip, const QString& historySortKeyOrderToolTip ) +: QDialog( pParent) +{ + int line=0; + setCaption(i18n("Regular Expression Tester")); + QGridLayout* pGrid = new QGridLayout( this, 11, 2, 5, 5 ); + + QLabel* l = new QLabel(i18n("Auto merge regular expression:"), this); + pGrid->addWidget(l,line,0); + QToolTip::add( l, autoMergeRegExpToolTip ); + m_pAutoMergeRegExpEdit = new QLineEdit(this); + pGrid->addWidget(m_pAutoMergeRegExpEdit,line,1); + connect( m_pAutoMergeRegExpEdit, SIGNAL(textChanged(const QString&)), this, SLOT(slotRecalc())); + ++line; + + l = new QLabel(i18n("Example auto merge line:"), this); + pGrid->addMultiCellWidget(l,line,line,0,1); + QToolTip::add( l, i18n("For auto merge test copy a line as used in your files.") ); + m_pAutoMergeExampleEdit = new QLineEdit(this); + pGrid->addWidget(m_pAutoMergeExampleEdit,line,1); + connect( m_pAutoMergeExampleEdit, SIGNAL(textChanged(const QString&)), this, SLOT(slotRecalc())); + ++line; + + l = new QLabel(i18n("Match result:"), this); + pGrid->addWidget(l,line,0); + m_pAutoMergeMatchResult = new QLineEdit(this); + m_pAutoMergeMatchResult->setReadOnly(true); + pGrid->addWidget(m_pAutoMergeMatchResult,line,1); + ++line; + + pGrid->addItem( new QSpacerItem(100,20), line, 0 ); + pGrid->setRowStretch( line, 5); + ++line; + + l = new QLabel(i18n("History start regular expression:"), this); + pGrid->addWidget(l,line,0); + QToolTip::add( l, historyStartRegExpToolTip ); + m_pHistoryStartRegExpEdit = new QLineEdit(this); + pGrid->addWidget(m_pHistoryStartRegExpEdit,line,1); + connect( m_pHistoryStartRegExpEdit, SIGNAL(textChanged(const QString&)), this, SLOT(slotRecalc())); + ++line; + + l = new QLabel(i18n("Example history start line (with leading comment):"), this); + pGrid->addMultiCellWidget(l,line,line,0,1); + ++line; + QToolTip::add( l, i18n("Copy a history start line as used in your files,\n" + "including the leading comment.") ); + m_pHistoryStartExampleEdit = new QLineEdit(this); + pGrid->addWidget(m_pHistoryStartExampleEdit,line,1); + connect( m_pHistoryStartExampleEdit, SIGNAL(textChanged(const QString&)), this, SLOT(slotRecalc())); + ++line; + + l = new QLabel(i18n("Match result:"), this); + pGrid->addWidget(l,line,0); + m_pHistoryStartMatchResult = new QLineEdit(this); + m_pHistoryStartMatchResult->setReadOnly(true); + pGrid->addWidget(m_pHistoryStartMatchResult,line,1); + ++line; + + pGrid->addItem( new QSpacerItem(100,20), line, 0 ); + pGrid->setRowStretch( line, 5); + ++line; + + l = new QLabel(i18n("History entry start regular expression:"), this); + pGrid->addWidget(l,line,0); + QToolTip::add( l, historyEntryStartRegExpToolTip ); + m_pHistoryEntryStartRegExpEdit = new QLineEdit(this); + pGrid->addWidget(m_pHistoryEntryStartRegExpEdit,line,1); + connect( m_pHistoryEntryStartRegExpEdit, SIGNAL(textChanged(const QString&)), this, SLOT(slotRecalc())); + ++line; + + l = new QLabel(i18n("History sort key order:"), this); + pGrid->addWidget(l,line,0); + QToolTip::add( l, historySortKeyOrderToolTip ); + m_pHistorySortKeyOrderEdit = new QLineEdit(this); + pGrid->addWidget(m_pHistorySortKeyOrderEdit,line,1); + connect( m_pHistorySortKeyOrderEdit, SIGNAL(textChanged(const QString&)), this, SLOT(slotRecalc())); + ++line; + + l = new QLabel(i18n("Example history entry start line (without leading comment):"), this); + pGrid->addMultiCellWidget(l,line,line,0,1); + QToolTip::add( l, i18n("Copy a history entry start line as used in your files,\n" + "but omit the leading comment.") ); + ++line; + m_pHistoryEntryStartExampleEdit = new QLineEdit(this); + pGrid->addWidget(m_pHistoryEntryStartExampleEdit,line,1); + connect( m_pHistoryEntryStartExampleEdit, SIGNAL(textChanged(const QString&)), this, SLOT(slotRecalc())); + ++line; + + l = new QLabel(i18n("Match result:"), this); + pGrid->addWidget(l,line,0); + m_pHistoryEntryStartMatchResult = new QLineEdit(this); + m_pHistoryEntryStartMatchResult->setReadOnly(true); + pGrid->addWidget(m_pHistoryEntryStartMatchResult,line,1); + ++line; + + l = new QLabel(i18n("Sort key result:"), this); + pGrid->addWidget(l,line,0); + m_pHistorySortKeyResult = new QLineEdit(this); + m_pHistorySortKeyResult->setReadOnly(true); + pGrid->addWidget(m_pHistorySortKeyResult,line,1); + ++line; + + QPushButton* pButton = new QPushButton(i18n("OK"), this); + pGrid->addWidget(pButton,line,0); + connect( pButton, SIGNAL(clicked()), this, SLOT(accept())); + + pButton = new QPushButton(i18n("Cancel"), this); + pGrid->addWidget(pButton,line,1); + connect( pButton, SIGNAL(clicked()), this, SLOT(reject())); + + resize( 800, sizeHint().height() ); +} + +void RegExpTester::init( const QString& autoMergeRegExp, const QString& historyStartRegExp, const QString& historyEntryStartRegExp, const QString historySortKeyOrder ) +{ + m_pAutoMergeRegExpEdit->setText( autoMergeRegExp ); + m_pHistoryStartRegExpEdit->setText( historyStartRegExp ); + m_pHistoryEntryStartRegExpEdit->setText( historyEntryStartRegExp ); + m_pHistorySortKeyOrderEdit->setText( historySortKeyOrder ); +} + +QString RegExpTester::autoMergeRegExp() +{ + return m_pAutoMergeRegExpEdit->text(); +} + +QString RegExpTester::historyStartRegExp() +{ + return m_pHistoryStartRegExpEdit->text(); +} + +QString RegExpTester::historyEntryStartRegExp() +{ + return m_pHistoryEntryStartRegExpEdit->text(); +} + +QString RegExpTester::historySortKeyOrder() +{ + return m_pHistorySortKeyOrderEdit->text(); +} + +void RegExpTester::slotRecalc() +{ + QRegExp autoMergeRegExp = m_pAutoMergeRegExpEdit->text(); + if ( autoMergeRegExp.exactMatch( m_pAutoMergeExampleEdit->text() ) ) + { + m_pAutoMergeMatchResult->setText( i18n("Match success.") ); + } + else + { + m_pAutoMergeMatchResult->setText( i18n("Match failed.") ); + } + + QRegExp historyStartRegExp = m_pHistoryStartRegExpEdit->text(); + if ( historyStartRegExp.exactMatch( m_pHistoryStartExampleEdit->text() ) ) + { + m_pHistoryStartMatchResult->setText( i18n("Match success.") ); + } + else + { + m_pHistoryStartMatchResult->setText( i18n("Match failed.") ); + } + + + QStringList parenthesesGroups; + bool bSuccess = findParenthesesGroups( m_pHistoryEntryStartRegExpEdit->text(), parenthesesGroups ); + if ( ! bSuccess ) + { + m_pHistoryEntryStartMatchResult->setText( i18n("Opening and closing parentheses don't match in regular expression.") ); + m_pHistorySortKeyResult->setText( i18n("") ); + return; + } + QRegExp historyEntryStartRegExp = m_pHistoryEntryStartRegExpEdit->text(); + QString s = m_pHistoryEntryStartExampleEdit->text(); + + if ( historyEntryStartRegExp.exactMatch( s ) ) + { + m_pHistoryEntryStartMatchResult->setText( i18n("Match success.") ); + QString key = calcHistorySortKey( m_pHistorySortKeyOrderEdit->text(),historyEntryStartRegExp,parenthesesGroups); + m_pHistorySortKeyResult->setText(key); + } + else + { + m_pHistoryEntryStartMatchResult->setText( i18n("Match failed.") ); + m_pHistorySortKeyResult->setText( i18n("") ); + } +} + +#include "smalldialogs.moc" diff --git a/src/smalldialogs.h b/src/smalldialogs.h new file mode 100644 index 0000000..5791b13 --- /dev/null +++ b/src/smalldialogs.h @@ -0,0 +1,120 @@ +/*************************************************************************** + * Copyright (C) 2005 by Joachim Eibl * + * joachim.eibl at gmx.de * + * * + * 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., * + * 51 Franklin Steet, Fifth Floor, Boston, MA 02110-1301, USA. * + ***************************************************************************/ + +#ifndef SMALLDIALOGS_H +#define SMALLDIALOGS_H + +#include +#include "diff.h" + +class OptionDialog; +class QComboBox; +class QCheckBox; +class QLineEdit; +class QLabel; + +class OpenDialog : public QDialog +{ + Q_OBJECT +public: + OpenDialog( + QWidget* pParent, const QString& n1, const QString& n2, const QString& n3, + bool bMerge, const QString& outputName, const char* slotConfigure, OptionDialog* pOptions ); + + QComboBox* m_pLineA; + QComboBox* m_pLineB; + QComboBox* m_pLineC; + QComboBox* m_pLineOut; + + QCheckBox* m_pMerge; + virtual void accept(); + virtual bool eventFilter(QObject* o, QEvent* e); +private: + OptionDialog* m_pOptions; + void selectURL( QComboBox* pLine, bool bDir, int i, bool bSave ); + bool m_bInputFileNameChanged; +private slots: + void selectFileA(); + void selectFileB(); + void selectFileC(); + void selectDirA(); + void selectDirB(); + void selectDirC(); + void selectOutputName(); + void selectOutputDir(); + void internalSlot(int); + void inputFilenameChanged(); + void slotSwapCopyNames(int); +signals: + void internalSignal(bool); +}; + +class FindDialog : public QDialog +{ + Q_OBJECT +public: + FindDialog(QWidget* pParent); + +signals: + void findNext(); + +public: + QLineEdit* m_pSearchString; + QCheckBox* m_pSearchInA; + QCheckBox* m_pSearchInB; + QCheckBox* m_pSearchInC; + QCheckBox* m_pSearchInOutput; + QCheckBox* m_pCaseSensitive; + + int currentLine; + int currentPos; + int currentWindow; +}; + + +class RegExpTester : public QDialog +{ + Q_OBJECT +private: + QLineEdit* m_pAutoMergeRegExpEdit; + QLineEdit* m_pAutoMergeMatchResult; + QLineEdit* m_pAutoMergeExampleEdit; + QLineEdit* m_pHistoryStartRegExpEdit; + QLineEdit* m_pHistoryStartMatchResult; + QLineEdit* m_pHistoryStartExampleEdit; + QLineEdit* m_pHistoryEntryStartRegExpEdit; + QLineEdit* m_pHistorySortKeyOrderEdit; + QLineEdit* m_pHistoryEntryStartExampleEdit; + QLineEdit* m_pHistoryEntryStartMatchResult; + QLineEdit* m_pHistorySortKeyResult; + OptionDialog* m_pOptionDialog; +public: + RegExpTester( QWidget* pParent, const QString& autoMergeRegExpToolTip, const QString& historyStartRegExpToolTip, + const QString& historyEntryStartRegExpToolTip, const QString& historySortKeyOrderToolTip ); + void init( const QString& autoMergeRegExp, const QString& historyStartRegExp, const QString& historyEntryStartRegExp, const QString sortKeyOrder ); + QString autoMergeRegExp(); + QString historyStartRegExp(); + QString historyEntryStartRegExp(); + QString historySortKeyOrder(); +public slots: + void slotRecalc(); +}; + +#endif diff --git a/src/version.h b/src/version.h new file mode 100644 index 0000000..79c3154 --- /dev/null +++ b/src/version.h @@ -0,0 +1,2 @@ +#undef VERSION +#define VERSION "0.9.92" diff --git a/src/xpm/autoadvance.xpm b/src/xpm/autoadvance.xpm new file mode 100644 index 0000000..d499999 --- /dev/null +++ b/src/xpm/autoadvance.xpm @@ -0,0 +1,25 @@ +/* XPM */ +static const char *autoadvance[] = { +/* columns rows colors chars-per-pixel */ +"16 16 3 1", +". c #0080FF", +"# c #000000", +" c None", +/* pixels */ +" ## # # ### # ", +"# # # # # # #", +"# # # # # # #", +"#### # # # # #", +"# # ### # # ", +" ", +" ", +" ######## ", +" #....# ", +" #..# ", +" ## ", +" ######## ", +" #....# ", +" #..# ", +" ## ", +" " +}; diff --git a/src/xpm/currentpos.xpm b/src/xpm/currentpos.xpm new file mode 100644 index 0000000..c027e6c --- /dev/null +++ b/src/xpm/currentpos.xpm @@ -0,0 +1,22 @@ +/* XPM */ +static const char *currentpos[]={ +"16 16 3 1", +" c #0080FF", +"# c #000000", +". c None", +"................", +"................", +"................", +".#............#.", +".##..........##.", +".# #........# #.", +".# #..##..# #.", +".# ## ## #.", +".# # # #.", +".# ## ## #.", +".# #..##..# #.", +".# #........# #.", +".##..........##.", +".#............#.", +"................", +"................"}; diff --git a/src/xpm/down1arrow.xpm b/src/xpm/down1arrow.xpm new file mode 100644 index 0000000..162b692 --- /dev/null +++ b/src/xpm/down1arrow.xpm @@ -0,0 +1,25 @@ +/* XPM */ +static const char *down1arrow[] = { +/* columns rows colors chars-per-pixel */ +"16 16 3 1", +" c #0080ff", +"# c #000000", +". c None", +/* pixels */ +"................", +"................", +"................", +"................", +"................", +"..############..", +"...# #...", +"....# #....", +".....# #.....", +"......# #......", +".......##.......", +"................", +"................", +"................", +"................", +"................" +}; diff --git a/src/xpm/down2arrow.xpm b/src/xpm/down2arrow.xpm new file mode 100644 index 0000000..6f34208 --- /dev/null +++ b/src/xpm/down2arrow.xpm @@ -0,0 +1,25 @@ +/* XPM */ +static const char *down2arrow[] = { +/* columns rows colors chars-per-pixel */ +"16 16 3 1", +" c #0080ff", +"# c #000000", +". c None", +/* pixels */ +"................", +"................", +"..############..", +"...# #...", +"....# #....", +".....# #.....", +"......# #......", +".......##.......", +"..############..", +"...# #...", +"....# #....", +".....# #.....", +"......# #......", +".......##.......", +"................", +"................" +}; diff --git a/src/xpm/downend.xpm b/src/xpm/downend.xpm new file mode 100644 index 0000000..214bc8b --- /dev/null +++ b/src/xpm/downend.xpm @@ -0,0 +1,22 @@ +/* XPM */ +static const char *downend[]={ +"16 16 3 1", +" c #0080ff", +"# c #000000", +". c None", +"................", +"................", +"................", +"................", +"................", +"..############..", +"...# #...", +"....# #....", +".....# #.....", +"......# #......", +".......##.......", +"..############..", +"................", +"................", +"................", +"................"}; diff --git a/src/xpm/file.xpm b/src/xpm/file.xpm new file mode 100644 index 0000000..faf1472 --- /dev/null +++ b/src/xpm/file.xpm @@ -0,0 +1,24 @@ +/* XPM */ +static const char *file_pm[]={ +"16 16 5 1", +". c None", +"# c #000000", +"c c #c0c0c0", +"b c #dcdcdc", +"a c #ffffff", +"..#########.....", +"..#aaaaaabb#....", +"..#aaaaaacab#...", +"..#aaaaaacaab#..", +"..#aaaaaac####..", +"..#aaaaaaaccc#..", +"..#aaaaaaaaaa#..", +"..#aaaaaaaaaa#..", +"..#aaaaaaaaaa#..", +"..#aaaaaaaaaa#..", +"..#aaaaaaaaaa#..", +"..#aaaaaaaaaa#..", +"..#aaaaaaaaaa#..", +"..#aaaaaaaaaa#..", +"..#aaaaaaaaaa#..", +"..############.."}; diff --git a/src/xpm/filenew.xpm b/src/xpm/filenew.xpm new file mode 100644 index 0000000..2543c9b --- /dev/null +++ b/src/xpm/filenew.xpm @@ -0,0 +1,22 @@ +/* XPM */ +static const char * filenew[] = { +"10 14 5 1", +" c None", +". c #000000", +"+ c #FFFFFF", +"@ c #DCDCDC", +"# c #C0C0C0", +"....... ", +".++++@@. ", +".++++#+@. ", +".++++#++@.", +".++++#....", +".+++++###.", +".++++++++.", +".++++++++.", +".++++++++.", +".++++++++.", +".++++++++.", +".++++++++.", +".++++++++.", +".........."}; diff --git a/src/xpm/fileopen.xpm b/src/xpm/fileopen.xpm new file mode 100644 index 0000000..880417e --- /dev/null +++ b/src/xpm/fileopen.xpm @@ -0,0 +1,22 @@ +/* XPM */ +static const char *fileopen[] = { +" 16 13 5 1", +". c #040404", +"# c #808304", +"a c None", +"b c #f3f704", +"c c #f3f7f3", +"aaaaaaaaa...aaaa", +"aaaaaaaa.aaa.a.a", +"aaaaaaaaaaaaa..a", +"a...aaaaaaaa...a", +".bcb.......aaaaa", +".cbcbcbcbc.aaaaa", +".bcbcbcbcb.aaaaa", +".cbcb...........", +".bcb.#########.a", +".cb.#########.aa", +".b.#########.aaa", +"..#########.aaaa", +"...........aaaaa" +}; diff --git a/src/xpm/fileprint.xpm b/src/xpm/fileprint.xpm new file mode 100644 index 0000000..6ada912 --- /dev/null +++ b/src/xpm/fileprint.xpm @@ -0,0 +1,24 @@ +/* XPM */ +static const char *fileprint[] = { +" 16 14 6 1", +". c #000000", +"# c #848284", +"a c #c6c3c6", +"b c #ffff00", +"c c #ffffff", +"d c None", +"ddddd.........dd", +"dddd.cccccccc.dd", +"dddd.c.....c.ddd", +"ddd.cccccccc.ddd", +"ddd.c.....c....d", +"dd.cccccccc.a.a.", +"d..........a.a..", +".aaaaaaaaaa.a.a.", +".............aa.", +".aaaaaa###aa.a.d", +".aaaaaabbbaa...d", +".............a.d", +"d.aaaaaaaaa.a.dd", +"dd...........ddd" +}; diff --git a/src/xpm/filesave.xpm b/src/xpm/filesave.xpm new file mode 100644 index 0000000..ed3ea96 --- /dev/null +++ b/src/xpm/filesave.xpm @@ -0,0 +1,21 @@ +/* XPM */ +static const char *filesave[] = { +" 14 14 3 1", +". c #040404", +"# c #808304", +"a c #bfc2bf", +"..............", +".#.aaaaaaaa.a.", +".#.aaaaaaaa...", +".#.aaaaaaaa.#.", +".#.aaaaaaaa.#.", +".#.aaaaaaaa.#.", +".#.aaaaaaaa.#.", +".##........##.", +".############.", +".##.........#.", +".##......aa.#.", +".##......aa.#.", +".##......aa.#.", +"a............." +}; diff --git a/src/xpm/folder.xpm b/src/xpm/folder.xpm new file mode 100644 index 0000000..7b2edcd --- /dev/null +++ b/src/xpm/folder.xpm @@ -0,0 +1,24 @@ +/* XPM */ +static const char *folder_pm[]={ +"16 16 5 1", +". c None", +"# c #040404", +"c c #808304", +"a c #f3f704", +"b c #f3f7f3", +"................", +"................", +"................", +".###............", +"#aba#######.....", +"#babababab#.....", +"#ababababa#.....", +"#baba###########", +"#aba#ccccccccc#.", +"#ba#ccccccccc#..", +"#a#ccccccccc#...", +"##ccccccccc#....", +"###########.....", +"................", +"................", +"................"}; diff --git a/src/xpm/iconA.xpm b/src/xpm/iconA.xpm new file mode 100644 index 0000000..4e44f9f --- /dev/null +++ b/src/xpm/iconA.xpm @@ -0,0 +1,22 @@ +/* XPM */ +static const char *iconA[]={ +"16 16 3 1", +" c #0080FF", +"# c #000000", +". c None", +"................", +"................", +"......###.......", +".....# #......", +"....# # #.....", +"...# #.# #....", +"...# #...# #....", +"...# #...# #....", +"...# ##### #....", +"...# #....", +"...# ##### #....", +"...# #...# #....", +"...###...###....", +"................", +"................", +"................"}; diff --git a/src/xpm/iconB.xpm b/src/xpm/iconB.xpm new file mode 100644 index 0000000..9405ee8 --- /dev/null +++ b/src/xpm/iconB.xpm @@ -0,0 +1,22 @@ +/* XPM */ +static const char *iconB[]={ +"16 16 3 1", +" c #0080FF", +"# c #000000", +". c None", +"................", +"................", +"...#######......", +"...# #.....", +"...# #### #....", +"...# #...# #....", +"...# #### #....", +"...# #.....", +"...# #### #....", +"...# #...# #....", +"...# #### #....", +"...# #.....", +"...#######......", +"................", +"................", +"................"}; diff --git a/src/xpm/iconC.xpm b/src/xpm/iconC.xpm new file mode 100644 index 0000000..56b7315 --- /dev/null +++ b/src/xpm/iconC.xpm @@ -0,0 +1,22 @@ +/* XPM */ +static const char *iconC[]={ +"16 16 3 1", +" c #0080FF", +"# c #000000", +". c None", +"................", +"................", +"......####......", +".....# #.....", +"....# ### #....", +"...# #...##....", +"...# #..........", +"...# #..........", +"...# #..........", +"...# #..........", +"...# #...##....", +"....# ### #....", +".....# #.....", +"......####......", +"................", +"................"}; diff --git a/src/xpm/link_arrow.xpm b/src/xpm/link_arrow.xpm new file mode 100644 index 0000000..2ab91e8 --- /dev/null +++ b/src/xpm/link_arrow.xpm @@ -0,0 +1,24 @@ +/* XPM */ +static const char *link_arrow[]={ +"16 16 5 1", +". c None", +"b c #000000", +"# c #585858", +"c c #dcdcdc", +"a c #ffffff", +"................", +"................", +"................", +"................", +"................", +"................", +"................", +"................", +"########........", +"#aaaaaab........", +"#aabbbab........", +"#aac#bab........", +"#acbcbab........", +"#abcaaab........", +"#aaaaaab........", +"#bbbbbbb........"}; diff --git a/src/xpm/nextunsolved.xpm b/src/xpm/nextunsolved.xpm new file mode 100644 index 0000000..0775687 --- /dev/null +++ b/src/xpm/nextunsolved.xpm @@ -0,0 +1,23 @@ +/* XPM */ +static const char *nextunsolved[]={ +"16 16 4 1", +". c None", +" c #0080ff", +"# c #000000", +"a c #ff0000", +"..############..", +"...# #...", +"....# #....", +".....# #.....", +"......# #......", +"..############..", +"...# #...", +"....# #....", +".....# #.....", +"......# #......", +"..############..", +"...#aaaaaaaa#...", +"....#aaaaaa#....", +".....#aaaa#.....", +"......#aa#......", +".......##......."}; diff --git a/src/xpm/prevunsolved.xpm b/src/xpm/prevunsolved.xpm new file mode 100644 index 0000000..d8d175c --- /dev/null +++ b/src/xpm/prevunsolved.xpm @@ -0,0 +1,23 @@ +/* XPM */ +static const char *prevunsolved[]={ +"16 16 4 1", +" c #0080ff", +"# c #000000", +"a c #ff0000", +". c None", +".......##.......", +"......#aa#......", +".....#aaaa#.....", +"....#aaaaaa#....", +"...#aaaaaaaa#...", +"..############..", +"......# #......", +".....# #.....", +"....# #....", +"...# #...", +"..############..", +"......# #......", +".....# #.....", +"....# #....", +"...# #...", +"..############.."}; diff --git a/src/xpm/reload.xpm b/src/xpm/reload.xpm new file mode 100644 index 0000000..d54fec3 --- /dev/null +++ b/src/xpm/reload.xpm @@ -0,0 +1,74 @@ +/* XPM */ +static const char *reloadIcon[]={ +"16 16 55 1", +". c None", +"e c #25502a", +"# c #25512b", +"d c #25522b", +"g c #26552c", +"c c #27562e", +"n c #27582f", +"b c #28592e", +"M c #285930", +"a c #295a2f", +"q c #295a30", +"G c #295c31", +"t c #2a5e31", +"y c #2b6635", +"U c #2b6636", +"Q c #2f703a", +"H c #327b3d", +"0 c #36843f", +"W c #388943", +"u c #3f7046", +"r c #42764a", +"f c #44754b", +"A c #488653", +"N c #50995b", +"K c #529d5f", +"J c #529f60", +"m c #53885c", +"l c #55a161", +"B c #57a863", +"R c #5aaa66", +"I c #5aad69", +"v c #5baa67", +"X c #5cb16b", +"o c #5db469", +"k c #5eb56c", +"z c #5eb66b", +"s c #5fb26d", +"V c #64b171", +"Y c #64c274", +"j c #69c779", +"Z c #6dc97d", +"p c #729a77", +"O c #73c782", +"i c #7ace89", +"w c #7bce89", +"C c #7ecb8b", +"L c #80d191", +"h c #80d193", +"S c #8dd49b", +"P c #95d8a1", +"D c #a7ddb1", +"x c #bde3c2", +"T c #c0e5c5", +"E c #daf0de", +"F c #f9fdf9", +"................", +"..#abcde#df.....", +"..ghhhijklm.....", +"..nhoooooop.....", +"..qho....rso....", +"..tho...uvwxo...", +"..yhz..ABCDEFo..", +"gGHhIJJAAKLooo..", +"MNOPEFo..Qho....", +".eRSTo...Uho....", +"..eV.....Uho....", +"...W.....Qho....", +"....nXYZihho....", +"....0ooooooo....", +"................", +"................"}; diff --git a/src/xpm/showequalfiles.xpm b/src/xpm/showequalfiles.xpm new file mode 100644 index 0000000..9fa2e3b --- /dev/null +++ b/src/xpm/showequalfiles.xpm @@ -0,0 +1,23 @@ +/* XPM */ +static const char *showequalfiles[]={ +"16 16 4 1", +"# c None", +"a c None", +". c #000000", +"b c #00ff00", +"...........##aaa", +".bbbb.bbbb.##aaa", +".bbbb.bbbb.##aaa", +".bbbb.bbbb.##aaa", +".bbbb.bbbb.##aaa", +"...........##aaa", +"aaaaaaaaaaaaaaaa", +"................", +"aaaaaaaaaaaaaaaa", +"................", +".bbbb.bbbb.bbbb.", +".bbbb.bbbb.bbbb.", +".bbbb.bbbb.bbbb.", +".bbbb.bbbb.bbbb.", +"................", +"aaaaaaaaaaaaaaaa"}; diff --git a/src/xpm/showfilesonlyina.xpm b/src/xpm/showfilesonlyina.xpm new file mode 100644 index 0000000..041b54d --- /dev/null +++ b/src/xpm/showfilesonlyina.xpm @@ -0,0 +1,23 @@ +/* XPM */ +static const char *showfilesonlyina[]={ +"16 16 4 1", +"# c None", +"a c None", +". c #000000", +"b c #00ff00", +"...........##aaa", +".bbbb......##aaa", +".bbbb......##aaa", +".bbbb......##aaa", +".bbbb......##aaa", +"...........##aaa", +"aaaaaaaaaaaaaaaa", +"................", +"aaaaaaaaaaaaaaaa", +"................", +".bbbb...........", +".bbbb...........", +".bbbb...........", +".bbbb...........", +"................", +"aaaaaaaaaaaaaaaa"}; diff --git a/src/xpm/showfilesonlyinb.xpm b/src/xpm/showfilesonlyinb.xpm new file mode 100644 index 0000000..80caaca --- /dev/null +++ b/src/xpm/showfilesonlyinb.xpm @@ -0,0 +1,23 @@ +/* XPM */ +static const char *showfilesonlyinb[]={ +"16 16 4 1", +"# c None", +"a c None", +". c #000000", +"b c #00ff00", +"...........##aaa", +"......bbbb.##aaa", +"......bbbb.##aaa", +"......bbbb.##aaa", +"......bbbb.##aaa", +"...........##aaa", +"aaaaaaaaaaaaaaaa", +"................", +"aaaaaaaaaaaaaaaa", +"................", +"......bbbb......", +"......bbbb......", +"......bbbb......", +"......bbbb......", +"................", +"aaaaaaaaaaaaaaaa"}; diff --git a/src/xpm/showfilesonlyinc.xpm b/src/xpm/showfilesonlyinc.xpm new file mode 100644 index 0000000..5f548a4 --- /dev/null +++ b/src/xpm/showfilesonlyinc.xpm @@ -0,0 +1,22 @@ +/* XPM */ +static const char *showfilesonlyinc[]={ +"16 16 3 1", +". c None", +"# c #000000", +"a c #00ff00", +"................", +"................", +"................", +"................", +"................", +"################", +"###########aaaa#", +"###########aaaa#", +"###########aaaa#", +"###########aaaa#", +"################", +"................", +"................", +"................", +"................", +"................"}; diff --git a/src/xpm/showlinenumbers.xpm b/src/xpm/showlinenumbers.xpm new file mode 100644 index 0000000..fb697dc --- /dev/null +++ b/src/xpm/showlinenumbers.xpm @@ -0,0 +1,21 @@ +/* XPM */ +static const char *showlinenumbers[]={ +"16 16 2 1", +". c None", +"# c #000040", +"................", +"................", +"................", +"................", +"...#...##..###..", +"..##..#..#....#.", +"...#.....#....#.", +"...#....#...##..", +"...#...#......#.", +"...#..#.......#.", +"..###.####.###..", +"................", +"................", +"................", +"................", +"................"}; diff --git a/src/xpm/showwhitespace.xpm b/src/xpm/showwhitespace.xpm new file mode 100644 index 0000000..2112e91 --- /dev/null +++ b/src/xpm/showwhitespace.xpm @@ -0,0 +1,22 @@ +/* XPM */ +static const char *showwhitespace[]={ +"16 16 3 1", +". c None", +"# c #000000", +"a c #ffffff", +"................", +"................", +"..############..", +"..#aaaaaaaaaa#..", +"..#aaaaaaaaaa#..", +"..#aaaaaaaaaa#..", +"..#aaaaaaaaaa#..", +"..#aaaaaaaaaa#..", +"..#aaaaaaaaaa#..", +"..#aaaaaaaaaa#..", +"..#aaaaaaaaaa#..", +"..#aaaaaaaaaa#..", +"..#aaaaaaaaaa#..", +"..############..", +"................", +"................"}; diff --git a/src/xpm/showwhitespacechars.xpm b/src/xpm/showwhitespacechars.xpm new file mode 100644 index 0000000..0a637ae --- /dev/null +++ b/src/xpm/showwhitespacechars.xpm @@ -0,0 +1,21 @@ +/* XPM */ +static const char *showwhitespacechars[]={ +"16 16 2 1", +". c None", +"# c #000040", +"................", +"................", +"................", +"................", +"................", +"................", +"................", +"................", +"................", +"................", +".####.####.####.", +".####.####.####.", +"................", +"................", +"................", +"................"}; diff --git a/src/xpm/startmerge.xpm b/src/xpm/startmerge.xpm new file mode 100644 index 0000000..7162719 --- /dev/null +++ b/src/xpm/startmerge.xpm @@ -0,0 +1,25 @@ +/* XPM */ +static const char *startmerge[]={ +"16 16 6 1", +". c None", +"# c #000000", +"b c #0000ff", +"c c #00ffff", +"d c #ff0000", +"a c #ffff00", +".......##.......", +"......#aa#......", +"......#aa#......", +"...b.b.##.b.b...", +"...bb......bb...", +"...bbb....bbb...", +".##..........##.", +"#cc#........#cc#", +"#cc#........#cc#", +".##.b.b..b.b.##.", +".....bb..bb.....", +"....bbb..bbb....", +".......##.......", +"......#dd#......", +"......#dd#......", +".......##......."}; diff --git a/src/xpm/up1arrow.xpm b/src/xpm/up1arrow.xpm new file mode 100644 index 0000000..3e144ba --- /dev/null +++ b/src/xpm/up1arrow.xpm @@ -0,0 +1,22 @@ +/* XPM */ +static const char *up1arrow[]={ +"16 16 3 1", +". c None", +"# c #000000", +"a c #0080ff", +"................", +"................", +"................", +"................", +"................", +".......##.......", +"......#aa#......", +".....#aaaa#.....", +"....#aaaaaa#....", +"...#aaaaaaaa#...", +"..############..", +"................", +"................", +"................", +"................", +"................"}; diff --git a/src/xpm/up2arrow.xpm b/src/xpm/up2arrow.xpm new file mode 100644 index 0000000..ebe933b --- /dev/null +++ b/src/xpm/up2arrow.xpm @@ -0,0 +1,25 @@ +/* XPM */ +static const char *up2arrow[] = { +/* columns rows colors chars-per-pixel */ +"16 16 3 1", +" c #0080ff", +"# c #000000", +". c None", +/* pixels */ +"................", +"................", +".......##.......", +"......# #......", +".....# #.....", +"....# #....", +"...# #...", +"..############..", +".......##.......", +"......# #......", +".....# #.....", +"....# #....", +"...# #...", +"..############..", +"................", +"................" +}; diff --git a/src/xpm/upend.xpm b/src/xpm/upend.xpm new file mode 100644 index 0000000..167433d --- /dev/null +++ b/src/xpm/upend.xpm @@ -0,0 +1,22 @@ +/* XPM */ +static const char *upend[]={ +"16 16 3 1", +" c #0080ff", +"# c #000000", +". c None", +"................", +"................", +"................", +"................", +"..############..", +".......##.......", +"......# #......", +".....# #.....", +"....# #....", +"...# #...", +"..############..", +"................", +"................", +"................", +"................", +"................"}; diff --git a/stamp-h.in b/stamp-h.in new file mode 100644 index 0000000..e69de29 diff --git a/subdirs b/subdirs new file mode 100644 index 0000000..80436b4 --- /dev/null +++ b/subdirs @@ -0,0 +1,4 @@ +doc +kdiff3plugin +po +src diff --git a/templates/cpp b/templates/cpp new file mode 100644 index 0000000..f1b73fc --- /dev/null +++ b/templates/cpp @@ -0,0 +1,19 @@ +/*************************************************************************** + * Copyright (C) 2005 by Joachim Eibl * + * joachim.eibl@gmx.de * + * * + * 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., * + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * + ***************************************************************************/ diff --git a/templates/h b/templates/h new file mode 100644 index 0000000..30c25fb --- /dev/null +++ b/templates/h @@ -0,0 +1,24 @@ +/*************************************************************************** + * Copyright (C) 2005 by Joachim Eibl * + * joachim.eibl@gmx.de * + * * + * 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., * + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * + ***************************************************************************/ + +#ifndef +#define + +#endif \ No newline at end of file -- cgit v1.2.1
+
+ + + diff --git a/doc/en/common/top-left.png b/doc/en/common/top-left.png new file mode 100644 index 0000000..95f055d Binary files /dev/null and b/doc/en/common/top-left.png differ diff --git a/doc/en/common/top-middle.png b/doc/en/common/top-middle.png new file mode 100644 index 0000000..fbebf6a Binary files /dev/null and b/doc/en/common/top-middle.png differ diff --git a/doc/en/common/top-right-konqueror.png b/doc/en/common/top-right-konqueror.png new file mode 100644 index 0000000..ca1d974 Binary files /dev/null and b/doc/en/common/top-right-konqueror.png differ diff --git a/doc/en/compilation.html b/doc/en/compilation.html new file mode 100644 index 0000000..9974fea --- /dev/null +++ b/doc/en/compilation.html @@ -0,0 +1,11 @@ +Compilation and Installation
Compilation and Installation

Compilation and Installation

In order to compile and install KDiff3 on a system with KDE, type the +following in the base directory of the KDiff3 distribution:

% ./configure --prefix=kde-dir
+% make
+% make install
+

+kde-dir specifies the directory +containing KDE on your system. If you are not sure, read the README-file for details. +

If you don't use KDE don't use configure but follow the instructions for Qt-only systems in the README file.

Since KDiff3 uses autoconf and +automake you should have no trouble compiling it. Should you +run into problems please report them to the KDE mailing lists.



Would you like to make a comment or contribute an update to this page?
+ Send feedback to the KDE Docs Team

\ No newline at end of file diff --git a/doc/en/credits.html b/doc/en/credits.html new file mode 100644 index 0000000..ceb4d5b --- /dev/null +++ b/doc/en/credits.html @@ -0,0 +1,11 @@ +Chapter 6. Credits and License
Credits and License

Chapter 6. Credits and License

+KDiff3 - File and Directory Comparison and Merge Tool +

+Program copyright 2002-2007 Joachim Eibl +

+Several cool ideas and bugreports came from colleagues and many people out in the Wild Wild Web. Thank you! +

+Documentation Copyright (c) 2002-2007 Joachim Eibl +

This documentation is licensed under the terms of the GNU Free Documentation +License.

This program is licensed under the terms of the GNU General Public License.



Would you like to make a comment or contribute an update to this page?
+ Send feedback to the KDE Docs Team

\ No newline at end of file diff --git a/doc/en/dirbrowser.png b/doc/en/dirbrowser.png new file mode 100644 index 0000000..d3c63b2 Binary files /dev/null and b/doc/en/dirbrowser.png differ diff --git a/doc/en/dirmerge.html b/doc/en/dirmerge.html new file mode 100644 index 0000000..f83a481 --- /dev/null +++ b/doc/en/dirmerge.html @@ -0,0 +1,25 @@ +Chapter 3. Directory Comparison and Merge with KDiff3
Directory Comparison and Merge with KDiff3

Chapter 3. Directory Comparison and Merge with KDiff3

Introduction into Directory Comparison and Merge

+ Often programmers must modify many files in a directory to achieve their + purpose. For this KDiff3 also lets you compare and merge complete directories + recursively! +

+ Even though comparing and merging directories seems to be quite obvious, + there are several details that you should know about. Most important is of + course the fact that now many files might be affected by each operation. + If you don't have backups of your original data, then it can be very hard + or even impossible to return to the original state. So before starting a merge, + make sure that your data is safe, and going back is possible. If you make + an archive or use some version control system is your decision, but even + experienced programmers and integrators need the old sources now and then. + And note that even though I (the author of KDiff3) try to do my best, I can't + guarantee that there are no bugs. According to the GNU-GPL there is NO WARRANTY + whatsoever for this program. So be humble and always keep in mind: +

+ To err is human, but to really mess things up you need a computer. +

+So this is what this program can do for you: KDiff3 ... +

  • ... reads and compares two or three directories recursively,

  • ... takes special care of symbolic links,

  • ... lets you browse files on mouse double click,

  • ... for each item proposes a merge operation, which you can change + before starting the directory merge,

  • ... lets you simulate the merge and lists the actions that would + take place, without actually doing them,

  • ... lets you really do the merge, and lets you interact whenever + manual interaction is needed,

  • ... lets you run the selected operation for all items (key F7) or the selected item (key F6),

  • ... lets you continue the merge after manual interaction with key F7,

  • ... optionally creates backups, with the ".orig" extension,

  • ...



Would you like to make a comment or contribute an update to this page?
+ Send feedback to the KDE Docs Team

\ No newline at end of file diff --git a/doc/en/dirmergebig.png b/doc/en/dirmergebig.png new file mode 100644 index 0000000..b26b65c Binary files /dev/null and b/doc/en/dirmergebig.png differ diff --git a/doc/en/dirmergeoptions.html b/doc/en/dirmergeoptions.html new file mode 100644 index 0000000..9d126b3 --- /dev/null +++ b/doc/en/dirmergeoptions.html @@ -0,0 +1,58 @@ +Options for Comparing and Merging Directories
Options for Comparing and Merging Directories

Options for Comparing and Merging Directories

+ The KDiff3-preferences (menu "Settings"->"Configure KDiff3") has + a section called "Directory Merge" with these options: +

Recursive Directories:

Select whether to search directories + recursively.

File Pattern(s):

Only files that match any pattern here will + be put in the tree. More than one pattern may be specified here by using + the semicolon ";" as separator. Valid wildcards: '*' and '?'. (e.g. "*.cpp;*.h"). + Default is "*". This pattern is not used on directories.

File Anti-Pattern(s):

Files that match this pattern + will be excluded from the tree. More than one pattern may be specified here + via using the semicolon ";" as separator. Valid wildcards: '*' and '?'. Default + is "*.orig;*.o;*.obj".

Directory Anti-Pattern(s):

Directories that match this pattern + will be excluded from the tree. More than one pattern may be specified here + via using the semicolon ";" as separator. Valid wildcards: '*' and '?'. Default + is "CVS;deps;.svn".

Use CVS-Ignore:

+ Ignore files and directories that would also be ignored by CVS. + Many automatically generated files are ignored by CVS. + The big advantage is that this can be directory specific via a local ".cvsignore"-file. + (See info:/cvs/cvsignore.)

Find Hidden Files and Directories:

On some file systems files + have an "Hidden"-attribute. On other systems a filename starting with a dot + "." causes it to be hidden. This option allows you to decide whether to + include these files in the tree or not. Default is on.

Follow File Links:

For links to files: When disabled, then + the symbolic links are compared. When enabled, then the files behind the + links are compared. Default is off.

Follow Directory Links:

For links to directories: When disabled, + then the symbolic links will be compared. When enabled then the link will + be treated like a directory and it will be scanned recursively. (Note that + the program doesn't check if the link is "recursive". So for example a directory + that contains a link to the directory would cause an infinite loop, and after + some time when the stack overflows or all memory is used up, crash the program.) + Default is off.

Case Sensitive Filename Comparison:

+ Default is false on Windows, true for other operating systems.

File Comparison Mode:

+

Binary Comparison:

+ This is the default file comparison mode. +

Full Analysis:

+ Do a full analysis of each file and show the statistics information columns. + (Number of solved, unsolved, nonwhite and white conflicts.) + The full analysis is slower than a simple binary analysis, and much + slower when used on files that don't contain text. + (Specify the appropriate file-antipatterns.) +

Trust the modification date:

If you compare big directories + over a slow network, it might be faster to compare the modification dates + and file length alone. But this speed improvement comes with the price of + a little uncertainty. Use this option with care. Default is off.

Trust the size:

+ Similar to trusting the modification date. No real comparison happens. Two + files are considered equal if their file-sizes are equal. This is useful + when the file-copy operation didn't preserve the modification date. + Use this option with care. Default is off.

Synchronize Directories:

Activates "Sync-Mode" when two directories + are compared and no explicit destination directory was specified. In this + mode the proposed operations will be chosen so that both source directories + are equal afterwards. Also the merge result will be written to both directories. + Default is off.

Copy newer instead of merging:

Instead of merging the proposed + operation will copy the newer source if changes happened. (Considered unsafe, + because it implies that you know, that the other file hasn't been edited + too. Check to make sure in every case.) Default is off.

Backup files:

If a file or complete directory is replaced + by another or is deleted then the original version will be renamed with an + ".orig" extension. If an old backup file with ".orig" extension already exists + then this will be deleted without backup. This also affects the normal merging + of single files, not only in directory-merge mode. Default is on.



Would you like to make a comment or contribute an update to this page?
+ Send feedback to the KDE Docs Team

\ No newline at end of file diff --git a/doc/en/dirmergevisible.html b/doc/en/dirmergevisible.html new file mode 100644 index 0000000..fd20589 --- /dev/null +++ b/doc/en/dirmergevisible.html @@ -0,0 +1,105 @@ +Directory Merge Visible Information
Directory Merge Visible Information

Directory Merge Visible Information

+ While reading the directories a message-box appears that informs you of + the progress. If you abort the directory scan, then only files that have + been compared until then will be listed. +

+ When the directory scan is complete then KDiff3 will show a listbox with + the results left, ... +



+ ... and details about the currently selected item on the right: +



The Name Column

+ Each file and directory that was found during the scan is shown here in + a tree. You can select an item by clicking it with the mouse once. +

+ The directories are collapsed by default. You can expand and collapse + them by clicking on the "+"/"-" or by double-clicking the item or + by using the left/right-arrow-keys. The "Directory"-menu also contains two + actions "Fold all subdirs" and "Unfold all subdirs" with which you can + collapse or expand all directories at once. +

+ If you double-click a file item then the file comparison starts and the + file-diff-window will appear. +

+ The image in the name column reflects the file type in the first + directory ("A"). It can be one of these: +

  • Normal file

  • Normal directory (directory-image)

  • Link to a file (file-image with a link arrow)

  • Link to a directory (directory-image with a link arrow)

+ If the file type is different in the other directories, then this is visible + in the columns A/B/C and in the window that shows the details about the selected + item. Note that for such a case no merge operation can be selected automatically. + When starting the merge, then the user will be informed of problems of that + kind. +

The Columns A/B/C and the Coloring Scheme

+ As can be seen in the image above the colors red, green, yellow and black + are used in the columns A/B/C. +

  • Black: This item doesn't exist in this directory.

  • Green: Newest item.

  • Yellow: Older than green, newer than red.

  • Red: Oldest item.

+ But for items that were identical in the comparison their color also is + identical even if the age is not. +

+ Directories are considered equal if all items they contain are identical. + Then they also will have the same color. But the age of a directory is not + considered for its color. +

+ The idea for this coloring scheme I came upon in + dirdiff. The colors + resemble the colors of a leaf that is green when new, turns yellow later and red + when old. +

The Operation Column

+ After comparing the directories KDiff3 also evaluates a proposal for a + merge operation. This is shown in the "Operation" column. You can modify + the operation by clicking on the operation you want to change. A small menu + will popup and allows you to select an operation for that item. (You can also + select the most needed operations via keyboard. + Ctrl+1/2/3/4/Del will select A/B/C/Merge/Delete respectively if available.) + This operation will be executed during the merge. It depends on the item and + on the merge-mode you are in, what operations are available. The merge-mode is one of +

  • Three directory-merge ("A" is treated as older base of both).

  • Two directory-merge.

  • Two directory-sync-mode (activate via option "Synchronize Directories").

+ In three directory merge the operation proposal will be: If for an item ... +

  • ... all three directories are equal: Copy from C

  • ... A and C are equal but B is not: Copy from B (or if B does not + exist, delete the destination if exists)

  • ... A and B are equal but C is not: Copy from C (or if C does not + exist, delete the destination if exists)

  • ... B and C are equal but A is not: Copy from C (or if C does not + exist, delete the destination if exists)

  • ... only A exists: Delete the destination (if exists)

  • ... only B exists: Copy from B

  • ... only C exists: Copy from C

  • ... A, B and C are not equal: Merge

  • ... A, B and C don't have the same file type (e.g. A is a directory, + B is a file): "Error: Conflicting File Types". While such items exist the + directory merge cannot start.

+ In two directory merge the operation proposal will be: If for an item ... +

  • ... both directories are equal: Copy from B

  • ... A exists, but not B: Copy from A

  • ... B exists, but not A: Copy from B

  • ... A and B exist but are not equal: Merge

  • ... A and B don't have the same file type (e.g. A is a directory, + B is a file): "Error: Conflicting File Types". While such items exist the + directory merge cannot start.

+ Sync-mode is active if only two directories and no explicit destination + were specified and if the option "Synchronize directories" is active. KDiff3 + then selects a default operation so that both directories are the same afterwards. + If for an item ... +

  • ... both directories are equal: Nothing will be done.

  • ... A exists, but not B: Copy A to B

  • ... B exists, but not A: Copy B to A

  • ... A and B exist, but are not equal: Merge and store the result + in both directories. (For the user the visible save-filename is B, + but then KDiff3 copies B also to A.)

  • ... A and B don't have the same file type (e.g. A is a directory, + B is a file): "Error: Conflicting File Types". While such items exist the + directory merge cannot start.

+ When two directories are merged and the option "Copy newer instead of merging" is selected, + then KDiff3 looks at the dates and proposes to choose the newer file. If the files are not + equal but have equal dates, then the operation will contain + "Error: Dates are equal but files are not." While such items exist the + directory merge cannot start. +

The Status Column

+ During the merge one file after the other will be processed. The status + column will show "Done" for items where the merge operation has succeeded, + and other texts if something unexpected happened. When a merge is complete, + then you should make a last check to see if the status for all items is + agreeable. +

Statistics Columns

+ When the file comparison mode "Full Analysis" is enabled in the options, then + KDiff3 will show extra columns containing the numbers of unsolved, solved, nonwhite and whitespace + conflicts. (The solved-column will only show when comparing or merging three directories.) +

Selecting Listed Files

+ Several options influence which files are listed here. Some are accessible in the + settings dialog. The Directory-menu contains the entries: +

  • "Show Identical Files": Files that have been detected equal in all input directories.

  • "Show Different Files": Files that exist in two or more directories but are not equal.

  • "Show Files only in A": Files that exist only in A, but not in B or C.

  • "Show Files only in B": Files that exist only in B, but not in A or B.

  • "Show Files only in C": Files that exist only in C, but not in A or B.

+ Activate only the "Show"-options for the items you want listed. If for example you only want to list all items that + exist either in A or in B but not in both, you'll have to activate "Show Files only in A" and "Show Files only in B" + and deactivate all others ("Show Identical Files", "Show Different Files", "Show Files only in C"). + The list will be updated immediately to reflect the change. +

+ These options also apply for directories with one exception: Disabling "Show Different Files" will not hide + any complete directories. This will work only for files within. +

+ Note that of these only the "Show Identical Files"-option is persistant. The others are enabled when starting KDiff3. +



Would you like to make a comment or contribute an update to this page?
+ Send feedback to the KDE Docs Team

\ No newline at end of file diff --git a/doc/en/documentation.html b/doc/en/documentation.html new file mode 100644 index 0000000..9a0ebd6 --- /dev/null +++ b/doc/en/documentation.html @@ -0,0 +1,54 @@ +Chapter 2. File Comparison And Merge
File Comparison And Merge

Chapter 2. File Comparison And Merge

Command-Line Options

Comparing 2 files:

+   kdiff3 file1 file2
+

Merging 2 files:

+   kdiff3 file1 file2 -m
+   kdiff3 file1 file2 -o outputfile
+

Comparing 3 files:

+   kdiff3 file1 file2 file3
+

Merging 3 files:

+   kdiff3 file1 file2 file3 -m
+   kdiff3 file1 file2 file3 -o outputfile
+

+ Note that file1 will be treated as + base of file2 and + file3. +

Special case: Files with the same name

+If all files have the same name but are in different directories, you can +reduce typework by specifying the filename only for the first file. E.g.: +

+   kdiff3 dir1/filename dir2 dir3
+

Commandline for starting a directory comparison or merge:

This is very similar, but now it's about directories.

+   kdiff3 dir1 dir2
+   kdiff3 dir1 dir2 -o destdir
+   kdiff3 dir1 dir2 dir3
+   kdiff3 dir1 dir2 dir3 -o destdir
+

For directory comparison and merge you can continue to read here.

Other command line options

To see all available command line options type

+kdiff3 --help
+

Example output:

+Options:
+  -m, --merge               Merge the input.
+  -b, --base file           Explicit base file. For compatibility with certain tools.
+  -o, --output file         Output file. Implies -m. E.g.: -o newfile.txt
+  --out file                Output file, again. (For compatibility with certain tools.)
+  --auto                    No GUI if all conflicts are auto-solvable. (Needs -o file)
+  --qall                    Don't solve conflicts automatically. (For compatibility...)
+  --L1 alias1               Visible name replacement for input file 1 (base).
+  --L2 alias2               Visible name replacement for input file 2.
+  --L3 alias3               Visible name replacement for input file 3.
+  -L, --fname alias         Alternative visible name replacement. Supply this once for every input.
+  --cs string               Override a config setting. Use once for every setting. E.g.: --cs "AutoAdvance=1"
+  --confighelp              Show list of config settings and current values.
+  --config file             Use a different config file.
+

The option --cs allows you to adjust a configuration value that is otherwise only adjustable via the configure dialogs. +But be aware that when KDiff3 then terminates the changed value will be stored along with the other settings. +With --confighelp you can find out the names of the available items and current values.

Via --config you can specify a different config file. When you often use KDiff3 +with completely different setups this allows you to easily switch between them.

Ignorable command line options

Many people want to use KDiff3 with some version control system. +But when that version control system calls KDiff3 using command line parameters that KDiff3 doesn't recognise, then KDiff3 terminates with an error. +The integration settings allow to specify command line parameters that should be ignored by KDiff3. +They will appear in the usage help like in this example:

+  --foo                     Ignored. (User defined.)
+
Command line options to ignore:

+ A list of options, separated via semicolon ';'. When one of these options appears on the commandline, + then KDiff3 will ignore it and run without reporting an error. + (Default is "u;query;html;abort").

When this isn't enough, then it is recommended to write a shell script that does the option translation.



Would you like to make a comment or contribute an update to this page?
+ Send feedback to the KDE Docs Team

\ No newline at end of file diff --git a/doc/en/dothemerge.html b/doc/en/dothemerge.html new file mode 100644 index 0000000..1bf4d11 --- /dev/null +++ b/doc/en/dothemerge.html @@ -0,0 +1,65 @@ +Doing A Directory Merge
Doing A Directory Merge

Doing A Directory Merge

+ You can either merge the currently selected item (file or directory), or all items. + When you have made all your operation choices (in all subdirectories too) + then you can start the merge. +

+ Be aware that if you didn't specify a destination directory explicitely, + then the destination will be "C" in three directory mode, "B" in two directory + merge mode, and in sync-mode it will be "A" or/and "B". +

+ If you have specified a destination directory also check that all items + that should be in the output, are in the tree. There are some options that + cause certain items to be omitted from the directory comparison and merge. + Check these options to avoid unpleasant surprises: +

  • "Recursive Directories": If this is off, then items in subdirectories + will not be found.

  • "Pattern"/"Anti-Pattern": Include/exclude items that match

  • "Exclude Hidden Files"

  • "Show"-options (Show Identical/Different Files, Files only in A/B/C)

+ If you change the settings in order to list more files, you must do a rescan via menu "Directory"->"Rescan" yourself. + (The reason for this is that for faster comparison-speed KDiff3 omits the comparison for files suppressed by these criteria.) + If you changed your file and dir patterns to exclude files, then the file-list will immediately be updated on closing + the options-dialog. +

+ Note that when you write to a completely new directory then you usually also want to copy the identical files. + In that case enable the "Show Identical Files"-option. If your destination-directory is one of the inputs, + then this isn't necessary because the file is already there. +

+ If you are satisfied so far, the rest is easy. +

+ To merge all items: Select "Start/Continue directory merge" in the "Directory"-menu + or press F7 (which is the default shortcut). + To merge only the current item: Select "Run Operation For Current Item" + or press F6. +

+ If due to conflicting filetypes still some items with invalid operations + exist, then a messagebox will appear and these items will be pointed out, + so you can select a valid operation for the item. +

+ If you merge all items a dialog will appear giving you the options "Do it", "Simulate + it" and "Cancel". +

  • Select "Simulate it" if you want to see what would be done without + actually doing it. A verbose list of all operations will be shown.

  • Otherwise select "Do it" to really start merging.

+ Then KDiff3 will run the specified operation for all items. If manual + interaction is required (single file merge), then a merge window will open + (see the big screenshot). +

+ When you have finished with manually merging a file, again select "Start/Continue directory + merge" or the key F7. If you haven't saved it yet, a dialog will ask you to + do so. Then KDiff3 will continue with the next item. +

+ When KDiff3 encounters an error, it will tell you so and will show the + verbose-status-information. At the bottom of this list, there will be some + error messages which should help you to understand the cause of the problem. + When you continue merging (F7 key) KDiff3 will give you the choice to retry + or skip the item that caused the problem. This means that before continuing + you can choose another operation or solve the problem by other means. +

+ When the merge is complete, then KDiff3 will inform you via a message + box. +

+ If some items were merged individually before running the directorymerge then + KDiff3 remembers this (while this + merge-session goes on), and doesn't merge them again when later the merge for + all items is run. Even when the merge was skipped or nothing was saved these + items count as completed. Only when you change the merge operation the + "Done"-status of the item will be removed and it can be merged again. +



Would you like to make a comment or contribute an update to this page?
+ Send feedback to the KDE Docs Team

\ No newline at end of file diff --git a/doc/en/faq.html b/doc/en/faq.html new file mode 100644 index 0000000..530e30e --- /dev/null +++ b/doc/en/faq.html @@ -0,0 +1,132 @@ +Chapter 5. Questions and Answers
Questions and Answers

Chapter 5. Questions and Answers

This document may have been updated since your installation. +You can find the latest version at http://docs.kde.org/development/en/extragear-utils/.

5.1. + Why is it called "KDiff3"? +
5.2. + Why did I release it under GPL? +
5.3. + Some buttons and functions are missing. What's wrong? +
5.4. + Often lines that are similar but not identical appear next to each other + but sometimes not. Why? +
5.5. + Why must all conflicts be solved before the merge result can be saved? +
5.6. + How can I synchronise the diff and merge views, so that all views show the same text position? +
5.7. + Why does the editor in the merge result window not have an "undo"-function? +
5.8. + When I removed some text, then suddenly "<No src line>" appeared + and cannot be deleted. What does that mean and how can one remove this? +
5.9. + Why doesn't KDiff3 support syntax-highlighting? +
5.10. + Can I use KDiff3 to compare OpenOffice.Org, Word, Excel, PDF-, etc. files? +
5.11. + Where has the the directory option "List only deltas" gone? +
5.12. + How can I make a big selection in the diff input window + because scrolling takes so long? +
5.13. + There is so much information here, but your question is still not answered? +
5.1.

+ Why is it called "KDiff3"? +

+ Tools named "KDiff" and "KDiff2" (now called "Kompare") already exist. Also "KDiff3" should suggest + that it can merge like the "diff3"-tool in the Diff-Tool collection. +

5.2.

+ Why did I release it under GPL? +

+ I'm using GPL programs for a very long time now and learned very much + by having a look at many of the sources. Hence this is my "Thank You" + to all programmers that also did so or will do the same. +

5.3.

+ Some buttons and functions are missing. What's wrong? +

+ You compiled from source but you probably didn't specify the correct KDE-prefix + with configure. By default configure wants to install in /usr/local but then KDE can't + find the user-interface ressource file (i.e. kdiff3ui.rc). The README-file contains + more information about the correct prefix. +

5.4.

+ Often lines that are similar but not identical appear next to each other + but sometimes not. Why? +

+ Lines where only the amount of white space characters is different + are treated as "equal" at first, while just one different non-white character + causes the lines to be "different". If similar lines appear next to each + other, this actually is coincidence but this fortunately is often the case. + See also Manual Diff Help. +

5.5.

+ Why must all conflicts be solved before the merge result can be saved? +

+ For each equal or different section the editor in the merge result + window remembers where it begins or ends. This is needed so that conflicts + can be solved manually by simply selecting the source button (A, B or C). + This information is lost while saving as text and it is too much effort to + create a special file format that supports saving and restoring all necessary + information. +

5.6.

+ How can I synchronise the diff and merge views, so that all views show the same text position? +

+ Click into the summary column left of the text. (See also here.) +

5.7.

+ Why does the editor in the merge result window not have an "undo"-function? +

+ This was too much effort until now. You can always + restore a version from one source (A, B or C) by clicking the respective + button. For big editing the use of another editor is recommended anyway. +

5.8.

+ When I removed some text, then suddenly "<No src line>" appeared + and cannot be deleted. What does that mean and how can one remove this? +

+ For each equal or different section the editor in the merge result + window remembers where it begins or ends. "<No src line>" means + that there is nothing left in a section, not even a new line character. + This can happen either while merging automatically or by editing. This is + no problem, since this hint won't appear in the saved file. If you want + the orignal source back just select the section (click on the left summary + column) and then click the source button with the needed contents (A/B or + C). +

5.9.

+ Why doesn't KDiff3 support syntax-highlighting? +

+ KDiff3 already uses many colors for difference highlighting. More + highlighting would be confusing. Use another editor for this. +

5.10.

+ Can I use KDiff3 to compare OpenOffice.Org, Word, Excel, PDF-, etc. files? +

+ Although KDiff3 will analyse any kind of file the result will probably + not be very satisfactory for you. +

+ KDiff3 was made to compare pure text files. OpenOffice, Word, Excel etc. + store much more information in the files (about fonts, pictures, pages, + colors etc.) which KDiff3 doesn't know about. So KDiff3 will + show you the contents of the file interpreted as pure text, but + this might be unreadable or at least it will look very odd. +

+ Since most programs nowadays store their contents in XML-format, you might + be able to read it as pure text. So if the change was only small, + KDiff3 still might help you. +

+ The best solution if you only want to compare the text (without embedded + objects like pictures) is to use "Select All" and "Copy" in your program + to copy the interesting text to the clipoard and then in KDiff3 paste the + text into either diff input window. + (See also Select, Copy And Paste.) +

5.11.

+ Where has the the directory option "List only deltas" gone? +

+ There are now several "Show"-options in the directory menu. + Disabling "Show identical files" will achieve what enabling "List only deltas" used to do. +

5.12.

+ How can I make a big selection in the diff input window + because scrolling takes so long? +

+ Start the selection as usual (click and hold the left mouse button). + Then use the navigation keys (e.g. page up, page down) while holding the left mouse button down. + (See also Select, Copy And Paste.) +

5.13.

+ There is so much information here, but your question is still not answered? +

+ Please send me your question. I appreciate every comment. +



Would you like to make a comment or contribute an update to this page?
+ Send feedback to the KDE Docs Team

\ No newline at end of file diff --git a/doc/en/features.html b/doc/en/features.html new file mode 100644 index 0000000..e5ac9ed --- /dev/null +++ b/doc/en/features.html @@ -0,0 +1,22 @@ +More Features
More Features

More Features

Line-By-Line And Char-By-Char Diff-Viewer

By using the possiblities of a graphical color display KDiff3 shows + exactly what the difference is. When you have to do many code-reviews, you will like this. +



See White-Space Differences At One Glance

Spaces and tabs that differ appear visibly. When lines differ only + in the amount of white space this can be seen at one look in the summary + column on the left side. (No more worries when people change the indentation.) +



Triple-Diff

Analyze three files and see where they differ. +

+ The left/middle/right windows are named A/B/C and have the blue/green/magenta + color respectively. +

+ If one file is the same and one file is different on a line then the + color shows which file is different. The red color means that both other + files are different. +



Comfortable Merge Of Two Or Three Input Files

KDiff3 can be used to merge two or three input files and automatically + merges as much as possible. The result is presented in an editable window + where most conflicts can be solved with a single mouseclick: Select the + buttons A/B/C from the button-bar to select the source that should be used. + You can also select more than one source. Since this output window is an + editor even conflicts which need further corrections can be solved here without + requiring another tool. +

And ...

  • Fast navigation via buttons.

  • A mouse-click into a summary column sync's all windows to show the same position.

  • Select and copy from any window and paste into the merge result window.

  • Overview column that shows where the changes and conflicts are.

  • The colors are adjustable to your specific preferences.

  • Adjustable Tab size.

  • Option to insert spaces instead of tabs.

  • Open files comfortably via dialog or specify files on the command line.

  • Search for strings in all text windows. Find (Ctrl-F) and Find Next (F3)

  • Show the line numbers for each line.

  • Paste clipboard or drag text into a diff input window.

  • Networktransparency via KIO.

  • Can be used as diff-viewer in KDevelop 3.

  • Word-wrap for long lines.

  • Support for Unicode, UTF-8 and other codecs.

  • Support for right to left languages.

  • ...



Would you like to make a comment or contribute an update to this page?
+ Send feedback to the KDE Docs Team

\ No newline at end of file diff --git a/doc/en/find.html b/doc/en/find.html new file mode 100644 index 0000000..ead358b --- /dev/null +++ b/doc/en/find.html @@ -0,0 +1,10 @@ +Finding Strings
Finding Strings

Finding Strings

+ You can search for a string in any text-window of KDiff3. The "Find ..."-command + (Ctrl-F) in the Edit-menu opens a dialog that lets you specify the string + to search for. You can also select the windows which should be searched. + Searching will always start at the top. Use the "Find Next"-command (F3) + to proceed to the next occurrence. If you select to search several windows then the first + window will be searched from top to bottom before the search starts in the next + window at the top again, etc. +



Would you like to make a comment or contribute an update to this page?
+ Send feedback to the KDE Docs Team

\ No newline at end of file diff --git a/doc/en/index.docbook b/doc/en/index.docbook new file mode 100644 index 0000000..50425ed --- /dev/null +++ b/doc/en/index.docbook @@ -0,0 +1,2135 @@ + +KDiff3"> + + + + +]> + + + + + + +The &kdiff3; Handbook + + + + +Joachim +Eibl + +
+ joachim.eibl at gmx.de +
+
+ +
+ + +2002-2007 +Joachim Eibl + + + +&FDLNotice; + + + +2007-31-03 +0.9.92 + + + + + &kdiff3; is a file and directory diff and merge tool which + +compares and merges two or three text input files or directories, +shows the differences line by line and character by character(!), +provides an automatic merge-facility, +has an editor for comfortable solving of merge-conflicts, +provides networktransparency via KIO, +has options to highlight or hide changes in white-space or comments, +supports Unicode, UTF-8 and other file encodings, +prints differences, +supports version control keyword and history merging. + + + This document describes &kdiff3;-version 0.9.92. + + + + + + +KDE +kdeextragear +kdiff3 +diff +merge +CVS +triplediff +compare +files +directories +version control +three-way-merge +in-line-differences +synchronise +kpart +kio +networktransparent +editor +white space +comments + + +
+ +Introduction +Yet Another Diff Frontend? + +Several graphical diff tools exist. Why choose &kdiff3;? Let me say, why I wrote it. + +&kdiff3; started because I had to do a difficult merge. Merging is necessary when several +people work on the same files in a project. A merge can be somewhat automated, when the +merge-tool not only has the new modified files (called "branches"), but also the original file +(called "base"). The merge tool will automatically choose any modification that was only +done in one branch. When several contributors change the same lines, then the merge tool +detects a conflict which must be solved manually. + +The merge then was difficult because one contributor had changed many things and corrected +the indentation in many places. Another contributor also had changed much text in the same file, +which resulted in several merge conflicts. + +The tool I used then, only showed the changed lines, but not what had changed within these +lines. And there was no information about where only the indentation was changed. The merge +was a little nightmare. + +So this was the start. The first version could show differences within a line and showed white space differences. +Later many other features were added to increase the usefulness. + +For example if you want to compare some text quickly, then you can copy it to the clipboard and +paste it into either diff window. + +A feature that required a big effort was the directory comparison and merge facility, which turned +the program almost into a full file browser. + +I hope &kdiff3; works for you too. Have fun! + +Joachim Eibl (2003) + + + +Screenshots and Features +This screenshot shows the difference between two text files +(Using an early version of &kdiff3;): + + + + + + 3-way-merging is fully supported. This is useful if two people change code independently. + The original file (the base) is used to help &kdiff3; to automatically select the correct + changes. + The merge-editor below the diff-windows allows you to solve conflicts, while showing you the output you will get. + You can even edit the output. + This screenshot shows three input files being merged: + + + + + + +&kdiff3; also helps you to compare and merge complete directories. +This screenshot shows &kdiff3; during a directory merge: + + + + + + + +More Features + Line-By-Line And Char-By-Char Diff-Viewer +By using the possiblities of a graphical color display &kdiff3; shows + exactly what the difference is. When you have to do many code-reviews, you will like this. + + + + + + + See White-Space Differences At One Glance +Spaces and tabs that differ appear visibly. When lines differ only + in the amount of white space this can be seen at one look in the summary + column on the left side. (No more worries when people change the indentation.) + + + + + + + Triple-Diff + Analyze three files and see where they differ. + + The left/middle/right windows are named A/B/C and have the blue/green/magenta + color respectively. + + If one file is the same and one file is different on a line then the + color shows which file is different. The red color means that both other + files are different. + + + + + + + Comfortable Merge Of Two Or Three Input Files + &kdiff3; can be used to merge two or three input files and automatically + merges as much as possible. The result is presented in an editable window + where most conflicts can be solved with a single mouseclick: Select the + buttons A/B/C from the button-bar to select the source that should be used. + You can also select more than one source. Since this output window is an + editor even conflicts which need further corrections can be solved here without + requiring another tool. + + + +And ... + + Fast navigation via buttons. + A mouse-click into a summary column sync's all windows to show the same position. + Select and copy from any window and paste into the merge result window. + Overview column that shows where the changes and conflicts are. + The colors are adjustable to your specific preferences. + Adjustable Tab size. + Option to insert spaces instead of tabs. + Open files comfortably via dialog or specify files on the command line. + Search for strings in all text windows. Find (Ctrl-F) and Find Next (F3) + Show the line numbers for each line. + Paste clipboard or drag text into a diff input window. + Networktransparency via KIO. + Can be used as diff-viewer in KDevelop 3. + Word-wrap for long lines. + Support for Unicode, UTF-8 and other codecs. + Support for right to left languages. + ... + + + + + +File Comparison And Merge + +Command-Line Options + +Comparing 2 files: + + kdiff3 file1 file2 + + + +Merging 2 files: + + kdiff3 file1 file2 -m + kdiff3 file1 file2 -o outputfile + + + +Comparing 3 files: + + kdiff3 file1 file2 file3 + + + +Merging 3 files: + + kdiff3 file1 file2 file3 -m + kdiff3 file1 file2 file3 -o outputfile + + + Note that file1 will be treated as + base of file2 and + file3. + + + +Special case: Files with the same name + +If all files have the same name but are in different directories, you can +reduce typework by specifying the filename only for the first file. E.g.: + + + kdiff3 dir1/filename dir2 dir3 + + + +Commandline for starting a directory comparison or merge: +This is very similar, but now it's about directories. + + kdiff3 dir1 dir2 + kdiff3 dir1 dir2 -o destdir + kdiff3 dir1 dir2 dir3 + kdiff3 dir1 dir2 dir3 -o destdir + +For directory comparison and merge you can continue to read here. + + +Other command line options +To see all available command line options type + +kdiff3 --help + +Example output: + +Options: + -m, --merge Merge the input. + -b, --base file Explicit base file. For compatibility with certain tools. + -o, --output file Output file. Implies -m. E.g.: -o newfile.txt + --out file Output file, again. (For compatibility with certain tools.) + --auto No GUI if all conflicts are auto-solvable. (Needs -o file) + --qall Don't solve conflicts automatically. (For compatibility...) + --L1 alias1 Visible name replacement for input file 1 (base). + --L2 alias2 Visible name replacement for input file 2. + --L3 alias3 Visible name replacement for input file 3. + -L, --fname alias Alternative visible name replacement. Supply this once for every input. + --cs string Override a config setting. Use once for every setting. E.g.: --cs "AutoAdvance=1" + --confighelp Show list of config settings and current values. + --config file Use a different config file. + +The option allows you to adjust a configuration value that is otherwise only adjustable via the configure dialogs. +But be aware that when &kdiff3; then terminates the changed value will be stored along with the other settings. +With you can find out the names of the available items and current values. +Via you can specify a different config file. When you often use &kdiff3; +with completely different setups this allows you to easily switch between them. + +Ignorable command line options +Many people want to use &kdiff3; with some version control system. +But when that version control system calls &kdiff3; using command line parameters that &kdiff3; doesn't recognise, then &kdiff3; terminates with an error. +The integration settings allow to specify command line parameters that should be ignored by &kdiff3;. +They will appear in the usage help like in this example: + + --foo Ignored. (User defined.) + + + Command line options to ignore: + A list of options, separated via semicolon ';'. When one of these options appears on the commandline, + then &kdiff3; will ignore it and run without reporting an error. + (Default is "u;query;html;abort"). + +When this isn't enough, then it is recommended to write a shell script that does the option translation. + + + + +Open-Dialog + + Since many input files must be selectable, the program has a special open dialog: + + + + + + The open dialog allows to edit the filenames by hand, selecting a file + via the file-browser ("File...") or allows to choose recent files from + the drop-down lists. If you open the dialog again, then the current names + still remain there. The third input file is not required. If the + entry for "C" remains empty, then only a two file diff analysis will be + done. + + You can also select a directory via "Dir...". If for A a directory is specified + then a directory-comparison/merge starts. If A specifies a file but B, C or + the output specify a directory, then &kdiff3; uses the filename from A in the + specified directories. + + If "Merge" is selected, then the "Output"-line becomes editable. But it + is not required to specify the output filename immediately. You can also + postpone this until saving. + + The "Configure..."-button opens the options-dialog, so that you can set + the options before running the analysis. + + + +Paste and Drop Input + + Sometimes you want to compare parts of a text that is not an own file. &kdiff3; also + allows you to paste text from the clipboard into the diff input window that has the focus. + The diff analysis happens immediately then. + In the open dialog you need not specify files then, but just close it via "Cancel". + + You can also use drag and drop: Drag a file from a file manager + or selected text from an editor and drop it onto a diff input window. + + What's the idea? Sometimes a file contains two similar functions, but checking how similar + they really are is a big effort if you first must create two files and then load them. Now + you can simply copy, paste and compare the relevant sections. + + Note: Currently you cannot drag anything from &kdiff3;. Only dropping in the diff input + is supported. + + Warning: Some editors still interpret the drag and drop into another program like cut + (instead of copy) and paste. Your original data might be lost then. + + + +Comparing Files And Interpreting The Information In The Input Windows + + + +Info Line + At the top of each text window is its "info line". The info lines of + the input windows contain a letter "A", "B" or "C", the editable filename, + a button for browsing, and the line number of the first visible line in the window. + (Note that window "C" is optional.) Each info line appears in a different color. + + When you selected another file via browsing or finished editing the filename here + by pressing enter, the new file will be loaded and + compared with the already loaded file(s). +Coloring + The three input windows are assigned the letters "A", "B" and "C". + "A" has color blue, "B" has green and "C" has magenta. (These are the + defaults, but can be changed in the Settings-Menu.) + + When a difference is detected then the color shows which input file + differs. When both other input files differ then the color used to express + this is red by default ("Conflict color" in the Settings). + This colorscheme is especially useful in the case of three input files, which will be + seen in the next section (Merging). +Summary Column + Left of each text is the "summary column". If differences occurred on a + line then the summary column shows the respective color. For a white-space-only + difference the summary is chequered. For programming languages where white + space is not so important this is useful to see at one glance if anything + of importance was modified. (In C/C++ white space is only interesting within + strings, comments, for the preprocessor, and some only very esoteric situations.) + + The vertical line separating the summary column and the text is interrupted + if the input file had no lines there. When word-wrap is enabled then this vertical + line appears dotted for wrapped lines. +Overview Column + On the right side a "overview"-column is visible left of the vertical scrollbar. + It shows the compressed summary column of input "A". All the differences + and conflicts are visible at one glance. When only two input windows are + used, then all differences appear red here because every difference is + also a conflict. A black rectangle frames the visible part of the inputs. + For very long input files, when the number of input lines is bigger than + the height of the overview column in pixels, then several input lines share + one overview line. A conflict then has top priority over simple differences, + which have priority over no change, so that no difference or conflict is + lost here. By clicking into this overview column the corresponding text + will be shown. +Manually Aligning Lines + Sometimes the algorithm places the wrong lines next to each other. Or you want to compare + one piece of text with text at a completely different position in the other file. + For these situations you can manually instruct &kdiff3; to align certain lines. + Mark the text for which you want to improve the alignment with the mouse as you would + for copy and paste in the first diff view and then choose "Add Manual Diff Alignment" + in the "Diffview"-menu (keyboard shortcut "Ctrl-Y") . An orange bar will appear in + the summary column next to the chosen text. Repeat this for the second and + (if available) third diff view. &kdiff3; will immediately recalculate the differences everytime you do this. + and will align the chosen lines. Of course some of the previously matching lines in between + might not match anymore. + + Currently merging doesn't support the use of manual diff help. +Manually Joining and Splitting Diff Sections + In some cases &kdiff3; will see too many or too few diff sections for merging. In such a + case you can join or split existing sections. + + Add new sections by first selecting text in the lines that belong together in either input window (as for copying to the clipboard). + Then choose "Split Diff At Selection" in the "Merge" menu. + Splits will be added above the first line and below the last line of the selected text. + If you only want to add one section, then select text beginning at another section-split. + + For joining sections in either input window select something in the lines from the sections to join. + (You can join several sections in one step too.) Then choose "Join selected Diffs" in the "Merge"-menu. + + + + +Merging And The Merge Output Editor Window + + + + + The merge output editor window (below the diff input windows) also has an info line at the top showing "Output:", the + filename and "[Modified]" if you edited something. Usually it will contain + some text through the automatic merge facilities, but often it will also + contain conflicts. + + !!! Saving is disabled until all conflicts are resolved !!! (Use the "Go + to prev/next unsolved conflicts"-buttons to find the remaining conflicts.) + + With only two input files every difference is also a conflict that must + be solved manually. + + With three input files the first file is treated as base, while the + second and third input files contain modifications. When at any line only + either input B or input C have changed but not both then the changed source + will automatically be selected. Only when B and C have changed on the same + lines, then the tool detects a conflict that must be solved manually. + When B and C are the same, but not the same as A, then C is selected. +The Summary Column + The merge output editor window also has a summary column on the left. It shows the + letter of the input from which a line was selected or nothing if all three + sources where equal on a line. For conflicts it shows a questionmark "?" + and the line shows "<Merge Conflict>", all in red. Because solving + conflicts line by line would take very long, the lines are grouped into + groups that have the same difference and conflict characteristics. + But only-white-space-conflicts are separated from non-white-space-conflicts + in order to ease the merging of files were the indentation changed for many + lines. +Setting The Current Group And Synchronising Merge And Diff View Position + When clicking into the summary column with the left mouse button in either + window then the beginning of the group belonging to that line will shown in all windows. + This group then becomes the "current group". It is highlighted with the + "Current range (diff) background color" and + a black bar appears on the left side of the text. +Choosing Inputs A, B or C For Current Conflict And Editing + The button bar below the menubar contains three input selector buttons + containing the letters "A", "B" and "C". Click the input selector + button to insert (or remove if already inserted) the lines from the respective source. + To choose the lines from several inputs click the respective buttons in the + needed order. For example if you want that the lines from "B" appear before + the lines from "A" in the output, first click "B", then "A". + + If you use the auto-advance option + ("Automatically go to next unsolved conflict after source selection"), + you should disable this before choosing lines from several inputs or if you want to + edit the lines after your choice. Otherwise &kdiff3; will jump to the next + conflict after choosing the first input. + + It is often helpful directly edit the merge output. + The summary column will show "m" for every line that was manually modified. + When for instance the differences are aligned in a way that simply choosing + the inputs won't be satisfactory, then you can mark the needed text and use + normal copy and paste to put it into the merge output. + + Sometimes, when a line is removed either by automatic merge or by editing + and no other lines remain in that group, then the text <No src line> + will appear in that line. This is just a placeholder for the group for + when you might change your mind and select some source again. This text won't + appear in the saved file or in any selections you want to copy and paste. + + The text "<Merge Conflict>" will appear in the clipboard if you + copy and paste some text containing such a line. But still be careful to + do so. +Choosing Input A, B, or C for All Conflicts + The normal merge will start by solving simple conflicts automatically. + But the "Merge"-menu provides some actions for other common needs. + If you have to select the same source for most conflicts, then you can + choose "A", "B" or "C" everywhere, or only for the remaining unsolved + conflicts, or for unsolved white space conflicts. If you want to decide every + single delta yourself, you can "Set deltas to conflicts". Or if you want to + return to the automatic choices of &kdiff3; then select + "Automatically solve simple conflicts". &kdiff3; then restarts the merge. + For actions that change your previous modifications &kdiff3; will ask for your + confirmation before proceeding. + + Note: When choosing either source for unsolved white space conflicts and + the options "Ignore Numbers" or "Ignore C/C++ Comments" are used then changes in + numbers or comments will be treated like white space too. + +Automatic Merge of Version Control Keywords and History (Log) +Many version control systems support special keywords in the file. (e.g. "$Date$", +"$Header$", "$Author$", "$Log$" etc.) During the +check-in the version control system (VCS) changes these lines. For instance +"$Date$" will turn into "$Date: 2005/03/22 18:45:01 $". Since this line will +be different in every version of the file, it would require manual interaction +during the merge. + +&kdiff3; offers automatic merge for these items. For simple lines that match the +"Auto merge regular expression"-option in all input-files &kdiff3; will choose +the line from B or - if available - from C. (Additionally it is necessary that the lines +in question line up in the comparison and the previous line contains no conflict.) +This auto merge can either be run immediately after a merge starts (activate the option +"Run regular expression auto merge on merge start") or later via the merge +menu "Run Regular Expression Auto Merge". + +Automatic merge for version control history (also called "log") is also supported. +The history automerge can either run immediately when the merge starts by activating the +option "Merge version control history on merge start" or later via the merge menu +"Automatically Solve History Conflicts". + +Usually the version control history begins with a line containing the keyword "$Log$". +This must be matched by the "History start regular expression"-option. +&kdiff3; detects which subsequent lines are in the history by analysing the leading characters +that came before the "$Log$"-keyword. If the same "leading comment"-characters also appears in the following +lines, then they are also included in the history. + +During each check-in the VCS writes a unique line specifying version-, date- and time-information +followed by lines with user comments. +These lines form one history-entry. This history section grows with every check-in and the +most recent entries appear at the top (after the history start line). + +When for parallel development two or more developers check-in a branch of the file then +the merge history will contain several entries that appear as conflicts during the merge +of the branches. Since merging these can become very tedious, &kdiff3; offers support with two +possible strategies: Just insert the history information from both contributors at the top +or sort the history information by a user defined key. + +The just-insert-all-entries-method is easier to configure. &kdiff3; just needs a method to +detect, which lines belong to one history entry. Most VCS insert an empty line after each +history entry. If there are no other empty lines, this is a sufficient criterion for &kdiff3;. +Just set an empty "History entry start regular expression". If the empty line criterion +isn't sufficient, you can specify a regular expression to detect the history entry start. + +Note that &kdiff3; will remove duplicate history entrys. If a history entry appeared several times +in the history of a input file, only one entry will remain in the output. + +If you want to sort the history, then you have to specify how the sort key should be built. +Use parentheses in the "History entry start regular expression" to group parts of the regular +expression that should later be used for the sort key. +Then specify the "History entry start sort key order" specifying a comma "," separated list of +numbers referring to the position of the group in the regular expression. + +Because this is not so easy to get right immediately, you are able to test and improve +the regular expressions and key-generation in a dedicated dialog by pressing the +"Test your regular expressions"-button. +Example: Assume a history that looks like this: + +/************************************************************************** +** HISTORY: $Log: \toms_merge_main_view\MyApplication\src\complexalgorithm.cpp $ +** +** \main\integration_branch_12 2 Apr 2001 10:45:41 tom +** Merged branch simon_branch_15. +** +** \main\henry_bugfix_branch_7\1 30 Mar 2001 19:22:05 henry +** Improved the speed for subroutine convertToMesh(). +** Fixed crash. +**************************************************************************/ + +The history start line matches the regular expression ".*\$Log.*\$.*". Then follow +the history entries. + +The line with the "$Log$"-keyword begins with two "*" after which follows a space. +&kdiff3; uses the first non-white-space string as "leading comment" and assumes that +the history ends in the first line without this leading comment. In this example the +last line ends with a string that also starts with two "*", but instead of a space +character more "*" follow. Hence this line ends the history. + +If history sorting isn't required then the history entry start line regular expression +could look like this. (This line is split in two because it wouldn't fit otherwise.) + +\s*\\main\\\S+\s+[0-9]+ (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) + [0-9][0-9][0-9][0-9] [0-9][0-9]:[0-9][0-9]:[0-9][0-9]\s+.* + +For details about regular expressions please see the +regular expression documentation by Trolltech. +Note that "\s" (with lowercase "s") matches any white space and "\S" (with uppercase "S") matches any non-white-space. +In our example the history entry start contains first the version info with reg. exp. "\\main\\\S+", the date consisting of day "[0-9]+", month "(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)" and year "[0-9][0-9][0-9][0-9]", the time "[0-9][0-9]:[0-9][0-9]:[0-9][0-9]" and finally the developers login name ".*". + +Note that the "leading comment"-characters (in the example "**") will already be removed by &kdiff3; +before trying to match, hence the regular expression begins with a match for none or more white-space characters "\s*". +Because comment characters can differ in each file (e.g. C/C++ uses other comment characters than a Perl script) +&kdiff3; takes care of the leading comment characters and you should not specify them in the regular expression. + +If you require a sorted history. Then the sortkey must be calculated. For this the +relevant parts in the regular expression must be grouped by parentheses. +(The extra parentheses can also stay in if history sorting is disabled.) + +\s*\\main\\(\S+)\s+([0-9]+) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) + ([0-9][0-9][0-9][0-9]) ([0-9][0-9]:[0-9][0-9]:[0-9][0-9])\s+(.*) + +The parentheses now contain 1. version info, 2. day, 3. month, 4. year, 5. time, 6. name. +But if we want to sort by date and time, we need to construct a key with the elements in a different order of appearance: +First the year, followed by month, day, time, version info and name. Hence the sortkey order to specify is "4,3,2,5,1,6". + +Because month names aren't good for sorting ("Apr" would be first) &kdiff3; detects in which order +the month names were given and uses that number instead ("Apr"->"04"). +And if a pure number is found it will be transformed to a 4-digit value with leading zeros for sorting. +Finally the resulting sort key for the first history entry start line will be: + +2001 04 0002 10:45:41 integration_branch_12 tom + + +For more information also see Merge Settings. + + + + +Navigation And Editing + + Much navigation will be done with the scroll bars and the mouse but + you can also navigate with the keys. If you click into either window then + you can use the cursor buttons left, right, up, down, page up, page down, + home, end, ctrl-home, ctrl-end as you would in other programs. The overview-column + next to the vertical scroll bar of the input files can also be used for + navigating by clicking into it. + + You can also use the wheel mouse to scroll up and down. + + In the merge output editor you can also use the other keys for editing. + You can toggle between insert and overwrite mode with the insert key. (Default + is insert-mode.) + + A left-mouse-button-click into any summary column will synchronise all + windows to show the beginning of the same group of lines (as explained + in section "Setting The Current Group And Synchronising Merge And Diff View Position"). + + The button bar also contains nine navigation buttons with which you can + jump to the current/first/last difference, to the next/previous difference + (ctrl-down/ctrl-up), to the next/previous conflict (ctrl-pgdown/ctrl-pgup), + or to the next/previous unsolved conflict. Note that for &kdiff3; a "conflict" + that was not automatically solved at the start of the merge stays a "conflict" + even if it is solved. Hence the necessity to distinguish "unsolved conflicts". + +Auto-Advance + + There also is a button "Automatically go to next unsolved conflict after + source selection" (Auto-Advance). If you enable this, then, when one source + is selected, &kdiff3; will jump to and select the next unsolved conflict + automatically. This can help when you always want to choose one source only. + When you need both sources, or you want to edit after selecting, then you + probably want to switch this off. Before proceeding to the next unsolved conflict + &kdiff3; shows you the effect of your choice for a short time. This delay is + adjustable in the Diff- & Merge-Settings: You can + specify the "Auto-Advance delay" in milli seconds between 0 and 2000. Hint: + Tired of many clicks? - Use a small Auto-Advance-delay and the shortcuts + Ctrl-1/2/3 to select A/B/C for many conflicts. + + + + +Select, Copy And Paste + + The input windows don't show a cursor, so selections must be made + with the mouse by clicking with the left mouse button at the start, holding + down the mousebutton and moving to the end, where you release the mouse + button again. You can also select a word by double clicking it. In the merge + output editor you can also select via the keyboard by holding the "shift"-button + and navigation with the cursor keys. + + If the selection exceeds the visible range you can move the mouse over the + window borders which causes &kdiff3; to scroll in that direction. + + For very large selections you can also use the navigation keys while holding down + the mouse. E.g. use page up and page down to quickly go to a certain position. At the + end position release the mouse button. + + In order to select everything in the current window use menu "Edit"->"Select All" (Ctrl-A). + + To copy to the clipboard you must press the "Copy"-button (Ctrl-C or Ctrl-Insert). + But there exists an option "Auto Copy Selection". If this is enabled, + then whatever you select is copied immediately and you don't need to explicitely + copy. But pay attention when using this because the contents of the clipboard + might then be destroyed accidentally. + + "Cut" (Ctrl-X or Shift-Delete) copies to the clipboard and deletes the + selected text. + + "Paste" (Ctrl-V or Shift-Insert) inserts the text in the clipboard at the + cursorposition or over the current selection. + If you paste to either diff input window the contents of the clipboard will + be shown in that window and the comparison will restart immediately. This is + useful if you want to quickly grab a piece of text from somewhere and + compare it with something else without first creating files. + + + +Saving + + Saving will only be allowed, when all conflicts were solved. If the file + already exists and the "Backup files"-option is enabled then the existing + file will be renamed with an ".orig"-extension, but if such a file exists + it will be deleted. When you exit or start another diff-analysis and data + wasn't saved yet, then &kdiff3; will ask if you want to save, cancel or proceed + without saving. (&kdiff3; does not catch any signals. So if you "kill" &kdiff3; + then your data will be lost.) + + Line endings are saved according to the normal method on the underlying + operating system. For Unices each line ends with an linefeed-character "\n", + while for Win32-based systems each line ends with a carriage-return + a linefeed + "\r\n". &kdiff3; does not preserve the line-endings of the input files, which + also means that you shouldn't use &kdiff3; with binary files. + + + +Finding Strings + + You can search for a string in any text-window of &kdiff3;. The "Find ..."-command + (Ctrl-F) in the Edit-menu opens a dialog that lets you specify the string + to search for. You can also select the windows which should be searched. + Searching will always start at the top. Use the "Find Next"-command (F3) + to proceed to the next occurrence. If you select to search several windows then the first + window will be searched from top to bottom before the search starts in the next + window at the top again, etc. + + + +Printing + + &kdiff3; supports printing for textfile differences. The "Print..."-command (Ctrl-P) + in the File-menu opens a dialog that allows you to select the printer and to adjust + other options. + + There are several possibilities to adjust the range. Due to different printing + dialogs on different operating systems, the method to achieve certain range selections varies. + + + All:Print everything. + Current:Print a page starting at the first visible line in the window. + (On systems without this option this can be achived by specifying page number 10000 for printing.) + Selection: + Before choosing to print select text with the mouse (like for copy and paste) + in one of the diff input windows to define the start and end line. If no text + in one of the diff input windows was selected, then this won't be an available + choice. (On systems without this option this can be achived by specifying page + number 9999 for printing.) + Range:Specify the first and last page. + + + + Other important options for printing will be taken from the normal options: + + Font, font size + Show line numbers + Word wrap + Colors + etc. + + + Landscape formatting is also recommended for printing. + + + +Options + + Options and the recent-file-list will be saved when you exit the program, + and reloaded when you start it. (Menu Settings->Configure &kdiff3; ...) + +Font + + Select a fixed width font. (On some systems this dialog will also + present variable width fonts, but you should not use them.) + + + Italic Font for Deltas: If you select this, then text differences + will be drawn with the italic version of the selected font. If the font + doesn't support italic, then this does nothing. + + + + +Colors + + Foreground color: Usually black. + Background color: Usually white. + Diff Background color: Usually light gray. + Color A: Usually dark blue. + Color B: Usually dark green. + Color C: Usually dark magenta. + Conflict Color: Usually red. + Current range background color: Usually light yellow. + Current range diff background color: Usually dark yellow. + Color for manually selected diff ranges: Usually orange. + Newest file color in directory comparison: Usually green. + Oldest file color in directory comparison: Usually red. + Middle age file color in directory comparison: Usually dark yellow. + Color for missing files in directory comparison: Usually black. + + + Changing the colors for directory comparison will be effective only when starting the next directory comparison. + + + On systems with only 16 or 256 colors some colors are not available in pure + form. On such systems the "Defaults"-button will choose a pure color. + + + +Editor Settings + + Tab inserts spaces: If this is disabled and you press the + tabulator key, a tab-character is inserted, otherwise the appropriate + amount of characters is inserted. + Tab size: Can be adjusted for your specific needs. Default is 8. + Auto indentation: When pressing Enter or Return the indentation + of the previous line is used for the new line. + Auto copy selection: Every selection is immediately copied + to the clipboard when active and you needn't explicitely copy it. + Line end style: When saving you can select what line + end style you prefer. The default setting is the common choice for the used operating system. + + + +Diff Settings + + When comparing files, &kdiff3; first it tries to match lines that are equal + in all input files. Only during this step it might ignore white space. The + second step compares each line. In this step white space will not be ignored. + Also during the merge white space will not be ignored. + + + + Preserve Carriage Return: Some editors (on some systems) save + carriage return '\r' and linefeed '\n'-characters at the end of line, while + others will only save the linefeed '\n'. Usually &kdiff3; ignores the carriage + return, but then files that don't have equal sizes, look equal in side by + side comparison. When this option is on, then the carriage return characters + are made visible but are treated as white space. This option must be off + during a merge. Default is off. + Ignore numbers: Default is off. Number characters ('0'-'9', '.', '-') + will be ignored in the first part of the analysis in which the line matching is + done. In the result the differences will be shown nevertheless, but they are treated + as white space. + + Ignore C/C++ comments: Default is off. + Changes in comments will be treated like changes in white space. + + Ignore case: Default is off. + Case-differences of characters (like 'A' vs. 'a') will be treated like changes in white space. + + Preprocessor-Command: + See next section. + + Line-Matching Preprocessor-Command: + See next section. + + Try Hard: + Try hard to find an even smaller delta. (Default is on.) This will probably + be effective for complicated and big files. And slow for very big files. + + + + +Merge Settings + + Auto Advance Delay (ms): When in auto-advance-mode this setting specifies + how long to show the result of the selection before jumping to the next unsolved + conflict. + + White space 2/3-file merge default: + Automatically solve all white-space conflict by choosing the specified file. + (Default is manual choice.) Useful if white space really isn't important in many files. + If you need this only occasionally better use "Choose A/B/C For All Unsolved Whitespace Conflicts" + in the merge menu. Note that if you enable either "Ignore numbers" or "Ignore C/C++ comments" + then this auto-choice also applies for conflicts in numbers or comments. + + Auto merge regular expression: + Regular expression for lines where &kdiff3; should automatically choose one source. See also Automatic Merge ... + + Run regular expression auto merge on merge start: + If activated &kdiff3; runs the automatic merge using the "Auto merge regular expression" when a merge is started. + + History start regular expression: + Regular expression for the start of the merge history entry. + Usually this line contains the "$Log$"-keyword. + Default value: ".*\$Log.*\$.*" + + History entry start regular expression: + A merge history entry consists of several lines. + Specify the regular expression to detect the first line (without the leading comment). + Use parentheses to group the keys you want to use for sorting. + If left empty, then &kdiff3; assumes that empty lines separate history entries. + See also Automatic Merge ... + + History merge sorting: + Enable version control history sorting. + + History entry start sort key order: + Each parentheses used in the regular expression for the history start entry + groups a key that can be used for sorting. + Specify the list of keys (that are numbered in order of occurrence + starting with 1) using ',' as separator (e.g. "4,5,6,1,2,3,7"). + If left empty, then no sorting will be done. + See also Automatic Merge ... + + Merge version control history on merge start: + If activated &kdiff3; runs the automatic history merging using aforementioned options when a merge is started. + + Max number of history entries: + &kdiff3; truncates the history list after the specified number of entries. Use -1 to avoid truncation. (Default is -1). + + Test your regular expressions + This button shows a dialog that allows you to improve and test the regular expressions above. + Just copy the respective data from your files into the example lines. The "Match results" + will immediately show whether the match succeeds or not. + The "Sort key result" will display the key used for history merge sorting. + + Irrelevant merge command: + Specify a command of your own that should be called when &kdiff3; detects + that for a three file merge the file from B doesn't contribute any + relevant data that isn't already contained in the file from C. + The command is called with the three filenames as parameters. + Data matched by the "Auto merge regular expression" or in the + history isn't considered relevant. + + + + + +Directory Merge + + These options are concerned with scanning the directory and handling the + merge: See the Directory Comparison/Merge + Docs for details. + +Yet there is one option here that is also relevant for saving single files: + + + Backup files: When a file is saved and an older version already + exists, then the original version will be renamed with an ".orig" extension. + If an old backup file with ".orig" extension already exists then this will + be deleted without backup. + + + + +Regional and Language Options + + Language:Adjust the language of the user interface. Changing this option doesn't affect the running program. You have to exit and restart &kdiff3; so that the language is changed. (This option is not available in the KDE version of &kdiff3; because the language is adjustable in the global KDE settings.) + + Use the same encoding for everything: The following encoding options can be adjusted separately for each item or if this option is true, all values will take the first value. + + Local Encoding:Above the codec-selectors appears a note that tells you what the local encoding is. (This is not adjustable but for your information just in case you don't know your local encoding, but need to select it.) + + File Encoding for A/B/C: Adjust the file encoding for input files. This has an effect on how the special characters are interpreted. Since you can adjust each codec separately you can even compare and merge files that were saved using different codecs. + + File Encoding for Merge Output and Saving: When you have edited a file, then you can adjust which encoding will be used when saving to disk. + + File Encoding for Preprocessor Files:When you define preprocessors then they might not be able to operate on your codec. (e.g.: Your files are 16-bit-unicode and your preprocessor can only take 8-bit-ascii.) With this option you can define the encoding of preprocessor output. + + Right To Left Language:Some languages are written right to left. When this option is enabled, &kdiff3; draws the text from right to left in the diff input windows and in the merge output window. Note that if you start &kdiff3; with the command line option "--reverse" then all layouting will be done right to left too. (This is a feature provided by Qt.) This documentation was written assuming that "Right To Left Language" or reverse layout are disabled. So some references to "left" or "right" must be replaced by their respective counterpart if you use these options. + + + + + +Miscellaneous +(These options and actions are available in menus or the buttonbar.) + + Show line numbers: You can select if line numbers should be + shown for the input files. + Show space and tabulator characters for differences: Sometimes + the visible spaces and tabs are disturbing. You can turn this off. + Show white space: Turn this off to suppress + any highlighting of white-space-only changes in the text or overview-columns. + (Note that this also applies to changes in numbers or comments if the options "Ignore numbers" + or "Ignore C/C++ comments" are active.) + Overview options: + These choices are only available when you compare three files. In normal mode all + differences are shown in one color-coded overview-column. But sometimes you are + especially interested in the differences between only two of these three files. + Selecting "A vs. B", "A vs. C" or "B vs. C"-overview will show a second overview + column with the required information next to the normal overview. + + Word wrap diff windows: + Wrap lines when their length would exceed the width of a window. + + Show Window A/B/C: Sometimes you want to use the space on + the screen better for long lines. Hide the windows that are not important. + (In the Windows-menu.) + Toggle Split Orientation: + Switch between diff windows shown next to each other (A left of B left of C) or above + each other (A above B above C). This should also help for long lines. (In the Windows-menu.) + + Start a merge quickly: + Sometimes you are viewing the deltas and decide to merge. + + "Merge current file" in the Directory-menu also works if you only compare + two files. A single click starts the merge and uses the filename of the last + input-file as the default output filename. (When this is used to restart + a merge, then the output filename will be preserved.) + + + +Configuring Keyboard-Shortcuts + + Currently only the KDE-version supports user-configurable keyboard-shortcuts. + (Menu Settings->Configure Shortcuts...) + + + + +Preprocessor Commands + +&kdiff3; supports two preprocessor options. + + + Preprocessor-Command: + When any file is read, it will be piped through this external command. + The output of this command will be visible instead of the original file. + You can write your own preprocessor that fulfills your specific needs. + Use this to cut away disturbing parts of the file, or to automatically + correct the indentation etc. + + Line-Matching Preprocessor-Command: + When any file is read, it will be piped through this external command. If + a preprocessor-command (see above) is also specified, then the output of the + preprocessor is the input of the line-matching preprocessor. + The output will only be used during the line matching phase of the analysis. + You can write your own preprocessor that fulfills your specific needs. + Each input line must have a corresponding output line. + + + + +The idea is to allow the user greater flexibility while configuring the diff-result. +But this requires an external program, and many users don't want to write one themselves. +The good news is that very often sed or perl +will do the job. + +Example: Simple testcase: Consider file a.txt (6 lines): + + aa + ba + ca + da + ea + fa + +And file b.txt (3 lines): + + cg + dg + eg + +Without a preprocessor the following lines would be placed next to each other: + + aa - cg + ba - dg + ca - eg + da + ea + fa + +This is probably not wanted since the first letter contains the actually interesting information. +To help the matching algorithm to ignore the second letter we can use a line matching preprocessor +command, that replaces 'g' with 'a': + + sed 's/g/a/' + +With this command the result of the comparison would be: + + aa + ba + ca - cg + da - dg + ea - eg + fa + +Internally the matching algorithm sees the files after running the line matching preprocessor, +but on the screen the file is unchanged. (The normal preprocessor would change the data also on +the screen.) + + +<command>sed</command> Basics + +This section only introduces some very basic features of sed. For more +information see info:/sed or + +http://www.gnu.org/software/sed/manual/html_mono/sed.html. +A precompiled version for Windows can be found at +http://unxutils.sourceforge.net. +Note that the following examples assume that the sed-command is in some +directory in the PATH-environment variable. If this is not the case, you have to specify the full absolute +path for the command. + +Also note that the following examples use the single quotation mark (') which won't work for Windows. +On Windows you should use the double quotation marks (") instead. + +In this context only the sed-substitute-command is used: + + sed 's/REGEXP/REPLACEMENT/FLAGS' + +Before you use a new command within &kdiff3;, you should first test it in a console. +Here the echo-command is useful. Example: + + echo abrakadabra | sed 's/a/o/' + -> obrakadabra + +This example shows a very simple sed-command that replaces the first occurance +of "a" with "o". If you want to replace all occurances then you need the "g"-flag: + + echo abrakadabra | sed 's/a/o/g' + -> obrokodobro + +The "|"-symbol is the pipe-command that transfers the output of the previous +command to the input of the following command. If you want to test with a longer file +then you can use cat on Unix-like systems or type +on Windows-like systems. sed will do the substitution for each line. + + cat filename | sed options + + + +Examples For <command>sed</command>-Use In &kdiff3; +Ignoring Other Types Of Comments + +Currently &kdiff3; understands only C/C++ comments. Using the +Line-Matching-Preprocessor-Command you can also ignore +other types of comments, by converting them into C/C++-comments. + +Example: To ignore comments starting with "#", you would like to convert them +to "//". Note that you also must enable the "Ignore C/C++-Comments" option to get +an effect. An appropriate Line-Matching-Preprocessor-Command would be: + + + sed 's/#/\/\//' + +Since for sed the "/"-character has a special meaning, it is necessary to place the +"\"-character before each "/" in the replacement-string. Sometimes the "\" is required +to add or remove a special meaning of certain characters. The single quotation marks (') before +and after the substitution-command are important now, because otherwise the shell will +try to interpret some special characters like '#', '$' or '\' before passing them to +sed. Note that on Windows you will need the double quotation marks (") here. Windows +substitutes other characters like '%', so you might have to experiment a little bit. + + +Caseinsensitive Diff + +Use the following Line-Matching-Preprocessor-Command to convert all input to uppercase: + + sed 's/\(.*\)/\U\1/' + +Here the ".*" is a regular expression that matches any string and in this context matches +all characters in the line. +The "\1" in the replacement string refers to the matched text within the first pair of "\(" and "\)". +The "\U" converts the inserted text to uppercase. + + + +Ignoring Version Control Keywords + +CVS and other version control systems use several keywords to insert automatically +generated strings (info:/cvs/Keyword substitution). +All of them follow the pattern "$KEYWORD generated text$". We now need a +Line-Matching-Preprocessor-Command that removes only the generated text: + + sed 's/\$\(Revision\|Author\|Log\|Header\|Date\).*\$/\$\1\$/' + +The "\|" separates the possible keywords. You might want to modify this list +according to your needs. +The "\" before the "$" is necessary because otherwise the "$" matches the end of the line. + + +While experimenting with sed you might come to understand and even like +these regular expressions. They are useful because there are many other programs that also +support similar things. + + + +Ignoring Numbers + +Ignoring numbers actually is a built-in option. But as another example, this is how +it would look as a Line-Matching-Preprocessor-command. + + sed 's/[0123456789.-]//g' + +Any character within '[' and ']' is a match and will be replaced with nothing. + + + +Ignoring Certain Columns + +Sometimes a text is very strictly formatted, and contains columns that you always want to ignore, while there are +other columns you want to preserve for analysis. In the following example the first five columns (characters) are +ignored, the next ten columns are preserved, then again five columns are ignored and the rest of the line is preserved. + + sed 's/.....\(..........\).....\(.*\)/\1\2/' + +Each dot '.' matches any single character. The "\1" and "\2" in the replacement string refer to the matched text within the first +and second pair of "\(" and "\)" denoting the text to be preserved. + + + +Combining Several Substitutions + +Sometimes you want to apply several substitutions at once. You can then use the +semicolon ';' to separate these from each other. Example: + + echo abrakadabra | sed 's/a/o/g;s/\(.*\)/\U\1/' + -> OBROKODOBRO + + + + +Using <command>perl</command> instead of <command>sed</command> + +Instead of sed you might want to use something else like +perl. + + perl -p -e 's/REGEXP/REPLACEMENT/FLAGS' + +But some details are different in perl. Note that where +sed needed "\(" and "\)" perl +requires the simpler "(" and ")" without preceding '\'. Example: + + sed 's/\(.*\)/\U\1/' + perl -p -e 's/(.*)/\U\1/' + + + + + +Order Of Preprocessor Execution + +The data is piped through all internal and external preprocessors in the +following order: + + +Normal preprocessor, +Line-Matching-Preprocessor, +Ignore case (conversion to uppercase), +Detection of C/C++ comments, +Ignore numbers, +Ignore white space + + +The data after the normal preprocessor will be preserved for display and merging. The +other operations only modify the data that the line-matching-diff-algorithm sees. + +In the rare cases where you use a normal preprocessor note that +the line-matching-preprocessor sees the output of the normal preprocessor as input. + + + +Warning + +The preprocessor-commands are often very useful, but as with any option that modifies +your texts or hides away certain differences automatically, you might accidentally overlook +certain differences and in the worst case destroy important data. + +For this reason during a merge if a normal preprocessor-command is being used &kdiff3; +will tell you so and ask you if it should be disabled or not. +But it won't warn you if a Line-Matching-Preprocessor-command is active. The merge will not complete until +all conflicts are solved. If you disabled "Show White Space" then the differences that +were removed with the Line-Matching-Preprocessor-command will also be invisible. If the +Save-button remains disabled during a merge (because of remaining conflicts), make sure to enable +"Show White Space". If you don't wan't to merge these less important differences manually +you can select "Choose [A|B|C] For All Unsolved White space Conflicts" in the Merge-menu. + + + + + + +Directory Comparison and Merge with &kdiff3; +Introduction into Directory Comparison and Merge + + Often programmers must modify many files in a directory to achieve their + purpose. For this &kdiff3; also lets you compare and merge complete directories + recursively! + + Even though comparing and merging directories seems to be quite obvious, + there are several details that you should know about. Most important is of + course the fact that now many files might be affected by each operation. + If you don't have backups of your original data, then it can be very hard + or even impossible to return to the original state. So before starting a merge, + make sure that your data is safe, and going back is possible. If you make + an archive or use some version control system is your decision, but even + experienced programmers and integrators need the old sources now and then. + And note that even though I (the author of &kdiff3;) try to do my best, I can't + guarantee that there are no bugs. According to the GNU-GPL there is NO WARRANTY + whatsoever for this program. So be humble and always keep in mind: + +
+ To err is human, but to really mess things up you need a computer. +
+ +So this is what this program can do for you: &kdiff3; ... + + + ... reads and compares two or three directories recursively, + ... takes special care of symbolic links, + ... lets you browse files on mouse double click, + ... for each item proposes a merge operation, which you can change + before starting the directory merge, + ... lets you simulate the merge and lists the actions that would + take place, without actually doing them, + ... lets you really do the merge, and lets you interact whenever + manual interaction is needed, + ... lets you run the selected operation for all items (key F7) or the selected item (key F6), + ... lets you continue the merge after manual interaction with key F7, + ... optionally creates backups, with the ".orig" extension, + ... + +
+ +Starting Directory Comparison Or Merge + + This is very similar to the single file merge and comparison. You just + have to specify directories on the command line or in the file-open + dialog. + +Compare/Merge two directories: + + kdiff3 dir1 dir2 + kdiff3 dir1 dir2 -o destdir + + + If no destination directory is specified, then &kdiff3; will use dir2. + + + +Compare/Merge three directories: + + kdiff3 dir1 dir2 dir3 + kdiff3 dir1 dir2 dir3 -o destdir + + + When three directories are merged then dir1 + is used as the base for the merge. + If no destination directory is specified, then &kdiff3; will use dir3 + as the destination directory for the merge. + + + + Note that only the comparison starts automatically, not the merge. For this you first must + select a menu entry or the key F7. (More details later.) + + + + +Directory Merge Visible Information + + While reading the directories a message-box appears that informs you of + the progress. If you abort the directory scan, then only files that have + been compared until then will be listed. + + When the directory scan is complete then &kdiff3; will show a listbox with + the results left, ... + + + + + + ... and details about the currently selected item on the right: + + + + + + +The Name Column + + Each file and directory that was found during the scan is shown here in + a tree. You can select an item by clicking it with the mouse once. + + The directories are collapsed by default. You can expand and collapse + them by clicking on the "+"/"-" or by double-clicking the item or + by using the left/right-arrow-keys. The "Directory"-menu also contains two + actions "Fold all subdirs" and "Unfold all subdirs" with which you can + collapse or expand all directories at once. + + If you double-click a file item then the file comparison starts and the + file-diff-window will appear. + + + The image in the name column reflects the file type in the first + directory ("A"). It can be one of these: + + + Normal file + Normal directory (directory-image) + Link to a file (file-image with a link arrow) + Link to a directory (directory-image with a link arrow) + + + If the file type is different in the other directories, then this is visible + in the columns A/B/C and in the window that shows the details about the selected + item. Note that for such a case no merge operation can be selected automatically. + When starting the merge, then the user will be informed of problems of that + kind. + + + +The Columns A/B/C and the Coloring Scheme + + As can be seen in the image above the colors red, green, yellow and black + are used in the columns A/B/C. + + + Black: This item doesn't exist in this directory. + Green: Newest item. + Yellow: Older than green, newer than red. + Red: Oldest item. + + + But for items that were identical in the comparison their color also is + identical even if the age is not. + + Directories are considered equal if all items they contain are identical. + Then they also will have the same color. But the age of a directory is not + considered for its color. + + The idea for this coloring scheme I came upon in + dirdiff. The colors + resemble the colors of a leaf that is green when new, turns yellow later and red + when old. + + +The Operation Column + + After comparing the directories &kdiff3; also evaluates a proposal for a + merge operation. This is shown in the "Operation" column. You can modify + the operation by clicking on the operation you want to change. A small menu + will popup and allows you to select an operation for that item. (You can also + select the most needed operations via keyboard. + Ctrl+1/2/3/4/Del will select A/B/C/Merge/Delete respectively if available.) + This operation will be executed during the merge. It depends on the item and + on the merge-mode you are in, what operations are available. The merge-mode is one of + + + Three directory-merge ("A" is treated as older base of both). + Two directory-merge. + Two directory-sync-mode (activate via option "Synchronize Directories"). + + + In three directory merge the operation proposal will be: If for an item ... + + + ... all three directories are equal: Copy from C + ... A and C are equal but B is not: Copy from B (or if B does not + exist, delete the destination if exists) + ... A and B are equal but C is not: Copy from C (or if C does not + exist, delete the destination if exists) + ... B and C are equal but A is not: Copy from C (or if C does not + exist, delete the destination if exists) + ... only A exists: Delete the destination (if exists) + ... only B exists: Copy from B + ... only C exists: Copy from C + ... A, B and C are not equal: Merge + ... A, B and C don't have the same file type (e.g. A is a directory, + B is a file): "Error: Conflicting File Types". While such items exist the + directory merge cannot start. + + + In two directory merge the operation proposal will be: If for an item ... + + + ... both directories are equal: Copy from B + ... A exists, but not B: Copy from A + ... B exists, but not A: Copy from B + ... A and B exist but are not equal: Merge + ... A and B don't have the same file type (e.g. A is a directory, + B is a file): "Error: Conflicting File Types". While such items exist the + directory merge cannot start. + + + Sync-mode is active if only two directories and no explicit destination + were specified and if the option "Synchronize directories" is active. &kdiff3; + then selects a default operation so that both directories are the same afterwards. + If for an item ... + + + ... both directories are equal: Nothing will be done. + ... A exists, but not B: Copy A to B + ... B exists, but not A: Copy B to A + ... A and B exist, but are not equal: Merge and store the result + in both directories. (For the user the visible save-filename is B, + but then &kdiff3; copies B also to A.) + ... A and B don't have the same file type (e.g. A is a directory, + B is a file): "Error: Conflicting File Types". While such items exist the + directory merge cannot start. + + + When two directories are merged and the option "Copy newer instead of merging" is selected, + then &kdiff3; looks at the dates and proposes to choose the newer file. If the files are not + equal but have equal dates, then the operation will contain + "Error: Dates are equal but files are not." While such items exist the + directory merge cannot start. + + + +The Status Column + + During the merge one file after the other will be processed. The status + column will show "Done" for items where the merge operation has succeeded, + and other texts if something unexpected happened. When a merge is complete, + then you should make a last check to see if the status for all items is + agreeable. + + + +Statistics Columns + + When the file comparison mode "Full Analysis" is enabled in the options, then + &kdiff3; will show extra columns containing the numbers of unsolved, solved, nonwhite and whitespace + conflicts. (The solved-column will only show when comparing or merging three directories.) + + + +Selecting Listed Files + + Several options influence which files are listed here. Some are accessible in the + settings dialog. The Directory-menu contains the entries: + + "Show Identical Files": Files that have been detected equal in all input directories. + "Show Different Files": Files that exist in two or more directories but are not equal. + "Show Files only in A": Files that exist only in A, but not in B or C. + "Show Files only in B": Files that exist only in B, but not in A or B. + "Show Files only in C": Files that exist only in C, but not in A or B. + + + Activate only the "Show"-options for the items you want listed. If for example you only want to list all items that + exist either in A or in B but not in both, you'll have to activate "Show Files only in A" and "Show Files only in B" + and deactivate all others ("Show Identical Files", "Show Different Files", "Show Files only in C"). + The list will be updated immediately to reflect the change. + + These options also apply for directories with one exception: Disabling "Show Different Files" will not hide + any complete directories. This will work only for files within. + + Note that of these only the "Show Identical Files"-option is persistant. The others are enabled when starting &kdiff3;. + + + + + + +Doing A Directory Merge + + You can either merge the currently selected item (file or directory), or all items. + When you have made all your operation choices (in all subdirectories too) + then you can start the merge. + + Be aware that if you didn't specify a destination directory explicitely, + then the destination will be "C" in three directory mode, "B" in two directory + merge mode, and in sync-mode it will be "A" or/and "B". + + If you have specified a destination directory also check that all items + that should be in the output, are in the tree. There are some options that + cause certain items to be omitted from the directory comparison and merge. + Check these options to avoid unpleasant surprises: + + + "Recursive Directories": If this is off, then items in subdirectories + will not be found. + "Pattern"/"Anti-Pattern": Include/exclude items that match + "Exclude Hidden Files" + "Show"-options (Show Identical/Different Files, Files only in A/B/C) + + + If you change the settings in order to list more files, you must do a rescan via menu "Directory"->"Rescan" yourself. + (The reason for this is that for faster comparison-speed &kdiff3; omits the comparison for files suppressed by these criteria.) + If you changed your file and dir patterns to exclude files, then the file-list will immediately be updated on closing + the options-dialog. + + Note that when you write to a completely new directory then you usually also want to copy the identical files. + In that case enable the "Show Identical Files"-option. If your destination-directory is one of the inputs, + then this isn't necessary because the file is already there. + + If you are satisfied so far, the rest is easy. + + To merge all items: Select "Start/Continue directory merge" in the "Directory"-menu + or press F7 (which is the default shortcut). + To merge only the current item: Select "Run Operation For Current Item" + or press F6. + + If due to conflicting filetypes still some items with invalid operations + exist, then a messagebox will appear and these items will be pointed out, + so you can select a valid operation for the item. + + If you merge all items a dialog will appear giving you the options "Do it", "Simulate + it" and "Cancel". + + + Select "Simulate it" if you want to see what would be done without + actually doing it. A verbose list of all operations will be shown. + Otherwise select "Do it" to really start merging. + + + Then &kdiff3; will run the specified operation for all items. If manual + interaction is required (single file merge), then a merge window will open + (see the big screenshot). + + When you have finished with manually merging a file, again select "Start/Continue directory + merge" or the key F7. If you haven't saved it yet, a dialog will ask you to + do so. Then &kdiff3; will continue with the next item. + + When &kdiff3; encounters an error, it will tell you so and will show the + verbose-status-information. At the bottom of this list, there will be some + error messages which should help you to understand the cause of the problem. + When you continue merging (F7 key) &kdiff3; will give you the choice to retry + or skip the item that caused the problem. This means that before continuing + you can choose another operation or solve the problem by other means. + + When the merge is complete, then &kdiff3; will inform you via a message + box. + + If some items were merged individually before running the directorymerge then + &kdiff3; remembers this (while this + merge-session goes on), and doesn't merge them again when later the merge for + all items is run. Even when the merge was skipped or nothing was saved these + items count as completed. Only when you change the merge operation the + "Done"-status of the item will be removed and it can be merged again. + + + +Options for Comparing and Merging Directories + + The &kdiff3;-preferences (menu "Settings"->"Configure &kdiff3;") has + a section called "Directory Merge" with these options: + + + + Recursive Directories: Select whether to search directories + recursively. + File Pattern(s): Only files that match any pattern here will + be put in the tree. More than one pattern may be specified here by using + the semicolon ";" as separator. Valid wildcards: '*' and '?'. (e.g. "*.cpp;*.h"). + Default is "*". This pattern is not used on directories. + File Anti-Pattern(s): Files that match this pattern + will be excluded from the tree. More than one pattern may be specified here + via using the semicolon ";" as separator. Valid wildcards: '*' and '?'. Default + is "*.orig;*.o;*.obj". + Directory Anti-Pattern(s): Directories that match this pattern + will be excluded from the tree. More than one pattern may be specified here + via using the semicolon ";" as separator. Valid wildcards: '*' and '?'. Default + is "CVS;deps;.svn". + Use CVS-Ignore: + Ignore files and directories that would also be ignored by CVS. + Many automatically generated files are ignored by CVS. + The big advantage is that this can be directory specific via a local ".cvsignore"-file. + (See info:/cvs/cvsignore.) + Find Hidden Files and Directories: On some file systems files + have an "Hidden"-attribute. On other systems a filename starting with a dot + "." causes it to be hidden. This option allows you to decide whether to + include these files in the tree or not. Default is on. + Follow File Links: For links to files: When disabled, then + the symbolic links are compared. When enabled, then the files behind the + links are compared. Default is off. + Follow Directory Links: For links to directories: When disabled, + then the symbolic links will be compared. When enabled then the link will + be treated like a directory and it will be scanned recursively. (Note that + the program doesn't check if the link is "recursive". So for example a directory + that contains a link to the directory would cause an infinite loop, and after + some time when the stack overflows or all memory is used up, crash the program.) + Default is off. + Case Sensitive Filename Comparison: + Default is false on Windows, true for other operating systems. + File Comparison Mode: + + Binary Comparison: + This is the default file comparison mode. + + Full Analysis: + Do a full analysis of each file and show the statistics information columns. + (Number of solved, unsolved, nonwhite and white conflicts.) + The full analysis is slower than a simple binary analysis, and much + slower when used on files that don't contain text. + (Specify the appropriate file-antipatterns.) + + Trust the modification date: If you compare big directories + over a slow network, it might be faster to compare the modification dates + and file length alone. But this speed improvement comes with the price of + a little uncertainty. Use this option with care. Default is off. + Trust the size: + Similar to trusting the modification date. No real comparison happens. Two + files are considered equal if their file-sizes are equal. This is useful + when the file-copy operation didn't preserve the modification date. + Use this option with care. Default is off. + + + Synchronize Directories: Activates "Sync-Mode" when two directories + are compared and no explicit destination directory was specified. In this + mode the proposed operations will be chosen so that both source directories + are equal afterwards. Also the merge result will be written to both directories. + Default is off. + Copy newer instead of merging: Instead of merging the proposed + operation will copy the newer source if changes happened. (Considered unsafe, + because it implies that you know, that the other file hasn't been edited + too. Check to make sure in every case.) Default is off. + Backup files: If a file or complete directory is replaced + by another or is deleted then the original version will be renamed with an + ".orig" extension. If an old backup file with ".orig" extension already exists + then this will be deleted without backup. This also affects the normal merging + of single files, not only in directory-merge mode. Default is on. + + + +Other Functions in Directory Merge Window +Split/Full Screen Mode + + Usually the directory merge list view remains visible while a single file + is compared or merged. With the mouse you can move the the splitter bar that + separates the file list from the text-diff windows. If you don't want this, + you can disable "Split Screen View" in the "Directory"-menu. Then you can + use "Toggle View" in the "Directory"-menu to switch between the file list + and the text-diff view that then occupy the full screen. + + +Comparing or Merging a Single File + + Probably you will prefer a simple double mouse click on a file in order + to compare it. Nevertheless there also exists an entry in the "Directory"-menu. + You can also directly merge a single file by selecting it and + choosing "Merge current file" in the "Merge"-Menu. On saving the + result, the status will be set to done, and the file will not be merged again + if a directory merge is started. + + But note that this status information will be lost when you rerun a directory + scan: "Directory"-menu: "Rescan" + + +Comparing or Merging Files with Different Names + + Sometimes you need to compare or merge files with different names (e.g. the current + file and the backup in the same folder). + + Select the exact file by clicking onto the icon in the column A, B or C. The first + file selected thus will be marked with an "A", the second and third with "B" and "C" + regardless on what column they are in. Only up to three files can be chosen like this. + + Proceed by choosing "Compare Explicitely Selected Files" or "Merge Explicitely + Selected Files" from the "Directory"-menu. For your convenience these menu entries + also appear as context menu when you right-click the last selected file. + + The comparison or merge of a file will happen in the same window. + If this method is used for directories a new window will be opened. + + +
+ + +Miscellaneous Topics + +Networktransparency via KIO +KIO-Slaves + +KDE supports networktransparency via KIO-slaves. &kdiff3; uses this +for reading input files and for scanning directories. +This means that you can specify files and directories on local and +remote resources via URLs. + +Example: + + + kdiff3 test.cpp ftp://ftp.faraway.org/test.cpp + kdiff3 tar:/home/hacker/archive.tar.gz/dir ./dir + + +The first line compares a local file with a file on an FTP-server. The second line +compares a directory within an compressed archive with a local directory. + +Other KIO-slaves that are interesting are: + + +Files from the WWW (http:), +Files from the FTP (ftp:), +Encrypted file transfer (fish:, sftp:), +Windows-ressources (smb:), +Local files (file:), + + +Other things that are possible, but probably less useful are: + + +Man-pages (man:), +Info-pages (info:), + + + +How To Write URLs + + An URL has a different syntax compared with paths for local files and directories. + Some things should be considered: + + + + A path can be relative and can contain "." or "..". This is not possible for URLs + which are always absolute. + + Special characters must be written with "escaping". ("#"->"%23", space->"%20", etc.) + E.g. A file with the name "/#foo#" would have the URL "file:/%23foo%23". + + When URLs don't work as expected, try to open them in Konqueror first. + + + + + +Capabilities of KIO-Slaves + + Networktransparency has one drawback: Not all ressources have the same cababilities. + + Sometimes this is due to the file system of the server, sometimes due to the protocol. + Here is a short list of restrictions: + + + + Sometimes there is no support for links. + + Or there is no way to distinguish if a link points to a file or a directory; always + assuming a file. (ftp:, sftp:). + + Can't always determine the filesize. + + Limited support for permissions. + + No possibility to modify permissions or modification time, so permissions or time + of a copy will differ from the original. (See the option "Trust the size".) + (To modify permissions or modification time is only possible for local files.) + + + + + + +Using &kdiff3; as a KPart + +&kdiff3; is a KPart. Currently it implements the KParts::ReadOnlyPart-interface. + +It's main use is as difference-viewer in KDevelop. KDevelop always starts the +internal difference viewer first. To invoke &kdiff3; press the right mouse button +on the difference viewer window and select "Show in KDiff3Part" from the contextmenu. + +&kdiff3; normally requires two complete files as input. When used as part &kdiff3; +will assume that the inputfile is a patch-file in the unified format. &kdiff3; +then retrieves the original filenames from the patch-file. At least one of +the two files must be available. &kdiff3; will then invoke patch to +recreate the second file. + +In Konqueror you can select a patch-file and select "Preview in"-"KDiff3Part" from +the contextmenu. Be aware that this won't work if none of the original files are +available, and it is not reliable if the original file(s) have changed since the +patch-file was generated. + +When run as a part &kdiff3; only provides the a two-file-diff, a very small toolbar +and menu. Merging or directory-comparison are not supported then. + + + + + +Questions and Answers + +&reporting.bugs; +&updating.documentation; + + + + + Why is it called "&kdiff3;"? + + Tools named "KDiff" and "KDiff2" (now called "Kompare") already exist. Also "KDiff3" should suggest + that it can merge like the "diff3"-tool in the Diff-Tool collection. + + + + Why did I release it under GPL? + + I'm using GPL programs for a very long time now and learned very much + by having a look at many of the sources. Hence this is my "Thank You" + to all programmers that also did so or will do the same. + + + + Some buttons and functions are missing. What's wrong? + + You compiled from source but you probably didn't specify the correct KDE-prefix + with configure. By default configure wants to install in /usr/local but then KDE can't + find the user-interface ressource file (i.e. kdiff3ui.rc). The README-file contains + more information about the correct prefix. + + + + Often lines that are similar but not identical appear next to each other + but sometimes not. Why? + + Lines where only the amount of white space characters is different + are treated as "equal" at first, while just one different non-white character + causes the lines to be "different". If similar lines appear next to each + other, this actually is coincidence but this fortunately is often the case. + See also Manual Diff Help. + + + + Why must all conflicts be solved before the merge result can be saved? + + For each equal or different section the editor in the merge result + window remembers where it begins or ends. This is needed so that conflicts + can be solved manually by simply selecting the source button (A, B or C). + This information is lost while saving as text and it is too much effort to + create a special file format that supports saving and restoring all necessary + information. + + + + How can I synchronise the diff and merge views, so that all views show the same text position? + + Click into the summary column left of the text. (See also here.) + + + + Why does the editor in the merge result window not have an "undo"-function? + + This was too much effort until now. You can always + restore a version from one source (A, B or C) by clicking the respective + button. For big editing the use of another editor is recommended anyway. + + + + When I removed some text, then suddenly "<No src line>" appeared + and cannot be deleted. What does that mean and how can one remove this? + + For each equal or different section the editor in the merge result + window remembers where it begins or ends. "<No src line>" means + that there is nothing left in a section, not even a new line character. + This can happen either while merging automatically or by editing. This is + no problem, since this hint won't appear in the saved file. If you want + the orignal source back just select the section (click on the left summary + column) and then click the source button with the needed contents (A/B or + C). + + + + Why doesn't &kdiff3; support syntax-highlighting? + + &kdiff3; already uses many colors for difference highlighting. More + highlighting would be confusing. Use another editor for this. + + + + Can I use &kdiff3; to compare OpenOffice.Org, Word, Excel, PDF-, &etc; files? + + Although &kdiff3; will analyse any kind of file the result will probably + not be very satisfactory for you. + + &kdiff3; was made to compare pure text files. OpenOffice, Word, Excel etc. + store much more information in the files (about fonts, pictures, pages, + colors etc.) which &kdiff3; doesn't know about. So &kdiff3; will + show you the contents of the file interpreted as pure text, but + this might be unreadable or at least it will look very odd. + + Since most programs nowadays store their contents in XML-format, you might + be able to read it as pure text. So if the change was only small, + &kdiff3; still might help you. + + The best solution if you only want to compare the text (without embedded + objects like pictures) is to use "Select All" and "Copy" in your program + to copy the interesting text to the clipoard and then in &kdiff3; paste the + text into either diff input window. + (See also Select, Copy And Paste.) + + + + Where has the the directory option "List only deltas" gone? + + There are now several "Show"-options in the directory menu. + Disabling "Show identical files" will achieve what enabling "List only deltas" used to do. + + + + How can I make a big selection in the diff input window + because scrolling takes so long? + + Start the selection as usual (click and hold the left mouse button). + Then use the navigation keys (e.g. page up, page down) while holding the left mouse button down. + (See also Select, Copy And Paste.) + + + + There is so much information here, but your question is still not answered? + + Please send me your question. I appreciate every comment. + + + + + + + +Credits and License + + +&kdiff3; - File and Directory Comparison and Merge Tool + + +Program copyright 2002-2007 Joachim Eibl joachim.eibl at gmx.de + + +Several cool ideas and bugreports came from colleagues and many people out in the Wild Wild Web. Thank you! + + + +Documentation Copyright © 2002-2007 Joachim Eibl joachim.eibl at gmx.de + + + + +&underFDL; + + +&underGPL; + + + + +Installation + + +How to obtain &kdiff3; + + +You can download the latest version of &kdiff3; from its homepage http://kdiff3.sourceforge.net. + +&kdiff3; is also available for other platforms. See the homepage for details. + + + + + + +Requirements + + + In order to successfully use all features of &kdiff3;, you need &kde; >3.1. + + For information about how to run &kdiff3; on other platforms without KDE please see the + homepage. + +You can find a list of changes at http://kdiff3.sourceforge.net/ChangeLog +or in the "ChangeLog"-file of the source package. + + + + +Compilation and Installation + +In order to compile and install &kdiff3; on a system with KDE, type the +following in the base directory of the &kdiff3; distribution: + +% ./configure --prefix=kde-dir +% make +% make install + + +kde-dir specifies the directory +containing KDE on your system. If you are not sure, read the README-file for details. + +If you don't use KDE don't use configure but follow the instructions for Qt-only systems in the README file. +Since &kdiff3; uses autoconf and +automake you should have no trouble compiling it. Should you +run into problems please report them to the &kde; mailing lists. + + + + + +&documentation.index; +
+ + diff --git a/doc/en/index.html b/doc/en/index.html new file mode 100644 index 0000000..6f9a4a8 --- /dev/null +++ b/doc/en/index.html @@ -0,0 +1,16 @@ +The KDiff3 Handbook
The KDiff3 Handbook

The KDiff3 Handbook

Joachim Eibl

Revision 0.9.92 (2007-31-03)

Permission is granted to copy, distribute and/or modify this +document under the terms of the GNU Free Documentation License, +Version 1.1 or any later version published by the Free Software +Foundation; with no Invariant Sections, with no Front-Cover Texts, and +with no Back-Cover Texts. A copy of the license is included in the section entitled "GNU Free Documentation License".

+ KDiff3 is a file and directory diff and merge tool which +

  • compares and merges two or three text input files or directories,

  • shows the differences line by line and character by character(!),

  • provides an automatic merge-facility,

  • has an editor for comfortable solving of merge-conflicts,

  • provides networktransparency via KIO,

  • has options to highlight or hide changes in white-space or comments,

  • supports Unicode, UTF-8 and other file encodings,

  • prints differences,

  • supports version control keyword and history merging.

+

+ This document describes KDiff3-version 0.9.92. +


Table of Contents

1. Introduction
Yet Another Diff Frontend?
Screenshots and Features
More Features
Line-By-Line And Char-By-Char Diff-Viewer
See White-Space Differences At One Glance
Triple-Diff
Comfortable Merge Of Two Or Three Input Files
And ...
2. File Comparison And Merge
Command-Line Options
Comparing 2 files:
Merging 2 files:
Comparing 3 files:
Merging 3 files:
Special case: Files with the same name
Commandline for starting a directory comparison or merge:
Other command line options
Ignorable command line options
Open-Dialog
Paste and Drop Input
Comparing Files And Interpreting The Information In The Input Windows
Info Line
Coloring
Summary Column
Overview Column
Manually Aligning Lines
Manually Joining and Splitting Diff Sections
Merging And The Merge Output Editor Window
The Summary Column
Setting The Current Group And Synchronising Merge And Diff View Position
Choosing Inputs A, B or C For Current Conflict And Editing
Choosing Input A, B, or C for All Conflicts
Automatic Merge of Version Control Keywords and History (Log)
Navigation And Editing
Auto-Advance
Select, Copy And Paste
Saving
Finding Strings
Printing
Options
Font
Colors
Editor Settings
Diff Settings
Merge Settings
Directory Merge
Regional and Language Options
Miscellaneous
Configuring Keyboard-Shortcuts
Preprocessor Commands
sed Basics
Examples For sed-Use In KDiff3
Order Of Preprocessor Execution
Warning
3. Directory Comparison and Merge with KDiff3
Introduction into Directory Comparison and Merge
Starting Directory Comparison Or Merge
Compare/Merge two directories:
Compare/Merge three directories:
Directory Merge Visible Information
The Name Column
The Columns A/B/C and the Coloring Scheme
The Operation Column
The Status Column
Statistics Columns
Selecting Listed Files
Doing A Directory Merge
Options for Comparing and Merging Directories
Other Functions in Directory Merge Window
Split/Full Screen Mode
Comparing or Merging a Single File
Comparing or Merging Files with Different Names
4. Miscellaneous Topics
Networktransparency via KIO
KIO-Slaves
How To Write URLs
Capabilities of KIO-Slaves
Using KDiff3 as a KPart
5. Questions and Answers
6. Credits and License
A. Installation
How to obtain KDiff3
Requirements
Compilation and Installation
 


Would you like to make a comment or contribute an update to this page?
+ Send feedback to the KDE Docs Team

\ No newline at end of file diff --git a/doc/en/installation.html b/doc/en/installation.html new file mode 100644 index 0000000..4ec8498 --- /dev/null +++ b/doc/en/installation.html @@ -0,0 +1,6 @@ +Appendix A. Installation
Installation

Appendix A. Installation

How to obtain KDiff3

+You can download the latest version of KDiff3 from its homepage http://kdiff3.sourceforge.net. +

+KDiff3 is also available for other platforms. See the homepage for details. +



Would you like to make a comment or contribute an update to this page?
+ Send feedback to the KDE Docs Team

\ No newline at end of file diff --git a/doc/en/interpretinginformation.html b/doc/en/interpretinginformation.html new file mode 100644 index 0000000..90c15fd --- /dev/null +++ b/doc/en/interpretinginformation.html @@ -0,0 +1,68 @@ +Comparing Files And Interpreting The Information In The Input Windows
Comparing Files And Interpreting The Information In The Input Windows

Comparing Files And Interpreting The Information In The Input Windows



Info Line

+ At the top of each text window is its "info line". The info lines of + the input windows contain a letter "A", "B" or "C", the editable filename, + a button for browsing, and the line number of the first visible line in the window. + (Note that window "C" is optional.) Each info line appears in a different color. +

+ When you selected another file via browsing or finished editing the filename here + by pressing enter, the new file will be loaded and + compared with the already loaded file(s). +

Coloring

+ The three input windows are assigned the letters "A", "B" and "C". + "A" has color blue, "B" has green and "C" has magenta. (These are the + defaults, but can be changed in the Settings-Menu.) +

+ When a difference is detected then the color shows which input file + differs. When both other input files differ then the color used to express + this is red by default ("Conflict color" in the Settings). + This colorscheme is especially useful in the case of three input files, which will be + seen in the next section (Merging). +

Summary Column

+ Left of each text is the "summary column". If differences occurred on a + line then the summary column shows the respective color. For a white-space-only + difference the summary is chequered. For programming languages where white + space is not so important this is useful to see at one glance if anything + of importance was modified. (In C/C++ white space is only interesting within + strings, comments, for the preprocessor, and some only very esoteric situations.) +

+ The vertical line separating the summary column and the text is interrupted + if the input file had no lines there. When word-wrap is enabled then this vertical + line appears dotted for wrapped lines. +

Overview Column

+ On the right side a "overview"-column is visible left of the vertical scrollbar. + It shows the compressed summary column of input "A". All the differences + and conflicts are visible at one glance. When only two input windows are + used, then all differences appear red here because every difference is + also a conflict. A black rectangle frames the visible part of the inputs. + For very long input files, when the number of input lines is bigger than + the height of the overview column in pixels, then several input lines share + one overview line. A conflict then has top priority over simple differences, + which have priority over no change, so that no difference or conflict is + lost here. By clicking into this overview column the corresponding text + will be shown. +

Manually Aligning Lines

+ Sometimes the algorithm places the wrong lines next to each other. Or you want to compare + one piece of text with text at a completely different position in the other file. + For these situations you can manually instruct KDiff3 to align certain lines. + Mark the text for which you want to improve the alignment with the mouse as you would + for copy and paste in the first diff view and then choose "Add Manual Diff Alignment" + in the "Diffview"-menu (keyboard shortcut "Ctrl-Y") . An orange bar will appear in + the summary column next to the chosen text. Repeat this for the second and + (if available) third diff view. KDiff3 will immediately recalculate the differences everytime you do this. + and will align the chosen lines. Of course some of the previously matching lines in between + might not match anymore. +

+ Currently merging doesn't support the use of manual diff help. +

Manually Joining and Splitting Diff Sections

+ In some cases KDiff3 will see too many or too few diff sections for merging. In such a + case you can join or split existing sections. +

+ Add new sections by first selecting text in the lines that belong together in either input window (as for copying to the clipboard). + Then choose "Split Diff At Selection" in the "Merge" menu. + Splits will be added above the first line and below the last line of the selected text. + If you only want to add one section, then select text beginning at another section-split. +

+ For joining sections in either input window select something in the lines from the sections to join. + (You can join several sections in one step too.) Then choose "Join selected Diffs" in the "Merge"-menu. +



Would you like to make a comment or contribute an update to this page?
+ Send feedback to the KDE Docs Team

\ No newline at end of file diff --git a/doc/en/introduction.html b/doc/en/introduction.html new file mode 100644 index 0000000..d7c2429 --- /dev/null +++ b/doc/en/introduction.html @@ -0,0 +1,32 @@ +Chapter 1. Introduction
Introduction

Chapter 1. Introduction

Yet Another Diff Frontend?

+Several graphical diff tools exist. Why choose KDiff3? Let me say, why I wrote it. +

+KDiff3 started because I had to do a difficult merge. Merging is necessary when several +people work on the same files in a project. A merge can be somewhat automated, when the +merge-tool not only has the new modified files (called "branches"), but also the original file +(called "base"). The merge tool will automatically choose any modification that was only +done in one branch. When several contributors change the same lines, then the merge tool +detects a conflict which must be solved manually. +

+The merge then was difficult because one contributor had changed many things and corrected +the indentation in many places. Another contributor also had changed much text in the same file, +which resulted in several merge conflicts. +

+The tool I used then, only showed the changed lines, but not what had changed within these +lines. And there was no information about where only the indentation was changed. The merge +was a little nightmare. +

+So this was the start. The first version could show differences within a line and showed white space differences. +Later many other features were added to increase the usefulness. +

+For example if you want to compare some text quickly, then you can copy it to the clipboard and +paste it into either diff window. +

+A feature that required a big effort was the directory comparison and merge facility, which turned +the program almost into a full file browser. +

+I hope KDiff3 works for you too. Have fun! +

+Joachim Eibl (2003) +



Would you like to make a comment or contribute an update to this page?
+ Send feedback to the KDE Docs Team

\ No newline at end of file diff --git a/doc/en/iteminfo.png b/doc/en/iteminfo.png new file mode 100644 index 0000000..0b81443 Binary files /dev/null and b/doc/en/iteminfo.png differ diff --git a/doc/en/kdiff3.1 b/doc/en/kdiff3.1 new file mode 100644 index 0000000..3b9c492 --- /dev/null +++ b/doc/en/kdiff3.1 @@ -0,0 +1,89 @@ +.TH "KDIFF3" "1" +.SH "NAME" +KDiff3 \(em compares two or three input files or directories +.SH "SYNOPSIS" +.PP +\fBKDiff3\fR [\fBQT options\fP] [\fBKDE options\fP] [\fBKDiff3 options\fP] [\fB\fIFile1/base\fR\fP] [\fB\fIFile2\fR\fP] [\fB\fIFile3\fR\fP] +.SH "DESCRIPTION" +.PP +This manual page documents briefly the +\fBKDiff3\fR tool. +.PP +This manual page was written for the \fBDebian\fP distribution +because the original program does not have a manual page. +For comprehensive help, please see \fBkhelpcenter help:/kdiff3\fR. + +.PP +\fBKDiff3\fR is a program that + +.IP " \(bu" 6 +compares or merges two or three text input files or directories +.IP " \(bu" 6 +shows the differences line by line and character by character +.IP " \(bu" 6 +provides an automatic merge-facility and +.IP " \(bu" 6 +an integrated editor for comfortable solving of merge-conflicts +.IP " \(bu" 6 +supports Unicode, UTF-8 and other codecs +.IP " \(bu" 6 +supports KIO on KDE (allows accessing ftp, sftp, fish, smb etc.) +.IP " \(bu" 6 +Printing of differences +.IP " \(bu" 6 +Manual alignment of lines +.IP " \(bu" 6 +Automatic merging of version control history ($Log$) +.SH "OPTIONS" +.PP +This program follows the usual GNU command line syntax, +with long options starting with two dashes (`\-'). A summary of +options is included below. For a full summary of options, run +\fBKDiff3 \-\-help\fR. + +.IP "\fB-m, \-\-merge\fP " 10 +Merge the input. +.IP "\fB-b, \-\-base file\fP " 10 +Explicit base file. For compatibility with certain tools. +.IP "\fB-o, \-\-output file\fP " 10 +Output file. Implies \-m. E.g.: \-o newfile.txt +.IP "\fB\-\-out file\fP " 10 +Output file, again. (For compatibility with certain tools.) +.IP "\fB\-\-auto\fP " 10 +No GUI if all conflicts are auto-solvable. (Needs \-o file) +.IP "\fB\-\-qall\fP " 10 +Don't solve conflicts automatically. (For compatibility...) +.IP "\fB-L1 alias\fP " 10 +Visible name replacement for first file/base file. +.IP "\fB-L2 alias\fP " 10 +Visible name replacement for second file. +.IP "\fB-L3 alias\fP " 10 +Visible name replacement for third file. +.IP "\fB-L, \-\-fname alias\fP " 10 +Visible name replacement. May by supplied for each input. +.IP "\fB\-\-cs string\fP " 10 +Change a setting, e. g. \-\-cs "AutoAdvance=1". +.IP "\fB\-\-confighelp\fP " 10 +Show a list of all settings and their values. +.IP "\fB\-\-config file \fP " 10 +Use a different settings file. +.IP "\fB\-\-author\fP " 10 +Show author of program. +.IP "\fB-v, \-\-version\fP " 10 +Show version of program. +.IP "\fB\-\-license\fP " 10 +Show license of program. +.SH "AUTHOR" +.PP +This manual page was written by Eike Sauer for +the \fBDebian\fP system (but may be used by others). Permission is +granted to copy, distribute and/or modify this document under +the terms of the GNU General Public License, Version 2 +(or, at your option, any later version published by the Free +Software Foundation). + +.PP +On Debian systems, the complete text of the GNU General Public +License can be found in /usr/share/common-licenses/GPL. + +.\" created by instant / docbook-to-man, Tue 13 Nov 2007, 15:25 diff --git a/doc/en/kpart.html b/doc/en/kpart.html new file mode 100644 index 0000000..63094d3 --- /dev/null +++ b/doc/en/kpart.html @@ -0,0 +1,22 @@ +Using KDiff3 as a KPart
Using KDiff3 as a KPart

Using KDiff3 as a KPart

+KDiff3 is a KPart. Currently it implements the KParts::ReadOnlyPart-interface. +

+It's main use is as difference-viewer in KDevelop. KDevelop always starts the +internal difference viewer first. To invoke KDiff3 press the right mouse button +on the difference viewer window and select "Show in KDiff3Part" from the contextmenu. +

+KDiff3 normally requires two complete files as input. When used as part KDiff3 +will assume that the inputfile is a patch-file in the unified format. KDiff3 +then retrieves the original filenames from the patch-file. At least one of +the two files must be available. KDiff3 will then invoke patch to +recreate the second file. +

+In Konqueror you can select a patch-file and select "Preview in"-"KDiff3Part" from +the contextmenu. Be aware that this won't work if none of the original files are +available, and it is not reliable if the original file(s) have changed since the +patch-file was generated. +

+When run as a part KDiff3 only provides the a two-file-diff, a very small toolbar +and menu. Merging or directory-comparison are not supported then. +



Would you like to make a comment or contribute an update to this page?
+ Send feedback to the KDE Docs Team

\ No newline at end of file diff --git a/doc/en/letter_by_letter.png b/doc/en/letter_by_letter.png new file mode 100644 index 0000000..8ddd48a Binary files /dev/null and b/doc/en/letter_by_letter.png differ diff --git a/doc/en/merge_current.png b/doc/en/merge_current.png new file mode 100644 index 0000000..3f2e341 Binary files /dev/null and b/doc/en/merge_current.png differ diff --git a/doc/en/merging.html b/doc/en/merging.html new file mode 100644 index 0000000..7331292 --- /dev/null +++ b/doc/en/merging.html @@ -0,0 +1,195 @@ +Merging And The Merge Output Editor Window
Merging And The Merge Output Editor Window

Merging And The Merge Output Editor Window



+ The merge output editor window (below the diff input windows) also has an info line at the top showing "Output:", the + filename and "[Modified]" if you edited something. Usually it will contain + some text through the automatic merge facilities, but often it will also + contain conflicts. +

+ !!! Saving is disabled until all conflicts are resolved !!! (Use the "Go + to prev/next unsolved conflicts"-buttons to find the remaining conflicts.) +

+ With only two input files every difference is also a conflict that must + be solved manually. +

+ With three input files the first file is treated as base, while the + second and third input files contain modifications. When at any line only + either input B or input C have changed but not both then the changed source + will automatically be selected. Only when B and C have changed on the same + lines, then the tool detects a conflict that must be solved manually. + When B and C are the same, but not the same as A, then C is selected. +

The Summary Column

+ The merge output editor window also has a summary column on the left. It shows the + letter of the input from which a line was selected or nothing if all three + sources where equal on a line. For conflicts it shows a questionmark "?" + and the line shows "<Merge Conflict>", all in red. Because solving + conflicts line by line would take very long, the lines are grouped into + groups that have the same difference and conflict characteristics. + But only-white-space-conflicts are separated from non-white-space-conflicts + in order to ease the merging of files were the indentation changed for many + lines. +

Setting The Current Group And Synchronising Merge And Diff View Position

+ When clicking into the summary column with the left mouse button in either + window then the beginning of the group belonging to that line will shown in all windows. + This group then becomes the "current group". It is highlighted with the + "Current range (diff) background color" and + a black bar appears on the left side of the text. +

Choosing Inputs A, B or C For Current Conflict And Editing

+ The button bar below the menubar contains three input selector buttons + containing the letters "A", "B" and "C". Click the input selector + button to insert (or remove if already inserted) the lines from the respective source. + To choose the lines from several inputs click the respective buttons in the + needed order. For example if you want that the lines from "B" appear before + the lines from "A" in the output, first click "B", then "A". +

+ If you use the auto-advance option + ("Automatically go to next unsolved conflict after source selection"), + you should disable this before choosing lines from several inputs or if you want to + edit the lines after your choice. Otherwise KDiff3 will jump to the next + conflict after choosing the first input. +

+ It is often helpful directly edit the merge output. + The summary column will show "m" for every line that was manually modified. + When for instance the differences are aligned in a way that simply choosing + the inputs won't be satisfactory, then you can mark the needed text and use + normal copy and paste to put it into the merge output. +

+ Sometimes, when a line is removed either by automatic merge or by editing + and no other lines remain in that group, then the text <No src line> + will appear in that line. This is just a placeholder for the group for + when you might change your mind and select some source again. This text won't + appear in the saved file or in any selections you want to copy and paste. +

+ The text "<Merge Conflict>" will appear in the clipboard if you + copy and paste some text containing such a line. But still be careful to + do so. +

Choosing Input A, B, or C for All Conflicts

+ The normal merge will start by solving simple conflicts automatically. + But the "Merge"-menu provides some actions for other common needs. + If you have to select the same source for most conflicts, then you can + choose "A", "B" or "C" everywhere, or only for the remaining unsolved + conflicts, or for unsolved white space conflicts. If you want to decide every + single delta yourself, you can "Set deltas to conflicts". Or if you want to + return to the automatic choices of KDiff3 then select + "Automatically solve simple conflicts". KDiff3 then restarts the merge. + For actions that change your previous modifications KDiff3 will ask for your + confirmation before proceeding. +

+ Note: When choosing either source for unsolved white space conflicts and + the options "Ignore Numbers" or "Ignore C/C++ Comments" are used then changes in + numbers or comments will be treated like white space too. + +

Automatic Merge of Version Control Keywords and History (Log)

+Many version control systems support special keywords in the file. (e.g. "$Date$", +"$Header$", "$Author$", "$Log$" etc.) During the +check-in the version control system (VCS) changes these lines. For instance +"$Date$" will turn into "$Date: 2005/03/22 18:45:01 $". Since this line will +be different in every version of the file, it would require manual interaction +during the merge. +

+KDiff3 offers automatic merge for these items. For simple lines that match the +"Auto merge regular expression"-option in all input-files KDiff3 will choose +the line from B or - if available - from C. (Additionally it is necessary that the lines +in question line up in the comparison and the previous line contains no conflict.) +This auto merge can either be run immediately after a merge starts (activate the option +"Run regular expression auto merge on merge start") or later via the merge +menu "Run Regular Expression Auto Merge". +

+Automatic merge for version control history (also called "log") is also supported. +The history automerge can either run immediately when the merge starts by activating the +option "Merge version control history on merge start" or later via the merge menu +"Automatically Solve History Conflicts". +

+Usually the version control history begins with a line containing the keyword "$Log$". +This must be matched by the "History start regular expression"-option. +KDiff3 detects which subsequent lines are in the history by analysing the leading characters +that came before the "$Log$"-keyword. If the same "leading comment"-characters also appears in the following +lines, then they are also included in the history. +

+During each check-in the VCS writes a unique line specifying version-, date- and time-information +followed by lines with user comments. +These lines form one history-entry. This history section grows with every check-in and the +most recent entries appear at the top (after the history start line). +

+When for parallel development two or more developers check-in a branch of the file then +the merge history will contain several entries that appear as conflicts during the merge +of the branches. Since merging these can become very tedious, KDiff3 offers support with two +possible strategies: Just insert the history information from both contributors at the top +or sort the history information by a user defined key. +

+The just-insert-all-entries-method is easier to configure. KDiff3 just needs a method to +detect, which lines belong to one history entry. Most VCS insert an empty line after each +history entry. If there are no other empty lines, this is a sufficient criterion for KDiff3. +Just set an empty "History entry start regular expression". If the empty line criterion +isn't sufficient, you can specify a regular expression to detect the history entry start. +

+Note that KDiff3 will remove duplicate history entrys. If a history entry appeared several times +in the history of a input file, only one entry will remain in the output. +

+If you want to sort the history, then you have to specify how the sort key should be built. +Use parentheses in the "History entry start regular expression" to group parts of the regular +expression that should later be used for the sort key. +Then specify the "History entry start sort key order" specifying a comma "," separated list of +numbers referring to the position of the group in the regular expression. +

+Because this is not so easy to get right immediately, you are able to test and improve +the regular expressions and key-generation in a dedicated dialog by pressing the +"Test your regular expressions"-button. +

Example: Assume a history that looks like this: +

+/**************************************************************************
+** HISTORY:    $Log: \toms_merge_main_view\MyApplication\src\complexalgorithm.cpp $
+**
+**     \main\integration_branch_12   2 Apr 2001 10:45:41   tom
+**  Merged branch simon_branch_15.
+**
+**     \main\henry_bugfix_branch_7\1   30 Mar 2001 19:22:05   henry
+**  Improved the speed for subroutine convertToMesh().
+**  Fixed crash.
+**************************************************************************/
+
+The history start line matches the regular expression ".*\$Log.*\$.*". Then follow +the history entries. +

+The line with the "$Log$"-keyword begins with two "*" after which follows a space. +KDiff3 uses the first non-white-space string as "leading comment" and assumes that +the history ends in the first line without this leading comment. In this example the +last line ends with a string that also starts with two "*", but instead of a space +character more "*" follow. Hence this line ends the history. +

+If history sorting isn't required then the history entry start line regular expression +could look like this. (This line is split in two because it wouldn't fit otherwise.) +

+\s*\\main\\\S+\s+[0-9]+ (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)
+ [0-9][0-9][0-9][0-9] [0-9][0-9]:[0-9][0-9]:[0-9][0-9]\s+.*
+
+For details about regular expressions please see the +regular expression documentation by Trolltech. +Note that "\s" (with lowercase "s") matches any white space and "\S" (with uppercase "S") matches any non-white-space. +In our example the history entry start contains first the version info with reg. exp. "\\main\\\S+", the date consisting of day "[0-9]+", month "(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)" and year "[0-9][0-9][0-9][0-9]", the time "[0-9][0-9]:[0-9][0-9]:[0-9][0-9]" and finally the developers login name ".*". +

+Note that the "leading comment"-characters (in the example "**") will already be removed by KDiff3 +before trying to match, hence the regular expression begins with a match for none or more white-space characters "\s*". +Because comment characters can differ in each file (e.g. C/C++ uses other comment characters than a Perl script) +KDiff3 takes care of the leading comment characters and you should not specify them in the regular expression. +

+If you require a sorted history. Then the sortkey must be calculated. For this the +relevant parts in the regular expression must be grouped by parentheses. +(The extra parentheses can also stay in if history sorting is disabled.) +

+\s*\\main\\(\S+)\s+([0-9]+) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)
+ ([0-9][0-9][0-9][0-9]) ([0-9][0-9]:[0-9][0-9]:[0-9][0-9])\s+(.*)
+
+The parentheses now contain 1. version info, 2. day, 3. month, 4. year, 5. time, 6. name. +But if we want to sort by date and time, we need to construct a key with the elements in a different order of appearance: +First the year, followed by month, day, time, version info and name. Hence the sortkey order to specify is "4,3,2,5,1,6". +

+Because month names aren't good for sorting ("Apr" would be first) KDiff3 detects in which order +the month names were given and uses that number instead ("Apr"->"04"). +And if a pure number is found it will be transformed to a 4-digit value with leading zeros for sorting. +Finally the resulting sort key for the first history entry start line will be: +

+2001 04 0002 10:45:41 integration_branch_12   tom 
+
+

+For more information also see Merge Settings. +



Would you like to make a comment or contribute an update to this page?
+ Send feedback to the KDE Docs Team

\ No newline at end of file diff --git a/doc/en/misc.html b/doc/en/misc.html new file mode 100644 index 0000000..34b13cf --- /dev/null +++ b/doc/en/misc.html @@ -0,0 +1,49 @@ +Chapter 4. Miscellaneous Topics
Miscellaneous Topics

Chapter 4. Miscellaneous Topics

Networktransparency via KIO

KIO-Slaves

+KDE supports networktransparency via KIO-slaves. KDiff3 uses this +for reading input files and for scanning directories. +This means that you can specify files and directories on local and +remote resources via URLs. +

+Example: +

+

+   kdiff3 test.cpp  ftp://ftp.faraway.org/test.cpp
+   kdiff3 tar:/home/hacker/archive.tar.gz/dir ./dir
+
+

The first line compares a local file with a file on an FTP-server. The second line +compares a directory within an compressed archive with a local directory. +

+Other KIO-slaves that are interesting are: +

  • Files from the WWW (http:),

  • Files from the FTP (ftp:),

  • Encrypted file transfer (fish:, sftp:),

  • Windows-ressources (smb:),

  • Local files (file:),

+Other things that are possible, but probably less useful are: +

  • Man-pages (man:),

  • Info-pages (info:),

How To Write URLs

+ An URL has a different syntax compared with paths for local files and directories. + Some things should be considered: +

  • + A path can be relative and can contain "." or "..". This is not possible for URLs + which are always absolute. +

  • + Special characters must be written with "escaping". ("#"->"%23", space->"%20", etc.) + E.g. A file with the name "/#foo#" would have the URL "file:/%23foo%23". +

  • + When URLs don't work as expected, try to open them in Konqueror first. +

Capabilities of KIO-Slaves

+ Networktransparency has one drawback: Not all ressources have the same cababilities. +

+ Sometimes this is due to the file system of the server, sometimes due to the protocol. + Here is a short list of restrictions: +

  • + Sometimes there is no support for links. +

  • + Or there is no way to distinguish if a link points to a file or a directory; always + assuming a file. (ftp:, sftp:). +

  • + Can't always determine the filesize. +

  • + Limited support for permissions. +

  • + No possibility to modify permissions or modification time, so permissions or time + of a copy will differ from the original. (See the option "Trust the size".) + (To modify permissions or modification time is only possible for local files.) +



Would you like to make a comment or contribute an update to this page?
+ Send feedback to the KDE Docs Team

\ No newline at end of file diff --git a/doc/en/navigation.html b/doc/en/navigation.html new file mode 100644 index 0000000..ccfce59 --- /dev/null +++ b/doc/en/navigation.html @@ -0,0 +1,38 @@ +Navigation And Editing
Navigation And Editing

Navigation And Editing

+ Much navigation will be done with the scroll bars and the mouse but + you can also navigate with the keys. If you click into either window then + you can use the cursor buttons left, right, up, down, page up, page down, + home, end, ctrl-home, ctrl-end as you would in other programs. The overview-column + next to the vertical scroll bar of the input files can also be used for + navigating by clicking into it. +

+ You can also use the wheel mouse to scroll up and down. +

+ In the merge output editor you can also use the other keys for editing. + You can toggle between insert and overwrite mode with the insert key. (Default + is insert-mode.) +

+ A left-mouse-button-click into any summary column will synchronise all + windows to show the beginning of the same group of lines (as explained + in section "Setting The Current Group And Synchronising Merge And Diff View Position"). +

+ The button bar also contains nine navigation buttons with which you can + jump to the current/first/last difference, to the next/previous difference + (ctrl-down/ctrl-up), to the next/previous conflict (ctrl-pgdown/ctrl-pgup), + or to the next/previous unsolved conflict. Note that for KDiff3 a "conflict" + that was not automatically solved at the start of the merge stays a "conflict" + even if it is solved. Hence the necessity to distinguish "unsolved conflicts". +

Auto-Advance

+ There also is a button "Automatically go to next unsolved conflict after + source selection" (Auto-Advance). If you enable this, then, when one source + is selected, KDiff3 will jump to and select the next unsolved conflict + automatically. This can help when you always want to choose one source only. + When you need both sources, or you want to edit after selecting, then you + probably want to switch this off. Before proceeding to the next unsolved conflict + KDiff3 shows you the effect of your choice for a short time. This delay is + adjustable in the Diff- & Merge-Settings: You can + specify the "Auto-Advance delay" in milli seconds between 0 and 2000. Hint: + Tired of many clicks? - Use a small Auto-Advance-delay and the shortcuts + Ctrl-1/2/3 to select A/B/C for many conflicts. +



Would you like to make a comment or contribute an update to this page?
+ Send feedback to the KDE Docs Team

\ No newline at end of file diff --git a/doc/en/new.png b/doc/en/new.png new file mode 100644 index 0000000..df3fd25 Binary files /dev/null and b/doc/en/new.png differ diff --git a/doc/en/open_dialog.png b/doc/en/open_dialog.png new file mode 100644 index 0000000..029f8d4 Binary files /dev/null and b/doc/en/open_dialog.png differ diff --git a/doc/en/opendialog.html b/doc/en/opendialog.html new file mode 100644 index 0000000..58ec755 --- /dev/null +++ b/doc/en/opendialog.html @@ -0,0 +1,23 @@ +Open-Dialog
Open-Dialog

Open-Dialog

+ Since many input files must be selectable, the program has a special open dialog: +



+ The open dialog allows to edit the filenames by hand, selecting a file + via the file-browser ("File...") or allows to choose recent files from + the drop-down lists. If you open the dialog again, then the current names + still remain there. The third input file is not required. If the + entry for "C" remains empty, then only a two file diff analysis will be + done. +

+ You can also select a directory via "Dir...". If for A a directory is specified + then a directory-comparison/merge starts. If A specifies a file but B, C or + the output specify a directory, then KDiff3 uses the filename from A in the + specified directories. +

+ If "Merge" is selected, then the "Output"-line becomes editable. But it + is not required to specify the output filename immediately. You can also + postpone this until saving. +

+ The "Configure..."-button opens the options-dialog, so that you can set + the options before running the analysis. +



Would you like to make a comment or contribute an update to this page?
+ Send feedback to the KDE Docs Team

\ No newline at end of file diff --git a/doc/en/options.html b/doc/en/options.html new file mode 100644 index 0000000..cff21f9 --- /dev/null +++ b/doc/en/options.html @@ -0,0 +1,138 @@ +Options
Options

Options

+ Options and the recent-file-list will be saved when you exit the program, + and reloaded when you start it. (Menu Settings->Configure KDiff3 ...) +

Font

+ Select a fixed width font. (On some systems this dialog will also + present variable width fonts, but you should not use them.) +

Italic Font for Deltas:

If you select this, then text differences + will be drawn with the italic version of the selected font. If the font + doesn't support italic, then this does nothing.

Colors

Foreground color:

Usually black.

Background color:

Usually white.

Diff Background color:

Usually light gray.

Color A:

Usually dark blue.

Color B:

Usually dark green.

Color C:

Usually dark magenta.

Conflict Color:

Usually red.

Current range background color:

Usually light yellow.

Current range diff background color:

Usually dark yellow.

Color for manually selected diff ranges:

Usually orange.

Newest file color in directory comparison:

Usually green.

Oldest file color in directory comparison:

Usually red.

Middle age file color in directory comparison:

Usually dark yellow.

Color for missing files in directory comparison:

Usually black.

+ Changing the colors for directory comparison will be effective only when starting the next directory comparison. +

+ On systems with only 16 or 256 colors some colors are not available in pure + form. On such systems the "Defaults"-button will choose a pure color. +

Editor Settings

Tab inserts spaces:

If this is disabled and you press the + tabulator key, a tab-character is inserted, otherwise the appropriate + amount of characters is inserted.

Tab size:

Can be adjusted for your specific needs. Default is 8.

Auto indentation:

When pressing Enter or Return the indentation + of the previous line is used for the new line.

Auto copy selection:

Every selection is immediately copied + to the clipboard when active and you needn't explicitely copy it.

Line end style:

When saving you can select what line + end style you prefer. The default setting is the common choice for the used operating system.

Diff Settings

+ When comparing files, KDiff3 first it tries to match lines that are equal + in all input files. Only during this step it might ignore white space. The + second step compares each line. In this step white space will not be ignored. + Also during the merge white space will not be ignored. +

Preserve Carriage Return:

Some editors (on some systems) save + carriage return '\r' and linefeed '\n'-characters at the end of line, while + others will only save the linefeed '\n'. Usually KDiff3 ignores the carriage + return, but then files that don't have equal sizes, look equal in side by + side comparison. When this option is on, then the carriage return characters + are made visible but are treated as white space. This option must be off + during a merge. Default is off.

Ignore numbers:

Default is off. Number characters ('0'-'9', '.', '-') + will be ignored in the first part of the analysis in which the line matching is + done. In the result the differences will be shown nevertheless, but they are treated + as white space. +

Ignore C/C++ comments:

Default is off. + Changes in comments will be treated like changes in white space. +

Ignore case:

Default is off. + Case-differences of characters (like 'A' vs. 'a') will be treated like changes in white space. +

Preprocessor-Command:

+ See next section. +

Line-Matching Preprocessor-Command:

+ See next section. +

Try Hard:

+ Try hard to find an even smaller delta. (Default is on.) This will probably + be effective for complicated and big files. And slow for very big files. +

Merge Settings

Auto Advance Delay (ms):

When in auto-advance-mode this setting specifies + how long to show the result of the selection before jumping to the next unsolved + conflict. +

White space 2/3-file merge default:

+ Automatically solve all white-space conflict by choosing the specified file. + (Default is manual choice.) Useful if white space really isn't important in many files. + If you need this only occasionally better use "Choose A/B/C For All Unsolved Whitespace Conflicts" + in the merge menu. Note that if you enable either "Ignore numbers" or "Ignore C/C++ comments" + then this auto-choice also applies for conflicts in numbers or comments. +

Auto merge regular expression:

+ Regular expression for lines where KDiff3 should automatically choose one source. See also Automatic Merge ... +

Run regular expression auto merge on merge start:

+ If activated KDiff3 runs the automatic merge using the "Auto merge regular expression" when a merge is started. +

History start regular expression:

+ Regular expression for the start of the merge history entry. + Usually this line contains the "$Log$"-keyword. + Default value: ".*\$Log.*\$.*" +

History entry start regular expression:

+ A merge history entry consists of several lines. + Specify the regular expression to detect the first line (without the leading comment). + Use parentheses to group the keys you want to use for sorting. + If left empty, then KDiff3 assumes that empty lines separate history entries. + See also Automatic Merge ... +

History merge sorting:

+ Enable version control history sorting. +

History entry start sort key order:

+ Each parentheses used in the regular expression for the history start entry + groups a key that can be used for sorting. + Specify the list of keys (that are numbered in order of occurrence + starting with 1) using ',' as separator (e.g. "4,5,6,1,2,3,7"). + If left empty, then no sorting will be done. + See also Automatic Merge ... +

Merge version control history on merge start:

+ If activated KDiff3 runs the automatic history merging using aforementioned options when a merge is started. +

Max number of history entries:

+ KDiff3 truncates the history list after the specified number of entries. Use -1 to avoid truncation. (Default is -1). +

Test your regular expressions

+ This button shows a dialog that allows you to improve and test the regular expressions above. + Just copy the respective data from your files into the example lines. The "Match results" + will immediately show whether the match succeeds or not. + The "Sort key result" will display the key used for history merge sorting. +

Irrelevant merge command:

+ Specify a command of your own that should be called when KDiff3 detects + that for a three file merge the file from B doesn't contribute any + relevant data that isn't already contained in the file from C. + The command is called with the three filenames as parameters. + Data matched by the "Auto merge regular expression" or in the + history isn't considered relevant. +

Directory Merge

+ These options are concerned with scanning the directory and handling the + merge: See the Directory Comparison/Merge + Docs for details. +

+Yet there is one option here that is also relevant for saving single files: +

Backup files:

When a file is saved and an older version already + exists, then the original version will be renamed with an ".orig" extension. + If an old backup file with ".orig" extension already exists then this will + be deleted without backup. +

Regional and Language Options

Language:

Adjust the language of the user interface. Changing this option doesn't affect the running program. You have to exit and restart KDiff3 so that the language is changed. (This option is not available in the KDE version of KDiff3 because the language is adjustable in the global KDE settings.) +

Use the same encoding for everything:

The following encoding options can be adjusted separately for each item or if this option is true, all values will take the first value. +

Local Encoding:

Above the codec-selectors appears a note that tells you what the local encoding is. (This is not adjustable but for your information just in case you don't know your local encoding, but need to select it.) +

File Encoding for A/B/C:

Adjust the file encoding for input files. This has an effect on how the special characters are interpreted. Since you can adjust each codec separately you can even compare and merge files that were saved using different codecs. +

File Encoding for Merge Output and Saving:

When you have edited a file, then you can adjust which encoding will be used when saving to disk. +

File Encoding for Preprocessor Files:

When you define preprocessors then they might not be able to operate on your codec. (e.g.: Your files are 16-bit-unicode and your preprocessor can only take 8-bit-ascii.) With this option you can define the encoding of preprocessor output. +

Right To Left Language:

Some languages are written right to left. When this option is enabled, KDiff3 draws the text from right to left in the diff input windows and in the merge output window. Note that if you start KDiff3 with the command line option "--reverse" then all layouting will be done right to left too. (This is a feature provided by Qt.) This documentation was written assuming that "Right To Left Language" or reverse layout are disabled. So some references to "left" or "right" must be replaced by their respective counterpart if you use these options. +

Miscellaneous

(These options and actions are available in menus or the buttonbar.)

Show line numbers:

You can select if line numbers should be + shown for the input files.

Show space and tabulator characters for differences:

Sometimes + the visible spaces and tabs are disturbing. You can turn this off.

Show white space:

Turn this off to suppress + any highlighting of white-space-only changes in the text or overview-columns. + (Note that this also applies to changes in numbers or comments if the options "Ignore numbers" + or "Ignore C/C++ comments" are active.)

Overview options:

+ These choices are only available when you compare three files. In normal mode all + differences are shown in one color-coded overview-column. But sometimes you are + especially interested in the differences between only two of these three files. + Selecting "A vs. B", "A vs. C" or "B vs. C"-overview will show a second overview + column with the required information next to the normal overview. +

Word wrap diff windows:

+ Wrap lines when their length would exceed the width of a window. +

Show Window A/B/C:

Sometimes you want to use the space on + the screen better for long lines. Hide the windows that are not important. + (In the Windows-menu.)

Toggle Split Orientation:

+ Switch between diff windows shown next to each other (A left of B left of C) or above + each other (A above B above C). This should also help for long lines. (In the Windows-menu.) +

Start a merge quickly:

+ Sometimes you are viewing the deltas and decide to merge. + + "Merge current file" in the Directory-menu also works if you only compare + two files. A single click starts the merge and uses the filename of the last + input-file as the default output filename. (When this is used to restart + a merge, then the output filename will be preserved.)

Configuring Keyboard-Shortcuts

+ Currently only the KDE-version supports user-configurable keyboard-shortcuts. + (Menu Settings->Configure Shortcuts...) +



Would you like to make a comment or contribute an update to this page?
+ Send feedback to the KDE Docs Team

\ No newline at end of file diff --git a/doc/en/other.html b/doc/en/other.html new file mode 100644 index 0000000..8919bd5 --- /dev/null +++ b/doc/en/other.html @@ -0,0 +1,33 @@ +Other Functions in Directory Merge Window
Other Functions in Directory Merge Window

Other Functions in Directory Merge Window

Split/Full Screen Mode

+ Usually the directory merge list view remains visible while a single file + is compared or merged. With the mouse you can move the the splitter bar that + separates the file list from the text-diff windows. If you don't want this, + you can disable "Split Screen View" in the "Directory"-menu. Then you can + use "Toggle View" in the "Directory"-menu to switch between the file list + and the text-diff view that then occupy the full screen. +

Comparing or Merging a Single File

+ Probably you will prefer a simple double mouse click on a file in order + to compare it. Nevertheless there also exists an entry in the "Directory"-menu. + You can also directly merge a single file by selecting it and + choosing "Merge current file" in the "Merge"-Menu. On saving the + result, the status will be set to done, and the file will not be merged again + if a directory merge is started. +

+ But note that this status information will be lost when you rerun a directory + scan: "Directory"-menu: "Rescan" +

Comparing or Merging Files with Different Names

+ Sometimes you need to compare or merge files with different names (e.g. the current + file and the backup in the same folder). +

+ Select the exact file by clicking onto the icon in the column A, B or C. The first + file selected thus will be marked with an "A", the second and third with "B" and "C" + regardless on what column they are in. Only up to three files can be chosen like this. +

+ Proceed by choosing "Compare Explicitely Selected Files" or "Merge Explicitely + Selected Files" from the "Directory"-menu. For your convenience these menu entries + also appear as context menu when you right-click the last selected file. +

+ The comparison or merge of a file will happen in the same window. + If this method is used for directories a new window will be opened. +



Would you like to make a comment or contribute an update to this page?
+ Send feedback to the KDE Docs Team

\ No newline at end of file diff --git a/doc/en/pasteinput.html b/doc/en/pasteinput.html new file mode 100644 index 0000000..8d913ba --- /dev/null +++ b/doc/en/pasteinput.html @@ -0,0 +1,20 @@ +Paste and Drop Input
Paste and Drop Input

Paste and Drop Input

+ Sometimes you want to compare parts of a text that is not an own file. KDiff3 also + allows you to paste text from the clipboard into the diff input window that has the focus. + The diff analysis happens immediately then. + In the open dialog you need not specify files then, but just close it via "Cancel". +

+ You can also use drag and drop: Drag a file from a file manager + or selected text from an editor and drop it onto a diff input window. +

+ What's the idea? Sometimes a file contains two similar functions, but checking how similar + they really are is a big effort if you first must create two files and then load them. Now + you can simply copy, paste and compare the relevant sections. +

+ Note: Currently you cannot drag anything from KDiff3. Only dropping in the diff input + is supported. +

+ Warning: Some editors still interpret the drag and drop into another program like cut + (instead of copy) and paste. Your original data might be lost then. +



Would you like to make a comment or contribute an update to this page?
+ Send feedback to the KDE Docs Team

\ No newline at end of file diff --git a/doc/en/preprocessors.html b/doc/en/preprocessors.html new file mode 100644 index 0000000..427f717 --- /dev/null +++ b/doc/en/preprocessors.html @@ -0,0 +1,202 @@ +Preprocessor Commands
Preprocessor Commands

Preprocessor Commands

+KDiff3 supports two preprocessor options. +

+

Preprocessor-Command:

+ When any file is read, it will be piped through this external command. + The output of this command will be visible instead of the original file. + You can write your own preprocessor that fulfills your specific needs. + Use this to cut away disturbing parts of the file, or to automatically + correct the indentation etc. +

Line-Matching Preprocessor-Command:

+ When any file is read, it will be piped through this external command. If + a preprocessor-command (see above) is also specified, then the output of the + preprocessor is the input of the line-matching preprocessor. + The output will only be used during the line matching phase of the analysis. + You can write your own preprocessor that fulfills your specific needs. + Each input line must have a corresponding output line. +

+

+The idea is to allow the user greater flexibility while configuring the diff-result. +But this requires an external program, and many users don't want to write one themselves. +The good news is that very often sed or perl +will do the job. +

Example: Simple testcase: Consider file a.txt (6 lines): +

+      aa
+      ba
+      ca
+      da
+      ea
+      fa
+
+And file b.txt (3 lines): +
+      cg
+      dg
+      eg
+
+Without a preprocessor the following lines would be placed next to each other: +
+      aa - cg
+      ba - dg
+      ca - eg
+      da
+      ea
+      fa
+
+This is probably not wanted since the first letter contains the actually interesting information. +To help the matching algorithm to ignore the second letter we can use a line matching preprocessor +command, that replaces 'g' with 'a': +
+   sed 's/g/a/'
+
+With this command the result of the comparison would be: +
+      aa
+      ba
+      ca - cg
+      da - dg
+      ea - eg
+      fa
+
+Internally the matching algorithm sees the files after running the line matching preprocessor, +but on the screen the file is unchanged. (The normal preprocessor would change the data also on +the screen.) +

sed Basics

+This section only introduces some very basic features of sed. For more +information see info:/sed or + +http://www.gnu.org/software/sed/manual/html_mono/sed.html. +A precompiled version for Windows can be found at +http://unxutils.sourceforge.net. +Note that the following examples assume that the sed-command is in some +directory in the PATH-environment variable. If this is not the case, you have to specify the full absolute +path for the command. +

Note

Also note that the following examples use the single quotation mark (') which won't work for Windows. +On Windows you should use the double quotation marks (") instead.

+In this context only the sed-substitute-command is used: +

+   sed 's/REGEXP/REPLACEMENT/FLAGS'
+
+Before you use a new command within KDiff3, you should first test it in a console. +Here the echo-command is useful. Example: +
+   echo abrakadabra | sed 's/a/o/'
+   -> obrakadabra
+
+This example shows a very simple sed-command that replaces the first occurance +of "a" with "o". If you want to replace all occurances then you need the "g"-flag: +
+   echo abrakadabra | sed 's/a/o/g'
+   -> obrokodobro
+
+The "|"-symbol is the pipe-command that transfers the output of the previous +command to the input of the following command. If you want to test with a longer file +then you can use cat on Unix-like systems or type +on Windows-like systems. sed will do the substitution for each line. +
+   cat filename | sed options
+
+

Examples For sed-Use In KDiff3

Ignoring Other Types Of Comments

+Currently KDiff3 understands only C/C++ comments. Using the +Line-Matching-Preprocessor-Command you can also ignore +other types of comments, by converting them into C/C++-comments. + +Example: To ignore comments starting with "#", you would like to convert them +to "//". Note that you also must enable the "Ignore C/C++-Comments" option to get +an effect. An appropriate Line-Matching-Preprocessor-Command would be: + +

+   sed 's/#/\/\//'
+
+Since for sed the "/"-character has a special meaning, it is necessary to place the +"\"-character before each "/" in the replacement-string. Sometimes the "\" is required +to add or remove a special meaning of certain characters. The single quotation marks (') before +and after the substitution-command are important now, because otherwise the shell will +try to interpret some special characters like '#', '$' or '\' before passing them to +sed. Note that on Windows you will need the double quotation marks (") here. Windows +substitutes other characters like '%', so you might have to experiment a little bit. +

Caseinsensitive Diff

+Use the following Line-Matching-Preprocessor-Command to convert all input to uppercase: +

+   sed 's/\(.*\)/\U\1/'
+
+Here the ".*" is a regular expression that matches any string and in this context matches +all characters in the line. +The "\1" in the replacement string refers to the matched text within the first pair of "\(" and "\)". +The "\U" converts the inserted text to uppercase. +

Ignoring Version Control Keywords

+CVS and other version control systems use several keywords to insert automatically +generated strings (info:/cvs/Keyword substitution). +All of them follow the pattern "$KEYWORD generated text$". We now need a +Line-Matching-Preprocessor-Command that removes only the generated text: +

+   sed 's/\$\(Revision\|Author\|Log\|Header\|Date\).*\$/\$\1\$/'
+
+The "\|" separates the possible keywords. You might want to modify this list +according to your needs. +The "\" before the "$" is necessary because otherwise the "$" matches the end of the line. +

+While experimenting with sed you might come to understand and even like +these regular expressions. They are useful because there are many other programs that also +support similar things. +

Ignoring Numbers

+Ignoring numbers actually is a built-in option. But as another example, this is how +it would look as a Line-Matching-Preprocessor-command. +

+   sed 's/[0123456789.-]//g'
+
+Any character within '[' and ']' is a match and will be replaced with nothing. +

Ignoring Certain Columns

+Sometimes a text is very strictly formatted, and contains columns that you always want to ignore, while there are +other columns you want to preserve for analysis. In the following example the first five columns (characters) are +ignored, the next ten columns are preserved, then again five columns are ignored and the rest of the line is preserved. +

+   sed 's/.....\(..........\).....\(.*\)/\1\2/'
+
+Each dot '.' matches any single character. The "\1" and "\2" in the replacement string refer to the matched text within the first +and second pair of "\(" and "\)" denoting the text to be preserved. +

Combining Several Substitutions

+Sometimes you want to apply several substitutions at once. You can then use the +semicolon ';' to separate these from each other. Example: +

+   echo abrakadabra | sed 's/a/o/g;s/\(.*\)/\U\1/'
+   -> OBROKODOBRO
+
+

Using perl instead of sed

+Instead of sed you might want to use something else like +perl. +

+   perl -p -e 's/REGEXP/REPLACEMENT/FLAGS'
+
+But some details are different in perl. Note that where +sed needed "\(" and "\)" perl +requires the simpler "(" and ")" without preceding '\'. Example: +
+   sed 's/\(.*\)/\U\1/'
+   perl -p -e 's/(.*)/\U\1/'
+
+

Order Of Preprocessor Execution

+The data is piped through all internal and external preprocessors in the +following order: +

  • Normal preprocessor,

  • Line-Matching-Preprocessor,

  • Ignore case (conversion to uppercase),

  • Detection of C/C++ comments,

  • Ignore numbers,

  • Ignore white space

+The data after the normal preprocessor will be preserved for display and merging. The +other operations only modify the data that the line-matching-diff-algorithm sees. +

+In the rare cases where you use a normal preprocessor note that +the line-matching-preprocessor sees the output of the normal preprocessor as input. +

Warning

+The preprocessor-commands are often very useful, but as with any option that modifies +your texts or hides away certain differences automatically, you might accidentally overlook +certain differences and in the worst case destroy important data. +

+For this reason during a merge if a normal preprocessor-command is being used KDiff3 +will tell you so and ask you if it should be disabled or not. +But it won't warn you if a Line-Matching-Preprocessor-command is active. The merge will not complete until +all conflicts are solved. If you disabled "Show White Space" then the differences that +were removed with the Line-Matching-Preprocessor-command will also be invisible. If the +Save-button remains disabled during a merge (because of remaining conflicts), make sure to enable +"Show White Space". If you don't wan't to merge these less important differences manually +you can select "Choose [A|B|C] For All Unsolved White space Conflicts" in the Merge-menu. +



Would you like to make a comment or contribute an update to this page?
+ Send feedback to the KDE Docs Team

\ No newline at end of file diff --git a/doc/en/printing.html b/doc/en/printing.html new file mode 100644 index 0000000..bca62f3 --- /dev/null +++ b/doc/en/printing.html @@ -0,0 +1,20 @@ +Printing
Printing

Printing

+ KDiff3 supports printing for textfile differences. The "Print..."-command (Ctrl-P) + in the File-menu opens a dialog that allows you to select the printer and to adjust + other options. +

+ There are several possibilities to adjust the range. Due to different printing + dialogs on different operating systems, the method to achieve certain range selections varies. +

All:

Print everything.

Current:

Print a page starting at the first visible line in the window. + (On systems without this option this can be achived by specifying page number 10000 for printing.)

Selection:

+ Before choosing to print select text with the mouse (like for copy and paste) + in one of the diff input windows to define the start and end line. If no text + in one of the diff input windows was selected, then this won't be an available + choice. (On systems without this option this can be achived by specifying page + number 9999 for printing.)

Range:

Specify the first and last page. +

+ Other important options for printing will be taken from the normal options: +

  • Font, font size

  • Show line numbers

  • Word wrap

  • Colors

  • etc.

+ Landscape formatting is also recommended for printing. +



Would you like to make a comment or contribute an update to this page?
+ Send feedback to the KDE Docs Team

\ No newline at end of file diff --git a/doc/en/requirements.html b/doc/en/requirements.html new file mode 100644 index 0000000..983137c --- /dev/null +++ b/doc/en/requirements.html @@ -0,0 +1,10 @@ +Requirements
Requirements

Requirements

+ In order to successfully use all features of KDiff3, you need KDE >3.1. +

+ For information about how to run KDiff3 on other platforms without KDE please see the + homepage. +

+You can find a list of changes at http://kdiff3.sourceforge.net/ChangeLog +or in the "ChangeLog"-file of the source package. +



Would you like to make a comment or contribute an update to this page?
+ Send feedback to the KDE Docs Team

\ No newline at end of file diff --git a/doc/en/saving.html b/doc/en/saving.html new file mode 100644 index 0000000..74d24e3 --- /dev/null +++ b/doc/en/saving.html @@ -0,0 +1,16 @@ +Saving
Saving

Saving

+ Saving will only be allowed, when all conflicts were solved. If the file + already exists and the "Backup files"-option is enabled then the existing + file will be renamed with an ".orig"-extension, but if such a file exists + it will be deleted. When you exit or start another diff-analysis and data + wasn't saved yet, then KDiff3 will ask if you want to save, cancel or proceed + without saving. (KDiff3 does not catch any signals. So if you "kill" KDiff3 + then your data will be lost.) +

+ Line endings are saved according to the normal method on the underlying + operating system. For Unices each line ends with an linefeed-character "\n", + while for Win32-based systems each line ends with a carriage-return + a linefeed + "\r\n". KDiff3 does not preserve the line-endings of the input files, which + also means that you shouldn't use KDiff3 with binary files. +



Would you like to make a comment or contribute an update to this page?
+ Send feedback to the KDE Docs Team

\ No newline at end of file diff --git a/doc/en/screenshot_diff.png b/doc/en/screenshot_diff.png new file mode 100644 index 0000000..d2865d5 Binary files /dev/null and b/doc/en/screenshot_diff.png differ diff --git a/doc/en/screenshot_merge.png b/doc/en/screenshot_merge.png new file mode 100644 index 0000000..1eb935b Binary files /dev/null and b/doc/en/screenshot_merge.png differ diff --git a/doc/en/screenshots.html b/doc/en/screenshots.html new file mode 100644 index 0000000..badb664 --- /dev/null +++ b/doc/en/screenshots.html @@ -0,0 +1,15 @@ +Screenshots and Features
Screenshots and Features

Screenshots and Features

This screenshot shows the difference between two text files

(Using an early version of KDiff3):



+ 3-way-merging is fully supported. This is useful if two people change code independently. + The original file (the base) is used to help KDiff3 to automatically select the correct + changes. + The merge-editor below the diff-windows allows you to solve conflicts, while showing you the output you will get. + You can even edit the output. + This screenshot shows three input files being merged: +

+



+

KDiff3 also helps you to compare and merge complete directories. +This screenshot shows KDiff3 during a directory merge: +

+



+



Would you like to make a comment or contribute an update to this page?
+ Send feedback to the KDE Docs Team

\ No newline at end of file diff --git a/doc/en/selections.html b/doc/en/selections.html new file mode 100644 index 0000000..32cd75e --- /dev/null +++ b/doc/en/selections.html @@ -0,0 +1,34 @@ +Select, Copy And Paste
Select, Copy And Paste

Select, Copy And Paste

+ The input windows don't show a cursor, so selections must be made + with the mouse by clicking with the left mouse button at the start, holding + down the mousebutton and moving to the end, where you release the mouse + button again. You can also select a word by double clicking it. In the merge + output editor you can also select via the keyboard by holding the "shift"-button + and navigation with the cursor keys. +

+ If the selection exceeds the visible range you can move the mouse over the + window borders which causes KDiff3 to scroll in that direction. +

+ For very large selections you can also use the navigation keys while holding down + the mouse. E.g. use page up and page down to quickly go to a certain position. At the + end position release the mouse button. +

+ In order to select everything in the current window use menu "Edit"->"Select All" (Ctrl-A). +

+ To copy to the clipboard you must press the "Copy"-button (Ctrl-C or Ctrl-Insert). + But there exists an option "Auto Copy Selection". If this is enabled, + then whatever you select is copied immediately and you don't need to explicitely + copy. But pay attention when using this because the contents of the clipboard + might then be destroyed accidentally. +

+ "Cut" (Ctrl-X or Shift-Delete) copies to the clipboard and deletes the + selected text. +

+ "Paste" (Ctrl-V or Shift-Insert) inserts the text in the clipboard at the + cursorposition or over the current selection. + If you paste to either diff input window the contents of the clipboard will + be shown in that window and the comparison will restart immediately. This is + useful if you want to quickly grab a piece of text from somewhere and + compare it with something else without first creating files. +



Would you like to make a comment or contribute an update to this page?
+ Send feedback to the KDE Docs Team

\ No newline at end of file diff --git a/doc/en/startingdirmerge.html b/doc/en/startingdirmerge.html new file mode 100644 index 0000000..c737748 --- /dev/null +++ b/doc/en/startingdirmerge.html @@ -0,0 +1,22 @@ +Starting Directory Comparison Or Merge
Starting Directory Comparison Or Merge

Starting Directory Comparison Or Merge

+ This is very similar to the single file merge and comparison. You just + have to specify directories on the command line or in the file-open + dialog. +

Compare/Merge two directories:

+   kdiff3 dir1 dir2
+   kdiff3 dir1 dir2 -o destdir
+

+ If no destination directory is specified, then KDiff3 will use dir2. +

Compare/Merge three directories:

+   kdiff3 dir1 dir2 dir3
+   kdiff3 dir1 dir2 dir3 -o destdir
+

+ When three directories are merged then dir1 + is used as the base for the merge. + If no destination directory is specified, then KDiff3 will use dir3 + as the destination directory for the merge. +

+ Note that only the comparison starts automatically, not the merge. For this you first must + select a menu entry or the key F7. (More details later.) +



Would you like to make a comment or contribute an update to this page?
+ Send feedback to the KDE Docs Team

\ No newline at end of file diff --git a/doc/en/triple_diff.png b/doc/en/triple_diff.png new file mode 100644 index 0000000..c635d14 Binary files /dev/null and b/doc/en/triple_diff.png differ diff --git a/doc/en/white_space.png b/doc/en/white_space.png new file mode 100644 index 0000000..e40a1c7 Binary files /dev/null and b/doc/en/white_space.png differ diff --git a/doc/es/Makefile.am b/doc/es/Makefile.am new file mode 100644 index 0000000..2d22aba --- /dev/null +++ b/doc/es/Makefile.am @@ -0,0 +1,4 @@ +KDE_DOCS = kdiff3 +KDE_LANG = es + + diff --git a/doc/es/dirbrowser.png b/doc/es/dirbrowser.png new file mode 100644 index 0000000..d3c63b2 Binary files /dev/null and b/doc/es/dirbrowser.png differ diff --git a/doc/es/dirmergebig.png b/doc/es/dirmergebig.png new file mode 100644 index 0000000..b26b65c Binary files /dev/null and b/doc/es/dirmergebig.png differ diff --git a/doc/es/index.docbook b/doc/es/index.docbook new file mode 100644 index 0000000..981ba5e --- /dev/null +++ b/doc/es/index.docbook @@ -0,0 +1,2936 @@ + +KDiff3"> + + + + +]> + + + + + + +El manual de &kdiff3; + + +Joachim Eibl
joachim.eibl at gmx.de +
+
+ Santiago Fernández Sancho
santi@kde-es.org
Traductor
+
+ + +2002-2006 +Joachim Eibl + + + +&FDLNotice; + + + +2006-04-09 +0.9.89 + + + +&kdiff3; es una herramienta para ver diferencias y fusionar archivos y directorios que: +Compara y fusiona dos o tres archivos o directorios de texto. +Muestra las diferencias línea a línea y caracter a caracter (!). +Proporciona una utilidad de fusión automática. +Tiene un editor para resolver de forma cómoda los conflictos de fusión. +Proporciona transparencia de red a través de KIO. +Tiene opciones para resaltar u ocultar los cambios en los espacios en blanco o en los comentarios. +Soporta Unicode, UTF-8 y otras codificaciones de archivo. +Imprime diferencias. +Soporta claves de control de versiones e historial de fusionado. + +Este documento describe la versión 0.9.89 de &kdiff3;. + + + + + +KDE +kdeextragear +kdiff3 +diferencia +fusión +CVS +triple diferencia +comparar +archivos +directorios +control de versiones +fusión del árbol +diferencias en línea +sincronización +kpart +kio +transparencia de red +editor +espacio en blanco +comentarios + + +
+ +Introducción +¿Otro interfaz para diff? +Ya existen varias herramientas gráficas para diff. ¿Por qué elegir &kdiff3;? Déjeme decirle por qué lo escribí. &kdiff3; se inició debido a la dificultad para hacer la fusión. La fusión es necesaria cuando varias personas trabajan sobre los mismos archivos en un proyecto. Una fusión puede ser algo automatizado, cuando la herramienta de fusionado no solo tiene nuevos archivos modificados (llamados «ramas»), sino también el archivo original (llamado «base»). La herramienta de fusionado seleccionará automáticamente cualquier modificación que se haga solo en una rama. Cuando varios colaboradores cambian la misma línea, la herramienta detecta un conflicto que deberá resolverse manualmente. El fusionado se vuelve difícil porque, por ejemplo, un colaborador cambió muchas cosas y corrigió el sangrado en algunos lugares. Otro colaborador también cambió mucho texto en el mismo archivo, y todo esto dió como resultado varios conflictos durante la fusión. La herramienta que utilizaba, solo mostraba las líneas cambiadas, pero no los cambios hechos en estas líneas. Y no había información sobre los cambios en el sangrado. La fusión era una pequeña pesadilla. Por eso empecé. La primera versión podía mostrar las diferencias en un línea y las diferencias en los espacios en blanco. Después se añadieron otras características para incrementar la utilidad. Por ejemplo, si desea comparar algún texto rápidamente, podrá copiarlo al portapapeles y pegarlo en otra ventana de diff. Una característica que requería un enorme esfuerzo era la capacidad de comparar y fusionar directorios, que convirtió el programa en un navegador de archivos completo. Espero que &kdiff3; le funcione también. ¡Diviértase! Joachim Eibl (2003) + + +Capturas de pantalla y características +Esta captura de pantalla muestra la diferencia entre dos archivos de texto. +(Utilizando una versión temprana de &kdiff3;): + + + + +Existe 3 formas de fusión totalmente soportados. Es práctico si dos personas modifican código de forma independiente. El archivo original (la base) se utiliza para ayudar a &kdiff3; para seleccionar automáticamente los cambios correctos. El editor de fusión bajo la ventana de diferencias le permite resolver los conflictos, a la vez que le muestra la salida. También podrá editar la salida. Esta captura de pantalla muestra tres archivos de entrada que se pueden fusionar: + + + + + +&kdiff3; también le ayuda a comparar y fusionar directorios completos. Esta captura muestra &kdiff3; durante la fusión de un directorio: + + + + + + +Más características +Visor de diferencias línea a línea y caracter a caracter +Utilizando las posibilidades que permite una pantalla gráfica a color &kdiff3; muestra exactamente cuál es la diferencia. Cuando haga algunas revisiones de código, obtendrá algo como ésto. + + + + + +Ver diferencias de espacios en blanco de un vistazo +Los espacios y tabulaciones que difieren se muestran visiblemente. Cuando las líneas difieren solo en la cantidad de espacios en blanco puede verse de un vistazo en la columna resumen en la parte izquierda (no más preocupaciones cuando se hagan cambios en el sangrado). + + + + + +Triple diferencia +Analiza tres archivos y ve dónde está la diferencia. Las ventanas izquierda/central/derecha se llamarán A/B/C y tendrán los colores azul/verde/gris respectivamente. Si un archivo es igual y el otro es diferente en una línea, el color mostrado en el archivo será diferente. El color rojo significa que ambos archivos son diferentes. + + + + + +Fusión cómoda de dos o tres archivos de entrada +&kdiff3; puede utilizarse para fusionar dos o tres archivos de entrada y hacer la fusión todo lo automática que sea posible. El resultado se presentará en una ventana editable donde se podrán resolver la mayor parte de los conflictos con una pulsación de ratón: Seleccione los botones A/B/C de la barra de botones para seleccionar la fuente que se utilizará. También podrá seleccionar más de una fuente. Como la ventana de salida es un editor aunque los conflictos puedan necesitar correcciones más profundas, éste hecho puede resolverse aquí sin ninguna herramienta adicional. + + +Y ... + + Navegación rápida a través de los botones. + Una pulsación del ratón en la columna resumen sincronizará todas las ventanas para mostrar la misma posición. + Seleccione una copia desde cualquier ventana y péguela en la ventana de fusión del resultado. + Columna de vista general que muestra los cambios y conflictos. + Los colores pueden ajustarse a sus preferencias. + Tamaño de pestaña ajustable. + Opción de insertar espacios en lugar de tabuladores. + Abrir archivos cómodamente a través de un diálogo o especificando archivos en la línea de órdenes. + Buscar cadenas en todas las ventanas de texto. Buscar (Ctrl-F) y Buscar siguiente (F3). + Mostrar los números de línea. + Pegar el portapapeles y arrastrar texto a una ventana de diferencias. + Transferencia de red a través de KIO. + Puede utilizarse como visor de diff en KDevelop 3. + Ajuste de línea para las líneas largas. + Soporte para Unicode, UTF-8 y otras codificaciones. + Soporte para idiomas que van de derecha a izquierda. + ... + + + + + +Comparación y fusión de archivos + +Opciones de la línea de órdenes + +Comparar 2 archivos: +kdiff3 archivo1 archivo2 + + + +Fusionar 2 archivos: +kdiff3 archivo1 archivo2 -m + kdiff3 archivo1 archivo2 -o archivosalida + + + +Comparar 3 archivos: +kdiff3 archivo1 archivo2 archivo3 + + + +Fusionar 3 archivos: +kdiff3 archivo1 archivo2 archivo3 -m + kdiff3 archivo1 archivo2 archivo3 -o archivosalida + +Tenga en cuenta que archivo1 será tratado como base de archivo2 y archivo3. + + +Caso especial: Archivos con el mismo nombre +Si todos los archivos tienen el mismo nombre pero están en directorios diferentes, puede reducir el tipo de trabajo especificando el nombre del archivo sólo para el primer archivo. P.ej.: +kdiff3 directorio1/nombrearchivo directorio2 directorio3 + + + +Línea de órdenes para iniciar la comparación o fusión de un directorio: +Es muy similar, pero ahora sobre directorios. +kdiff3 directorio1 directorio2 + kdiff3 directorio1 directorio2 -o directoriodestino + kdiff3 directorio1 directorio2 directorio3 + kdiff3 directorio1 directorio2 directorio3 -o directoriodestino + +Para la comparación y fusión de directorios puede continuar leyendo aquí. + + +Opciones de la línea de órdenes +Para obtener más información sobre las opciones de la línea de órdenes utilice: +kdiff3 --help + +Ejemplo de salida: +Opciones: + -m, --merge Fusiona la entrada. + -b, --base archivo Archivo base explícito. Por compatibilidad con ciertas herramientas. + -o, --output archivo Archivo de salida. Supone -m. Ejem.: -o nuevoarchivo.txt + --out archivo Archivo de salida, de nuevo. (Por compatibilidad con ciertas herramientas.) + --auto Sin interfaz si todos los conflictos se resuelven de forma automática. (Necesita -o archivo) + --qall No resuelve los conflictos automáticamete. (Por compatibilidad...) + --L1 alias1 Reemplazo de nombre visible para la entrada del archivo 1 (base). + --L2 alias2 Reemplazo de nombre visible para la entrada del archivo 2. + --L3 alias3 Reemplazo de nombre visible para la entrada del archivo 3. + -L, --fname alias Reemplazo de nombre visible alternativo. Proporcione éste una vez para cada entrada. + --cs string Sobreescribe la configuración. Utilícelo una vez para cada opción. P.ej.: --cs "AutoAdvance=1" + --confighelp Muestra la lista de las opciones de configuración y sus valores actuales. + --config file Utiliza un archivo de configuración diferente. + +La opción le permite ajustar un valor de configuración que de otra forma solo sería ajustable a través del diálogo de configuración. Pero asegúrese de que cuando &kdiff3; finalice se guarden los valores con las configuraciones nuevas. Con puede encontrar los nombres de los elementos disponibles y los valores actuales. +A través de puede especificar un archivo de configuración diferente. Cuando utilice con frecuencia diferentes configuraciones para &kdiff3; ésto le permitirá cambiar entre ellas. + +Opciones de la línea de órdenes que se ignoran +Mucha gente quiere utilizar &kdiff3; con algún sistema de control de versiones. Pero cuando el sistema de control de versiones llama a &kdiff3; utilizando los parámetros de la línea de órdenes &kdiff3; no los reconoce, y termina con un error. Las preferencias de integración le permiten especificar los parámetros de línea de órdenes que &kdiff3; debería ignorar. Aparecerán en la ayuda de uso, de forma similar a este ejemplo: +--foo Ignored. (Definida por el usuario.) + + + Opciones de la línea de órdenes a ignorar:Una lista de opciones separadas por punto y coma «;». Cuando aparezca una de estas opciones en una línea de órdenes, &kdiff3; la ignorará y se ejecutará sin informar de ningún error (el valor predeterminado es «u;query;html;abort»). + +Si ésto no es suficiente, se recomienda escribir un script para el intérprete de órdenes que traduzcan esta opción. + + + + +Diálogo abrir +Como se pueden seleccionar varios archivos de entrada, el programa tiene un diálogo de apertura especial: + + + +El diálogo abrir le permite editar los nombres de los archivos manualmente, seleccionando un archivo a través del navegador de archivos («Archivo...») o permitir la elección de los archivos recientes a través de las listas desplegables. Si abre el diálogo nuevamente, el nombre actual continúa ahí. El tercer archivo de entrada no es necesario. si la entrada para «C» permanece vacía, solo se efectuará el análisis de diferencia de dos archivos. Puede seleccionar un directorio a través de «Dir...». Si se especifica un directorio para A entonces comienza la comparación/fusión de directorios. Si en A especifica un archivo pero en B,C o en la salida se especifica un directorio, &kdiff3; utiliza el nombre del archivo de A en los directorios especificados. Si está seleccionado «Fusionar», la línea de «Salida» será editable. Pero no se necesita especificar el nombre de archivo de salida de forma inmediata. Puede postponerlo hasta que lo guarde. El botón «Configurar...» abre el diálogo de opciones, de forma que pueda seleccionar las opciones antes de realizar el análisis. + + +Pegar y soltar la entrada +Algunas veces deseará comparar partes de un texto que no sea propiamente un archivo. &kdiff3; también le permite pegar texto desde el portapapeles a la ventana de entrada de diff que tenga el foco. El análisis de las diferencias se producirá inmediatamente. En el diálogo abrir no necesitará especificar archivos entonces, ciérrelo con el botón «Cancelar». También podrá utilizar arrastrar y soltar: Arrastre un archivo desde un administrador de archivos o seleccione texto en un editor y arrástrelo a la ventana de entrada. ¿Cuál es la idea? Algunas veces un archivo contiene dos funciones similares, pero comprobar las similitudes es un esfuerzo enorme si primero debe crear los archivos y luego cargarlos. Ahora bastará con copiar, pegar y comparar las secciones relevantes. Nota: En estos momentos no podrá arrastrar nada desde &kdiff3;. Solo está soportado en la ventana de entrada diff. Aviso: Algunos editores todavía interpretan arrastrar y soltar en otro programa como cortar (en lugar de copiar) y pegar. En este caso sus datos originales se perderían. + + +Interpretar la información en las ventanas de entrada + + + +Línea de informaciónEn la parte superior de cada ventana de texto se encuentra la «línea de información». Las líneas de información de las ventanas de entrada contienen una letra «A», «B» y «C», el nombre del archivo, un botón para el navegador, y el número de línea de la primera línea visible en la ventana (recuerde que la ventana «C» es opcional). Cada línea de información aparecerá con un color diferente. Cuando selecciona otro archivo a través del navegador o termina de editar el nombre del archivo pulsando entrar, el nuevo archivo se cargará y se comparará con el(los) archivo(s) que ya estaba(n) cargado(s). ColoreadoLas tres ventanas de entrada tienen asignadas las letras «A», «B» y «C». «A» tiene color azul, «B» verde y «C» magenta (estos son los valores predeterminados, pero puede cambiarlos en el menú Preferencias). Cuando se detecta una diferencia el color mostrado en el archivo de entrada cambia. Cuando los dos archivos presentan diferencias el color utilizado para expresar esto es rojo de manera predeterminada («Color de conflicto» en las preferencias). Este esquema de color es especialmente práctico en el caso de que tenga tres archivos de entrada, tal y como se verá en la próxima sección (Fusionar). Columna resumenA la izquierda de cada texto se encuentra la «columna resumen». Si las diferencias se producen en una línea la columna resumen muestra el color correspondiente. Si la diferencia es sólo de espacios en blanco se marca el resumen. Para los lenguajes de programación en los que los espacios no son importantes es práctico para apreciar de un vistazo si se modificó algo importante. (En C/C++ los espacios en blanco sólo son interesantes en el interior de las cadenas, comentarios, para el preprocesador y en otra serie de extrañas situaciones). La línea vertical que separa la columna resumen y el texto se interrumpe si el archivo de entrada no tiene líneas. Cuando se activa el ajuste de línea, esta línea vertical aparecerá punteada en las líneas ajustadas. Columna de visión generalEn el lado derecho podemos encontrar la columna «visión general», a la izquierda de la barra de desplazamiento. Muestra la columna de resumen comprimida de la entrada «A». todas las diferencias y conflictos se pueden apreciar de un vistazo. Cuando solo se utilizan dos ventanas de entrada, todas las diferencias aparecerán en rojo, ya que cada diferencia supondrá un conflicto. Un rectángulo negro marca la parte visible de las entradas. Para los archivos con entradas muy largas, cuando el número de líneas es más grande que la altura de la columna visión general en pixels, varias líneas de entrada compartirán una línea de visión general. Un conflicto tendrá más prioridad que las simples diferencias, que a su vez tendrán prioridad sobre lo no cambiado, de forma que no se pierdan las diferencias o los conflictos aquí. Pulsando sobre la columna de visión general se mostrará el correspondiente texto. Líneas alineadas manualmenteAlgunas veces el algoritmo sitúa líneas incorrectas unas al lado de otras. O desea comparar un trozo de texto con otro texto que está en una posición completamente diferente en el otro archivo. Para estas situaciones puede indicar a &kdiff3; manualmente que alinee algunas líneas. Marque el texto que quiera alinear con el ratón, como si estuviera copiando y pegando, en la primera vista de diferencia y seleccione «Añadir alineación manual de diferencias» en el menú «Diffview» (acceso rápido de teclado «Ctrl-Y»). Aparecerá una barra naranja en la columna resumen al lado del texto seleccionado. Repita esto para la segunda y (si está disponible) para la tercera vista. &kdiff3; recalculará inmediatamente las diferencias cada vez que haga esto, y alineará las líneas elegidas. Por supuesto, alguna de las líneas que antes coincidían puede que ya no coincidan. En estos momentos el fusionado no soporta el uso de ayuda de diff manual. + + + +Fusionar y la ventana del editor de la salida fusionada + + + +La ventana del editor de la salida fusionada (bajo las ventanas de la entrada de diferencias) también tiene una línea de información sobre ella que mostrará «Salida», el nombre del archivo y «[Modificado]» si edita algo. Normalmente contendrá texto que podrá fusionarse automáticamente con facilidad, pero algunas veces también contendrá conflictos. El guardado está desactivado hasta que se hayan resuelto todos los conflictos (utilice los botones «Ir al conflicto anterior/siguiente sin resolver» para encontrar los conflictos que falten). Con sólo dos archivos de entrada, cada diferencia es también un conflicto que debe resolverse manualmente. Con tres archivos de entrada el primer archivo se utiliza como base, mientras que el segundo y tercer archivos de entrada contienen las modificaciones. Si en cualquier línea solo tienen cambios la entrada B o la C pero no ambas se seleccionará automáticamente la fuente cambiada. Solo cuando B y C tengan cambios en las mismas líneas, la herramienta detectará un conflicto que debe resolverse manualmente. Cuando B y C sean iguales, pero diferentes a A, se seleccionará C. La columna resumenEl editor de la salida de fusionado también tiene una columna resumen a su izquierda. Mostrará la letra de la entrada de la que se seleccionó la línea, o nada si las tres fuentes son iguales en esa línea. Para los conflictos mostrará un signo de interrogación «?» y la línea mostrará «<Conflicto de fusionado>», en rojo. Puesto que resolver los conflictos línea a línea es muy arduo, las líneas se agruparán en grupos que tengan las mismas diferencias y conflictos característicos. Pero los conflictos causados solo por espacios en blanco se separarán de los conflictos no causados por espacios en blanco para facilitar el fusionado de los archivos cuando el sangrado cambia en muchas líneas. Configurar el grupo actual, sincronizado de fusión y posición de vista de diferenciasCuando se pulsa en la columna resumen con el botón izquierdo del ratón en la ventana a la que pertenezca este grupo, se seleccionarán todas las ventanas y se mostrará el comienzo de este grupo (ésto implica un salto automático en la posición de la ventana si el principio del grupo no se encuentra visible). El grupo se convierte en el «grupo actual». Se resalta con la «gama (diff) de color del fondo actual» y aparecerá una barra negra en la parte izquierda del texto. Seleccionar las entradas A, B o C para el conflicto actual y la ediciónLa barra de botones bajo el menú incluye tres botones para seleccionar las entradas que contienen las letras «A», «B» y «C». Pulse el botón selector de entrada para insertar (o eliminar si ya se ha insertado) las líneas de la fuente respectiva. Para seleccionar las líneas de varias entradas pulse los botones correspondientes en el orden que necesite. Por ejemplo, si desea que las líneas de «B» aparezcan antes de las líneas de «A» en la salida, pulse primero «B» y luego «A». Si estaba utilizando la opción avance automático («Automáticamente ir al conflicto siguiente sin resolver después de una selección de origen»), debería desactivarla antes de elegir líneas desde varias entradas o editar líneas después de su elección. Sino lo hace &kdiff3; saltará al siguiente conflicto después de elegir la primera entrada. Suele ser práctico para editar directamente la salida resultante de la fusión. La columna resumen mostrará «m» para cada línea que se haya modificado manualmente. Cuando, por ejemplo, las diferencias estén alineadas de forma que la simple elección no sea satisfactoria, puede marcar el texto necesario y utilizar copiar y pegar de forma normal para situarlo en la salida de fusionado. Algunas veces, cuando una línea se elimina bien por el fusionado o por la edición manual y no hay más líneas en este grupo, aparecerá el texto <Sin línea fuente>. Se coloca en lugar del grupo de forma que pueda cambiar de idea y seleccionar de nuevo la fuente. Este texto no aparecerá en el archivo guardado o en cualquier selección que copie y pegue. El texto «<Conflicto de fusionado>» aparecerá en el portapapeles si copia y pega texto que la contenga. Pero tenga cuidado al hacerlo. Seleccionar las entradas A, B o C para todos los conflictosEl fusionado normal se inicia resolviendo los conflictos sencillos automáticamente. Pero el menú «Fusionar» proporciona algunas acciones para otras necesidades habituales. Si ha seleccionado la misma fuente para más conflictos, podrá seleccionar «A», «B» o «C» en cualquier sitio, o solo para los conflictos pendientes de resolver, o para los conflictos sin resolver que sean debidos a espacios. Si desea decidir cada delta por sí mismo, puede «Establecer deltas a conflictos». O si desea volver a las elecciones automáticas de &kdiff3; seleccione «Resolver automáticamente conflictos simples». &kdiff3; reiniciará el fusionado. Para las acciones que cambien sus modificaciones anteriores &kdiff3; le pedirá confirmación antes de realizarlo. Nota: Cuando seleccione fuente para los conflictos de espacios en blanco sin resolver y las opciones «Ignorar números» o «Ignorar comentarios C/C++», los cambios en los números o en los comentarios se tratarán también como espacios en blanco. Fusión automática de las claves de control de versión y del historial (registro)Many version control systems support special keywords in the file. (e.g. "$Date: 2006-04-21 17:24:21 -0400 (Fri, 21 Apr 2006) $", "$Header$", "$Author: toma $", "$Log$" etc.) During the check-in the version control system (VCS) changes these lines. For instance "$Date: 2006-04-21 17:24:21 -0400 (Fri, 21 Apr 2006) $" will turn into "$Date: 2006-04-21 17:24:21 -0400 (Fri, 21 Apr 2006) $". Since this line will be different in every version of the file, it would require manual interaction during the merge. &kdiff3; ofrece fusionado automático para estos elementos. Para las líneas que coincidan con la opción «Fusionar automáticamente expresión regular» en todos los archivos de entrada de &kdiff3; se elegirá la línea desde B o -si está disponible- desde C (adicionalmente es necesario que las líneas en cuestión si las comparamos con las líneas anteriores no han de tener conflictos). Esta fusión automática también se puede ejecutar de forma inmediata después de iniciar la fusión (active la opción «Ejecutar expresión regular de fusión automática al iniciar la fusión») o posteriormente a través del menú de fusión «Ejecutar expresión regular de fusión automática»). También está soportada la fusión automática para el historial de control de versión (también llamado «registro»). El historial de fusión automática se puede ejecutar automáticamente cuando se inicie la fusión activando la opción «Resolver automáticamente los conflictos del historial». Usually the version control history begins with a line containing the keyword "$Log$". This must be matched by the "History start regular expression"-option. &kdiff3; detects which subsequent lines are in the history by analysing the leading characters that came before the "$Log$"-keyword. If the same "leading comment" also appears in the following lines, then they are also included in the history. Durante cada descarga el VCS escribe una única línea especificando la versión, fecha, e información horaria seguida de líneas con comentarios del usuario. Estas líneas forman una entrada de historial. Esta sección del historial crece cada vez que descarga de forma que las entrada más recientes aparecerán en la parte superior (después de la línea de inicio del historial). Cuando dos o más desarrolladores que están realizando un desarrollo paralelo descargan una rama de un archivo la fusión del historial contendrá varias entradas que aparecerán como conflictos durante la fusión de las ramas. Como esta fusión puede ser muy aburrido, &kdiff3; ofrece soporte con dos posibles estrategias: Insertar la información del historial de ambos colaboradores en la parte superior u ordenar la información del historial por una clave definida por el usuario. El método que simplemente inserta las entradas es fácil de configurar. &kdiff3; solo necesita un método para detectar qué líneas pertenecen a una entrada del historial. La mayor parte de los VCS insertan una línea vacía después de cada entrada del historial. Sino hay otras líneas vacías, éste criterio es suficiente para &kdiff3;. Seleccione «Entrada del historial que inicia una expresión regular». Si el criterio de la línea vacía no es suficiente, puede especificar una expresión regular para detectar el inicio de la entrada del historial. Tenga en cuenta que &kdiff3; eliminará las entradas duplicadas del historial. Si una entrada aparece varias veces en el historial de un archivo de entrada, solo permanecerá una en la salida. Si desea ordenar el historial, debe especificar cómo se debe construir la clave de ordenación. Utilice paréntesis en «Entrada del historial que inicia una expresión regular» para agrupar partes del a expresión regular que se deberían utilizar posteriormente para la tecla de ordenación. A continuación especifique «Orden de la clave de ordenación que inicia la entrada del historial» especificando una lista de números separados por una coma «,» para referirse a la posición del grupo en la expresión regular. Debido a que no es sencillo de hacer al primer intento, podrá comprobar y mejorar la expresión regular y la generación de clave en un diálogo dedicado pulsando el botón «Comprobar sus expresiones regulares». Example: Assume a history that looks like this: +/************************************************************************** +** HISTORY: $Log: \toms_merge_main_view\MyApplication\src\complexalgorithm.cpp $ +** +** \main\integration_branch_12 2 Apr 2001 10:45:41 tom +** Merged branch simon_branch_15. +** +** \main\henry_bugfix_branch_7\1 30 Mar 2001 19:22:05 henry +** Improved the speed for subroutine convertToMesh(). +** Fixed crash. +**************************************************************************/ + The history start line matches the regular expression ".*\$Log.*\$.*". Then follow the history entries. The line with the "$Log$"-keyword begins with two "*" after which follows a space. &kdiff3; uses the first non-white-space string as "leading comment" and assumes that the history ends in the first line without this leading comment. In this example the last line ends with a string that also starts with two "*", but instead of a space character more "*" follow. Hence this line ends the history. Sino es necesaria la ordenación del historial entonces la entrada del historial comenzará con una línea de expresión regular como esta (esta línea se divide en dos porque sino no se puede ajustar) +\s*\\main\\\S+\s+[0-9]+ (Ene|Feb|Mar|Abr|May|Jun|Jul|Ago|Sep|Oct|Nov|Dic) + [0-9][0-9][0-9][0-9] [0-9][0-9]:[0-9][0-9]:[0-9][0-9]\s+.* + Para obtener detalles sobre las expresiones regulares por favor, consulte la documentación de las expresiones regulares de Trolltech. Tenga en cuenta que "\s" (con la «s» minúscula) coincidirá con cualquier espacio y "\S" (con «S» mayúscula) coincidirá con lo que no sean espacios en blanco. En nuestro ejemplo la entrada del historial deberá contener primero la versión de información de la expresión regular "\\main\\\S+", la fecha formada por el día «[0-9]+», més «(Ene|Feb|Mar|Abr|May|Jun|Jul|Ago|Sep|Oct|Nov|Dic)» y año «[0-9][0-9][0-9][0-9]», la hora «[0-9][0-9]:[0-9][0-9]:[0-9][0-9]» y finalmente el nombre de registro del desarrollador «.*». Vea que el comentario importante (en el ejemplo «**») lo eliminará KDiff3 antes de buscar la coincidencia, de ahí que la expresión regular comience con con una expresión regular para ninguno o más espacios en blanco «\s*». Si necesita un historial ordenado, se calculará la clave de ordenación. Para esta las partes relevantes en la expresión regular se deben agrupar entre paréntesis (los paréntesis adicionales puede mantenerse aunque desactive la ordenación del historial). +(Ene|Feb|Mar|Abr|May|Jun|Jul|Ago|Sep|Oct|Nov|Dic) + ([0-9][0-9][0-9][0-9]) ([0-9][0-9]:[0-9][0-9]:[0-9][0-9])\s+(.*) + Los paréntesis ahora contendrán: 1. versión de información, 2. día, 3. mes, 4. año, 5. hora, 6. nombre. Pero si deseamos ordenarlos por fecha y hora, necesitará construir una clave con los elementos en un orden de aparición diferente: Primero el año, seguido del mes, día, hora, información de versión y nombre. De ahí que el orden de la clave de ordenación que se deba especificar sea «4,3,2,5,1,6». Ya que los nombres de los meses no son buenos para la ordenación («Abr» iría primero) &kdiff3; detectará que son nombres de meses y utilizará números en su lugar («Abr»->«04»). Si se encuentra un número puro se transformará en un valor de 4 dígitos con ceros significativos para la ordenación. Finalmente la clave de ordenación resultante que iniciará la primera entrada del historial será: 2001 04 0002 10:45:41 rama_integración_12 tom + +Para obtener más detalles consulte también Configuración de Diff y Merge. + + + +Navegación y edición +La mayor parte de la navegación puede realizarse con las barras de desplazamiento y el ratón, pero también puede navegar con las teclas. Si pulsa en cualquier ventana puede utilizar los cursores izquierdo, derecho, arriba, abajo, página arriba, página abajo, inicio, fin, Ctrl-Inicio, Ctrl-Fin tal y como lo haría en otros programas. La columna vista general situada al lado de la barra vertical de desplazamiento en los archivos de entrada también puede utilizarse para navegar pulsando sobre ella. También puede utilizar la rueda del ratón para desplazarse arriba y abajo. En el editor de la salida de fusionado también puede utilizar las otras teclas para la edición. Puede cambiar entre los modos insertar y sobreescribir con la tecla Insertar (el modo predeterminado es insertar). Una pulsación del botón izquierdo del ratón en la columna resumen sincronizará todas las ventanas para mostrar el inicio del mismo grupo de líneas (tal y como se explicaba en la sección «Configurar el grupo actual, sincronizado de fusión y posición de vista de diferencias»). La barra de botones también contiene siete botones de navegación con los que podrá saltar a la diferencia actual/primera/última, a la siguiente/anterior diferencia (Ctrl-Flecha abajo/Ctrl-Flecha arriba), al siguiente/anterior conflicto (Ctrl-Página abajo/Ctrl-Página arriba), o al siguiente/anterior conflicto sin resolver. Tenga en cuenta que para &kdiff3; un «conflicto» que no se pudo resolver automáticamente al comienzo del fusionado continúa siendo un «conflicto» aunque se haya resuelto. De aquí la necesidad de distinguir los «conflictos sin resolver» +Avance automático +También existe el botón «Automáticamente ir al conflicto siguiente sin resolver después de una selección origen» (avance automático). Si activa esto, cuando se seleccione una fuente &kdiff3; saltará automáticamente al siguiente conflicto sin resolver. Esto puede ayudarle cuando desee seleccionar una sola fuente. Cuando necesite ambas fuerte, o desee editar después de la selección, probablemente querrá desactivar esto. Antes de continuar con el siguiente conflicto sin resolver &kdiff3; muestra el resultado de su elección durante un momento. Este retardo es ajustable en las preferencias Diff y fusión: Puede especificar en «Retardo auto avanzado» en milisegundos un valor entre 0 y 2.000. Pista: ¿Cansado de tanta pulsación? Utilice un retardo de avance automático pequeño y los accesos rápidos Ctrl-1/2/3 para seleccionar A/B/C para muchos de los conflictos. + + + +Seleccionar, copiar y pegar +Las ventanas de entrada no muestran un cursor, por ello las selecciones se hacen pulsando el botón izquierdo del ratón al inicio, manteniendo pulsado el botón del ratón y moviéndose al final, momento en el que soltará el botón del ratón. También puede seleccionar una palabra con una doble pulsación. En la salida del editor de fusionado puede realizar la selección a través del teclado manteniendo pulsado el botón «mayúsculas» y navegando con las teclas de cursor. Si la selección excede el rango visible puede desplazar el ratón sobre los bordes de la ventana que harán que &kdiff3; se desplace en esta dirección. Para las selecciones muy largas puede utilizar las teclas de navegación mientras mantiene pulsado el ratón. P.ej. utilice RePág y AvPág para ir rápidamente a una posición determinada. Al final de la posición suelte el botón del ratón. Para seleccionarlo todo en la ventana actual utilice el menú «Editar»->«Seleccionar todo» (Ctrl-A). Para copiar al portapapeles debe pulsar el botón «Copiar» (Ctrl-C o Ctrl-Insertar). Pero también existe la opción «Auto copiar selección». Si está activado, todo lo que seleccione se copiará inmediatamente y no necesitará realizar la copia explícitamente. Ponga atención cuando lo utilice ya que el contenido del portapapeles puede destruirse accidentalmente. «Cortar» (Ctrl-X o Mayúsculas-Borrar) copia el texto seleccionado al portapapeles y lo borra. «Pegar» (Ctrl-V o Mayúsculas-Insertar) inserta el texto del portapapeles en la posición del cursor o sobre la selección actual. Si pega algo en cualquier ventana de entrada de diferencia se mostrará el contenido del portapapeles en esta ventana y la comparación se reiniciará inmediatamente. Es práctico si desea guardar rápidamente un trozo de texto de alguna parte y compararlo con algo sin crear los archivos en primer lugar. + + +Guardar +Guardar solo estará permitido cuando se hayan resuelto todos los conflictos. Si el archivo ya existe y la opción «Archivos de copia de seguridad» está activada el archivo existente se renombrará con una extensión «.orig», pero si ya existe un archivo se borrará. Cuando salga o inicie otro análisis de diferencias y los datos no se hayan guardado, &kdiff3; le preguntará si desea guardar, cancelar o continuar sin guardar (&kdiff3; no captura ninguna señal. Por eso si ejecuta «kill» sobre &kdiff3; sus datos se perderán). Los finales de línea se guardan de acuerdo con el método utilizado por el sistema operativo. Para Unix cada línea termina con un caracter de nueva línea «\n», mientras que para los sistemas basados en Win-32 cada línea termina con un retorno de carro + un nueva línea «\r\n». &kdiff3; no conserva los finales de línea de los archivos de entrada, lo que significa que no debería utilizar &kdiff3; con archivos binarios. + + +Buscar cadenas +Puede buscar una cadena en cualquier ventana de texto de &kdiff3;. La orden «Buscar...» («Ctrl-F) en el menú Editar abre un diálogo que le permite especificar la cadena a buscar. La búsqueda siempre comenzará en la parte superior. Utilice la orden «Buscar siguiente» («F3») para buscar la siguiente aparición. si selecciona la búsqueda en varias ventanas se comenzará a buscar en la primera ventana de arriba hacia abajo antes de iniciar la búsqueda en la parte superior de la siguiente ventana, etc. + + +Impresión +&kdiff3; soporta impresión de las diferencias en los archivos de texto. La orden «Imprimir» (Ctrl-P) en el menú archivo abre un diálogo que permite seleccionar la impresora y ajustar otras opciones. Existen varias posibilidades de ajustar el rango. Debido a las diferencias existentes en los diálogos de impresión de los diversos sistemas operativos, el método para realizar determinadas selecciones variará. + + Todo:Imprime todo. + Actual:Imprime un página comenzando en la primera línea visible de la ventana (en sistemas sin esta opción se puede suplir este inconveniente especificando la página número 10000 para imprimir). + Selección:Antes de realizar esta elección de impresión seleccione el texto con el ratón (como para copiar y pegar) en una de las ventanas de entrada de diferencias para definir las líneas inicial y final. Si no hay texto seleccionado en una de las ventanas de diferencia, no estará disponible esta opción (en sistemas sin esta opción se puede conseguir el mismo resultado especificando la página 9999). + Rango:Especifique la primera y última página. + +Otras opciones importantes para la impresión son las habituales: + Letra, tamaño de letra + Mostrar números de línea + Ajuste de texto + Colores + etc. + +También se recomienda la impresión en formato apaisado. + + +Opciones +Las opciones y la lista de archivos recientes se guardarán cuando salga del programa, y se recargarán cuando lo inicie (Menú Preferencias->Configurar &kdiff3; ...). +Fuente +Seleccione un tipo de letra de ancho fijo (en algunos sistemas este diálogo puede mostrar tipos de letra de ancho variable, pero no debería utilizarlas). + + Fuente cursiva para deltas:Si selecciona esto, las diferencias de texto se dibujarán con la versión cursiva del tipo de letra. Si el tipo de letra no soporta cursiva, no hará nada. + + + + +Colores + + Color del primer plano:Habitualmente negro. + Color de fondo:Habitualmente blanco. + Color del fondo de diff:Habitualmente gris claro. + Color A:Habitualmente azul oscuro. + Color B:Habitualmente verde oscuro. + Color C:Habitualmente magenta oscuro. + Color de conflicto:Habitualmente rojo. + Rango actual de color de fondo:Habitualmente amarillo claro. + Rango actual de color de fondo de diff:Habitualmente amarillo oscuro. + Colores para los rangos de diferencias seleccionados manualmente:Habitualmente naranja. + Color del archivo más nuevo en la comparación de directorios:Habitualmente verde. + Color del archivo más antiguo en la comparación de directorios:Habitualmente rojo. + Color de los archivos de antigüedad media en la comparación de directorios:Habitualmente amarillo oscuro. + Color para los archivos que faltan en la comparación de directorios:Habitualmente negro. + +Los cambios de color para la comparación de directorios no tendrán efecto hasta la siguiente vez que inicie la comparación de directorios. +En sistemas que solo tengan 16 ó 256 colores algunos de ellos no estarán disponibles en su forma exacta. En aquellos sistema el botón «Predeterminados» seleccionará un color puro. + + +Preferencias del editor + + El tabulador inserta espacios:Si está desactivado y pulsa la tecla tabulador, se insertará un caracter de tabulación, sino se insertará la cantidad adecuada de caracteres. + Tamaño del tabulador:Se puede ajustar para sus necesidades. El valor predeterminado es 8. + Auto indentación:Cuando pulsa Entrar; o Return el sangrado de la línea anterior se utiliza para la nueva línea. + Auto-copiar selección:Cada selección se copia inmediatamente al portapapeles de forma que no necesitará copiarlo explícitamente. + Estilo línea final:Al guardar puede seleccionar qué estilo de línea prefiere. El valor predeterminado es la elección habitual para el sistema operativo utilizado. + + + +Preferencias de Diff y fusión +Cuando se comparan archivos, &kdiff3; primero intenta hacer coincidir las líneas que sean iguales en todos los archivos de entrada. Solo durante este paso se ignorarán los espacios en blanco. El segundo paso compara cada línea. En este paso los espacios en blanco no se ignorarán. Los espacios en blanco tampoco se ignorarán durante la fusión. + + + Conservar el retorno de carroAlgunos editores (en algunos sistemas) guardan los caracteres de retorno de carro «\r» y de línea siguiente «\n» al final de la línea, mientras que otros solo guardan el de línea siguiente «\n». Normalmente &kdiff3; ignora el retorno de carro, pero a pesar de que debido a ello no tengan el mismo tamaño parecerán iguales si se comparan juntos. Cuando se activa esta opción, los caracteres de retorno de carro se harán visibles, pero se tratarán como espacios en blanco. Esta opción debería estar desactivada durante el mezclado. El valor predeterminado es apagado. + Ignorar números:De forma predeterminada estará desactivado. Los caracteres numéricos («0-9», «.», «-») se ignorarán en la primera parte del análisis en la que se efectuará la coincidencia de líneas. Sin embargo en el resultado las diferencias sí se mostrarán, pero serán tratadas como espacios en blanco. + Ignorar comentarios de C/C++:De forma predeterminada estará desactivado. Los cambios en los comentarios se tratarán como cambios de espacios en blanco. + Ignorar mayúsculas:De forma predeterminada estará desactivado. Las diferencias de mayúsculas y minúsculas de los caracteres (como «A» y «a») se tratarán como cambios de espacios en blanco. + Comando del preprocesador:Vea la siguiente sección. + Comando de preprocesador de combinación de línea:Vea la siguiente sección. + Intentar más a fondo:Intenta encontrar más a fondo una delta más pequeña (de forma predeterminada estará activada). Debería ser efectivo para archivos grandes y complicados. Y lento para archivos muy grandes. + Retardo auto avanzado (ms):Cuando está activado el modo de «auto avanzado» aquí se especifica durante cuanto tiempo se mostrará el resultado de la selección antes de saltar al siguiente conflicto sin resolver. + Fusionar de forma predeterminada espacios en blanco de dos/tres archivos:Resuelve automáticamente todos los conflictos de los espacios en blanco seleccionando el archivo especificado (el modo predeterminado es el manual). Práctico si los espacios no son realmente importantes en los archivos. Si solo necesita ésto ocasionalmente mejor utilice «Seleccionar A/B/C para todos conflictos de los espacios en blanco sin resolver» en el menú Fusionar. Tenga en cuenta que si ha activado «Ignorar números» o «Ignorar comentarios de C/C++» esta autoelección también se aplica a los conflictos en los números y en los comentarios. + Expresión regular de fusión automática:Expresión regular para las líneas en las que &kdiff3; debería elegir automáticamente una fuente. Consulte también Fusión automática. + Ejecutar expresión regular de fusión automática al iniciar la fusión:Si está activado &kdiff3; ejecutará la fusión automática utilizando la «expresión regular de fusión automática» cuando se inicie una fusión. + Expresión regular de inicio de historial:Regular expression for the start of the merge history entry. Usually this line contains the "$Log$"-keyword. Default value: ".*\$Log.*\$.*" + Expresión regular de inicio de entrada del historial:Una entrada del historial de fusión está formada por varias líneas. Especifique la expresión regular para detectar la primera línea (sin el comentario importante). Utilice paréntesis para agrupar las claves que desee utilizar para la ordenación. Si está vacío, KDiff3 asume que las líneas vacías separan entradas del historial. Consulte también Fusión automática. + Ordenación del historial de fusión:Activar ordenación del historial del control de versiones + orden de la clave de ordenación del inicio de la entrada del historial:Cada paréntesis utilizado en la expresión regular para la entrada del inicio del historial agrupa una clave que puede utilizarse para la ordenación. Especifique la lista de claves (están numeradas en orden de aparición comenzando con 1) y utilizando «,» como separador (p. ej. «4,5,6,1,2,3,7»). Si permanece vacío, no se realizará ordenación. Consulte también fusión automática. + Historial del control de versión de fusión al iniciar la fusiónSi está activado &kdiff3; ejecuta automáticamente el fusionado del historial utilizando las opciones antes mencionadas cuando se inicia una fusión. + Compruebe sus expresiones regularesEste botón muestra un diálogo que le permite mejorar y comprobar la expresión regular. Copie los datos de sus archivos en las líneas de ejemplo. Los «Resultados coincidentes» si la coincidencia se produjo o no. El «Resultado de la clave de ordenación» mostrará la clave utilizada para la ordenación del historial de fusión. + Orden de fusión irrelevante:Especifique una orden que debería ser llamada cuando &kdiff3; detecte que para el archivo B no contiene datos relevantes ya que están incluídos en C. La orden se llama con los tres nombres de archivo como parámetros. Las datos deberán coincidir con la «expresión regular de fusionado automático» o con el historial sino se considera relevante. + + + + +Fusión de directorios +Estas opciones están relacionadas con la exploración del directorio y el manejo del fusionado: Vea la Comparación/fusión de directorios de documentos para obtener los detalles. También existe una opción relevante para guardar archivos sencillos: + + Archivos de copia de seguridad:Cuando se guarde un archivo y ya exista una versión antigua, la versión original se renombrará con una extensión «.orig». Si ya existía un archivo de copia de seguridad antigua con la extensión «.orig» se borrará. + + + +Configuraciones regionales + + Idioma:Ajusta el idioma de la interfaz de usuario. Cambiar esta opción no afectará a la ejecución del programa. Tendrá que salir y reiniciar &kdiff3; para que el cambio tenga efecto (esta opción no está disponible en la versión de KDE; de &kdiff3; porque el idioma se ajusta de forma global en las preferencias de KDE). + Usar la misma codificación para todo:Las siguientes opciones de codificación se pueden ajustar de forma separada para cada elemento, o si esta opción está activada, todos los valores tomarán el primer valor. + Codificación local:Sobre los selectores de código aparece una nota que le indica cuál es la codificación local (no es ajustable, ya que se utiliza para informarle de su codificación en caso de que no la conozca, y necesite seleccionarla). + Codificación de archivo para A/B/C:Ajusta la codificación para los archivos de entrada. Esto tiene efecto en la interpretación de los caracteres especiales. Como puede ajustar cada codificación por separado puede comparar y fusionar archivos guardados con diferentes codificaciones. + Codificación de archivo para la salida de la fusión y guardar:Cuando haya editado un archivo, podrá ajustar qué codificación se utilizará al guardarse en el disco. + Codificación de archivo para los archivos del preprocesador:Cuando defina el preprocesador puede que no sea capaz de operar con su codificación (ejem: Sus archivos son de unicode de 16 bit y su preprocesador solo puede utilizar ascii de 8 bit). Con esta opción puede definir la codificación de la salida del preprocesador. + Idioma de derecha a izquierda:Algunos idiomas se escriben de derecha a izquierda. Cuando esta opción está activada, &kdiff3; dibuja el texto de derecha a izquierda en las ventanas de entrada de diff y en la ventana de la salida del fusionado. Tenga en cuenta que si inicia &kdiff3; con la opción de línea de órdenes «--reverse» toda la distribución se hará de derecha a izquierda también (ésta es una característica proporcionada por Qt). Este manual se escribió asumiendo que «Idioma de derecha a izquierda» o invertir distribución están desactivados. Por ello, algunas referencias a «izquierda» o «derecha» se reemplazarán por sus respectivas homólogas si utiliza estas opciones. + + + + +Varios +Estas opciones y acciones están disponibles en los menús o en la barra de botones. + + Mostrar números de líneas:Puede seleccionar si los números deberían mostrarse en los archivos de entrada. + Mostrar caracteres espacio y tabulador por diferencias:Algunas veces los espacios visibles y los tabuladores molestan. Puede desactivarlos. + Mostrar espacio en blanco:Desactívelo para suprimir cualquier resaltado o cambio de «solo espacio en blanco» en el texto o en las columnas de vista general (tenga en cuenta que ésto también se aplicará a los cambios en los números y comentarios si están activadas las opciones «Ignorar números» o «Ignorar comentarios C/C++»). + Opciones de la vista general:Estas elecciones están disponibles cuando compara tres archivos. En el modo normal todas las diferencias se muestra en un color codificado en la columna de vista general. Pero algunas veces puede estar interesado en las diferencias entre solo dos de los tres archivos. Seleccionando vista «A vs. B», «A vs. C» o «B vs. C» se mostrará una segunda columna de vista general con la información requerida situado al lado de la visión general normal. + Ajuste de palabras en las ventanas diff:Ajusta las líneas cuando su longitud excede del ancho de una ventana. + Mostrar ventana A/B/C:Algunas veces deseará utilizar mejor el espacio de la pantalla para las líneas largas. Oculte las ventanas que no sean importantes (en el menú Ventanas). + Cambiar orientación de división:Cambia entre las ventanas diff mostrándolas una cerca de la otra (A a la izquierda de B, y a la izquierda de C) o una sobre otra (A sobre B y sobre C). También debería servir de ayuda para las líneas largas (en el menú Ventanas). + Iniciar fusión rápida:Algunas veces puede estar viendo las deltas y decidir fusionarlas. «Fusionar el archivo actual» en el menú Directorio también funcionará si solo compara dos archivos. Una simple pulsación inicia la fusión y utiliza el nombre de archivo del último archivo de entrada como nombre de archivo predeterminado (cuando se utiliza esto para reiniciar una fusión, se conservará el nombre de archivo de la salida). + + + +Configurar accesos rápidos de teclado +En estos momentos solo la versión para KDE soporta accesos rápidos de teclado configurables por el usuario (Menú Preferencias->Configurar accesos rápidos). + + + +Órdenes del preprocesador +&kdiff3; soporta dos opciones para el preprocesador. + + Comando del preprocesador:Cuando se lee cualquier archivo, se redirigirá a través de esta orden externa. Se podrá ver la salida de esta orden en lugar del archivo original. Puede escribir su propio preprocesador que cubra sus necesidades específicas. Utilice esto para cortar determinadas partes del archivo, o para corregir de forma automática el sangrado, etc. + Comando de preprocesador de combinación de línea:Cuando se lee cualquier archivo, se redirigirá a través de esta orden externa. Si se especifica una orden de preprocesado (ver a continuación), la salida del preprocesador será la entrada de la coincidencia de líneas del preprocesador. La salida solo se utilizará durante la fase de coincidencia de líneas durante el análisis. Puede escribir su propio preprocesador que cubra sus necesidades específicas. Cada línea de entrada tendrá la correspondiente línea de salida. + + +La idea es permitir al usuario gran flexibilidad durante la configuración del resultado de diff. Pero necesita un programa externo, y muchos usuarios no quieren escribirlo ellos. La buena noticia es que muchas veces sed o perl harán este trabajo. +Ejemplo: Prueba de mayúsculas sencilla: considerar el archivo a.txt (6 líneas): + aa + ba + ca + da + ea + fa + y el archivo b.txt (3 líneas): + cg + dg + eg +Sin un preprocesador las siguientes líneas se situarán unas al lado de otras: + aa - cg + ba - dg + ca - eg + da + ea + fa + Esto no es lo que probablemente lo que se desea ya qu ela primera letra contiene actualmetne la información interesante. Para ayudar al algoritmo de coincidencias a ignorar la segunda letra podemos utilizar una orden de preprocesador, que reemplace «g» con «a»: + sed 's/g/a/' + Con esta orden el resultado del a comparación será: + aa + ba + ca - cg + da - dg + ea - eg + fa +Internamente el algoritmo de coincidencia ve los archivos después de la ejecución de la línea del preprocesador de coincidencia, pero en la pantalla el archivo continúa sin cambios (el preprocesador normal cambiará también los datos en la pantalla). + +Lo básico de <command +>sed</command +> +Esta sección solo introduce algunas características muy básicas de sed. Para obtener más información consulte info:/sed o http://www.gnu.org/software/sed/manual/html_mono/sed.html. Una versión precompilada para Windows puede encontrarse en http://unxutils.sourceforge.net. Tenga en cuenta que los siguientes ejemplos asumen que la orden sed se encuentra en algún directorio definido en la variable de entorno PATH. Si este no es el caso, deberá especificar la ruta completa absoluta de lo orden. +También debe tener en cuenta que los siguientes ejemplos utilizan una marca de comilla simple (') que no funcionará para Windows. En Windows debería utilizar las marcas de comillas dobles (") en su lugar. +En este contexto solo se utiliza la orden de sustitución sed: + sed 's/REGEXP/REEMPLAZO/MODIFICADORES' + Antes de utilizar una orden nueva con &kdiff3;, debería comprobarla en una consola. Aquí será práctica la orden echo. Ejemplo: + echo abrakadabra | sed 's/a/o/' + -> obrakadabra + Este ejemplo muestra una orden sed muy simple que reemplaza la primera aparición de «a» con «o». Si desea reemplazar todas las apariciones necesitará el modificador «g»: + echo abrakadabra | sed 's/a/o/g' + -> obrokodobro + El símbolo «|» es la orden de tubería que transfiere la salida de la orden anterior a la entrada de la siguiente orden. Si desea comprobar el uso con un archivo largo puede utiilzar cat en los sistemas tipo Unix o type en los sistemas tipo Windows. sed hará la sustitución para cada línea. cat nombrearchivo | sed opciones + + + +Ejemplos para <command +>sed</command +> usados en &kdiff3; +Ignorar otros tipos de comentarios +En estos momentos &kdiff3; solo entiende los comentarios C/C++. Utilizando la orden del preprocesado de línea coincidente también puede ignorar otros tipos de comentarios, convirtiéndoles en comentarios C/C++. Ejemplo: Para ignorar los comentarios que comiencen con «#», debería convertirlos a «//». Tenga en cuenta que debe tener activada la opción «Ignorar comentarios C/C++» para que tenga efecto. Una línea de preprocesado de línea coincidente podría ser: + sed 's/#/\/\//' +Al igual que para sed el caracter «/» tienen un significado especial, y es necesarío reemplazar el caracter «\» antes de cada «/» en la cadena de reemplazo. Algunas veces el «\» es necesario para añadir o eliminar un significado especial de ciertos caracteres. Las comillas simples (') antes y después de la orden de sustitución son importantes, ya que sino el intérprete de órdenes intentará interpretar algunos caracteres especiales como «#», «$» o «\» antes de pasarlos a sed. Tenga en cuenta que en Windows aquí necesitará utilizar las comillas dobles ("). Windows sustituye otros caracteres como «%», por ello debería experimentar un poquito. + +Sensibilidad de diff a mayúsculas y minúsculas +Utilice la siguiente orden de preprocesado de coincidencia de línea para convertir todas las entradas a mayúsculas: + sed 's/\(.*\)/\U\1/' +Aquí el «.*» es una expresión regular que incluye a todos los caracteres en la línea. El «\1» en la cadena de reemplazo hace referencia al texto que coincide con el primer par de «\(» y «\)». La «\U» convierte el texto insertado a mayúsculas. + + +Ignorar las claves de control de versión +CVS y otros sistemas de control de versión utilizan algunas claves para insertar cadenas automáticamente generadas (info:/cvs/Keyword sustitución). Todos ellos siguen el modelo «$CLAVE generada texto$». Ahora necesitaremos una orden de preprocesado que elimine solo el texto generado: + sed 's/\$\(Revision\|Author\|Log\|Header\|Date\).*\$/\$\1\$/' + Las «\|» separan las posibles claves. Podría querer modificar esta lista para acomodarla a sus necesidades. La «\» before the «$» es necesaria porque de otra forma «$» coincidirá con el final de la línea. +Mientras experimenta con sed puede llegar a entender y a gustarle las expresiones regulares. Son prácticas porque hay muchos programas que soportan cosas similares. + + +Ignorar números +Ignorar los números en realidad es una opción de construcción. Pero como en otros ejemplos, indica el aspecto que podría tener la orden de preprocesado. + sed 's/[0123456789.-]//g' + Cualquier caracter entre «[» y «]» será una coincidencia y no se reemplazará con nada. + + +Ignorar ciertas columnas +Algunas veces una texto tiene un formato muy estricto y contiene columnas que desearía ignorar, mientras que otras columnas deseará conservarlas para el análisis. En el siguiente ejemplo las primeras cinco columnas (caracteres) se ignorarán, las siguientes diez se conservarán, otras cinco se ignorarán y el resto de la línea se conservará. + sed 's/.....\(..........\).....\(.*\)/\1\2/' + Cada punto «.» coincidirá con cualquier caracter simple. El «\1» y el «\2» en la cadena de reemplazo hacen referencia al texto coincidente dentro del primer y segundo par de «\(» y «\)» indicando el texto que se conservará. + + +Combinar varias sustituciones +Algunas veces deseará aplicar varias sustituciones a la vez. Puede utilizar el punto y coma «;» para separarlas unas de otras. Ejemplo: echo abrakadabra | sed 's/a/o/g;s/\(.*\)/\U\1/' + -> OBROKODOBRO + + + + +Utilizar <command +>perl</command +> en lugar de <command +>sed</command +> +En lugar de sed podría utilizar algo como perl. + perl -p -e 's/EXPREG/REEMPLAZO/MODIFICADORES' + Pero algunos detalles son diferentes en perl. Tenga en cuenta que sed necesita «\(» y «\)» perl necesita solo «(» y «)» sin estar precedido de «\». Ejemplo: sed 's/\(.*\)/\U\1/' + perl -p -e 's/(.*)/\U\1/' + + + + + +Orden de la ejecución de preprocesado +Los datos van pasando por todos los preprocesadores internos y externos en el siguiente orden: + +Preprocesador normal. +Preprocesador de coincidencia de líneas. +Ignorar mayúsculas (conversión a mayúsculas). +Detección de comentarios C/C++. +Ignorar números. +Ignorar espacios en blanco. + +Los datos después del preprocesador normal se conservarán para mostrarse y fusionarse. El resto de operaciones solo modificarán los datos para que los vea el algoritmo de coincidencia de líneas de diff. En alguna ocasión cuando use el preprocesador normal se dará cuenta de que el preprocesador de coincidencia de líneas verá la salida del preprocesador normal como entrada. + + +Aviso +La orden de preprocesado suele ser muy práctica, pero como con cualquier opción que modifique su texto u oculte ciertas diferencias automáticamente, puede saltarse accidentalmente ciertas diferencias y en el peor de los casos destruir datos importantes. Por esta razón durante un fusionado si &kdiff3; utiliza una orden de preprocesado normal le preguntará si desea desactivarla o no. Pero no se producirá ningún aviso si está activada la orden de preprocesado de líneas coincidentes. La fusión no se completará hasta que se resuelvan los conflictos. Si desactiva «Mostrar espacios en blanco» las diferencias eliminadas con la orden de preprocesado de líneas coincidentes también estarán visibles. Si el botón guardar continúa desactivado durante una fusión (porque aún existen conflictos), asegúrese de activar «Mostrar espacios en blanco». Si no desea fusionar estas diferencias sin importancia de forma manual puede elegir «Seleccionar [A|B|C] para todos los conflictos de espacios en blanco sin resolver» en el menú Fusionar. + + + + + +Comparación y fusionado de directorios con &kdiff3; +Iniciar la comparación y fusión del directorio +Frecuentemente los programadores modifican varios archivos en un directorio para conseguir su propósito. Para esto &kdiff3; también le permite comparar y fusionar directorios completos recursivamente. Aunque la comparación y fusionado de directorios parezca bastante obvio, existen varios detalles que debería conocer. Lo más importante es el hecho de que la operación podría afectar a muchos archivos. Si no tiene copias de seguridad de los datos originales, podría ser complicado e incluso imposible devolverlos a su estado original. Por lo tanto, antes de realizar un fusionado, asegúrese de guardar sus datos en un lugar seguro, de forma que sea posible volver atrás. Si crea un archivo o utiliza algún sistema de control de versiones es cosa suya, pero los programadores experimentados y los integradores pueden necesitan las antiguas fuentes. Y tenga en cuenta que a pesar de que yo (el autor de &kdiff3;) intento hacerlo lo mejor posible, no garantizo que no existan fallos. De acuerdo con la licencia GNU GPL NO EXISTE NINGUNA GARANTÃA para este programa. Por lo tanto, sea humilde y tenga siempre lo siguiente en mente: +
+ Errar es humano, pero para echar las cosas a perder necesita un ordenador. +
+Ésto es lo que este programa puede hacer por usted: &kdiff3; ... + + ... lee y compara dos o tres directorios recursivamente. + ... tiene un especial cuidado con los enlaces simbólicos. + ... le permitirá navegar por los directorios con una doble pulsación del ratón. + ... para cada elemento propone una operación de fusión, que puede cambiar antes de iniciar la fusión del directorio. + ... le permite simular la fusión y lista las acciones que se realizarían si se llegasen a llevar a cabo. + ... le permite realizar la fusión, y le permite interactuar cuando sea necesaria la interacción manual. + ... le permite ejecutar las operaciones seleccionadas para todos los elementos (tecla F7) o para el elemento seleccionado (tecla F6). + ... le permite continuar la fusión después de la interacción manual con la tecla F7. + ... crea copias de seguridad opcionales, con la extensión «.orig». + ... + +
+ +Iniciar la comparación o fusión del directorio +Es similar a la fusión y comparación de archivos. Solo debe especificar los directorios en la línea de órdenes o en el diálogo abrir archivo. +Comparar/fusionar dos directorios: +kdiff3 directorio1 directorio2 + kdiff3 directorio1 directorio2 -o directorio-destino + +Sino se especifica directorio de destino, &kdiff3; utilizará directorio2. + + +Comparar/fusionar tres directorios: +kdiff3 directorio1 directorio2 directorio3 + kdiff3 directorio1 directorio2 directorio3 -o directorio-destino + +Cuando se fusionen tres directorios directorio1 se utiliza como base para la fusión. Sino se especifica directorio destino, &kdiff3; utilizará directorio3 como directorio destino para la fusión. + +Tenga en cuenta que solo la comparación se inicia automáticamente, no la fusión. Para esto debería seleccionar la entrada de menú o la tecla F7 (más detalles a continuación). + + + +Información visible del directorio de fusión +Mientras lee estos directorios se mostrará un cuadro de diálogo en el que se informará del progreso. Si cancela la exploración del directorio, solo se compararán los archivos listados. Cuando se termine la exploración del directorio &kdiff3; mostrará una lista con el resultado... + + + +... y detalles sobre el elemento seleccionado actualmente a la derecha: + + + + + +La columna nombre +Cada archivo y directorio que se encuentre durante la exploración se mostrará aquí en un árbol. Puede seleccionar un elemento pulsando una vez con el ratón. De forma predeterminada los directorios están contraídos. Puede expandirlos y contraerlos pulsando en «+»/«-», con una doble pulsación, o utilizando las teclas Flecha izquierda o Flecha derecha. El menú «Directorio» también contiene dos acciones «Plegar todos los subdirectorios» y «Desplegar todos los subdirectorios» con los que podrá contraer y expandir todos los directorios de una vez. Si hace una doble pulsación sobre un elemento de fichero comenzará la comparación y aparecerá la ventana de diferencias de archivos. +La imagen de la columna nombre reflejará el tipo de archivo en el primer directorio («A»). Puede ser uno de estos: + + Archivo normal. + Directorio normal (imagen de directorio). + Enlace a un archivo (imagen de archivo con una flecha de enlace). + Enlace a un directorio (imagen de directorio con una flecha de enlace). + +Si el tipo de archivo es diferente en el resto de directorios, ésto podrá verse en las columnas A/B/C y en la ventana que muestra los detalles sobre el elemento seleccionado. Tenga en cuenta que en este caso la fusión no podrá seleccionarse automáticamente. Cuando inicie la fusión, el usuario será informado de problemas de este tipo. + + +Las columnas A/B/C y el esquema de coloreado +Como puede verse en la imagen superior los colores rojo, verde, amarillo y negro son los que se utilizan en las columnas A/B/C. + + Negro: Este elemento no existe en este directorio. + Verde: El elemento más nuevo. + Amarillo: Más antiguo que verde, más nuevo que rojo. + Rojo: El elemento más antiguo. + +Pero para los elementos que son idénticos en la comparación sus colores son idénticos aunque no coincida la antigüedad. Los directorios se consideran iguales si todos los elementos que contienen son idénticos. Entonces tendrán el mismo color. Pero la antigüedad de un directorio no se considerará para su color. La idea de este esquema de color se basa en dirdiff.Los colores son semejantes a las hojas, que son verdes cuando nacen, se vuelven amarillas más tarde y cuando envejecen se vuelven rojos. + +La columna Operación +Después de comparar los directorios &kdiff3; también evalúa una propuesta para una operación de fusión. Esto se muestra en la columna «Operación». Puede modificar la operación pulsando en la operación que desee cambiar. Aparecerá un pequeño menú y le permitirá seleccionar una operación para este elemento (también puede seleccionar las operaciones a través del teclado. Ctrl+1/2/3/4/Supr seleccionarán A/B/C/Fusionar/Borrar respectivamente si están disponibles). Esta operación se ejecutará durante la fusión. La disponibilidad de estas operaciones dependerá del elemento y del modo de fusión. El modo de fusión será uno de los siguientes: + + Fusión del árbol de directorios («A» será tratada como la base más antigua de ambas). + Fusionar dos directorios. + Sincronizar dos directorios (activado a través de la opción «Sincronizar directorios»). + +En la fusión de tres directorios la operación propuesta será: Si para un elemento... + + ... todos los árboles de directorios son iguales: Copiar desde C. + ... A y C son iguales pero B no: Copiar desde B (o si B no existe, borra el destino, si existe). + ... A y B son iguales pero C no: Copiar desde C (o si C no existe, borra el destino, si existe). + ... B y C son iguales pero A no: Copiar desde C (o si C no existe, borra el destino, si existe). + ... solo existe A: Borrar el destino (si existe). + ... solo existe B: Copiar desde B. + ... solo existe C: Copiar desde C. + ... A, B y C no son iguales: Fusionar. + ... A, B y C no tienen el mismo tipo de archivo (p.ej. A es un directorio, B es un archivo): «Error: Conflicto en los tipos de archivo». Mientras existan elementos como éstos la fusión de directorio no comenzará. + +En la fusión de dos directorios la operación propuesta será: Si para un elemento... + + ... ambos directorios son iguales: Copiar desde B. + ... A existe, pero B no: Copiar desde A. + ... B existe, pero no A: Copiar desde B. + ... A y B existe pero no son iguales: Fusionar. + ... A y B no tienen el mismo tipo de archivo (p.ej. A es un directorio, B es un archivo): «Error: Conflicto en los tipos de archivo». Mientras existan de elementos como éstos la fusión de directorio no comenzará. + +El modo de sincronización estará activo si solo existen dos directorios, no se ha especificado destino y está activa la opción «Sincronizar directorios». &kdiff3; seleccionará una operación predeterminada de forma que ambos directorios sean idénticos después. Si para un elemento ... + + ... ambos directorios son iguales: No se hará nada. + ... A existe, pero B no: copiar A a B. + ... B existe, pero A no: Copiar B a A. + ... A y B existen, pero no son iguales: Fusionar y guardar el resultado en ambos directorios (para los usuarios el nombre de archivo guardado es B, pero entonces &kdiff3; copiará B a A). + ... A y B no tienen el mismo tipo de archivo (p.ej. A es un directorio, B es un archivo): «Error: Conflicto en los tipos de archivo». Mientras existan de elementos como éstos la fusión de directorio no comenzará. + +Cuando se fusionen dos directorios y esté seleccionada la opción «Copiar nuevo en lugar de fusionar», &kdiff3; buscará en las fechas y propondrá como elección el nuevo archivo. Si los archivos no son iguales pero tienen las mismas fechas, la operación contendrá «Error: Las fechas son iguales pero los archivos no». Mientras éstos elementos existan no se iniciará la fusión de directorios. + + +La columna estado +Durante la fusión se procesará un archivo tras otro. La columna estado mostrará «Hecho» para los elementos donde se haya producido la operación de fusionado, y otro texto si sucede algo inesperado. Cuando se completa una fusión, debería hacer una última comprobación para ver si el estado de todos los elementos es el adecuado. + + +Columnas estadísticas +Cuando está activado en las opciones el modo de comparación de archivos «Análisis completo», &kdiff3; mostrará columnas que contienen el número de conflictos sin resolver, resueltos, no en blanco o de espacios en blanco (la columna resueltos solo se mostrará cuando se comparen o fusionen directorios). + + +Seleccionar archivos listados +Varias opciones influyen en los archivos que se listarán aquí. Algunas son accesibles a través del diálogo preferencias. El menú Directorio contiene las entradas: + «Mostrar archivos idénticos». Archivos que se han detectado como iguales en todos los directorios. + «Mostrar archivos diferentes». Archivos que existen en dos o más directorios pero que no son iguales. + «Mostrar archivos solo en A». Archivos que existen solo en A, pero no en B o C. + «Mostrar archivos solo en B». Archivos que existen solo en B, pero no en A o B. + «Mostrar archivos solo en C». Archivos que existen solo en C, pero no en A o B. + +Active las opciones «Mostrar» para los elementos que desee listar. Si por ejemplo solo desea listar todos los elementos que existan en A o en B pero no en ambos, deberá activar «Mostrar archivos solo en A» y «Mostrar archivos solo en B» y desactivar todas las demás («Mostrar archivos idénticos», «Mostrar archivos diferentes», «Mostrar archivos solo en C»). La lista se actualizará inmediatamente para reflejar los cambios. Estas opciones también se aplican para los directorio con una excepción: Desactivar «Mostrar archivos diferentes» no ocultará ningún directorio. Solo funcionará para los archivos que contenga. Tenga en cuenta que de estas opciones solo es persistente la opción «Mostrar archivos idénticos». Los otros se activarán cuando se inicie &kdiff3;. + + + + + +Hacer una fusión de directorios +Puede fusionar el elemento seleccionado (archivo o directorio) o todos los elementos. Cuando haya hecho todas sus operaciones de elección (en todos los subdirectorios también) podrá iniciar la fusión. Sea consciente de que sino especifica un directorio de destino explícitamente, el destino será «C» en el modo de tres directorios, «B» en el modo de fusión de dos directorios, y en el modo de sincronización será «A» y/o «B». Si ha especificado un directorio de destino marque todos los elementos del árbol que debieran estar en la salida. Existen algunas opciones que hará que se omitan ciertos elementos del directorio de comparación y del de fusión. Marque estas opciones para evitar sorpresas desagradables: + + «Directorios recursivos»: Si está desactivado, no se buscarán los elementos de los directorios. + «Patrón»/«Anti-patrón»: Incluir/excluir elementos que coincidan. + «Excluir archivos ocultos» + «Mostrar» opciones (Mostrar archivos idénticos/diferentes, archivos solo en A/B/C) + +Si cambia las preferencias para listar más archivos, debería volver a buscar a través del menú «Directorio»->«Volver a buscar» (el motivo es que para realizar una comparación rápida &kdiff3; omite la comparación para los archivos suprimidos por este criterio). Si cambia sus patrones de archivo y directorio de exclusión de archivos, la lista de archivos se actualizará inmediatamente al cerrar el diálogo de las opciones. Tenga en cuenta que cuando escribe un nuevo directorio completo también deseará copiar los archivos idénticos. En este caso active la opción «Mostrar archivos idénticos». Si su directorio de destino es una de las entradas, ésto no será necesario ya que el archivo ya estará aquí. Si está satisfecho con ésto, el resto es sencillo. Para fusionar todos los elementos: Seleccione «Comenzar/continuar fusión de directorio» en el menú «Directorio» o pulse F7 (que es el acceso rápido). Para fusionar solo el elemento actual: Seleccione «Realizar operación para el elemento actual» o pulse F6. Si debido a tipos de archivos conflictivos todavía continúan existiendo operaciones no válidas, aparecerá un mensaje señalándolo, de forma que pueda seleccionar una operación válida para este elemento. Si fusiona todos los elementos aparecerá un diálogo proporcionándole las opciones «Hacer», «Simular» y «Cancelar». + + Seleccione «Simular» si desea ver el resultado sin hacer la fusión. Se mostrará un lista de todas las operaciones. + Sino seleccione «Hacer» para realizar el fusionado. + +Entonces &kdiff3; realizará las operaciones especificadas para todos los elementos. Si se precisa interacción manual (fusión de un solo archivo), aparecerá una ventana de fusión (vea la gran captura de pantalla). Cuando haya terminado con un archivo, seleccione de nuevo «Comenzar/continuar fusión de directorio» o la tecla F7. Si todavía no la había guardado, un diálogo le preguntará para hacerlo. Entonces &kdiff3; continuará con el siguiente elemento. Cuando &kdiff3; encuentre un error, éste se lo indicará con información literal del estado. En la parte inferior de la lista, aparecerán algunos mensajes de error que deberían ayudarle a entender la causa del problema. Cuando continúe con la fusión (tecla F7) &kdiff3; le permitirá reintentar o saltarse el elemento que provocó el problema. Esto significa que antes de continuar puede seleccionar otra operación o resolver el problema por otros medios. Cuando la fusión se haya completado, &kdiff3; le informará a través de un cuadro de diálogo. Si algunos elementos se fusionaron de forma individual &kdiff3; lo recordará (mientras esté en esta sesión de fusionado), y no les fusionará nuevamente cuando haga la fusión para todos los elementos. Incluso cuando se salte la fusión o no se guarde nada estos elementos se contarán como completos. Solo cuando cambie la operación de fusionado se eliminará el estado «hecho» del elemento y se podrá fusionar de nuevo. + + +Opciones para comparación y fusión de directorios +Las preferencias de &kdiff3; (menú «Preferencias»->«Configurar &kdiff3;») ahora tienen una sección llamada «Fusión de directorio» con estas opciones: + + + Directorios recursivos:Indica si se realizará la búsqueda en los directorios de forma recursiva. + Patrón(es) de archivo(s):Solo los archivos que coincidan con el patrón se colocarán en el árbol. Puede especificarse más de un patrón utilizando el punto y coma «;» como separador. Comodines válidos: «*» y «?» (p. ej. «*.cpp;*.h»). El valor predeterminado es «*». Este patrón no se utiliza en directorios. + Anti-patrón(es) de archivo:Los archivos y directorios que coincidan con este patrón se excluirán del árbol. Se puede especificar más de un patrón utilizando el «;» como separador. Comodines válidos: «*» y «?». El valor predeterminado es «*.orig;*.o;*.obj». + Anti-patrón(es) de direcctorio:Los archivos y directorios que coincidan con este patrón se excluirán del árbol. Se puede especificar más de un patrón utilizando el «;» como separador. Comodines válidos: «*» y «?». El valor predeterminado es «CVS;deps;.svn». + Usar .cvsignore:Ignora los archivos y directorios que también se vayan a ignorar por el CVS. Muchos archivos generados automáticamente se ingorarán por el CVS. La gran ventaja es que puede ser un directorio especificado a través del archivo local «.cvsignore» (vea info:/cvs/cvsignore). + Buscar archivos y directorios ocultos:En algunos sistemas de archivos tienen un atributo «Oculto». En otros sistemas el nombre de archivo comienza con un punto («.»), lo que hace que esté oculto. Esta opción le permite decidir si incluir o no estos archivos en el árbol. De forma predeterminada está activado. + Seguir enlaces de archivos:Para los enlaces de los archivos: Cuando esté desactivado, se compararán los enlaces simbólicos. Cuando esté activado, se compararán los archivos que estén detrás de los enlaces. De forma predeterminada está desactivada. + Seguir enlaces de directorios:Para los enlaces de los directorios: Cuando esté desactivado se compararán los enlaces simbólicos. Cuando esté activado, el enlace será tratado como un directorio y se explorará recursivamente (tenga en cuenta que el programa no comprueba si el enlace es «recursivo»). Así por ejemplo, un directorio que contenga un enlace al directorio puede provocar un bucle infinito, y después de cierto tiempo podrá sobrecargar la pila o utilizar toda la memoria, colgando el programa). De forma predeterminada está desactivada. + Comparación de nombres de archivo sensible a mayúsculas y minúsculas:El valor predeterminado es false (falso) para Windows, true (verdadero) para otros sistemas operativos. + Modo de comparación de archivos: + + Comparación binaria:Éste es el modo de comparación de archivos predeterminado. + Análisis completo:Hace un análisis completo de cada archivo y muestra las columnas de información estadística (número de conflictos resueltos, sin resolver, no blancos y blancos). El análisis completo es más lento que un simple análisis binario, y mucho más lento cuando se utiliza con archivos que no contienen texto (especifique el anti-patrón archivo). + Validar la fecha de modificación:Si compara directorios grandes sobre una red lenta, es más rápido comparar solo las fechas de modificación y el tamaño del archivo. Pero esta mejora del rendimiento paga el precio de una pequeña inseguridad. Utilice esta opción con cuidado. De forma predeterminada estará desactivada. + Validar el tamaño:Similar a la validación de la fecha. No hace comparaciones reales. Dos archivos se consideran iguales si sus tamaños son iguales. Esto es práctico cuando la operación de copiado no conserva la fecha de modificación. Utilice esta opción con cuidado. De forma predeterminada estará desactivada. + + + Sincronizar directorios:Activa el «Modo sincronizado» cuando se comparan dos directorios y no se especificó el directorio de destino. En este modo las operaciones propuestas se seleccionarán de forma que tras realizar la operación ambos directorios queden iguales. Por ello el resultado del fusionado se escribirá en ambos directorios. De forma predeterminada estará desactivada. + Copiar el más nuevo en vez de fusionar:En lugar de fusionar la operación propuesta será copiar la fuente nueva si hubo algún cambio (considerado inseguro, ya que implica que el otro directorio no ha sido editado. Deberá hacer una comprobación para cada caso). De forma predeterminada estará desactivada. + Archivos de copia de seguridad:Si se reemplaza un archivo o directorio por otro o se borra, la versión original se renombrará con una extensión «.orig». Si ya existía un archivo con la extensión «.orig» se borrará sin hacer copia de seguridad. También afecta al fusionado normal de archivos simples, no solo al modo de fusionado de directorio. De forma predeterminada estará activada. + + + +Otras funciones en la ventana del directorio de fusión +Modo de pantalla dividida/completa +Normalmente la vista de la lista de fusionado de directorios permanece visible cuando se compara o fusiona un solo archivo. Con el ratón puede mover la barra divisoria que separa la lista de archivos de las ventanas de texto diff. Sino desea ésto, puede desactivar la «Vista de pantalla dividida» en el menú «Directorio». A continuación utilice «Cambiar vista» en el menú «Directorio» para conmutar entre la lista de archivos y la ventana de texto diff que ocupará la pantalla completa. + +Comparar o fusionar un solo archivo +Probablemente preferirá una doble pulsación del ratón sobre un archivo para compararlos. Sin embargo existe una entrada en el menú «Directorio». También puede fusionar directamente un solo archivo, sin iniciar el fusionado del directorio a través de la opción «Fusionar un solo archivo» en el menú «Directorio». Al guardar el resultado, el estado cambiará a «hecho», y el archivo no se fusionará si se inicia un fusionado de directorio. Pero tenga en cuenta que la información del estado se perderá cuando vuelva a explorar un directorio: Menú «Directorio»->«Volver a buscar». + +Comparar o fusionar archivos con nombres diferentes +Algunas veces necesitará comparar o fusionar archivos con nombres diferentes (p. ej. el archivo actual y la copia de seguridad en la misma carpeta). Seleccione el archivo exacto pulsando en el icono en la columna A, B o C. El primer archivo seleccionado se marcará con una «A», el segundo y tercero con «B» y «C» con independencia de la columna en la que esté. Solo se podrá seleccionar en la parte superior de los árboles de archivos. Seleccione «Comparar explícitamente archivos seleccionados» o «Fusionar explícitamente archivos seleccionados» desde el menú «Directorio». Estas entradas también aparecerán como menú contextual cuando pulse el botón derecho cuando pulse el último archivo seleccionado. La comparación o fusión de un archivo se realizará en la misma ventana. Si este método se utiliza para directorios se abrirá una ventana nueva. + +
+ + +Temas variados + +Transferencia de red a través de KIO +KIO-Slaves +KDE soporta transparencia de red a través de los KIO-slaves. &kdiff3; lo utiliza para leer los archivos de entrada y para explorar directorios. Esto significa que puede especificar archivos y directorios locales y en recursos remotos a través de URLs. Ejemplo: +kdiff3 prueba.cpp ftp://ftp.muylejos.org/prueba.cpp +kdiff3 tar:/home/hacker/archivo.tar.gz/dir ./dir + + +La primera línea compara un archivo local con un archivo en un servidor FTP. La segunda línea compara un directorio con un archivo comprimido con un directorio local. Otros KIO-slaves interesantes son: + +Archivos de la web (http:). +Archivos desde el FTP (ftp:). +Transferencia de archivos encriptados (fish:, sftp:). +Recursos Windows (smb:). +Archivos locales (file:). + +Otras cosas posibles, aunque probablemente poco prácticas son: + +Páginas de manual (man:). +Páginas de información (info:). + + + +Cómo escribir URLs +Una URL tiene una sintaxis diferente comparada con las rutas de los archivos y directorios locales. Algunas cosas a considerar son: + +Una ruta puede ser relativa y puede contener «.» o «..» Ésto no es posible para URLs que son siempre absolutas. Los caracteres especiales deben escribirse «escapados» («#» se convertirá en «%23», los espacios se convertirán en «%20» y así sucesivamente). P.ej. Un archivo con el nombre «/#foo#» tendrá el URL «file:///%23foo%23». Cuando un URL no funcione tal y como esperaba, intente abrirla primero en Konqueror. + + + + +Capacidades de los KIO-Slaves. +La transparencia de red tiene un inconveniente: No todos los recursos tienen las mismas capacidades. Algunas veces esto es debido al sistema de archivos del servidor, otras al protocolo. Aquí tenemos una pequeña lista de restricciones: + +Algunas veces no soporta enlaces. O no hay forma de distinguir si un enlace apunta a un archivo o a un directorio. Siempre se asume un archivo (ftp:, sftp:). No siempre se puede determinar el tamaño del archivo. Soporte limitado para los permisos. No hay posibilidad de modificar los permisos o la hora, por ello los permisos o la hora de la copia puede diferir del original (vea la opción «Verificar tamaño»). La modificación de permisos o de la hora solo es posible en los archivos locales. + + + + + +Utilizar &kdiff3; como un KPart +KDiff3 es un KPart. Actualmente implementa la interfaz KParts::ReadOnlyPart-interface. Su principal utilización es la de visor de diferencias en KDevelop. KDevelop siempre inicia primero el visor interno de diferencias. Para llamar a &kdiff3; pulse el botón derecho del ratón en la ventana de diferencias y seleccione «Mostrar en KDiff3Part» en el menú contextual. &kdiff3; normalmente requiere dos archivos completos como entrada. Cuando se utiliza como una parte &kdiff3; asume que el archivo de entrada es un archivo de parches en formato unificado. &kdiff3; recupera el nombre del archivo original del archivo del parche. Al menos uno de los dos archivos debe estar disponible. &kdiff3; llamará a patch para volver a crear el segundo archivo. En Konqueror puede seleccionar un archivo de parche y seleccionar «Previsualizar en» - «KDiff3Part» desde el menú contextual. Sea consciente de que esto no funcionará si no está disponible ninguno de los archivos originales, y no será fiable si hubo modificaciones en el(los) archivo(s) original(es) desde que se generó el parche. Cuando se ejecute como una parte, &kdiff3; solo proporcionará la diferencia de dos archivos, una pequeñísima barra de herramientas y un menú. La fusión y comparación de directorios no está soportada. + + + + +Preguntas y respuestas +&reporting.bugs; &updating.documentation; + +¿Por qué se llama «&kdiff3;»? Las herramientas llamadas «KDiff» y «KDiff2» (ahora llamada «Kompare») ya existen. Por tanto «KDiff3» debería sugerir que incluye la fusión de forma similar a la herramienta «diff3» de la colección de herramientas Diff. + +¿Por qué la he liberado bajo la GPL? He utilizado programas GPL durante mucho tiempo y aprendí mucho echando un vistazo a muchas fuentes. Ésta es mi forma de dar las «gracias» a todos programadores que han hecho lo mismo. + +Faltan algunos botones y funciones. ¿Que está pasando? Compiló las fuentes, pero probablemente no especificó de forma correcta el parámetro «prefix» de KDE en configure. De forma predeterminada configure intentará instalarlo en /usr/local pero KDE no encuentra el archivo de recursos de la interfaz de usuario (p.ej. kdiff3ui.rc). El archivo README contiene más información sobre el parámetro «prefix» correcto. + +Algunas líneas que son similares, pero no idénticas aparecen unas al lado de las otras, pero no siempre. ¿Por qué? Las líneas que solo contienen una cantidad diferente de espacios se tratan «igual» al principio, de forma que solo una diferencia en un caracter que no sea un espacio en blanco hará que las líneas sean «diferentes». Si aparecen líneas similares unas al lado de las otras, en realidad es una coincidencia, y sucede algunas veces. Consulte el manual de ayuda de Diff. + +¿Por que se deben resolver todos los conflictos de fusionado antes de guardarlos? Para cada sección ya sea igual o diferente el editor en la ventana de resultado de la fusión recordará su comienzo y su final. Ésto es necesario para que los conflictos puedan resolverse manualmente pulsando el botón de la fuente (A, B o C). Esta información se perderá cuando se guarde el texto y es demasiado complicado crear un formato de archivo especial que soporte el guardado y la restauración de toda la información. + +Cómo puedo sincronizar las vista de diferencia y de fusión, de forma que todas muestren la misma posición de texto? Pulse en la columna de resumen situada a la izquierda del texto (Consulte también estó.) + +¿Por qué el editor en la ventana de resultado no tiene una función «deshacer»? Es demasiado esfuerzo por el momento. Siempre puede restaurar una versión a partir de una fuente (A, B o C) pulsando el botón respectivo. Para editar archivos grandes se recomienda utilizar otro editor. + +Cuando eliminó texto, de repente aparece «<Sin línea fuente>» y no se puede borrar. ¿Qué significa y cómo puedo eliminarlo? Para cada sección ya sea igual o diferente el editor en la ventana de resultado de la fusión recuerda dónde comienza y dónde termina. «<Sin línea fuente>» significa que no falta nada en una sección, ni siquiera un caracter de línea nueva. Esto puede suceder mientras realiza la fusión automática o mientras está editando. Ésto no es un problema, ya que no aparecerá en el archivo guardado. Si desea volver al archivo original seleccione la sección (pulse en la columna de resumen a la izquierda) y después pulse el botón de la fuente con los contenidos necesarios (A/B o C). + +¿Por qué &kdiff3; no soporta resaltado de sintaxis? &kdiff3; ya utiliza muchos colores para resaltar las diferencias. Más resaltado resultaría confuso. Utilice otro editor para esto. + +Puedo utilizar &kdiff3; para comparar archivos OpenOffice.Org, Word, Excel, Pdf, &etc;? A pesar de que &kdiff3; analizará cualquier tipo de archivo el resultado no será satisfactorio. &kdiff3; se creó para comparar archivos de texto puro. OpenOffice, Word, Excel, etc. guardan mucha más información en los archivos (relativa a tipos de letra, imágenes, páginas, colores, etc.) con la que &kdiff3; no sabe qué hacer. Por tanto &kdiff3; le mostrará el contenido del archivo interpretado como si fuera texto puro, pero esto no es para lo que se utiliza. Desde que muchos programa guardan su contenido en formato XML, puede ser capaz de leer éste como texto puro. Por tanto si el cambio es pequeño, &kdiff3; todavía puede ayudarle. La mejor solución si solo desea comparar texto (sin objetos empotrados como imágenes) es utilizar «Seleccionar todo» y «Copiar» en su programa para copiar el texto interesante al portapapeles y a continuación pegar en &kdiff3; el texto en cualquiera de las ventanas de diferencias (Consulte también Seleccionar, copiar y pegar). + +¿Donde está la opción de directorio «Listar solo deltas»? Ahora existen varias opciones «Mostrar» en el menú directorio. Desactivar «Mostrar archivos idénticos» activará «Listar solo deltas» + +¿Cómo puedo realizar una selección grande en la ventana de entrada de diferencias sin tardar demasiado tiempo? Inicie la selección de la forma habitual (pulse y mantenga pulsado el botón izquierdo del ratón). A continuación utilice las teclas de navegación (p.ej. RéPag, AvPág) manteniendo pulsado el botón izquierdo del ratón (consulte también Seleccionar, copiar y pegar). + +Aquí hay mucha información, pero ¿su pregunta no está respondida? Por favor, envíeme su pregunta. Aprecio todos los comentarios. + + + + + + +Créditos y licencia + +&kdiff3; - Herramienta de comparación y fusionado de archivos y directorios. +Program copyright 2002-2005 Joachim Eibl joachim.eibl at gmx.de +Algunas buenas ideas e informes de fallos me llegaron de colegas y de mucha gente a lo largo de la red ¡Gracias! + +Documentation Copyright © 2002-2005 Joachim Eibl joachim.eibl at gmx.de + +Traducido por Santiago Fernández Sancho santi@kde-es.org. +&underFDL; &underGPL; + + +Instalación + + +Cómo obtener &kdiff3; + +Puede descargar la última versión de &kdiff3; de su página principal: http://kdiff3.sourceforge.net. &kdiff3; también está disponible para otras plataformas. Vea la página principal para obtener más detalles. + + + + + +Requerimientos + +Para utilizar adecuadamente todas las características de &kdiff3;, necesitará &kde; 3.1 o superior. Para obtener información sobre cómo ejecutar &kdiff3; en otras plataformas sin KDE vea la página principal. Puede encontrar una lista de cambios en http://kdiff3.sourceforge.net/ChangeLog o en el archivo «ChangeLog» del paquete fuente. + + + +Compilación e instalación + +Para compilar en instalar &kdiff3; en un sistema con KDE, teclee lo siguiente en el directorio base de la distribución de &kdiff3;: + +% ./configure --prefix=kde-dir +% make +% make install + +kde-dir especifica el directorio que contiene KDE en su sistema. Sino está seguro, lea el archivo README para obtener los detalles. +Sino utiliza KDE utilice configure pero siga las instrucciones para los sistemas que solo tienen Qt en el archivo README. +Puesto que &kdiff3; utiliza autoconf y automake no debería tener problemas para compilarlo. Si tiene problemas al ejecutarlo, por favor, informe de ello a las listas de correo de &kde;. + + + + + +&documentation.index; +
+ + diff --git a/doc/es/iteminfo.png b/doc/es/iteminfo.png new file mode 100644 index 0000000..0b81443 Binary files /dev/null and b/doc/es/iteminfo.png differ diff --git a/doc/es/letter_by_letter.png b/doc/es/letter_by_letter.png new file mode 100644 index 0000000..8ddd48a Binary files /dev/null and b/doc/es/letter_by_letter.png differ diff --git a/doc/es/merge_current.png b/doc/es/merge_current.png new file mode 100644 index 0000000..3f2e341 Binary files /dev/null and b/doc/es/merge_current.png differ diff --git a/doc/es/new.png b/doc/es/new.png new file mode 100644 index 0000000..df3fd25 Binary files /dev/null and b/doc/es/new.png differ diff --git a/doc/es/open_dialog.png b/doc/es/open_dialog.png new file mode 100644 index 0000000..029f8d4 Binary files /dev/null and b/doc/es/open_dialog.png differ diff --git a/doc/es/screenshot_diff.png b/doc/es/screenshot_diff.png new file mode 100644 index 0000000..d2865d5 Binary files /dev/null and b/doc/es/screenshot_diff.png differ diff --git a/doc/es/screenshot_merge.png b/doc/es/screenshot_merge.png new file mode 100644 index 0000000..1eb935b Binary files /dev/null and b/doc/es/screenshot_merge.png differ diff --git a/doc/es/triple_diff.png b/doc/es/triple_diff.png new file mode 100644 index 0000000..c635d14 Binary files /dev/null and b/doc/es/triple_diff.png differ diff --git a/doc/es/white_space.png b/doc/es/white_space.png new file mode 100644 index 0000000..e40a1c7 Binary files /dev/null and b/doc/es/white_space.png differ diff --git a/doc/et/Makefile.am b/doc/et/Makefile.am new file mode 100644 index 0000000..3c147d1 --- /dev/null +++ b/doc/et/Makefile.am @@ -0,0 +1,4 @@ +KDE_DOCS = kdiff3 +KDE_LANG = et + + diff --git a/doc/et/dirbrowser.png b/doc/et/dirbrowser.png new file mode 100644 index 0000000..d3c63b2 Binary files /dev/null and b/doc/et/dirbrowser.png differ diff --git a/doc/et/dirmergebig.png b/doc/et/dirmergebig.png new file mode 100644 index 0000000..b26b65c Binary files /dev/null and b/doc/et/dirmergebig.png differ diff --git a/doc/et/index.docbook b/doc/et/index.docbook new file mode 100644 index 0000000..b06c99e --- /dev/null +++ b/doc/et/index.docbook @@ -0,0 +1,2425 @@ + +KDiff3"> + + + + +]> + + + + + + +&kdiff3; käsiraamat + + +Joachim Eibl
joachim.eibl at gmx.de +
+
+
+ +Marek Laane
bald@online.ee
Tõlge eesti keelde
+ + +2002-2005 +Joachim Eibl + + + +&FDLNotice; + + + +2005-01-30 +0.9.87 + + + + +&kdiff3; on failide ja kataloogide võrdlemise ja ühendamise vahend, mis +võrdleb ja ühendab kaks või kolm sisendfaili või -kataloogi, +näitab erinevusi rida realt ja sümbol sümbolilt (!), +pakub automaatse ühendamise võimalust, +võimaldab kasutada hõlpsasti ühendamiskonflikte lahendada suutvat redaktorit +pakub tänu KIO moodulitele võrguläbipaistvust +võimaldab esile tõsta või peita tühikute või kommentaaride erinevusi +toetab Unicode'i, UTF-8 ja muid kodeeringuid. + +Käesolev käsiraamat kirjeldab KDiff3 versiooni 0.9.87. + + + + + +KDE +kdeextragear +kdiff3 +diff +ühendamine +CVS +kolmikvõrdlus +võrdlemine +failid +kataloogid +versioonide kontroll +kolmikühendamine +reaerinevused +sünkroniseerimine +kpart +kio +võrguläbipaistvus +redaktor +tühimärgid +kommentaarid + + +
+ +Sissejuhatus +Veel üks võrdlemisrakendus? +Teatavasti on olemas üsna mitu graafilist võrdlusrakendust. Miks siis veel KDiff3? Siin ma selgitan veidi selle loomise tagamaid. KDiff3 nägi ilmavalgust sellepärast, et mul oli raskusi ühendamisega. Ühendamine on hädavajalik, kui mingi projekti failide kallal töötab korraga mitu inimest. Ühendamine peab olema mingil määral automatiseeritud, kui arvestada seda, et ühendamisvahend tegeleb nii uute, muudetud failidega (niinimetatud harudega) kui ka algse failiga (niinimetatud baas). Ühendamisvahend valib automaatselt muudatuse, mis mingis harus on tehtud. Kui mitu arendajat on muutnud üht ja sama rida, tuvastab ühendamisvahend konflikti, mis tuleb lahendada käsitsi. Ühendamine oli sellisel juhul keeruline, sest üks arendaja muutis hulk asju ja lisaks sellele parandas veel paljudes kohtades näiteks taanet. Samal ajal muutis teine arendaja samuti üsna palju samas failis ja nii tekkiski korraga mitu ühendamiskonflikti. Vahendid, mida ma toona kasutasin, näitasid ainult muudetud ridu, aga mitte seda, mida neis ridades on muudetud. Ning miski ei viidanud ka sellele, et muudetud on ainult taanet. See muutis ühendamise väikest viisi luupainajaks. Minu jaoks oli see alguspunkt. Esimene versioon oskas näidata erinevusi rea sees ning erinevusi tühimärkides. Hiljem lisandus veel hulk võimalusi, mis ainult suurendasid rakenduse kasulikkust. Nii on näiteks võimalik teksti kiireks võrdlemiseks kopeerida see lõikepuhvrisse ja asetada siis mis tahes võrdlusaknasse. Päris suurt pingutust nõudvaks võimaluseks osutus kataloogide võrdlemine ja ühendamine, mille tulemusena sündis peaaegu juba brauseri mõõtu lisandus. Ma loodan, et KDiff3 rahuldab ka sinu vajadused. Edu sulle! Joachim Eibl (2003) + + +Pildid ja võimalused +See pilt näitab erinevust kahe tekstifaili vahel +(KDiff3 üks varasemaid versioone): + + + + +Kolmikühendamine on täielikult toetatud. See on abiks juhul, kui kaks inimest on koodi teineteisest sõltumatult muutnud. Algne fail (baas) võimaldab KDiff3 automaatselt valida korrektsed muudatused. Võrdlusakende all asuv ühendamisredaktor lubab konflikte lahendada ja näitab, milline on sellisel juhul tulemus. Isegi seda tulemust saab kohe edasi redigeerida. See pilt näitab kolme sisendfaili ühendamist: + + + + + +KDiff3 aitab ka võrrelda ja ühendada terveid katalooge. See pilt näitabki KDiff3 kataloogide ühendamisel: + + + + + + +Veel võimalusi +Võrdlemine rida realt ja märk märgilt +Graafiliselt, värvidega näitab KDiff3 täpselt, milles peituvad erinevused Kui tegeled palju koodi (ümber)kirjutamisega, on see kindlasti abiks. + + + + + +Tühimärkide erinevuste näitamine +Tühikute ja tabeldusmärkide erinevused näidatakse otseselt ära. Kui read erinevad ainult tühimärkide arvu poolest, võib seda üheainsa pilguga näha vasakul asuval kokkuvõttetulbal (mis tähendab, et ei pruugi enam pead murda, kui muudetud on kõigest taanet). + + + + + +Kolmikvõrdlus +Kolme faili analüüs ja nende erinevuste näitamine. Vasakpoolne, keskmine ja parempoolne aken kannavad vastavalt nimesid A, B ja C ning neid eristab ka värv (sinine, roheline, magenta). Kui ühes failis on rida sama, teises aga erinev, näitab värv, milline fail on erinev. Punane värv tähendab, et mõlemad ülejäänud failid on erinevustega. + + + + + +Kahe või kolme sisendfaili hõlpus ühendamine +KDiff3 võib ühendada kaks või kolm sisendfaili, sealjuures võimalikult palju juba automaatselt. Tulemust näidatakse redigeeritavas aknas, kus enamiku konflikte saab lahendada üheainsa hiireklõpsuga: vali nupuribalt A, B või C määramaks, millist allikat kasutada. Valida võib ka enam kui ühe allika. Kuna väljundiaken on samal ajal redaktor, siis saab isegi selliseid konflikte, mille puhul tuleb midagi täiendavalt teha, lahendada ilma mingit muud abivahendit kasutamata. + + +Ja veel... + + Kiire liikumine nuppude abil. + Hiireklõps kokkuvõttetulbal sünkroniseerib kõik aknad ühele positsioonile. + Valimine ja kopeerimine mis tahes aknast ning asetamine ühendamisaknasse. + Ülevaatetulp, mis näitab, kus esineb muudatusi ja konflikte. + Värve saab kohandada just kasutaja maitsele. + Kohandatav tabeldusmärgi suurus. + Võimalus lisada tabeldusmärkide asemel tühikud. + Failide hõlpus avamine dialoogiga või võimalus määrata faile käsureal. + Stringide otsimine kõigis tekstiakendes (Otsi ehk CTRL+F ja Otsi järgmine ehk F3). + Iga rea reanumbri näitamine. + Lõikepuhvri sisu asetamine või teksti lohistamine võrdlemise sisendaknasse. + Võrguläbipaistvus KIO moodulite vahendusel. + Võimalus kasutada KDevelop3 erinevuste näitajana. + Pikkade ridade murdmine. + Unicode'i, UTF-8 ja muude kodeeringute toetus. + Paremalt vasakule kirjutatavate keelte toetus. + ... + + + + + +Failide võrdlemise ja ühendamise seletused + +Käsurea võimalused + +Kahe faili võrdlemine: +kdiff3 fail1 fail2 + + + +Kahe faili ühendamine: +kdiff3 fail1 fail2 -m + kdiff3 fail1 fail2 -o väljundfail + + + +Kolme faili võrdlemine: +kdiff3 fail1 fail2 fail3 + + + +Kolme faili ühendamine: +kdiff3 fail1 fail2 fail3 -m + kdiff3 fail1 fail2 fail3 -o väljundfail + +Pane tähele, et fail1 kujutab endast baasi fail2 ja fail3 jaoks. + + +Erijuhtum: ühenimelised failid +Kui kõigil failidel on sama nimi, aga nad asuvad erinevates kataloogides, võib kirjutamisvaeva vähendada, andes ainult esimese faili nime. Näiteks: +kdiff3 kataloog1/failinimi kataloog2 kataloog3 + + + +Kataloogide võrdlemine või ühendamine käsureal: +See käib samamoodi, ainult et tegu on kataloogidega. +kdiff3 kataloog1 kataloog2 + kdiff3 kataloog1 kataloog2 -o sihtkataloog + kdiff3 kataloog1 kataloog2 kataloog3 + kdiff3 kataloog1 kataloog2 kataloog3 -o sihtkataloog + +Kataloogide võrdlemisest ja ühendamisest saab täpsemalt lugeda siit. + + +Rohkem infot käsurea võtmete kohta annab käsk: +kdiff3 --help +Võtmed: + -m, --merge Sisendi liitmine. + -b, --base file Baasfail. Ühilduvuseks teatud vahenditega. + -o, --output file Väljundfail. Eelduseks -m. Nt.: -o newfile.txt + --out file Taas väljundfail. (Ühilduvuseks teatud vahenditega.) + --auto GUI puudub, kui kõik konfliktid on automaatselt lahenevad. (Vajalik on -o file) + --qall Konflikte ei lahendata automaatselt. (Ühilduvuseks...) + --L1 alias1 Sisendfaili 1 (baas) näidatava nime asendus. + --L2 alias2 Sisendfaili 2 näidatava nime asendus. + --L3 alias3 Sisendfaili 3 näidatava nime asendus. + -L, --fname alias Alternatiivne näidatava nime asendus. Tuleb anda kord iga sisendi kohta. + -u Toimeta. Ühilduvuseks teatud vahenditega. + + + + + +Avamisdialoog +Et mitme sisendfaili korral nad lihtsalt peavad olema valitavad, on rakendusel eriline avamisdialoog: + + + +Avamisdialoog võimaldab redigeerida failinimesid käsitsi, valida need failidialoogis ("Fail...") või kasutada hüpikmenüüs olevaid hiljuti avatud faile. Kui avad dialoogi uuesti, on seal kirjas parajasti aktiivsed failinimed. Kolmanda sisendvälja täitmine ei ole kohustuslik. Kui "C" tühjaks jätta, analüüsitakse ainult kahe faili erinevusi. Nupule "Kataloog..." klõpsates saab valida kataloogi. Kui A jaoks on määratud kataloog, saab alustada kataloogide võrdlemist-ühendamist. Kui A on fail, kuid B, C või väljund kataloogid, kasutab KDiff3 A failinime määratud kataloogides. Kui märkida "Ühenda", saab kasutada ka välja "Väljund". Siiski ei ole nõutav väljundfaili nime kohe määrata, selle võib edasi lükata ka salvestamise ajale. Klõps nupule "Seadista..." avab valikute dialoogi, kus saab enne analüüsi midagi muuta, kui pead seda vajalikuks. + + +Sisendi asetamine ja lohistamine +Vahel võib tekkida vajadus võrrelda tekstilõke, mis ei kujuta endast omaette faile. KDiff3 võimaldab väga lihtsalt asetada teksti lõikepuhvrist parajasti fookuses olevasse võrdlemise sisendaknasse. Võrdlusanalüüs algab kohe seejärel. Avamisdialoogis ei ole sellisel juhul vajalik määrata faile, vaid selle võib kohe sulgeda klõpsuga nupule "Loobu". Samuti võib kasutada lohistamist: lohista fail failihalduris või valitud tekst redaktorist ning kukuta see võrdlemise sisendaknasse. Milleks see hea on? Mõnikord võib fail sisaldada kaht sarnast funktsiooni, kuid kontrollimine, kui sarnased nad ikkagi on, võib olla päris tülikas, kui sa pead näiteks kõigepealt looma kaks faili ja siis nad mõlemad avama. Nüüd aga on võimalik vajalikud osad lihtsalt kopeerida, asetada ja võrdlemine võibki alata. Märkus: praegu ei ole võimalik midagi KDiff3-st välja lohistada, toetatud on ainult lohistamine võrdlemise sisendaknasse. Hoiatus: mõned redaktorid tõlgendavad lohistamist muusse rakendusse mitte kopeerimise, vaid lõikamisena. See tähendab, et sa võid kaotada oma esialgsed andmed. + + +Info tõlgendamine sisendaknas + + + +Iga tekstiakna ülaservas asub "inforiba". Sisendakende inforibal seisab täht "A", "B" või "C", failinimi ning aknas esimesena näha oleva rea number. (Pane tähele, et akent "C" ei pruugi olemas olla.) Iga inforiba on erinevat värvi. Kui näiteks failinimi on liiga pikk, et ära mahtuda, võib hiire viia riba kohale ning näha täielikku nime ilmuval kohtspikril. Kolmele sisendaknale on omistatud tähed "A", "B" ja "C". "A" värviks on sinine, "B" roheline ja "C" magenta. Need on vaikeväärtused, mida saab muuta seadistustemenüüst. Erinevuse avastamisel näitab värv, milline sisendfail erineb. Kui erinevad mõlemad sisendfailid, siis väljendab seda vaikimisi punane värv (seadistuste kohaselt "konflikti värv"). Värviskeem tuleb eriti kasuks kolme sisendfaili korral, mida võib näha järgmises osas (Ühjendamine). Igast tekstist vasakul asub "kokkuvõttetulp". Kui real on erinevusi, näitab kokkuvõttetulp vastavat värvi. Ainult tühimärkide erinevuse korral on kokkuvõttetulbal näha ruuduline muster. See on abiks programmeerimiskeelte korral, kus tühimärkidel ei ole erilist tähendust, võimaldades ühe hetkega tuvastada, kas on ka mingeid olulisi muudatusi (näiteks C/C++ korral on tühimärkidel mingi roll ainult stringides, kommentaarides, preprotsessoris ja veel mõnel äärmiselt esoteerilisel juhtumil). Kokkuvõttetulpa ja teksti lahutav püstjoon on katkestatud, kui sisendfailis pole selles kohas ühtki rida. Reamurdmise lubamisel on püstjoon murtud ridade juures punkteeritud. Paremal on otse kerimisriba kõrval näha "ülevaateriba". See näitab kokkusurutult sisendfaili "A" kokkuvõttetulpa. Nii on kõik erinevused ja konfliktid korraga näha. Kui kasutada ainult kaht sisendakent, on kõik erinevused punased, sest iga erinevus on sellisel juhul ju ka konflikt. Must ristkülik tähistab parajasti aknas näha olevat tekstiosa. Väga pikkade sisendfailide korral, kus sisendi ridade arv on suurem kui ülevaatetulba kõrgus pikslites, mahutatakse ühele ülevaatereale mitu sisendirida. Konflikti näitamist eelistatakse sellisel juhul tavalisele erinevusele ning viimast muutmata olekule, nii ei jää kindlasti nägemata ükski erinevus või konflikt. Ülevaateribale klõpsates näidatakse vastavat kohta tekstis. + + + +Ühendamine ja ühendamisväljundi redigeerimisaken + + + +Ka ühendamisväljundi redigeerimisaknal (allpool võrdlemise sisendaknaid) on ülaservas inforiba, kus seisab "Väljund:", failinimi ja "[Muudetud]", kui oled midagi muutnud. Tavaliselt leidub seal automaatse ühendamise vahendite pakutav tekst, kuid tihtipeale ka konfliktid. !!! Salvestamine on võimalik alles siis, kui kõik konfliktid on lahendatud !!! (allesjäänud konfliktide lahendamiseks kasuta nuppe "Liigu eelmisele/järgmisele lahendamata konfliktile") Kui on ainult kaks sisendfaili, on iga erinevus ühtlasi konflikt, mis tuleb käsitsi lahendada. Kolme sisendfaili korral käsitletakse esimest baasina, teist ja kolmandat aga potentsiaalseid muudatusi sisaldavate failidena. Kui muudetud on rida ainult sisendis B või C, aga mitte mõlemas, valitakse automaatselt muudetud allikas. Kui aga nii B kui C on (erinevalt) muutnud üht ja sama rida, märgitakse see konfliktina, mis tuleb käsitsi lahendada. Kui B ja C on ühesugused, aga erinevad A-st, valitakse C. Ka ühendamisväljundi redigeerimisaknal on vasakus servas kokkuvõtteriba. See näitab sisendi tähte, millest rida on valitud, või mitte midagi, kui rida on kõigis kolmes allikas võrdne. Konflikti korral on seal küsimärk "?" ning real endal seisab "<Ühendamise konflikt>, kõik ilusasti puust ja punaseks tehtud. Kuna konfliktide lahendamine rida-realt võib võtta päris palju aega, on read rühmitatud gruppidesse, millel on ühesugused erinevuse ja konflikti omadused. Samas on ainult tühimärkide konfliktid eraldatud muudest konfliktidest, et hõlbustada selliste failide ühendamist, kus taanet on muudetud paljudel ridadel. Kui klõpsata hiire vasaku nupuga kokkuvõttetulbal mis tahes aknas, siis valitakse selle rea grupp kõigis akendes ning näidatakse antud grupi algust (see võib kaasa tuua automaatse asukohavahetuse akendes, kui grupi algus ei ole parajasti näha). Valitud grupp muutub sellega "aktiivseks grupiks", see tõstetakse esile "praeguse vahemiku tausta värviga" ning tekstist vasakule ilmub must tulbake. Pane tähele tähtedega "A", "B" ja "C" sisendivalija nuppe menüüriba all. Mõnele neist klõpsates lisatakse selle sisendi read valitud grupi lõppu, kui grupp ei sisaldanud varem seda allikat. Vastasel juhul eemaldatakse selle allika read. Lisaks saab vahetult redigeerida mis tahes rida. Kokkuvõttetulp näitab tähte "m" iga muudetud rea kohta. Vahel võib juhtuda, et rida eemaldatakse automaatse liitmisega või redigeerides. Kui gruppi ei ole jäänud enam ühtki rida, ilmub sellele reale tekst <Lähterida puudub>. See on kõigest grupi kohatäitja juhuks, kui muudad meelt ja valid taas mõne allika. Seda teksti ei ole näha ei salvestatud failis ega kopeeritavates/asetatavates valikutes. Tekst "<Ühendamise konflikt>" seevastu liigub küll lõikepuhvrisse, kui valida ja kopeerida/asetada sellist rida sisaldav tekst. Seepärast tasuks sellise võimalusega ettevaatlik olla. Tavaline ühendamine lahendab lihtsad konfliktid automaatselt. Menüü "Ühendamine" pakub lisaks mõningaid toiminguid muude levinumate vajaduste rahuldamiseks. Kui sul tuleb enamasti konfliktide puhul valida üks ja sama baas, võid valida kõikjal "A", "B" või "C" või ainult veel lahendamata konfliktidele või ainult lahendamata tühimärkide konfliktidele. Kui soovid lahendada iga erinevuse ise käsitsi, võid lülitada sisse võimaluse "Määra erinevused konfliktideks". Kui soovid aga taas panna KDiff3 automaatselt konflikte lahendama, vali "Lahenda automaatselt lihtsad konfliktid". Seejärel alustab KDiff3 uuesti ühendamist. Kui selle käigus muudetakse midagi, mida oled varem muutnud, küsib KDiff3 enne jätkamist, mida soovid teha. Märkus: kui valid lahendamata tühimärkide konfliktide baasi ning võimalus "Numbreid ignoreeritakse" või "C/C++ kommentaare ignoreeritakse" on sisse lülitatud, koheldakse muutusi numbrites või kommentaarides samuti tühimärkidena. + + +Liikumine ja redigeerimine +Enamasti saab liikuda kerimisribade ja hiirega, kuid soovi korral on võimalik liikuda ka klahvidega. Kui klõpsata mis tahes aknasse, saab sarnaselt muude rakendustega kasutada noolenuppe, Page Up ja Page Down, Home, End, Ctrl+Home, Ctrl+End. Liikumiseks saab kasutada ka sisendafailide kerimisribast paremal pool asuvat ülevaateriba, mis võimaldab vajalikule kohale liikuda klõpsuga riba vajalikule kohale. Üles-alla kerimiseks saab kasutada ka hiireratast. Ühndamisväljundi redigeerimisaknas saab samuti kasutada kõiki tavalisi teksti redigeerimisel kasutatavaid klahve. Klahviga Insert saab lülitada lisamis- ja ülekirjutamisrežiimi (vaikimisi kehtib lisamisrežiim). Klõps hiire vasaku nupuga mis tahes kokkuvõttetulbal sünkroniseerib kõik aknad, nii et neid näitavad üht ridadegruppi (seda selgitas lähemalt osa Ühendamine). Nupureal on seitse liikumisnuppu, millega saab hüpata praegusele/esimesele/viimasele erinevusele, eelmisele/järgmisele erinevusele (Ctrl+Nool üles/Ctrl+Nool alla), eelmisele/järgmisele konfliktile (Ctrl+Page Down/Ctrl+Page Up) või eelmisele/järgmisele lahendamata konfliktile. Pane tähele, et KDiff3 jaoks jääb "konflikt", mida ei lahendata automaatselt ühendamise alguses, "konfliktiks" ka pärast selle käsitsi lahendamist. Seepärast on ka eristatud "lahendamata konfliktid". Lisaks neile on nupp "Pärast allikavalikut liigutakse automaatselt järgmisele lahendamata konfliktile". Seda sisse lülitades hüppab KDiff3 allika valimisel automaatsel selles leiduval lahendamata konfliktile. See on abiks, kui soovid tavaliselt valida ainult ühe allika. Kui sul läheb vaja mõlemat allikat või soovid pärast valimist tegelda redigeerimisega, on tõenäoliselt mõttekas see välja lülitada. Enne järgmisele lahendamata konfliktile liikumist näitab KDiff3 hetkeks langetatud valiku toimet. Kui kaua see näitamine kestab, saab määrata seadistustes: "automaatse edasiliikumise viivitus" on võimalik määrata millisekundites 0 ja 2000 vahel. Vihje: kas oled tüdinud kogu aeg klõpsimast? Kasuta siis pisikest automaatse edasiliikumise viivitust ning kiirklahve Ctrl+1/2/3 A/B/C valimiseks. + + +Valimine, kopeerimine ja asetamine +Sisendaknas kursorit ei näidata, seepärast tuleb valimine teha hiirega, klõpsates vasaku nupuga valiku alguses, hoides nuppu all ja liikudes valiku lõppu, pärast mida võib nupu vabastada. Sõna saab valida ka sellel topeltklõpsu tehes. Ühendamisväljundi redigeerimisaknas saab valida ka klaviatuuri abil, hoides all klahvi Shift ja liikudes noolenuppudega. Lõikepuhvrisse kopeerimiseks tuleb vajutada nuppu "Kopeeri" (Ctrl+C või Ctrl+Insert). Lisaks sellele on olemas ka võimalus "Valiku automaatne kopeerimine". Selle sisselülitamisel kopeeritakse kõik, mida oled valinud, automaatselt ning sul puudub vajadus anda mis tahes moel kopeerimiskäsku. Kuid ole selle võimalusega ettevaatlik, sest nii võib kogemata üle kirjutada vajaliku lõikepuhvri sisu. Käsk "Lõika" (Ctrl+X või Shift+Delete) kopeerib valitud teksti lõikepuhvisse ning kustutab selle, "Aseta" (Ctrl+V või Shift+Insert) aga asetab lõikepuhvris oleva teksti kursori asukohta või aktiivse valiku asemele. + + +Salvestamine +Salvestamine on võimalik ainult siis, kui kõik konfliktid on lahendatud. Kui fail on juba olemas ning sisse on lülitatud valik "Failidest tehakse varukoopia", antakse olemasolevale failile laiend ".orig". Kui selline peaks juba olemas olema, see kustutatakse. Kui väljud või oled alustanud uud võrdlusanalüüsi ning andmeid ei ole veel salvestatud, pärib KDiff3 sinu käest, kas soovid salvestada, loobuda või jätkata ilma salvestamata (KDiff3 ei salvesta andmeid seesmiselt, nii et kui KDiff3 väljastpoolt "tappa", lähevad andmed kaotsi). Realõpud salvestatakse vastavalt operatsioonisüsteemi tavale. UNIXi korral lõpetab rea reavahetusmärk "\n", Win32 süsteemides kelgu tagastamise sümbol pluss reavahetusmärk "\r\n". KDiff3 ei säilita sisendfailide realõppe, mis ühtlasi tähendab, et KDiff3 kasutamisel binaarfailidega peaks olema erakordselt ettevaatlik. + + +Stringide otsimine +Stringe saab otsida KDiff3 kõigis tekstiakendes. Redigeerimismenüü käsk "Otsi..." (Ctrl+F) avab dialoogi, kus saab määrata, mida otsida. Samuti saab valida, millises aknas otsida. Otsimine algab alati teksti algusest. Käsk "Otsi järgmine" (F3) viib otsitava stringi järgmise esinemise juurde (kui seda muidugi on). Kui valid otsimise mitmes aknas, otsitakse esmalt ülalt alla läbi esimene aken, seejärel taas ülalt alla teine aken jne. + + + +Valikud +Valikud ja viimati avatud failide nimekiri salvestatakse alati, kui rakendusest väljud, ning laaditakse uuesti rakenduse taaskäivitamisel (menüükäsk Seadistused -> KDiff3 seadistamine...) +Font +Valib fikseeritud laiusega fondi (mõnes süsteemis pakub dialoog ka muutuva laiusega fonti, kuid seda ei tasuks kasutada). + + Kaldkiri erinevustele:Selle valimisel näidatakse teksti erinevusi valitud fondi kaldkirjas. Kui valitud font kaldkirja ei toeta, ei tee see midagi. + + + + +Värvid + + Esiplaani värv:Tavaliselt must. + Tausta värv:Tavaliselt valge. + Erinevuse tausta värv:Tavaliselt helehall. + Värv A:Tavaliselt tumesinine. + Värv B:Tavaliselt tumeroheline. + Värv C:Tavaliselt tume magenta. + Konflikti värv:Tavaliselt punane. + Praeguse vahemiku tausta värv:Tavaliselt helekollane. + Praeguse vahemiku erinevuse tausta värv:Tavaliselt tumekollane. + +Ainult 16 või 256 värviga süsteemides ei pruugi mõned värvid puhtal kujul saadaval olla. Sellistes süsteemides valib puhta värvi nupp "Vaikeväärtused". + + +Redaktori seadistused + + TAB lisab tühikud:Kui see ei ole sees, lisatakse tabeldusklahvile vajutades tabeldusmärk, kui see on sees, vastav kogus tühikuid. + TABi suurus:Kohandatav oma maitsele. Vaikimisi 8. + Automaatne taandus:Vajutades klahvile Enter, kasutatakse uuel real eelmise rea taandust. + Valiku automaatne kopeerimine:Iga tekstivalik kopeeritakse otsekohe lõikepuhvrisse, ilma et oleks vaja anda spetsiaalset kopeerimiskäsku. + Realõpu stiil:Salvestamisel saab valida, millist realõpu stiili eelistada. Vaikimisi on see valitud operatsioonisüsteemi põhjal. + Kohaliku kodeeringu kasutamine:Mitte-ladina sümbolite näitamiseks. Tasub kasutada, kui mõningaid sinu keele sümboleid ei näidata korrektselt. + + + +Erinevuse ja ühendamise seadistused +Faile võrreldes püüab KDiff3 kõigepealt seada kokku read, mis on kõigis sisendfailides ühtmoodi. Ainult sel etapil võib ta eirata tühimärke. Teisel etapil võrreldakse iga rida ning nüüd võetakse arvesse ka tühimärgid. Tühimärke ei ignoreerita ka ühendamisel. + + + Säilitatakse reavahetus:Mõned redaktorid mõnes süsteemis salvestavad iga rea lõpu kelgu tagastuse märgiga '\r' ning reavahetusmärgiga '\n', teised aga ainult reavahetusmärgiga '\n'. Üldiselt KDiff3 ignoreerib kelgu tagastuse sümbolit, kuid sellisel juhul võivad tegelikult erineva suurusega failid paista võrdlemisel ühesugustena. Selle valiku sisselülitamisel on kelgutagatusmärgid näha, kuid neid koheldakse tühimärkidena. Ühendamise ajal tuleb see võimalus välja lülitada. Vaikimisi on väljas. + Numbreid ignoreeritakse:Vaikimisi väljas. Numbrilisi sümboleid ('0'-'9', '.', '-') ignoreeritakse analüüsi esimeses, üldvõrdlevas osas. Lõpptulemuses näidatakse siiski erinevusi, aga neid käsitletakse kui tühimärke. + C/C++ kommentaare ignoreeritakse:Vaikimisi väljas. Muudatusi kommentaarides tõlgendatakse tühimärkide muudatustena. + Tõstu ignoreeritakse:Vaikimisi väljas. Tähtede tõstu erinevusi (näiteks 'A' vs. 'a') tõlgendatakse tühimärkide muudatustena. + Eeltöötluse käsk:Vaata järgmist osa. + Ridade sobivuse eeltöötluse käsk:Vaata järgmist osa. + Karm uurimine:Püüab tuvastada ka kõige pisemad erinevused. Vaikimisi sees. Ilmselt on sellest rohkem kasu keerulisemate ja suurte failide korral. Aga mõistagi on see väga suurte failide puhul ka väga aeglane. + Automaatse edasiliikumise viivitus (ms):Kui automaatne edasiliikumine on sisse lülitatud, määrab see võimalus, kui kaua näidatakse valiku tulemust, enne kui hüpatakse järgmisele lahendamata konfliktile. + Tühimärkide käsitlemine 2/3 faili ühendamisel:Lahendab automaatselt kõik tühimärkide konfliktid määratud faili valides (vaikimisi käsitsivalik). Kasulik, kui tühimärgid pole olulise tähtsusega. Kui seda läheb ainult mõnikord vaja, kasuta parem ühendamismenüü käske "Vali A/B/C kõigi lahendamata tühimärgikonfliktide korral". Pane tähele, et kui sees on "Numbreid ignoreeritakse" või "C/C++ kommentaare ignoreeritakse", rakendub see automaatne valik ka kõigile numbrite või kommentaaride konfliktidele. + + + + +Kataloogide ühendamine +Need valikud käivad kataloogide uurimise ja nende ühendamise kohta, millest täpsemalt räägib osa Kataloogide võrdlemise ja ühendamise seletused. Siiski on üks valik, mis käib ka üksikfailide salvestamise kohta: + + Failidest tehakse varukoopia:Kui faili salvestamisel on sellest olemas vanem versioon, antakse viimasele laiend ".orig". Kui peaks olemas olema ka samanimeline varasem fail laiendiga ".orig", siis see kustutatakse. + + + +Riigi ja keele valikud + + Keel:Kasutajaliidese keele määramine. Selle muutmine ei mõjuta töötavat rakendust. Keele muutmiseks tuleb KDiff3 sulgeda ja uuesti käivitada. (See valik ei ole kasutatav KDiff3 KDE versioonis, sest seal saab keele määrata KDE üldises seadistuses.) + Kõikjal kasutatakse kodeeringut:Järgnevaid kodeeringuvalikuid saab määrata eraldi, välja arvatud juhul, kui äsjatoodud valik on sisse lülitatud, sest siis võtavad kõik valikud esimese valiku väärtuse. + Kohalik kodeering:Kodeeringu valimise väljade kohal seisab märge, mis annab teada kohaliku kodeeringu (see ei ole muudetav, vaid lihtsalt teadmiseks, kui sa ei peaks oma kodeeringut teadma). + A/B/C kodeering:Sisendfailide kodeeringu kohandamine. See mõjutab inglise tähestikku mittekuuluvate sümbolite esitamist. Kohandada saab iga kodeeringut eraldi, nii et sul on isegi võimalus võrrelda ja ühendada faile, mis on salvestatud erinevas kodeeringus. + Kodeering ühendamisväljundil ja salvestamisel:Kui muudad faili, saad siis määrata, millises kodeeringus salvestatakse see kettale. + Eelprotsessori failide kodeering:Kui oled määranud eelprotsessorid, võib juhtuda, et nad ei suuda sinu kodeeringut töödelda (kui näiteks sinu failid on 16-bitises Unicode''is, eelprotsessor suudab aga töödelda vaid 8-bitist ASCII-d). Siin saad määrata eelprotsessori väljundi kodeeringu. + Paremalt vasakule keeled:Mõningaid keeli kirjutatakse paremalt vasakule. Selle valiku sisselülitamisel näitab KDiff3 võrdluse sisendakendes ja ühendamise väljundaknas teksti paremalt vasakule. Pane tähele, et kui käivitad KDiff3 käsurealt võtmega "--reverse", kasutab kogu rakendus paremalt vasakule paigutust (seda võimaldab Qt). Käesolev käsiraamat on kirjutatud eeldusel, et "Paremalt vasakule keeled" ega võti "reverse" ei ole kasutusel. Sestap tuleb nende kasutamisel mõningaid "vasakul" või "paremal" antud kirjeldusi lugeda lihtsalt selle teadmise valguses vastupidi. + + + + +Muud +(neid valikuid ja toiminguid saab kasutada menüü või nupuriba vahendusel) + + Näita reanumbreid:Võimalus valida, kas sisendfailidel näidatakse ridade numbreid. + Näita erinevusi tühiku- ja tabeldusmärkides:Vahel võivad nähtavad tühikud ja tabeldusmärgid tõsiselt häirida, millisel juhul on võimalik nende näitamine välja lülitada. + Näita tühimärke:Selle väljalülitamisel ei tõsteta esile tühimärkide erinevusi tekstis ega ülevaatetulbal. Pane tähele, et et kui sees on "Numbreid ignoreeritakse" või "C/C++ kommentaare ignoreeritakse", rakendub see ka kõigile numbrite või kommentaaride konfliktidele. + Ülevaate valikud:Neid valikuid saab kasutada ainult kolme faili võrdlemisel. Tavarežiimis näidatakse erinevusi ühel värvilisel ülevaatetulbal. Kuid vahel võivad huvi pakkuda kolmest faili ainult kahe erinevused. Valides vastavalt ülevaate "A vs. B", "A vs. C" või "B vs. C", näidatakse tavalise ülevaatetulba kõrval teist vajaliku infoga. + Reamurdmine võrdlusakendes:Read murtakse, kui nende pikkus ületab akna laiust. + Näita akent A/B/C:Vahel võib tekkida tahtmine ekraanil ruumi juurde tekitada, et näha paremini näiteks pikki ridu. Sellisel juhul saab peita aknad, mis ei ole hetkel olulised (menüü Aken). + Lülita poolitamissuund:Lülitab võrdlusakende asetsemist üksteise kõrval (A vasakul pool B ja B vasakul pool C) ning üksteise kohal (A B kohal ja B C kohal). Ka see võib olla abiks pikkade ridade korral (menüü Aken). + Kiirühendamine:Mõnikord võib leida erinevuste vaatamisel, et käes on aeg tegelda ühendamisega. "Ühenda praegune fail" menüüs Kataloog toimib ka siis, kui sa võrdled ainult kaht faili. Ühekordne klõps käivitab ühendamise ning kasutab vaikimisi väljundifaili nimena viimase sisendfaili nime (kui seda on kasutatud ühendamise taaskäivitamiseks, väljundfaili nimi säilitatakse). + + + +Kiirklahvide seadistamine +Praegu toetab ainult KDE versioon kasutaja võimalust määrata kiirklahve (menüükäsk Seadistused -> Kiirklahvide seadistamine...) + + + +Eeltöötluse käsud: +KDiff3 toetab kaht eeltöötluse võimalust. + + Eeltöötluse käsk:Mis tahes faili lugemisel filtreeritakse see läbi siin määratud käsu. Algse faili asemel näeb siis antud käsu väljundit. Sul on võimalik panna kirja oma eeltöötluse käsk, mis rahuldaks just sinu vajadused. Kasuta seda võimalust näiteks faili ülearuste osade kõrvaldamiseks või taande automaatseks korrigeerimiseks vms. + Ridade sobivuse eeltöötluse käsk:Mis tahes faili lugemisel filtreeritakse see läbi siin määratud käsu. Kui määratud on ka eeltöötluse käsk (vaata eespool), on eeltöötluse käsu väljund ridade sobivuse eeltöötluse käsu sisendiks. Viimase väljundit kasutatakse ainult analüüsi esimeses, reasobivuse faasis. Sul on võimalik panna kirja oma eeltöötluse käsk, mis rahuldaks just sinu vajadused. Igal sisendi real peab olema talle vastav väljundi rida. + + +Selle mõte on pakkuda kasutajale suuremat paindlikkust võrdlemistulemuse seadistamisel. Kuid see nõuab välist programmi ja mõistagi ei taha enamik sellist ise kirjutama hakata. Õnneks suudab enamasti selliste asjadega toime tulla sed või perl. +Näide: lihtne testnäide: Võtame faili a.txt (6 rida): + aa + ba + ca + da + ea + fa + Ja faili b.txt (3 rida): + cg + dg + eg + Ilma eeltöötluseta seatakse vastavusse järgmised read: + aa - cg + ba - dg + ca - eg + da + ea + fa + Tõenäoliselt ei ole see sugugi see, mida sa soovisid, sest oluliseks infokandjaks on just esimesed tähed. Et sobivusalgoritn jätaks arvesse võtmata teise tähe, kasutame reasobivuse eeltöötluse käsku, mis asendab 'g' 'a'-ga: + sed 's/g/a/' + Selle käsu korral on võrdlemise tulemus järgmine: + aa + ba + ca - cg + da - dg + ea - eg + fa + Seesmisel näeb sobivusalgoritm faile juba pärast reasobivuse eeltöötluse rakendamist, kuid ekraanil jääb fail muutmata. (Tavaline eeltöötlus muudaks andmeid ka ekraanil.) + +<command +>sed</command +> põhitõed +Selles osas tutvustame ainult programmi sed üksikuid põhimõttelisi omadusi. Rohkem infot leiab käsuga info:/sed või aadressilt http://www.gnu.org/software/sed/manual/html_mono/sed.html. Windowsi eelkompileeritud versioon asub aadressil http://unxutils.sourceforge.net. Pane tähele, et järgmistes näidetes eeldame, et käsk sed asub mõnes keskkonnamuutujaga PATH määratud kataloogis. Kui see nii ei ole, tuleb sul määrata käsu täielik asukoht. Pane tähele ka seda, et järgnevates näidetes on kasutatud ühekordset jutumärki ('), mis Windowsis ei toimi - seal tuleb kasutada topeltjutumärke ("). +Antud kontekstis kasutatakse ainult sed-i asenduskäsku: + sed 's/REGULAARAVALDIS/ASENDUS/LIPUD' + Enne uue käsu kasutamist KDiff3-ga võiks seda esmalt testida konsoolil. Siin tuleb kasuks käsk echo. Näide: + echo abrakadabra | sed 's/a/o/' + -> obrakadabra + Toodud näites on tegemist äärmiselt lihtsa sed-käsuga, kus asendatakse esimene "a" "o"-ga. Kui soovid asendada kõik esinemiskorrad, tuleb kasutada lippu "g"-flag: + echo abrakadabra | sed 's/a/o/g' + -> obrokodobro + Sümbol "|" on torukäsk, mis edastab eelmise käsu väljundi järgmise käsu sisendile. Kui soovid testida pikema failiga, võid kasutada käsku cat, kui tegemist on UNIX-i süsteemiga, või type, kui tegu on Windowsiga. sed sooritab asenduse igal real. cat failinimi | sed võtmed + + + +Näited <command +>sed</command +>-i kasutamise kohta KDiff3-ga +Muud tüüpi kommentaaride ignoreerimine +Praegu mõistab KDiff3 ainult C/C++ kommentaare. Reasobivuse eeltöötluse käsuga saab aga ignoreerida ka muud tüüpi kommentaare, teisendades need C/C++ kommentaarideks. Näide: kui soovid ignoreerida kommentaare, mille alguses on "#", tuleks need teisendada nii, et alguses oleks "//". Pane tähele, et seejuureks peaks olema võimalus "C/C++ kommentaare ignoreeritakse" olema sisse lülitatud, muidu pole asjal mõtet. Vastav reasobivuse eeltöötluse käsk näeb välja selline: + sed 's/#/\/\//' + Kuna sed omistab sümbolile "/" eritähenduse, on oluline asetada asendusstringis iga "/" ette sümbol "\". Mõnikord on "\" vajalik teatud ertähendusega sümbolite lisamiseks või eemaldamiseks. Nüüd on olulised üksikjutumärgid (') enne ja pärast asenduskäsku, sest vastasel juhul püüab shell mõningaid erisümboleid, näiteks '#', '$' või '\' tõlgendada juba enne nende edastamist käsule sed. Pane tähele, et Windowsis tuleb anda topeltjutumärgid ("). Windows asendab ka muid sümboleid, näiteks '%', nii et siin võib olla vajalik veidi eksperimenteerida. + +Tõstutundetu võrdlus +Järgmise reasobivuse eeltöötluse käsuga saab kogu sisendi muuta suurtäheliseks: + sed 's/\(.*\)/\U\1/' + Siin on ".*" regulaaravaldis, mis sobib iga stringiga, antud kontekstis siis iga real asuva sümboliga. "\1" asendusstringis tähistab sobivat teksti esimeses "\(" and "\)" paaris. "\U" teisendab sisestatud teksti suurtäheliseks. + + +Versioonikontrolli võtmesõnade ignoreerimine +CVS ja muud versioonikontrolli süsteemid kasutavad mitmeid võtmesõnu automaatselt genereeritavate stringide lisamiseks (info:/cvs/Keyword substitution). Kõik need järgivad mustrit "$VÕTMESÕNA genereeritud tekst$". Nüüd läheb meil vaja reasobivuse eeltöötluse käsku, mis eemaldaks ainult genereeritud teksti: + sed 's/\$\(Revision\|Author\|Log\|Header\|Date\).*\$/\$\1\$/' + Võimalikke võtmesõnu eraldab "\|". Seda loendit võid mõistagi vastavalt oma vajadustele muuta. Enne "$" on kindlasti vajalik "\", sest muidu on "$" sobivuseks rea lõpp. +Kui katsetad sed-iga, hakkad arvatavasti veidi aduma regulaaravaldiste mõtet ja võib-olla isegi neid armastama. Iseenesest on regulaaravaldised väga kasulikud, sest päris paljud programmid toetavad sarnast võimalust. + + +Numbrite ignoreerimine +Numbrite ignoreerimine on tegelikult juba sisseehitatud võimalus. Kuid näitame siinkohal, kuidas see näeks välja reasobivuse eeltöötluse käsuna: + sed 's/[0123456789.-]//g' + Sobivad kõik sümbolid '[' ja ']' vahel ning neid ei asendatagi, vaid lihtsalt kõrvaldatakse. + + +Teatud veergude ignoreerimine +Tekst võib olla rangelt vormindatud ning sisaldada näiteks veergu, mida soovid alati ignoreerida, samas aga muid veerge analüüsiks kasutada. Järgnevas näites ignoreeritakse viit esimest veergu (sümbolit), järgmised kümme säilitatakse, siis ignoreeritakse taas viit veergu ning ülejäänud rida säilitatakse. + sed 's/.....\(..........\).....\(.*\)/\1\2/' + Iga punkt '.' vastab ühele sümbolile. "\1" ja "\2" asendusstringis tähistavad sobivat teksti esimeses ja teises "\(" ja "\)" paaris, märkides säilitatavat teksti. + + +Mitme asenduse kombineerimine +Vahel võib tekkida tahtmine teha mitu asendust korraga. Selleks tuleb nende eraldamiseks kasutada semikoolonit ';'. Näide: echo abrakadabra | sed 's/a/o/g;s/\(.*\)/\U\1/' + -> OBROKODOBRO + + + + +<command +>perl</command +>-i kasutamine <command +>sed</command +>-i asemel +sed-i asemel võib kasutada ka midagi muud, näiteks perl. + perl -p -e 's/REGULAARAVALDIS/ASENDUS/LIPUD' + Kuid perl on mõnevõrra erinev. Pane tähele, et kui sed-ile oli vaja "\(" ja "\)", siis perl-ile on vaja lihtsalt "(" ja ")" ilma eelneva '\'. Näide: sed 's/\(.*\)/\U\1/' + perl -p -e 's/(.*)/\U\1/' + + + + + +Eeltöötluse sooritamise järjekord +Andmed suunatakse läbi sisemiste ja väliste eeltöötluse käskude järgmises järjekorras + +Tavaline eeltöötlus, +Reasobivuse eeltöötlus, +Tõstu ignoreerimine (teisendamine suurtäheliseks), +C/C++ kommentaaride tuvastamine, +Numbrite ignoreerimine, +Tühimärkide ignoreerimine + +Tavalise eeltöötluse tulemusandmed säilitatakse näitamiseks ja ühendamiseks. Muud operatsioonid muudavad ainult andmeid, mida näeb reasobivuse võrdlusalgoritm. Neil harvadel juhtudel, kui kasutad tavalist eeltöötluse käsku, arvesta, et reasobivuse eeltöötluse käsk peab tavalise eeltöötluse käsu väljundit oma sisendiks. + + +Hoiatus +Eeltöötluse käsud on sageli vägagi kasulikud, aga nagu ikka võimalustega, mis muudavad sinu teksti või peidavad automaatselt teatud erinevused, võib sel moel kogemata mõningad erinevused kahe silma vahele jätta või eriti halval juhul isegi olulised andmed hävitada. Seetõttu teatab KDiff3 ühendamisel sellest, et kasutatakse tavalist eeltöötluse käsku, ning pärib, kas seda lubada vi mitte. Kuid sind ei hoiatata, kas reasobivuse eeltöötluse on aktiivne või mitte. Ühendamine on valmis alles siis, kui kõik konfliktid on lahendatud. Kui lülitad välja võimaluse "Tühimärkide näitamine", siis on nähtamatud ka erinevused, mis eemaldati reasobivuse eeltöötluse käsuga. Kui ühendamisel ei saa kasutada nuppu 'Salvesta' (sest failis on veel konflikte), lülita "tühimärkide näitamine" sisse. Kui sa ei soovi neid enamasti vähese tähtsusega erinevusi käsitsi ühendada, vali ühendamismenüüst käsk "Vali [A|B|C] kõigi lahendamata tühimärgikonfliktide korral". + + + + + +Kataloogide võrdlemine ja ühendamine +Sissejuhatus +Programmeerijad peavad sageli oma eesmärgi saavutamiseks muutma kataloogis paljusid faile. Selle ülesande kergendamiseks võimaldab KDiff3 võrrelda ja ühendada ka terveid katalooge koos nende alamkataloogidega! Kuigi kataloogide võrdlemine ja ühendamine tundub olevat üsna lihtne ja selge, tuleks siin siiski arvestada mitme asjaga. Kõige olulisem on kahtlemata see, et sellisel juhul puudutab iga operatsioon paljusid faile korraga. Kui sa ei ole esialgsetest andmetest varukoopiat teinud, võib algoleku taastamine olla väga raske või isegi võimatu. Seepärast kontrolli enne ühendamise alustamist alati, et andmed on turvaliselt varundatud ja et sul on alati võimalus tagasi minna. Kas kasutada arhiveerimist või mõnda versioonide kontrollimise süsteemi, on sinu enda otsustada, kuid pea silmas, et ka ülikogenud programmeerijad vajavad aeg-ajalt vanu alliktekste. Ning ühtlasi arvesta sedagi, et kuigi mina (see tähendab, KDiff3 autor) olen püüdnud anda endast parima, ei saa ma täie kindlusega öelda, et rakendus on ideaalne ja täiesti veatu. Nagu ütleb GNU Üldine Avalik Litsents, ei ole sellel rakendusel MITTE MINGIT garantiid. Seepärast pea alati meeles, et +
+ Eksimine on inimlik, aga tõelise segaduse korraldamiseks läheb vaja arvutit. +
+Vaatame siis, mida meie rakendus suudab teha. KDiff3... + + ... loeb ja võrdleb kaht või kolme kataloogi koos alamkataloogidega + ... peab spetsiaalselt silmas nimeviitu + ... võimaldab faile vaadelda hiire topeltklõpsuga + ... iga elemendi korral pakub välja ühendamisoperatsiooni, mida sul on voli muuta enne tegeliku kataloogide ühendamise alustamist + ... võimaldab ühendamist simuleerida, näidates ära toimingud, mis ette võetakse, ilma neid tegelikult veel tegemata + ... võimaldab mõistagi ka tegelikku ühendamist ning pakub sulle sekkumise võimalust kõikjal, kus selleks vajadus tekib + ... võimaldab käivitada valitud toimingu kõigil elementidel (klahv F7) või ainult valitud elemendil (klahv F6) + ... lubab jätkata pärast sekkumist ühendamist klahvile F7 vajutades + ... lisavõimalusena loob varukoopiad laiendiga ".orig" + ... + +
+ +Kataloogide võrdlemise või ühendamise alustamine +See on väga sarnane failide ühendamisele ja võrdlemisele. Sul tuleb lihtsalt valida kataloogid käsureal või avamisdialoogis. +Kahe kataloogi võrdlemine/ühendamine: +kdiff3 kataloog1 kataloog2 + kdiff3 kataloog1 kataloog2 -o sihtkataloogr + +Kui sihtkataloogi ei määrata, on KDiff3 jaoks selleks kataloog2. + + +Kolme kataloogi võrdlemine/ühendamine: +kdiff3 kataloog1 kataloog2 kataloog3 + kdiff3 kataloog1 kataloog2 kataloog3 -o sihtkataloog + +Kolme kataloogi ühendamisel võetakse kataloog1 ühendamise baasiks. Kui sihtkataloogi ei ole määratud, on selleks KDiff3 silmis kataloog3. + +Pane tähele, et automaatselt algab ainult võrdlemine, mitte aga ühendamine. Viimase jaoks tuleb kasutada vastavat menüükäsku või klahvi F7 (sellest räägime pikemalt veidi hiljem). + + + +Nähtav info +Kataloogide lugemisel ilmub teatekast, mis näitab edenemise käiku. Kui katkestad kataloogi läbiuurimise, näidatakse ainult neid faile, mida selle hetkeni jõuti võrrelda. Kui kataloogide skaneerimine on lõpule jõudnud, näitab KDiff3 nimekirjakasti, kus vasakul on tulemused... + + + +... ja paremal üksikasjad parajasti valitud elemendi kohta: + + + + + +Nimeveerg +Iga skaneerimisel leitud faili ja kataloogi näidatakse puus. Vajaliku elemendi saab valida sellel hiirega klõpsates. Vaikimisi on kataloogid suletud. Neid saab avada või sulgeda klõpsuga nende ees seisvale "+"/"-" või topeltklõpsuga kirjel või klahvidega Nool vasakule/paremale. Menüüs "Kataloog" on käsud "Ava kõik alamkataloogid" ja "Sule kõik alamkataloogid", mis lubavad korraga avada/sulgeda kõik alamkataloogid. Failil topeltklõpsu tehes alustatakse võrdlemist ning ilmub failide võrdlemise aken. +Pilt nimeveerus kajastab faili tüüpi esimeses kataloogis ("A"). See võib olla üks järgmistest: + + Tavaline fail + Tavaline kataloog (kaustakujuline pilt) + Viit failile (failipilt viidanoolega) + Viit kataloogile (kaustakujuline pilt viidanoolega) + +Kui failitüüp on erinevates kataloogides erinev, on see näha veergudes A/B/C ning aknas, mis näitab valitud elemendi üksikasju. Pane tähele, et sellisel juhul ei ole võimalik automaatselt käivitada ühendamist. Kui seda siiski tehakse, antakse kasutajale teada, miks see ei ole võimalik. + + +Veerud A/B/C ja värviskeem +Nagu ülal näha, kasutatakse veergudes A/B/C punast, rohelist, kollast ja musta värvi. + + Must: selles kataloogis sellist elementi ei ole. + Roheline: uusim element. + Kollane: vanem kui roheline, uuem kui punane. + Punane: vanime element. + +Võrdlemisel ühesuguseks osutunud elementide värv on siiski samuti ühesugune ka siis, kui nad on erineva vanusega. Katalooge peetakse võrdseks, kui kõik nendes olevad elemendid on samasugused. Siis võib neil olla ka ühesugune värv. Ka kataloogide korral ei mõjuta värvi vanus. Selle värviskeemi mõtte andis mulle dirdiff. Need värvid meenutavad mõneti puulehte, mis värskena on roheline, muutub hiljem kollaseks ja lõpuks punaseks. + +Operatsiooniveerg +Pärast kataloogide võrdlemist hindab KDiff3 ühendamise võimalusi. Seda näitab veerg "Operatsioon". Operatsiooni on võimalik muuta, kui klõpsata sellel operatsioonil, mida soovid muuta. Ilmub väike hüpikmenüü, mis lubab valida antud elemendile vajaliku operatsiooni. (Kõige vajalikumad operatsioonid saab valida ka klaviatuurilt, näiteks Ctrl+1/2/3/4/Del valib vastavalt võimalusele A/B/C/Ühenda/Kustuta.) Valitud operatsioon tehakse teoks ühendamise käigus. Valikud sõltuvad elemendist ning ühendamisrežiimist. Viimaseks võib olla üks järgmistest: + + Kolme kataloogi ühendamine ("A" on sellisel juhul teistele baasiks). + Kahe kataloogi ühendamine. + Kataloogide sünkroniseerimine (selle saab aktiveerida valikuga "Kataloogide sünkroniseerimine"). + +Kolme kataloogi ühendamisel on operatsioonide valikuks juhul, kui... + + ... kõik kolm kataloogi on võrdsed: kopeeri C-st + ... A ja C on võrdsed, aga B mitte: kopeeri B-st (või kui B-d ei ole, siis kustuta sihtmärk, kui see on olemas) + ... A ja B on võrdsed, aga C mitte: kopeeri C-st (või kui C-d ei ole, siis kustuta sihtmärk, kui see on olemas) + ... B ja C on võrdsed, aga A mitte: kopeeri C-st (või kui C-d ei ole, siis kustuta sihtmärk, kui see on olemas) + ... ainult A on olemas: kustuta sihtmärk (kui on olemas) + ... ainult B on olemas: kopeeri B-st + ... ainult C on olemas: kopeeri C-st + ... A, B ja C ei ole võrdsed: ühenda + ... A, B ja C ei ole sama tüüpi (nt. A on kataloog, B fail): "Viga: failitüüpide vastuolu". Kui elemendid on sellised, ei saa kataloogide ühendamist alustada. + +Kahe kataloogi ühendamisel on operatsioonide valikuks juhul, kui... + + ... mõlemad kataloogid on võrdsed: kopeeri B-st + ... A on olemas, aga mitte B: kopeeri A-st + ... B on olemas, aga mitte A: kopeeri B-st + ... nii A kui B on olemas, aga mitte võrdsed: ühenda + ... A ja B ei ole sama tüüpi (nt. A on kataloog, B fail): "Viga: failitüüpide vastuolu". Kui elemendid on sellised, ei saa kataloogide ühendamist alustada. + +Sünkroniseerimisrežiimi saab kasutada ainult siis, kui tegemist on kahe kataloogiga, märgitud ei ole konkreetset sihtmärki ning sisse on lülitatud valik "Kataloogide sünkroniseerimine". KDiff3 valib sel juhul vaikeoperatsiooni, et muuta mõlemad kataloogid võrdseks. Juhul kui... + + ... mõlemad kataloogid on võrdsed: midagi pole teha. + ... A on olemas, aga mitte B: kopeeri A -> B + ... B on olemas, aga mitte A: kopeeri B -> A + ... A ja B on mõlemad olemas, aga mitte võrdsed: ühenda ja salvesta tulemus mõlemas kataloogis (kasutaja näeb B salvestamist, kuid KDiff3 kopeerib ka B-st A-sse). + ... A ja B ei ole sama tüüpi (nt. A on kataloog, B fail): "Viga: failitüüpide vastuolu". Kui elemendid on sellised, ei saa kataloogide ühendamist alustada. + +Kui kahe kataloogi ühendamisel on sisse lülitatud valik "Ühendamise asemel kopeeritakse uuem", uurib KDiff3 kuupäevi ning pakub välja uuema faili valimise. Kui failid ei ole võrdsed, ent on sama kuupäevaga, näitab operatsiooniveerg teadet "Viga: kuupäevad on samad, aga mitte failid." Kui kataloogis on selliseid elemente, ei ole võimalik ühendamist alustada. + + +Staatuseveerg +Ühendamisel võetakse ette üks fail teise järel. Staatuseveerg näitab kirjet "Tehtud" elementide puhul, mille ühendamist saatis edu, ning midagi muud, kui ühendamise käigus tuli ette midagi ootamatut. Kui ühendamine on lõpule jõudnud, võiksid üle kontrollida ka staatuseveeru, et näha, kas kõik seal ikka rahuldab sind. + + +Statistikaveerg +Kui seadistustes on sisse lülitatud failide võrdlemise režiim "Täielik analüüs", näitab KDiff3 lisatuple, kus on kirjas lahendamata, lahendatud, tühimärkide ja mitte-tühimärkide konfliktide arv. (Lahendatud konflitkide arvuga tulpa näidatakse ainult kolme kataloogi võrdlemisel või ühendamisel.) + + + + + +Ühendamine +Ühendada on võimalik parajasti valitud element (fail või kataloog) või kõik elemendid. Kui oled langetanud kõik operatsioonivalikud (ka alamkataloogides), võid alustada tegelikku ühendamist. Pane tähele, et kui sa ei määranud sihtkataloogi, peetakse kolme kataloogi ühendamisel selleks "C", kahe kataloogi ühendamisel "B" ning sünkroniseerimisel "A" ja/või "B". Kui oled sihtkataloogi määranud, kontrolli, et kõik elemendid, mis peaksid olema väljundis, oleksid olemas ka puus. Kasutada saab mõningaid valikuid, mis jätavad teatud elemendid kataloogide võrdlemisel ja ühendamisel arvesse võtmata. Vaata need valikud üle, et vältida ebameeldivaid üllatusi: + + "Rekursiivsed kataloogid": kui see on väljas, ei kaasata elemente alamkataloogides. + "Failimuster"/"Anti-failimuster": kaasatakse/jäetakse välja mustriga sobivad elemendid + "Peidetud failid jäetakse välja" + "Ainult erinevuste näitamine": failid, mis on kõigis kataloogides ühesugused, jäävad puus näitamata ja seega ei ole neid ka sihtkataloogis. + +(Praeguses versioonis tuleb taasskaneerimine pärast kataloogide skaneerimist mõjutavate valikute muutmist käsuga "Kataloog"->"Uuri uuesti läbi" uuesti ette võtta.) Kui kõik on korras, siis ülejäänud on juba lihtne. Kõigi elementide ühendamine: vali menüüst "Kataloog" käsk "Alusta/jätka kataloogi ühendamist" või kasuta kiirklahvi F7. Ainult aktiivse elemendi ühendamine: vali "Käivita operatsioon käesoleva elemendiga" või vajuta F6. Kui failitüüpide konflikti tõttu esineb veel mõningaid sobimatute operatsioonidega elemente, ilmub teatekast, mis osutab sellistele elementidele, nii et sa saad valida neile vajalikud operatsioonid. Kui ühendad kõik elemendid, ilmub dialoog, kus valikuvõimalusteks on "Tee ära", "Simuleeri" ja "Loobu". + + Vali "Simuleeri", kui soovid näha, mida ette võetakse, ilma et seda tegelikult ette võetaks. Näidatakse põhjalikku ülevaadet, milliseid aktsioone sinu tegevus endaga kaasa tooks. + Ühendamise tegelikuks alustamiseks vali "Tee ära". + +Seejärel asub KDiff3 kõigi elementidega läbi viima neile määratud operatsioone. Kui vaja läheb käsitsi sekkumist (konkreetse faili ühendamisel), ilmub ühendamisaken (vaata suurt pilti). Kui oled faili kallal kõik vajaliku ära teinud, vali uuesti menüükäsk "Alusta/jätka kataloogi ühendamist" või vajuta klahvi F7. Kui sa ei ole veel salvestanud, ilmub dialoog, mis teeb sulle vastava ettepaneku. Seejärel võtab KDiff3 ette järgmise elemendi. Kui KDiff3 satub silmitsi veaga, annab ta sellest sulle teada ning näitab ka põhjalikku infot vea kohta, mis võib aidata kaasa arusaamisele, mis viga põhjustas. Kui valid ühendamise jätkamise (klahv F7), võimaldab KDiff3 sul antud elemendi ühendamist uuesti proovida või see vahele jätta. See tähendab, et sa saad enne jätkamist valida mõne muu operatsiooni või jätta hetkel asi nii, nagu on, et leida lahendus hiljem. Kui ühendamine on lõpule jõudnud, annab KDiff3 sellest teatekastiga sulle märku. Kui mõned elemendi on ühendatud individuaalselt, jätab KDiff3 selle (antud ühendamisseansi ajal) meelde ega hakka neid enam ühendama, kui valid hiljem kõigi elementide ühendamise. Isegi juhul, kui ühendamine jäeti tegelikult vahele või midagi ei salvestatud, peetakse neid elemente ühendatuks, nii et nendega saab hakata uuesti tegelema alles siis, kui oled vahetanud ühendamisoperatsiooni. + + +Kataloogide võrdlemise ja ühendamise valikud +KDiff3 seadistustes (menüükäsk "Seadistused"->"KDiff3 seadistamine") on sektsioon "Kataloogide ühendamine" järgmiste valikutega: + + + Rekursiivsed kataloogid:Võimalus valida, kas kataloogid otsitakse läbi rekursiivselt, see tähendab, koos alamkataloogidega. + Failimustrid:Puus näidatakse ainult faile, mis vastavad siin määratud mustrile. Rohkem kui ühe mustri saab valida, kui kasutada eraldajana semikoolonit ";". Kasutada tohib metamärke '*' ja '?' (nt. "*.cpp;*.h"). Vaikimisi on muster "*". Kataloogid mustrit ei vaja. + Anti-failimustrid:Selle mustriga sobivad failid ja kataloogid jäetakse puust välja. Rohkem kui ühe mustri saab valida, kui kasutada eraldajana semikoolonit ";". Kasutada tohib metamärke '*' ja '?'. Vaikimisi on muster "*.orig;*.o". + .cvsignore kasutamine:Ignoreeritakse faile ja katalooge, mida ignoreerib ka CVS. CVS eirab paljusid automaatselt genereeritud faile. Selle suureks eeliseks on see, et see võib olla kataloogipõhine kohaliku ".cvsignore" faili vahendusel (vaata info:/cvs/cvsignore). + Peidetud failide ja kataloogide otsimine:Mõnes failisüsteemis on failidel atribuut "peidetud", teistes süsteemides peidab failid nende nime ees seisev punkt ("."). See valik lubab sul määrata, kas sellised failid kaasatakse puusse või mitte. Vaikimisi sees. + Failiviitade järgimine:Kui on väljas, võrreldakse nimeviitu, kui sees, siis faile, millele viidatakse. Vaikimisi väljas. + Kataloogiviitade järgimine:Kui on väljas, võrreldakse nimeviitu, kui sees, peetakse viitu kataloogideks ning neid skaneeritakse rekursiivselt. (Pane tähele, et programm ei kontrolli, kas viit on "rekursiivne", nii et kui viita kataloogile sisaldav kataloog tekitab lõputu silmuse, siis mõne aja pärast, kui pinu on ületäidetud või mälu otsa saab, elab programm üle krahhi.) Vaikimisi väljas. + Ainult erinevuste näitamine:Näidatakse ainult elemente, mis ei ole sisendkataloogides võrdsed ning muudetud faile. Seepärast ei kopeerita ka kataloogides võrdseid faile ühendamisele ning kui sihtkataloog sellist faili eelnevalt ei sisaldanud, võibki see ilma selliste failideta jääda (võimalik, et tulevastes versioonides see valik muutub). Vaikimisi väljas. + + Failide võrdlemise režiim: + + Binaarne võrdlemine:See on vaikimisi failide võrdlemise režiim. + Täielik analüüs:Sooritab iga faili täieliku analüüsi ja näitab statistikatulpi (lahendatud, lahendamata, tühimärkide ja mitte-tühimärkide konfliktide arv). Täielik analüüs on aeglasem kui tavaline binaarne analüüs ning palju aeglasem, kui tegemist on failidega, mis ei sisalda teksti. (Määra sobivad anti-failimustrid.) + Muutmiskuupäeva usaldamine:Suurte kataloogide võrdlemisel üle aeglase võrgu on usutavasti kiirem võimalus võrrelda ainult muutmiskuupäevi ja failide suurust. Kuid kui see ka suurendab kiirust, võib see ometi kaasa tuua eksimusi. Seepärast tasuks selle kasutamisse ettevaatlikult suhtuda. Vaikimisi väljas. + Suuruse usaldamine:Sarnane muutmiskuupäeva usaldamisele. Tegelikku võrdlemist ei teostata. Kaht faili peetakse võrdseks, kui nende failisuurus on võrdne. See on abiks, kui failide kopeerimisel ei säilunud muutmise aeg. Kasuta seda siiski ettevaatlikult. Vaikimisi väljas. + + + Kataloogide sünkroniseerimine:Aktiveerib "sünkroniseerimisrežiimi", mille puhul võrreldakse kaht kataloogi ilma konkreetset sihtkataloogi määramata. Selles režiimis valitakse operatsioonid nii, et lõpptulemusena oleks kaks kataloogi võrdsed. Ka ühendamise tulemused kirjutatakse mõlemasse kataloogi. Vaikimisi väljas. + Ühendamise asemel kopeeritakse uuem:Ühendamise asemel pakutakse operatsiooniks uuema allika kopeerimine. Seda võimalust peetakse ebaturvaliseks, sest see eeldab, et teist faili ei ole redigeeritud. Seda aga tasuks igal juhul konkreetselt kontrollida. Vaikimisi väljas. + Failidest tehakse varukoopia:Kui fail või terve kataloog asendatakse teisega või kustutatakse, säilitatakse algne versioon, andes sellele laiendi ".orig". Kui on juba olemas varasem varukoopia laiendiga ".orig", siis see kustutatakse. See toimib nii kataloogide kui failide liitmisel. Vaikimisi sees. + + + +Muud funktsioonid +Ekraani poolitamine ja täisekraanirežiim +Tavaliselt jääb faili võrdlemisel või ühendamisel kataloogi ühndamise nimekiri nähtavale. Hiirega võid aga liigutada failide nimekirja võrdlusaknast eraldavat riba. Kui sa seda soovi, võid menüüst "Kataloog" võmaluse "Poolitamisvaade" välja lülitada. Seejärel võid kasutada menüüs "Kataloog" olevat võimalust "Lülita vaadet", et vahetada kogu ekraani täitvat failinimekirja või võrdlusakna vaadet. + +Ühe faili võrdlemine või ühendamine +Võib juhtuda, et eelistad võrdlemiseks kasutada lihtsalt klõpsu failil. Samasugune käsk on siiski olemas ka menüüs "Kataloog". Samuti saab vahetult ühendada konkreetse faili ilma kataloogide ühendamist käivitamata, kui valida menüst "Kataloog" käsk "Ühenda üks fail". Tulemuse salvestamisel märgitakse selles staatuseks "Tehtud" ning kui seejärel käivitada kataloogide ühendamine, seda faili enam ei kaasata. Kuid pane tähele, et see staatus läheb kaduma, kui käivitad uuesti kataloogi skaneerimise (menüü "Kataloog", käsk "Uuri uuesti läbi") + + +
+ + +Mitmesugused teemad + +Võrguläbipaistvus KIO vahendusel +KIO moodulid +KDE toetab võrguläbipaistvust oma KIO moodulite abil. KDiff3 kasutab neid sisendfailide lugemiseks ja kataloogide läbiuurimiseks. See tähendab, et võid faile ja katalooge määrata URL-e kasutades nii kohalikul kui võrgumasinal. Näide: +kdiff3 test.cpp ftp://ftp.faraway.org/test.cpp + kdiff3 tar:/home/hacker/archive.tar.gz/dir ./dir + + +Esimene rida võrdleb kohalikku faili failiga FTP serveril. Teine rida võrdleb kataloogi arhiivifailis kohaliku kataloogiga. Muud huvipakkuvad KIO moodulid: + +WWW failid (http:) +FTP failid (ftp:) +Krüptitud failiedastused (fish:, sftp:) +Windowsi ressursid (smb:) +Kohalikud failid (file:) + +Muud asjad, mis on võimalikud, aga arvatavasti vähekasutatavad: + +Man-leheküljed (man:) +Info-leheküljed (info:) + + + +Kuidas kirjutada URL-e +Võrreldes kohalike failide ja kataloogide asukohaga on URL-il teistsugune süntaks. Silmas tuleks pidada järgmisi asju: + +Asukoht võib olla suhteline ja sisaldada märke "." või "..". See ei ole võimalik URL-ide puhul, mis on alati absoluutsed. Erisümbolid tuleb alati "päästa" ("#" -> "%23", tühik -> "%20" jne.). Näiteks failil nimega "/#foo#" on URL "file:/%23foo%23". Kui URL ei toimi oodatult, proovi see avada Konqueroris. + + + + +KIO moodulite võimalused +Võrguläbipaistvusel on üks puudus: mitte kõik ressurssid ei paku ühesuguseid võimalusi. Vahel sõltub see serveri failisüsteemis, vahel protokollist. Toome siin ära lühikese piirangute loetelu: + +Vahel ei ole viidad toetatud. Vahel aga ei ole võimalik eristada, kas viit osutab failile või kataloogile: Sellisel juhul eeldatakse alati faili (ftp:, sftp:). Alati pole võimalik määrata failisuurust. Piiratud õiguste toetus. Puudub võimalus muuta õigusi või muutmisaega, mistõttu koopia õigused või aeg erinevad originaalist - vaata ka võimalust "Suuruse usaldamine". (See on võimalik ainult kohalike failidega.) + + + + + +&kdiff3; kui KPart +&kdiff3; on KPart. Hetkel on teostatud liides KParts::ReadOnlyPart. Selle peamine kasutusala on erinevuste vaatamine KDevelopis. KDevelop käivitab alati esmalt oma seesmise erinevuste näitaja. KDiff3 väljakutsumiseks klõpsa hiire parema nupuga erinevuste näitaja aknal ja vali kontekstimenüüst "Näita KDiff3-s". KDiff3 vajab tavaliselt sisendiks kaht faili. Komponendina kasutades eeldab KDiff3, et sisendfail on paigafail unifitseeritud vormingus. Seejärel hangib KDiff3 paigafailist algupärased failinimed. Vähemalt üks kahest failist peab olema kättesaadav. Seejärel kutsub KDiff3 välja käsu patch teise faili taasloomiseks. Konqueroris võib valida paigafaili ning seejärel kontekstimenüüst "Eelvaatlus KDiff3-s". Arvesta, et see ei toimi, kui ühtegi algupärast faili ei ole saadaval, ning see ei ole eriti usaldusväärne, kui algfaili või ka mõlemat algfaili on muudetud pärast paigafaili loomist. Komponendina käivitades pakub KDiff3 ainult kahe faili võrdlemist, väga pisikest tööriistariba ja menüüd. Ãœhendamine ega kataloogide võrdlemine ei ole praegu toetatud. + + + + +Küsimused ja vastused +&reporting.bugs; &updating.documentation; + +Miks on selle nimi "KDiff3"? Sellised vahendid, nagu "KDiff" ja "KDiff2" (nüüd nimega "Kompare") olid juba olemas. Samuti laseb "KDiff3" oletada, et see tuleb toime ühendamisega samamoodi nagu "diff3" vahend Diff-Tool paketis. + +Miks on selle litsents GPL? Ma olen GPL programme kasutanud juba väga pikka aega ning väga palju õppinud arvukaid lähtekoode uurides. Seepärast kuulub ka minu siiras tänu kõigile, kes on nii talitanud, talitavad või alles kavatsevad talitada. + +Mõned nupud ja funktsioonid on puudu. Mis lahti? Kompileerisid ilmselt rakenduse lähtekoodist, kuid jätsid konfigureerimisel korrektse KDE prefiksi määramata. Vaikimisi igatseb .configure paigalduse ette võtta kataloogis /usr/local, kuid sellisel juhul ei leia KDE kasutajaliides ressursifaili (st. kdiff3ui.rc). Korrektsest prefiksist räägib pikemalt fail README. + +Enamasti on sarnased, aga mitte samased read teineteise kõrval, aga mitte alati. Miks? Ridu, mis erinevad ainult tühimärkide arvu poolest, peetakse algul "võrdseks", samas muudab ka üksainus teistsugune tühimärk failid "erinevaks". Kui sarnased read satuvad teineteise kõrvale, on see tegelikult kokkusattumus, aga õnneks esineb seda päris sageli. + +Miks peavad enne salvestamist olema lahendatud kõik konfliktid? Iga võrdse või erineva sektsiooni korral jätab redaktor ühendamise tulemuse aknas meelde, kus see algab või lõpeb. Seda on vaja selleks, et konflikte oleks võimalik käsitsi lahendada lihtsalt allikanuppu (A, B või C) valides. See info läheb kaotsi, kui tekst salvestada ning sellise spetsiaalse failivormingu loomine, mis toetaks kogu vajaliku info salvestamist ja taastamist, oleks liiga keeruline ning raske. + +Miks puudub redaktoril ühendamise tulemuste aknas "tagasivõtmise" funtksioon? Ka see nõuaks asjade praeguse seisu juures liiga palju tööd ja vaeva. Vajalik versioon on võimalik alati taastada konkreetse allika (A, B või C) põhjal lihtsalt vastavat nuppu klõpsates. Suurema redigeerimise korral on nagunii soovitatav kasutada mõnda muud redaktorit. + +Eemaldasin veidi teksti ja järsku ilmus "<Lähterida puudub>", mida ei saa kuidagi kõrvaldada. Mida see tähendab ja kuidas sellest lahti saada? Iga võrdse või erineva sektsiooni korral jätab redaktor ühendamise tulemuse aknas meelde, kus see algab või lõpeb. "<Lähterida puudub>" tähendab, et sektsiooni ei ole enam midagi jäänud, isegi mitte reavahetusmärki. See võib juhtuda automaatsel ühendamisel või redigeerimise ajal. Tegelikult ei ole see üldse mingi probleem, sest salvestatud failis seda viidet enam ei ole. Kui soovid algvarianti tagasi, vali lihtsalt sektsioon (klõpsuga vasakul asuval kokkuvõttetulbal) ning seejärel klõpsa vajaliku sisuga allkfaili nuppu (A/B või C). + +Miks KDiff3 ei toeta süntaksi esiletõstu? KDiff3 kasutab niigi palju värve erinevuste esiletõstmiseks. Veelgi rohkem värve ajaks asja ainult arusaamatult kirjuks. Kui sa siiski soovid süntaksi esiletõstu, tuleb sul leppida mõne muu redaktoriga. + +Siin on küll palju infot, aga mitte vastust minu küsimusele! Palun saada oma küsimus mulle. Ma olen väga rõõmus igasuguse tagasiside üle. + + + + + + +Autorid ja litsents + +&kdiff3; - failide ja kataloogide võrdlemise ja ühendamise vahend +Rakenduse autoriõigus 2002-2005: Joachim Eibl joachim.eibl AT gmx.de +Mitmed lahedad ideed ja vearaportid on pärit minu kolleegidelt ning paljudelt metsiku veebi asukatelt. Tänud teile kõigile! + +Dokumentatsiooni autoriõigus © 2002-2005: Joachim Eibl joachim.eibl AT gmx.de + +Tõlge eesti keelde: Marek Laane bald@online.ee +&underFDL; &underGPL; + + +Paigaldamine + + +&kdiff3; hankimine + +KDiff3 uusima versiooni saab alla laadida selle koduleheküljelt http://kdiff3.sourceforge.net. KDiff3 on saadaval ka muudele platvormidele. Vaata lähemalt koduleheküljelt. + + + + + +Nõuded + +&kdiff3; kõigi omaduste edukaks kasutamiseks on vajalik &kde; +>3.1. Infot selle kohta, kuidas panna KDiff3 tööle muudel platvormidel ilma KDE-ta, vaata palun koduleheküljelt. Muudatuste nimekirka leiab internetist http://kdiff3.sourceforge.net/ChangeLog või lähtepaketist failis "ChangeLog". + + + +Kompileerimine ja paigaldamine + +&kdiff3; kompileerimiseks ja paigaldamiseks KDE-d kasutavas süsteemis anna &kdiff3; paketi baaskataloogis viibides käsureal korraldused: + +% ./configure --prefix=kde-kataloog +% make +% make install + +kde-kataloog määrab kataloogi süsteemis, kuhu on paigaldatud KDE. Kui sa ei ole selles kindel, loe faili README. +Kuna &kdiff3; kasutab programme autoconf ja automake, ei tohiks kompileerimisel probleeme esineda. Kui neid siiski tekib, anna neist palun teada &kde; meililistides. + + + + + +&documentation.index; +
+ + diff --git a/doc/et/iteminfo.png b/doc/et/iteminfo.png new file mode 100644 index 0000000..0b81443 Binary files /dev/null and b/doc/et/iteminfo.png differ diff --git a/doc/et/letter_by_letter.png b/doc/et/letter_by_letter.png new file mode 100644 index 0000000..8ddd48a Binary files /dev/null and b/doc/et/letter_by_letter.png differ diff --git a/doc/et/merge_current.png b/doc/et/merge_current.png new file mode 100644 index 0000000..3f2e341 Binary files /dev/null and b/doc/et/merge_current.png differ diff --git a/doc/et/new.png b/doc/et/new.png new file mode 100644 index 0000000..df3fd25 Binary files /dev/null and b/doc/et/new.png differ diff --git a/doc/et/open_dialog.png b/doc/et/open_dialog.png new file mode 100644 index 0000000..029f8d4 Binary files /dev/null and b/doc/et/open_dialog.png differ diff --git a/doc/et/screenshot_diff.png b/doc/et/screenshot_diff.png new file mode 100644 index 0000000..d2865d5 Binary files /dev/null and b/doc/et/screenshot_diff.png differ diff --git a/doc/et/screenshot_merge.png b/doc/et/screenshot_merge.png new file mode 100644 index 0000000..1eb935b Binary files /dev/null and b/doc/et/screenshot_merge.png differ diff --git a/doc/et/triple_diff.png b/doc/et/triple_diff.png new file mode 100644 index 0000000..c635d14 Binary files /dev/null and b/doc/et/triple_diff.png differ diff --git a/doc/et/white_space.png b/doc/et/white_space.png new file mode 100644 index 0000000..e40a1c7 Binary files /dev/null and b/doc/et/white_space.png differ diff --git a/doc/fr/Makefile.am b/doc/fr/Makefile.am new file mode 100644 index 0000000..4cc442d --- /dev/null +++ b/doc/fr/Makefile.am @@ -0,0 +1,4 @@ +KDE_DOCS = kdiff3 +KDE_LANG = fr + + diff --git a/doc/fr/dirbrowser.png b/doc/fr/dirbrowser.png new file mode 100644 index 0000000..d3c63b2 Binary files /dev/null and b/doc/fr/dirbrowser.png differ diff --git a/doc/fr/dirmergebig.png b/doc/fr/dirmergebig.png new file mode 100644 index 0000000..b26b65c Binary files /dev/null and b/doc/fr/dirmergebig.png differ diff --git a/doc/fr/index.docbook b/doc/fr/index.docbook new file mode 100644 index 0000000..86bd294 --- /dev/null +++ b/doc/fr/index.docbook @@ -0,0 +1,2320 @@ + +KDiff3"> + + + + +]> + + + + + + +Le guide de &kdiff3; + + +Joachim Eibl
joachim.eibl at gmx.de +
+
+
+ +&traducteurSimonDepiets; + + +2002-2004 +Joachim Eibl + + + +&FDLNotice; + + + +2004-05-29 +0.9.84 + + + + +&kdiff3; est un comparateur fusionneur de fichiers et dossiers +qui compare et fusionne deux ou trois fichiers textes ou dossiers +montre les différences ligne par ligne et caractère par caractère, +proposant une fusion automatique facilitée, +ayant un éditeur pour résoudre facilement les conflits de fusion +proposant une transparence réseau via KIO +ayant des options pour surligner ou cacher les changements dans les espaces ou commentaires. + +Ce document décrit kdiff3 version 0.9.84. + + + + + +KDE +kdeextragear +kdiff3 +diff +fusion +CVS +triple comparaison +comparer +fichiers +dossiers +CVS +fusion à trois voies +différences à la ligne +synchronise +kpart +kio +transparence réseau +éditeur +espace +commentaires + + +
+ +Introduction +Encore une autre interface Diff ? +Beaucoup d'outils graphiques pour diff existent. Pourquoi choisir KDiff3  Laissez moi vous expliquer pourquoi je l'ai écrit. Kdiff3 a été créé car j'ai eu a faire une fusion difficile. Fusionner est nécessaire quand beaucoup de gens travaillent sur les mêmes fichiers dans un projet. Une fusion peut parfois être automatisée, quand l'outil de fusion n'a pas seulement les fichiers modifiés (appelés "branches"), mais aussi le fichier original (appelé "base"). L'outil de fusion choisira automatiquement la modification faite uniquement dans une seule branche. Quand beaucoup de contributeurs auront changé les mêmes lignes, alors l'outil de fusion détectera un conflit et vous devrez le résoudre manuellement. La fusion fut donc difficile car un contributeur a changé beaucoup de choses. Un autre a aussi changé beaucoup de texte dans le même fichier, ce qui résulte en beaucoup de conflits lors de la fusion. L'outil que j'ai utilisé ne m'a donc montré que les lignes modifiées mais pas ce qui avait changé dans ces lignes. La fusion fut un vrai cauchemar. Voila donc le début. La première version a montré les différences dans une ligne et les différences d'espaces. Plus tard beaucoup d'autres options furent ajoutées pour augmenter l'utilité. Par exemple si vous voulez comparer du texte rapidement, alors vous pouvez le copier dans le presse-papiers et le coller dans une autre fenêtre diff. Une option qui me demanda beaucoup d'efforts fut la comparaison de dossiers et la facilitation de la fusion, qui a transformé le navigateur en navigateur complet. J'espère que KDiff3 marche chez vous aussi. Amusez vous ! Joachim Eibl (2003) + + +Captures d'écrans et caractéristiques +Cette capture d'écran montre la différence entre deux fichiers texte. +(Utilisant une ancienne version de KDiff3) : + + + + +La fusion à trois voies est pleinement supportée. Ceci est utile si deux personnes ont changé le code indépendamment. Le fichier original (la base) est utilisé pour aider KDiff3 a sélectionner les bons changements. L'éditeur de fusion situé sous la fenêtre diff vous autorise à résoudre les conflits, en vous montrant le résultat que vous obtiendrez. Vous pouvez aussi éditer le résultat. Cette capture d'écran montre trois fichiers en train d'être fusionnés. + + + + + +KDiff3 vous aide aussi à comparer et fusionner des dossiers complets. Cette capture d'écran montre KDiff3 pendant une fusion de dossiers : + + + + + + +Plus d'options +Visionneuse de différences ligne par ligne et caractère par caractère +En utilisant les possibilités d'affichages colorés d'une interface graphique, KDiff3 montre exactement quelle est la différence. Quand vous aurez a traiter beaucoup de texte, cela vous aidera beaucoup. + + + + + +Voir les différences d'espaces en un coup d'oeil. +Les espaces et alinéas apparaissent visiblement. Quand des lignes diffèrent seulement d'un espace, cela peut être vu en un coup d'oeil dans la colonne sur le côté gauche. Plus de problèmes quand les gens changent les espaces. + + + + + +Triple comparaison +Analyser trois fichiers et voir en quoi ils diffèrent. Les fenêtres de gauche/millieu/droite sont appelées A/B/C et on respectivement les couleurs bleu/vert/mauve. Si un des fichiers et le même et un des fichiers est différent sur une ligne alors la couleur montre quel fichier est différent. La couleur rouge montre que les deux sont différents. + + + + + +Fusion confortable de deux ou trois fichiers. +KDiff3 peut être utilisé pour fusionner deux ou trois fichiers et faire autant de fusions automatiques que possible. Le résultat est représenté dans une fenêtre modifiable ou la plupart des conflits peuvent être résolus avec un simple clic de souris. Sélectionnez les boutons A/B/C depuis la barre des boutons pour sélectionner la source qui doit être utilisée. Vous pouvez aussi utiliser plus d'une source. Cette fenêtre est aussi un éditeur pour les conflits nécessitant des corrections plus poussées pouvant être corrigées sans autre outil. + + +Et ... + + Une navigation rapide via les bouttons. + Un clic de souris dans la colonne du sommaire synchronise toutes les fenêtres pour indiquer la même position. + Sélectionnez et copiez depuis n'importe qu'elle fenêtre et collez dans la fenêtre de résultat de la fusion. + La colonne d'aperçu qui montre où les changements et conflits sont situés. + Les couleurs sont ajustables a vos préférences. + Taille des alinéas ajustable. + Option pour insérer des espaces à la place des alinéas. + Ouvrir les fichiers confortablement via une boîte de dialogue ou spécifier les fichiers via la ligne de commande. + Chercher une partie d'un texte dans toutes les fenêtres. Trouver (Ctrl+F) et trouver le suivant (F3). + Indiquer le numéro de ligne pour chaque ligne. + Coller le presse-papiers ou tirer un texte dans une fenêtre diff. + Transparence réseau via KIO. + Peut être utilisé pour voir les diff dans KDevelop 3. + Coupage des mots dans les lignes longues. + ... + + + + + +Documentation de la comparaison et fusion de fichiers + +Options en ligne de commande + +Comparer 2 fichiers : +kdiff3 fichier1 fichier2 + + + +Fusionner 2 fichiers : +kdiff3 fichier1 fichier2 -m + kdiff3 fichier1 fichier2 -o fichier-résultat + + + +Comparer 3 fichiers : +kdiff3 fichier1 fichier2 fichier3 + + + +Fusionner 3 fichiers : +kdiff3 fichier1 fichier2 fichier3 -m + kdiff3 fichier1 fichier2 fichier3 -o fichier-résultat + +Notez que fichier1 sera traité comme étant la base de fichier2 et fichier3. + + +Cas spécial : fichiers du même nom +Si tous les fichiers ont le même nom mais sont situés dans des dossiers différents, vous pouvez réduire la saisie en ne spécifiant que le nom d'un fichier, pour le premier fichier. Ex : +kdiff3 dos1/fichier dos2 dos3 + + + +Ligne de commande pour lancer une comparaison ou fusion de dossiers : +C'est assez similaire, mais cela concerne désormais des dossiers. +kdiff3 dos1 dos2 + kdiff3 dos1 dos2 -o dossier-de-destination + kdiff3 dos1 dos2 dos3 + kdiff3 dos1 dos2 dos3 -o dossier-de-destination + +Pour la comparaison et fusion de dossiers vous pouvez continuer à lire ici. + + +Pour plus d'informations sur les options en ligne de commande, utilisez : +kdiff3 --help +Options : + -m, --merge Fusionner. + -b, --base file Fichier de base explicite. Par compatibilité avec certains outils. + -o, --output file Fichier de résultat. Implique -m. Ex. : -o newfile.txt + --out file Fichier de résultat, encore. (Par compatibilité avec certains outils). + --auto Pas d'interface graphique si tous les conflits se résolvent tout seuls. (Nécessite -o fichier) + --qall Ne pas résoudre les conflits automatiquement. (Par compatibilité)... + --L1 alias1 Alias pour le fichier 1 (base). + --L2 alias2 Alias pour le fichier 2. + --L3 alias3 Alias pour le fichier 3. + -L, --fname alias Alias alternatif. Mettez cela une fois pour chaque entrée. + -u N'a pas d'effet. Pour la compatibilité avec certains outils. + + + + + +Fenêtre d'ouverture +Étant donné que plusieurs fichiers doivent être sélectionnes en entrée, le programme a une fenêtre d'ouverture spéciale : + + + +La fenêtre d'ouverture vous permet d'éditer les noms des fichier à la main, en sélectionnant un fichier via le navigateur ("Fichier...") ou vous permet de choisir des fichiers récemment utilisés via la liste défilante. Si vous rouvrez la fenêtre, alors les noms actuels seront toujours ici. Le troisième fichier d'entrée n'est pas nécessaire. SI l'entrée pour "C" reste vide, alors une analyse diff de deux fichiers seulement sera effectuée. Vous pouvez aussi sélectionner un dossier via "Dossier...". Si pour A un dossier est spécifié alors une comparaison/fusion de dossiers débutera. Si "Fusionner" est sélectionné, alors la ligne "Sortie" devient éditable. Mais il n'est pas nécessaire de spécifier le fichier du résultat de la fusion immédiatement. Vous pouvez aussi le faire au moment de l'enregistrement. Le bouton "Configurer..." ouvre la fenêtre des options pour que vous puissiez mettre en place les options avant de débuter l'analyse. + + +La saisie en Coller et Lâcher +Parfois vous voulez comparer les parties d'un texte qui n'est pas un fichier. KDiff3 vous permet aussi de coller le texte du presse-papiers dans une fenêtre de diff sélectionnée. L'analyse diff est alors immédiate. Dans la fenêtre ouverte vous n'aurez pas besoin de spécifier des fichiers, mais simplement de la fermer via "Annuler". Vous pouvez aussi utiliser la méthode du tirer/lâcher : Tirez un fichier depuis le navigateur ou sélectionnez du texte depuis un éditeur et lâchez le dans la fenêtre de diff. Quelle est l'idée ? Parfois un fichier contient deux fonctions similaires, mais vérifier à quel niveau elles sont similaires est compliqué si vous devez d'abord créer deux fichiers puis les charger. Maintenant vous pouvez simplement copier, coller et comparer les sections en question. Note : Actuellement vous ne pouvez rien tirer depuis KDiff3. Seulement le lâchage dans l'entrée de diff est géré. Attention : Certains éditeurs interprètent toujours la méthode du tirer/lâcher vers un autre programme comme un couper (à la place de copier) et coller. Vos données originales pourraient alors être perdues. + + +Interpréter l'information dans les fenêtres de saisie + + + +En haut de chaque fenêtre il y a sa "ligne d'informations". Les lignes d'informations des fenêtres de saisie contiennent une lettre "A", "B" ou "C", le nom de fichier et le numéro de ligne de la première ligne visible dans la fenêtre. (Notez que la fenêtre "C" est optionnelle). Chaque ligne d'information apparaît dans une couleur différente. (Si les chemins sont trop longs, alors vous pouvez déplacer la souris sur la ligne d'information et une bulle apparaîtra, vous montrant le nom complet). Les trois fenêtres de saisies sont assignées aux lettres "A", "B" et "C". "A" a la couleur bleue, "B" le vert et "C" le mauve. (Ce sont les options par défaut, mais elles peuvent être changées via le Menu Options). Quand une différence est détectée les couleurs montrent quel fichier diffère. Quand les deux fichiers en entrée diffèrent, alors la couleur utilisée est le rouge par défaut ("Couleur de conflit" dans les Options). Ce schéma de couleur est particulièrement utile si vous avez trois fichiers en entrée, ce qui sera vu dans la prochaine section (Fusion). A la gauche de chaque texte se trouve la "colonne de résumé". Si des différences sont trouvées sur une ligne alors la colonne de résumé affiché la couleur respective. Pour une différence d'espace seulement la colonne est changée. Pour les langages de programmation où les espaces ne sont pas si importants, il est pratique de voir d'un coup d'oeil si quelque chose d'important a été modifié. (En C/C++ les espaces ne sont intéressants que dans les chaînes, commentaires, pour le préprocesseur et dans quelques situations très ésotériques). La ligne verticale séparant la colonne de résumé et le texte est interrompue si le fichier en entrée n'a pas de lignes. Quand la coupe des mots est activée, alors cette ligne verticale apparaît en pointillé. Sur le côté droit une colonne d'"aperçu" est visible à gauche de la barre de défilement verticale. Cela montre la colonne de résumé compressée de l'entrée "A". Toutes les différences et conflits sont visibles d'un coup d'oeil. Quand seulement deux fenêtre de saisie sont utilisées, alors toutes les différences apparaîtront en rouge ici car chaque différence est aussi un conflit. Un rectangle noir encadre les parties visibles des entrées. Pour les fichiers très longs, quand le nombre de lignes est plus grand que la hauteur de la colonne d'aperçu en pixels, alors plusieurs lignes partagent la seule ligne d'aperçu. Un conflit a alors la priorité maximale sur les autres simples différences, qui ont la priorité sur les lignes ou rien ne change, pour qu'aucune différence ou conflit ne soit perdu ici. En cliquant sur cette colonne d'aperçu le texte correspondant sera affiché. + + + +Fusionner et la Fenêtre d'édition du Résultat de la Fusion + + + +La fenêtre d'édition du résultat de la fusion (située sous la fenêtre de saisie de diff) a aussi une ligne d'information en haut affichant "Résultat :", le nom du fichier et "[Modifié]" si vous avez édité quelque chose. Habituellement elle contiendra du texte à travers les facilités de fusion automatique, mais conserve souvent quelques conflits. !!! L'enregistrement est désactivé avant que tous les conflits ne soient résolus !!! (Utilisez les boutons "Aller au conflit suivant/précédent" pour trouver les conflits restants). Avec seulement deux fichiers en entrée, chaque différence est aussi un conflit devant être résolu manuellement. Avec trois fichiers en entrée, le premier fichier est traité comme la base, alors que les second et troisième fichiers en entrée contiennent des modifications. Quand dans une ligne seulement soit B ou C a changé mais pas les deux, la source changée sera sélectionnée. Seulement si B et C ont changé sur les mêmes lignes, alors l'outil détectera un conflit devant être résolu manuellement. Quand B et C sont les mêmes, mais différents de A, alors C est sélectionné. La fenêtre d'édition du résultat de la fusion a aussi une colonne de résumé sur la gauche. Elle affiche la lettre de l'entrée sélectionnée pour une ligne ou rien si les trois sources étaient égales sur une ligne. Pour les conflits, elle affiche un point d'interrogation "?" et la ligne affiche "<Conflit de Fusion>" tout en rouge. Étant donné que la résolution des conflits ligne par ligne prendrait beaucoup de temps, les lignes sont groupées en groupes ayant les mêmes caractéristiques de différences et conflits. Seuls les conflits d'espaces sont séparés des autres conflits pour faciliter la fusion de fichiers où l'indentation a changé pour beaucoup de lignes. Quand vous cliquez dans la colonne de résumé avec le bouton gauche de la souris dans une fenêtre alors le groupe correspondant à cette ligne sera sélectionné dans toutes les fenêtres et le début de ce groupe sera affiché. (Cela peut invoquer un saut de repositionnement automatique dans la fenêtre si le début d'un groupe n'est pas visible). Ce groupe devient alors le "groupe actuel". Il est surligné et une barre noire apparaît sur le côté gauche du texte. Regardez les bouttons de sélection de l'entrée contenant les lettres "A", "B" et "C" dans la barre des bouttons sous la barre de menu. Quand vous cliquez sur un bouton de sélection d'entrée, les lignes de cette entrée seront ajoutées à la fin du groupe sélectionné si ce groupe ne contenait pas déjà cette source auparavant. Sinon les lignes de cette entrée seront supprimées. En outre, vous pouvez éditer directement n'importe quelle ligne ici. La colonne de résumé affichera "m" pour chaque ligne ayant été modifiée. Parfois, quand une ligne est supprimée soit par fusion automatique ou édition et qu'aucune autre ligne ne reste dans ce groupe, alors le texte <Pas de ligne à la source> apparaîtra sur cette ligne. C'est juste pour vous souvenir qu'il y avait une source ici si vous changez d'idée et sélectionnez une ligne de nouveau. Ce texte n'apparaîtra pas dans le fichier enregistré ou dans n'importe quelle sélection que vous copierez et collerez. Le texte "<Conflit de Fusion>" apparaîtra dans le presse-papiers si vous copiez et collez du texte contenant une ligne au maximum. Mais faites toujours attention à cela. La fusion normale démarrera par la résolution automatique de conflits simples. Mais le menu "Fusion" propose quelques actions pour d'autres besoins communs. Si vous avez à sélectionner la même source pour la plupart des conflits, alors vous pouvez choisir "A", "B" ou "C" partout, ou seulement pour les conflits restant non résolus, ou pour les conflits d'espacement non résolus. Si vous voulez décider chaque différence vous même, vous pouvez "Mettre des deltas aux conflits". Ou si vous voulez retourner aux choix automatiques de KDiff3 alors sélectionnez "Résoudre automatiquement les conflits simples". KDiff3 redémarre alors la fusion. Pour les actions changeant vos précédentes modifications KDiff3 vous demandera votre confirmation avant de continuer. Note : Quand vous choisissez une des sources pour les conflits d'espacement non résolus et que les options "Ignorer les nombres" ou "Ignorer les commentaires C/C++" sont utilisées alors les changements dans les nombres ou commentaires seront aussi traités comme des espaces. + + +Navigation et Édition +La majorité de la navigation sera effectuée avec les barres de défilement et la souris mais vous pouvez aussi naviguer avec les touches. Si vous cliquez dans une des fenêtres alors vous pouvez utilisez les touches page précédente, page suivante, home, fin, ctrl-home, ctrl-fin et les flèches comme vous le feriez dans les autres programmes. La colonne de résumé située à côté de la barre de défilement verticale des fichiers en entrée peut aussi être utilisée pour naviguer en cliquant dessus. Vous pouvez aussi utiliser la molette de la souris pour monter et descendre. Dans l'éditeur de résultat de la fusion vous pouvez aussi utiliser les autres touches pour l'édition. Vous pouvez basculer entre les modes insérer et remplacer avec la touche Insertion. (Le mode par défaut est le mode d'insertion). Un clic gauche dans une colonne de résumé synchronisera toutes les fenêtres pour qu'elles affichent le début du même groupe de lignes (comme expliqué dans la section "Fusion"). La barre de boutons contient aussi sept bouttons de navigation avec lesquels vous pouvez naviguer vers la première/actuelle/dernière différence, vers la différence précédente/suivante (ctrl-haut/ctrl-bas), vers le conflit précédent/suivant (ctrl-pgpréc/ctrl-pgsuiv), ou vers le conflit non résolu précédent/suivant. Notez que pour KDiff3 un "conflit" qui n'a pas été résolu automatiquement au début de la fusion reste un "conflit" même s'il est résolu. Voila la nécessité de distinguer les "conflits non résolus". Il y a aussi un bouton "Aller automatiquement au conflit non résolu suivant après la sélection de la source" (Avancée automatique). Si vous activez cette option, alors, quand une source est sélectionnée, KDiff3 avancera automatiquement en sélectionnant le prochain conflit non résolu. Cela vous aidera si vous voulez toujours ne choisir qu'une source. Si vous avez besoin de deux sources, ou si vous voulez éditer après la sélection, alors vous voudrez probablement désactiver cette fonctionnalité. Avant d'avancer au conflit suivant KDiff3 vous montre les modifications de ce choix pour un court laps de temps. Ce délai est ajustable dans les Options de Fusion et de Diff : Vous pouvez spécifier le "Délai d'avancée automatique" en millisecondes entre 0 et 2000. Astuce : Vous êtes fatigué d'effectuer trop de clics ? - Utilisez un court délai d'avancée automatique et les raccourcis Ctrl-1/2/3 pour sélectionner A/B/C pour les conflits. + + +Sélectionner, Copier et Coller +La fenêtre d'entrée n'affiche pas de curseur, les sélections peuvent donc être effectuées via la souris en cliquant avec le bouton gauche au début, en gardant le bouton pressé et en se déplaçant à la fin de la sélection souhaitée, où vous relâchez le bouton. Vous pouvez aussi sélectionner un mot en double cliquant dessus. Dans l'éditeur de résultat de la fusion vous pouvez aussi sélectionner via le clavier en gardant le bouton "Maj" pressé et en naviguant via les flèches. Pour copier vers le presse-papiers vous devez cliquez sur le boutton "Copier" (Ctrl-C ou Ctrl-Inser). Mais il existe une fonctionnalité "Copier automatiquement la sélection". Si elle est activée, alors tout ce que vous sélectionnerez sera copié automatiquement vers le presse papier et vous n'aurez pas besoin de copier. Mais faites attention lorsque vous utilisez cela car le contenu du presse-papiers peut être effacé accidentellement. "Couper" (Ctrl-X ou Maj-Suppr) copie le texte vers le presse-papiers et supprime celui-ci et "Coller" (Ctrl-V ou Maj-Inser) insère le texte du presse-papiers à la position du curseur à la place de la sélection actuelle. + + +Enregistrer +L'enregistrement ne sera autorisé que quand tous les conflits seront résolus. Si le fichier existe déjà et que la fonctionnalité "Effectuer une copie de sauvegarde des fichiers" est activée alors le fichier existant sera renommé avec une extension en ".orig", mais si un fichier .orig existe déjà il sera supprimé. Quand vous quittez ou lancez une autre analyse diff et que les données n'ont pas encore été enregistrées, alors KDiff3 vous demandera si vous voulez enregistrer, annuler ou continuer sans enregistrer. (KDiff3 ne saisit aucun signal. Donc si vous "tuez" KDiff3 vos données seront perdues). Les fins de ligne sont enregistrées selon la méthode normale de l'OS. Pour les Unix chaque fin de ligne se termine avec un caractère "\n", tandis que pour les systèmes basés sur Win32 chaque ligne se termine avec un retour chariot et "\r\n". KDiff3 ne préserve pas les fins de ligne des fichiers en entrée, ce qui signifie aussi que vous ne devriez pas utiliser KDiff3 pour les fichiers binaires. + + +Trouver des chaînes +Vous pouvez chercher une chaîne dans n'importe quelle fenêtre de KDiff3. La commande "Chercher..." (Ctrl-F) dans le menu Édition ouvre une fenêtre vous permettant de spécifier la chaîne à rechercher. Vous pouvez aussi sélectionner la fenêtre dans laquelle la chaîne doit être cherchée. La recherche reste toujours au premier plan. En utilisant "Chercher le suivant" (F3), vous chercherez l'occurrence suivante. Si vous sélectionner plusieurs fenêtres, alors la première fenêtre sera scannée du début jusqu'à la fin avant que la recherche ne démarre dans la fenêtre suivante au premier plan, etc. + + + +Options +Les options et la liste des fichiers récemment ouverts seront enregistrées lorsque vous quitterez le programme, et rechargées lorsque vous le démarrerez. (Menu Options / Configurer KDiff3)... +Police +Sélectionnez un taille de police fixe. (Sur certains systèmes cette fenêtre présentera aussi des tailles de police variable, mais vous ne devriez pas les utiliser). + + Police italique pour les différences :Si vous sélectionnez cela, alors les différences de texte seront affichées dans la version italique de la police. Si la police ne supporte pas l'italique, cela ne fera rien. + + + + +Couleurs + + Couleur du premier plan :Habituellement le noir. + Couleur de l'arrière plan :Habituellement le blanc. + Couleur de l'arrière plan de Diff :Habituellement le gris clair. + Couleur A :Habituellement le bleu foncé. + Couleur B :Habituellement le vert foncé. + Couleur C :Habituellement le mauve foncé. + Couleur de conflit :Habituellement le rouge. + Couleur de l'arrière plan de la sélection actuelle :Habituellement le jaune clair. + Couleur de l'arrière plan de la sélection différant actuelle :Habituellement le jaune foncé + +Pour les systèmes ne comprenant que 16 ou 256 couleurs certaines couleurs ne sont pas disponibles en forme pure. Sur ces systèmes le boutton "Par défaut" choisira une couleur pure. + + +Options de l'éditeur + + Tabulation insère des espaces :Si ceci est désactivé et que vous pressez la touche de tabulation, un caractère de tabulation est inséré, sinon la quantité appropriée de caractères est insérée. + Taille de la tabulation :Peut être ajustée pour vos besoins spécifique. Par défaut, 8. + Indentation automatique :Quand vous pressez le bouton Entrée ou Retour l'indentation de la ligne précédente est utilisée pour la nouvelle ligne. + Copier automatiquement la sélection :Chaque sélection est copiée automatiquement vers le presse-papiers quand cette option est activée. + Style de fin de ligne :Quand vous enregistrez vous pouvez sélectionner quel style de fin de ligne vous préférez. La configuration par défaut est le choix commun pour le système d'exploitation utilisé. + Utiliser un encodage local :Pour afficher des caractères étrangers. Essayez de changer cela si certains caractères de votre langue ne sont pas affichés correctement. + + + +Options de Comparaison et de Fusion +Quand vous comparez des fichiers, KDiff3 essaie d'abord de comparer les lignes qui sont égales dans les trois fichiers. Il ne peut ignorer les espaces que dans cette étape. La seconde étape compare chaque ligne. Dans cette étape les espaces ne seront pas ignorés. Durant la fusion les espaces ne seront pas ignorés non plus. + + + Se préserver contre le Retour Chariot :Certains éditeurs (sur certains systèmes) enregistrent les caractères de retour chariot '\r' et saut de ligne '\n', tandis que les autres n'enregistrent que le saut de ligne '\n'. Habituellement KDiff3 ignore le retour chariot, mais alors les fichiers n'auront pas la même taille, mais seront les mêmes en comparaison terme à terme. Quand cette option est activée, alors les caractères de retour chariot seront visibles mais traités comme des espaces. Cette option doit être désactivée lors d'une fusion. Elle est désactivée par défaut. + Ignorer les nombres :Désactivé par défaut. Les chiffres ('0'-'9', '.', '-') seront ignorés dans la première partie de l'analyse durant laquelle la comparaison des lignes est effectuée. Dans le résultat les différences seront affichées dans tous les cas, mais elles sont traitées comme des espaces. + Ignorer les commentaires C/C++ :Désactivé par défaut. Les changements dans les commentaires seront traités comme les changements dans les espaces. + Ignorer la casse :Désactivé par défaut. Les différences de casse de caractères (comme 'A' et 'a') seront traitées comme des changements dans les espaces. + Commande Préprocesseur :Se reporter à la section suivante. + Commande préprocesseur de comparaison de ligne :Se reporter à la section suivante. + S'efforcer :S'efforcer de trouver des différences encore plus petites. (Activé par défaut). Ceci sera probablement efficace pour les fichiers lourds et compliqués, lent pour les fichiers très lourds. + Délai d'avancée automatique (en ms) :Quand le mode d'avancée automatique est activé, cette option spécifie la durée d'affichage du résultat de la sélection avant de sauter au conflit non résolu suivant. + Choix par défaut pour les espaces lors d'une fusion à 2/3 fichiers :Résoudre automatiquement tous les conflits d'espaces en choisissant le fichier spécifié. (Le choix par défaut est le choix manuel). Utile si tous les espaces ne sont pas vraiment importants dans les fichiers. Si vous avez besoin de cela occasionellement, il est mieux d'utiliser "Choisir A/B/C pour tous les conflits d'espaces non résolus" dans le menu de fusion. Notez que si vous activésoit "Ignorer les nombres" ou "Ignorer les commentaires C/C++" alors ce choix automatique est aussi appliqué pour les conflits dans les nombres ou les commentaires. + + + + +Fusion de dossiers +Ces options sont en relation avec le scan de dossiers et le déroulement de la fusion : Reportez-vous à la Documentation sur la Comparaison/Fusion de dossiers pour plus de détails. Il y a déjà une option ici qui est aussi pertinente pour l'enregistrement de fichiers seuls : + + Fichiers de sauvegarde :Quand un fichier est enregistré et qu'une ancienne version existe déjà, alors la version originale sera renommée avec une extension ".orig". Si un ancien fichier de sauvegarde portant l'extension ".orig" existe déjà, alors il sera supprimé sans sauvegarde. + + + +Divers +(Ces options et actions sont disponibles dans les menus ou la barre des boutons). + + Afficher les numéros de ligne :Vous pouvez sélectionner si les numéros de ligne doivent être affichés pour les fichiers en entrée. + Afficher les espaces et les alinéas pour les différences :Parfois les espaces et alinéas visibles peuvent vous déranger. Vous pouvez désactiver cette option. + Afficher les espaces :Désactivez cette option pour supprimer tous les surlignements ou les changements d'espaces dans le texte ou dans les colonnes d'aperçu. (Notez que cela s'applique aussi aux changements dans les nombres ou commentaires quand les options "Ignorer les nombres" ou "Ignorer les commentaires" sont actives). + Options de l'aperçu :Ces choix ne sont disponibles que si vous comparez trois fichiers. Dans le mode normal toutes les différences sont affichées dans une colonne d'aperçu codée en une seule colonne. Mais parfois vous pouvez être particulièrement intéressés par les différences entre seulement deux de ces trois fichiers. En sélectionnant l'aperçu "A et B", "A et C" ou "B et C", une seconde colonne d'aperçu sera affichée avec les informations nécessaires à côté de l'aperçu normal. + Fenêtre de coupe des mots :Coupe des mots lorsque leur longueur dépasse la largeur de la fenêtre. + Afficher la fenêtre A/B/C :Parfois vous voudrez mieux utiliser l'espace sur l'écran pour les longues lignes. Cachez les fenêtres qui ne sont pas importantes. (Dans le menu Fenêtre). + Sens de la séparation des fenêtres :Choisir entre les fenêtres de comparaison affichées côte à côte (A à côté de B à côté de C) ou l'une au-dessus de l'autre (A sur B sur C). Cela devrait aussi vous aider si les lignes sont longues. (Dans le menu Fenêtre). + Démarrer une fusion rapide :Parfois vous voyez des différences et vous décidez de fusionner. "Fusionner le fichier actuel" dans le menu Dossiers fonctionne aussi si vous voulez comparer deux fichiers. Un simple clic démarre la fusion et utilise le nom de fichier du dernier fichier en entrée comme étant le nom du fichier résultat de la fusion par défaut. (Quand ceci est utilisé pour redémarrer une fusion, alors le nom de fichier résultat sera conservé). + + + +Configurer les raccourcis clavier +Actuellement seule la version KDE supporte la configuration des raccourcis clavier par l'utilisateur. (Menu Configuration / Configurer les raccourcis clavier)... + + + +Commandes préprocesseur +KDiff3 supporte deux options préprocesseur. + + Commande Préprocesseur :Quand un fichier est lu, il sera traité à travers cette commande externe. Le résultat de cette commande sera visible à la place du fichier original. Vous pouvez écrire votre propre commande préprocesseur qui remplit des besoins spécifiques. Utilisez cela pour exclure les parties du fichier qui vous gênent, ou corriger automatiquement l'indentation, etc. + Commande préprocesseur de comparaison de ligne :Quand un fichier est lu, il sera traité à travers cette commande externe. Si une commande préprocessus (voir ci-dessus) est aussi spécifiée, alors le fichier résultat de la commande préprocesseur est utilisé pour le préprocessus de traitement de lignes. Le résultat de cette dernière ne sera utilisé que durant la phase de comparaison de lignes de l'analyse. Vous pouvez écrire votre propre commande préprocesseur qui remplit des besoins spécifiques. Chaque ligne en entrée a une ligne en sortie correspondante. + + +L'idée est de permettre à l'utilisateur d'avoir une plus grande flexibilité de configuration du résultat de la comparaison. Mais cela nécessite un programme externe, et beaucoup d'utilisateurs ne veulent pas en écrire un eux-mêmes. La bonne nouvelle est que très souvent sed ou perl feront l'affaire. +Exemple : Cas simple : Considérons le fichier a.txt (6 lignes) : + aa + ba + ca + da + ea + fa + Et le fichier b.txt (3 lignes) : + cg + dg + eg + Sans commande préprocesseur les lignes suivantes seront placées les unes à côté des autres   + aa - cg + ba - dg + ca - eg + da + ea + fa + Ceci n'est probablement pas voulu étant donné que la première lettre contient l'information intéressante actuelle. Pour aider l'algorithme à ignorer la seconde lettre nous pouvons utiliser un préprocesseur qui remplacera 'g' par 'a' : + sed 's/g/a/' + Avec cette commande le résultat de la comparaison devrait être : + aa + ba + ca - cg + da - dg + ea - eg + fa + L'algorithme de comparaison regarde les fichiers après avoir lancé le préprocesseur, mais à l'écran le fichier est inchangé. (Le préprocesseur normal aurait changé aussi les données affichées à l'écran). + +Bases de <command +>sed</command +> +Cette section n'introduit qu'aux fonctions les plus basiques de sed. Pour plus d'informations reportez vous à la page info de sed ou http://www.gnu.org/software/sed/manual/html_mono/sed.html. Une version précompilée pour Windows peut être trouvée à http://unxutils.sourceforge.net. Notez que les exemples qui suivent partent du principe que la commande sed est dans un dossier de la variable d'environnement PATH. Si ce n'est pas le cas, vous devrez spécifier le chemin complet absolu pour la commande. Notez aussi que les exemples qui suivent utilisent les guillemets simples (') qui ne fonctionnent pas sous windows. Sur windows vous devez utilisez les doubles guillemets (") à la place. +Dans ce contexte seule la commande de substitution sed est utilisée : + sed 's/REGEXP/REPLACEMENT/FLAGS' + Avant d'utiliser une nouvelle commande dans KDIff3, vous devriez d'abord la tester dans la console. Ici la commande echo est utile. Exemple : + echo abrakadabra | sed 's/a/o/' + -> obrakadabra + Cet exemple affiche une commande sed très simple qui remplace la première occurrence de "a" par un "o". Si vous voulez remplacer toutes les occurrences vous aurez besoin du flag "g" : + echo abrakadabra | sed 's/a/o/g' + -> obrokodobro + Le symbole "|" est la commande tuyau qui transfère la sortie de la commande précédente vers l'entrée de la commande suivante. Si vous voulez tester avec un fichier plus long vous pouvez utiliser cat sur les systèmes basés sur Unix ou type sur les systèmes Windows. sed fera la substitution pour chaque ligne. cat nom-du-fichier | sed options + + + +Exemples d'utilisations de <command +>sed</command +> dans KDiff3 +Ignorer les autres types de commentaires +Actuellement KDiff3 ne comprend que les commentaires C/C++. En utilisant la commande préprocesseur de traitement de ligne vous pouvez aussi ignorer d'autres types de commentaires, en les convertissant en commentaires C/C++. Exemple : Pour ignorer les commentaires commençant par "#", vous devriez les convertir en "//". Notez que vous devrez aussi activer l'option "Ignorer les commentaires C/C++" pour que cela ait un effet. La commande préprocesseur de traitement de ligne appropriée serait + sed 's/#/\/\//' + Étant donné que pour sed le caractère "/" a un sens particulier, il est nécessaire de placer le caractère "\" devant chaque "/" dans une chaîne de remplacement. Parfois le "\" est nécessaire pour ajouter ou supprimer un sens particulier de certains caractères. Le guillemet simple (') avant et après la commande de substitution est désormais important, car sinon le shell essaierait d'interpréter certains caractères spéciaux comme'#', '$' ou '\' avant de les passer à sed. Notez que sur Windows vous aurez besoin des doubles marques de citation ici ("). Windows substitue les autres caractères comme '%', alors vous pourriez avoir quelques essais à faire. + +Comparaison non sensible à la casse +Utilisez la commande préprocesseur de traitement de ligne suivante pour convertir toutes ce qui est situé en entrée en majuscules : + sed 's/\(.*\)/\U\1/' + Ici ".*" est une expression rationnelle qui trouve, dans ce contexte, tous les caractères de la ligne. Le "\1" est la chaîne de remplacement en référence au texte trouvé dans la première paire de "\(" et "\)". Le "\U" convertit le texte inséré en majuscules. + + +Ignorer les mots clés CVS +CVS et d'autres systèmes de contrôle de version utilisent des mots clés pour insérer les chaînes générées automatiquement (info:/cvs/Keyword substitution). Tous suivent le modèle "$KEYWORD generated text$". Nous avons maintenant besoin d'une commande préprocesseur de traitement de ligne qui ne supprime que le texte généré : + sed 's/\$\(Revision\|Author\|Log\|Header\|Date\).*\$/\$\1\$/' + Le "\|" sépare les mots clés possibles. Vous pouvez vouloir modifier cette liste selon vos besoins. Le "\" avant le "$" est nécessaire car sinon le "$" signifie fin de la ligne. +Quand vous ferez des expérimentations avec sed vous pourrez arriver à comprendre toutes ces expressions rationnelles. Elles sont utiles car beaucoup d'autres programmes supportent ces mêmes fonctionnalités. + + +Ignorer les nombres +Ignorer les nombres est actuellement une option intégrée. Mais en tant qu'autre exemple, c'est ce qui se passerait si vous aviez mis comme commande préprocesseur de traitement de ligne. + sed 's/[0123456789.-]//g' + Chaque caractère dans '[' ']' est remplacé par rien. + + +Ignorer certaines colonnes +Parfois un texte est très strictement formaté, et il y a certaines colonnes que vous voudrez toujours ignorer, tandis que vous voudrez en gardez d'autres pour l'analyse. Dans l'exemple qui suit les cinq premières colonnes (caractères de chaque ligne) sont ignorés, les dix colonnes suivantes sont conservées, puis de nouveaux cinq colonnes sont ignorées et le reste de la ligne est conservé. + sed 's/.....\(..........\).....\(.*\)/\1\2/' + Chaque point '.' correspond à un caractère. Le "\1" et "\2" dans la chaîne de remplacement réfère au texte correspondant situé entre la première paire de "\(" et"\)" dénotant que le texte doit être conservé. + + +Combiner plusieurs substitutions +Parfois vous voudrez appliquer plusieurs substitutions à la fois. Vous pouvez alors utilisez le point-virgule ';' pour les séparer les unes des autres. Exemple : echo abrakadabra | sed 's/a/o/g;s/\(.*\)/\U\1/' + -> OBROKODOBRO + + + + +Utiliser <command +>perl</command +> à la place de <command +>sed</command +> +A la place de sed vous pouvez vouloir utiliser quelque chose d'autre comme perl. + perl -p -e 's/REGEXP/REPLACEMENT/FLAGS' + Mais certains détails sont différents avec perl. Notez que la où sed à besoin de "\(" and "\)" perl n'a besoin que de "(" and ")" sans les '\' qui le précède. Exemple : sed 's/\(.*\)/\U\1/' + perl -p -e 's/(.*)/\U\1/' + + + + + +Ordre d'exécution des commandes préprocesseur +Les données traversent tous les préprocesseurs internes et externes dans l'ordre suivant : + +Préprocesseur normal, +Préprocesseur de traitement de ligne, +Ignorer la casse (conversion en majuscule), +Détection des commentaires C/C++, +Ignorer les nombres, +Ignorer les espaces + +Les données après le préprocesseur normal seront conservées pour l'affichage et la fusion. Les autres opérations ne modifient que les données que l'algorithme de comparaison de lignes peut voir. Dans les rares cas ou vous utiliserez un préprocesseur normal, notez que le préprocesseur de traitement de ligne prend la sortie du préprocesseur normal en tant qu'entrée. + + +Attention +Les commandes préprocesseur sont très souvent utiles, mais comme avec toutes les options modifiant vos textes ou cachant certaines différences automatiquement, vous pouvez accidentellement sauter certaines différences et dans le pire des cas supprimer des données importantes. C'est pour cette raison que durant une fusion, si une commande préprocesseur normale est utilisée, KDiff3 vous en informera et vous demandera si elle doit être ou non désactivée. Mais ne vous inquiétez pas si une commande préprocesseur de traitement de ligne est active. La fusion ne sera pas terminée tant que tous les conflits ne seront pas résolus. SI vous avez désactivé "Afficher les espaces", alors les différences qui seront supprimées avec la commande préprocesseur de traitement de ligne seront aussi invisibles. Si le boutton d'enregistrement reste désactivé durant une fusion (à cause de conflits restants), assurez vous d'avoir activé "Montrer les espaces". Si vous ne voulez pas fusionner ces différences moins importantes manuellement, vous pouvez sélectionner "Choisir [A|B|C] pour tous les conflits d'espaces non résolus" dans le menu Fusion. + + + + + +Comparaison et Fusion de dossiers avec KDiff3 +Introduction +Souvent les programmeurs doivent modifier beaucoup de fichiers dans un dossiers pour parvenir à leur but. Pour cela KDiff3 vous permet aussi de comparer et de fusionner des dossiers complets récursivement ! Bien souvent la comparaison et la fusion de dossiers semble bien compliquée, il y a beaucoup de détails dont que vous devriez savoir. Le plus important est bien sur le fait que maintenant beaucoup de fichiers peuvent être affectés par chaque opération. Si vous n'avez pas de sauvegardes de vos données originales, alors il peut être très difficile voire impossible de revenir à l'état original. Donc, avant de démarrer une fusion, assurez-vous que vos données sont en sécurité, et qu'un retour à l'état initial est possible. Vous pouvez faire une archive ou utiliser un système de contrôle de version (CVS), mais même les programmeurs expérimentés et les intégrateurs ont besoin des anciennes sources. Et notez que même si moi (auteur de KDiff3) ait essayé de faire de mon mieux, je ne peux pas garantir qu'il n'y ait pas de bogues. Et selon la GNU-GPL il n'y a AUCUNE GARANTIE sur quoi que ce soit pour ce programme. Alors soyez humble et gardez toujours à l'esprit : +
+ L'erreur est humaine, mais pour vraiment faire n'importe quoi vous avez besoin d'un ordinateur. +
+Voila ce que ce programme peut faire pour vous : KDiff3... + + ...lit et compare deux ou trois dossiers récursivement, + ... fait spécialement attention aux liens symboliques, + ... vous permet de naviguer dans vos fichiers avec des double-clics, + ... pour chacun d'eux propose une opération de fusion, que vous pouvez changer avant de démarrer une fusion de dossiers, + ... vous permet de simuler la fusion et de lister les actions qui auraient eu lieu, sans les faire, + ... vous permet de faire réellement la fusion, et vous permet d'interagir lorsqu'une action manuelle est nécessaire, + ... vous permet de lancer l'opération pour tous les éléments (touche F7) ou pour l'élément sélectionné (touche F6), + ... vous permet de continuer la fusion après une interaction manuelle avec la touche F7, + ... crée des copies de sauvegarde en option, portant l'extension ".orig", + ... + +
+ +Démarrer une comparaison ou une fusion de dossiers +C'est très similaire à la fusion et à la comparaison d'un seul fichier. Vous devrez juste spécifier les dossiers depuis la ligne de commande ou la fenêtre d'ouverture de fichiers. +Comparer/Fusionner deux dossiers : +kdiff3 dos1 dos2 + kdiff3 dos1 dos2 -o dosdedest + +Si aucun dossier de destination n'est spécifié, alors KDiff3 utilisera dos2. + + +Comparer/Fusionner trois dossiers : +kdiff3 dos1 dos2 dos3 + kdiff3 dos1 dos2 dos3 -o dossier de destination + +Quand trois dossiers sont fusionnés alors dos1 est utilisé comme la base de la fusion. Si aucun dossier de destination n'est spécifié, alors KDiff3 utilisera dos3 comme dossier de destination de la fusion. + +Notez que seule la comparaison démarre automatiquement, pas la fusion. Pour cela vous devrez sélectionner le choix du menu ou appuyez sur la touche F7. (Plus de détails à la suite). + + + +Information visible +Lors de la lecture des dossiers, une boîte de dialogue apparat vous informant de la progression. Si vous annulez le scan de dossier, alors seuls les fichiers déjà comparés seront listés. Quand le scan de dossiers est terminé KDiff3 affiche une liste avec les résultats à gauche, ... + + + +... et les détails concernant l'élément actuellement sélectionné à droite : + + + + + +La colonne de nom +Chaque fichier et dossier ayant été trouvé durant le scan et affiché ici dans une arborescence. Vous pouvez sélectionner un élément en cliquant dessus avec la souris. Les dossiers sont fermés par défaut. Vous pouvez les développer ou les fermer on cliquant sur "+"/"-", en double cliquant sur l'élément ou simplement en utilisant les flèches gauche/droite du clavier. Le menu "Dossier" contient aussi deux actions "Naviguer dans tous les sous-dossiers" et "Refermer tous les sous-dossiers" avec lesquelles vous pouvez fermer ou développer tous les dossiers d'un seul coup. Si vous double-cliquez sur un fichier, alors la comparaison démarre et la fenêtre de comparaison apparaîtra. +L'image de la colonne de nom reflète du type de fichier dans le premier dossier ("A"). Cela peut être : + + Fichier normal + Dossier normal (image de dossier) + Lien vers un fichier (image de fichier avec une flèche) + Lien vers un dossier (image de dossier avec une flèche) + +SI le type de fichier est différent dans les autres dossiers, alors cela est visible dans les colonnes A/B/C et dans la fenêtre affichant les détails concernant les éléments sélectionnés. Notez que dans un cas comme cela aucune opération de fusion ne peut être sélectionnée automatiquement. Quand une fusion est démarrée, alors l'utilisateur sera informé de problèmes de ce type. + + +Les colonnes A/B/C et le système de coloration +Comme cela peut être vu dans l'image ci-dessous les couleurs rouge, vert, jaune et noir sont utilisées dans les colonnes A/B/C. + + Noir : Cela ne semble pas exister dans ce dossier. + Vert : Élément le plus récent. + Jaune : Plus vieux que le vert, plus récent que le rouge. + Rouge : Élément le plus ancien. + +Mais pour les éléments qui sont identiques dans la comparaison leur couleur est aussi identique même si leur âge ne l'est pas. Les dossiers sont considérés comme égaux si tous les éléments qu'ils contiennent sont égaux. Alors ils auront aussi la même couleur. Mais l'âge d'un dossier n'est pas considéré pour sa couleur. L'idée pour le schéma de coloration vient de dirdiff. Les couleurs ressemblent aux couleurs d'une feuille d'un arbre qui est verte au printemps, puis devient jaune à l'automne pour devenir rouge à l'hiver. + +La colonne d'opération +Après avoir comparé les dossiers, KDiff3 évalue aussi une proposition pour l'opération de fusion. Cela est affiché dans la colonne "Opération". Vous pouvez modifier l'opération en cliquant sur l'opération que vous voulez changer. Un petit menu se déroulera vous permettant de sélectionner une opération pour cet élément. (Vous pouvez aussi sélectionner les opérations les plus importantes via le clavier. Ctrl+1/2/3/4/Del sélectionnera ainsi respectivement A/B/C/Fusion/Suppression (si disponibles). Cette opération sera exécutée durant la fusion. Cela dépend de l'élément et du mode de fusion dans lequel vous êtes. Le mode de fusion est un des modes qui suit + + Fusion à trois dossiers ("A" est considéré comme la base des deux autres). + Fusion de deux dossiers. + Deux dossiers en mode synchronisé (activé via l'option "Synchroniser les dossiers"). + +Dans le cas d'une fusion à trois dossiers l'opération proposée sera : Si pour un élément ... + + ... les trois dossiers sont égaux : Copie depuis C + ... A et C sont égaux mais B ne l'est pas : Copier depuis B (ou si B n'existe pas, supprimer la destination si elle existe) + ... A et B sont égaux mais C ne l'est pas : Copier depuis C (ou si C n'existe pas, supprimer la destination si elle existe) + ... B et C sont égaux mais A ne l'est pas : Copier depuis C (ou si C n'existe pas, supprimer la destination si elle existe) + ... seul A existe : Supprimer la destination (si elle existe) + ... seul B existe : Copier depuis B + ... seul C existe : Copier depuis C + ... A, B et C ne sont pas égaux : Fusion + ... A, B et C n'ont pas le m me type de fichier (par exemple A est un dossier, B un fichier : "Erreur : Conflit de types de fichiers". Tant que des éléments comme ceux-ci existent la fusion de dossiers ne peut pas commencer. + +Dans la fusion à deux dossiers, l'opération proposée sera : Si pour un élément ... + + les deux dossiers sont égaux : Copier depuis B + ... A existe, mais pas B : Copier depuis A + ... B existe, mais pas A : Copier depuis B + ... A et B existent mais ne sont pas égaux : Fusion + ... A, et B n'ont pas le même type de fichier (par exemple A est un dossier, B un fichier : "Erreur : Conflit de types de fichiers". Tant que des éléments comme ceux-ci existent la fusion de dossiers ne peut pas commencer. + +Le mode de synchronisation est actif si il n'y a que deux dossiers, qu'aucune destination explicite n'a été spécifiée et que l'option "Synchroniser les dossiers" est active. KDiff3 sélectionne alors une opération par défaut pour que les deux dossiers soient les m mes après-coup. Si pour un élément ... + + ... les deux dossiers sont égaux : Rien ne sera fait. + ... A existe, mais pas B : Copier A vers B + ... B existe, mais pas A : Copier B vers A + ... A et B existent, mais sont différents : Fusion et stockage du résultat dans les deux dossiers. Pour l'utilisateur le nom de fichier visible est B, mais alors KDiff3 copie aussi B vers A). + ... A, et B n'ont pas le même type de fichier (par exemple A est un dossier, B un fichier : "Erreur : Conflit de types de fichiers". Tant que des éléments comme ceux-ci existent la fusion de dossiers ne peut pas commencer. + +Quand deux dossiers sont fusionnés et que l'option "Copier le plus récent à la place de fusionner" est sélectionnée, alors KDiff3 regardera les dates et proposera de choisir le fichier le plus récent. Si les fichiers ne sont pas égaux mais ont les mêmes dates alors l'opération contiendra "Erreur : Les dates sont les mêmes mais les fichiers ne le sont pas". Tant que des éléments comme ceux-ci existent la fusion ne pourra pas commencer. + + +La colonne d'état +Durant la fusion, les fichiers seront traités les uns après les autres. La colonne d'état affichera "Terminé" pour les éléments où l'opération de fusion s'est bien déroulée, et d'autres textes si une chose non attendue est arrivée. Quand une fusion est terminée, vous devriez faire une dernière vérification pour voir si l'état de tous les éléments est correct. + + +Colonne de statistiques +Quand le mode de comparaison de fichiers "Analyse complète" est activé dans les options, alors KDiff3 affichera des colonnes contenant le nombres de conflits non résolus, résolus et conflits d'espacement ou non. (La colonne résolu s'affichera seulement lors de la comparaison ou fusion de trois dossiers). + + + + + +Faire une fusion +Vous pouvez soit fusionner l'élément sélectionné actuellement (fichier ou dossier), out tous les éléments. Quand vous aurez fait tous les choix (aussi dans les sous-dossiers) alors vous pourrez démarrer la fusion. Soyez conscient que si vous ne spécifiez pas de dossier de destination explicitement, alors la destination sera "C" dans le mode de fusion a trois dossiers, "B" dans le mode de fusion à deux dossiers, et dans le mode synchronisé, ce sera "A" ou/et "B" Si vous avez spécifié un dossier de destination vérifiez aussi que tous éléments devant être à la sortie, sont dans l'arborescence. Il y a quelques options qui font que certains éléments sont oubliés de la comparaison et la fusion de dossiers. Vérifiez ces options pour éviter des mauvaises surprises : + + "Dossiers récursifs" : Si cette option est désactivée, alors les éléments contenus dans les sous-dossiers ne seront pas trouvés. + "Modèle"/"Anti-modèle" : Inclure/exclure les éléments qui correspondent + "Exclure les fichiers cachés" + "Ne lister que les différences" : Les fichiers qui sont identiques dans tous les dossiers n'apparaîtront pas dans l'arborescence, ni dans le dossier de destination. + +(Dans la version actuelle, vous devez rescanner via "Dossier"/"Rescan" vous même après avoir changé les options affectant le scan de dossiers). Si vous êtes satisfaits ici, le reste et simple. Pour fusionner tous les éléments : Sélectionnez "Démarrer/Continuer la fusion de dossiers" dans le menu "Dossier" ou appuyez sur la touche F7 (qui est le raccourci). Pour fusionner seulement l'élément actuel : Sélectionnez "Lancer l'opération pour l'élément actuel" ou appuyez sur F6. Si à cause de conflits de type de fichiers certains éléments portant des opérations non valables existent, alors un boîte de dialogue apparaîtra et certains de ces éléments seront pointés, pour que vous puissiez sélectionner une opération valable Si vous fusionnez tous les éléments, une fenêtre apparaîtra vous proposant de "Le faire", "Le simuler" ou "Annuler". + + Sélectionnez "Le simuler" si vous voulez voir comment cela serait sans le faire réellement. Une liste de toutes les opérations sera affichée. + Sinon sélectionnez "Le faire" pour démarrer réellement la fusion. + +Alors KDiff3 lancera l'opération spécifiée pour tous les éléments. Si une interaction manuelle est nécessaire (fusion d'un seul fichier), alors une fenêtre de fusion s'ouvrira (voir la grosse capture d'écran). Quand vous en aurez terminé avec un fichier, sélectionnez de nouveau "Démarrer/Continuer la fusion de dossiers" ou utilisez la touche F7. SI vous n'avez pas encore enregistré les résultats, une fenêtre vous le proposera. Alors KDiff3 continuera avec l'élément suivant. Quand KDIff3 rencontre une erreur, il vous en informe et affiche l'information détaillée de l'état. Au bas de cette liste, il y aura quelques messages d'erreur qui vous aideront à comprendre la cause du problème. Quand vous continuerez la fusion, KDiff3 vous proposera de réessayer ou de sauter l'élément qui à causé le problème. Cela signifie qu'avant de continuer vous pouvez choisir une autre opération ou résoudre le problèmes par d'autres moyens. Quand la fusion est complète, alors KDiff3 vous informera via une boîte de dialogue. Si certains éléments ont été fusionnés individuellement, KDiff3 s'en rappellera (tant que la session de fusion continue), et ne fusionne pas ces éléments de nouveau plus tard quand la fusion de tous les éléments est lancée. Même si la fusion a été sautée ou si rien n'a été enregistré ces éléments sont comptés comme complétés. La fusion ne sera refaite que si vous changez l'opération de fusion de l'élément. + + +Options pour la comparaison et la fusion de dossiers +Les options de Kdiff3 (menu "Configuration"/"Configurer KDiff3...") ont maintenant une section appelée "Fusion de dossiers" contenant ces options : + + + Dossiers récursifs :Sélectionner si il faut rechercher les dossiers récursivement. + Modèle(s) de fichier :Seuls les fichiers qui correspondent à un modèle ici seront mis dans l'arborescence. Plus d'un modèle peut être spécifié en utilisant le point-virgule ";" comme séparateur. Les jokers valables sont '*' et '?' (par exemple pour "*.cpp;*.h". L'option par défaut est "*". Les dossiers ne seront pas reconnus par ce modèle. + Anti-modèle(s) :Les fichiers et dossiers correspondants à cette règle seront exclus de l'arborescence. Plus d'un modèle peut être spécifié ici en utilisant le point-virgule ";" comme séparateur. Les jokers valides sont : '*' et '?'. Le modèle par défaut est "*.orig;*.o". + Ignorer comme CVS :Ignorer les fichiers et dossiers qui seraient aussi ignorés par CVS. Beaucoup de fichiers générés automatiquement sont ignorés par CVS. Le gros avantage est que cela peut être spécifique à un dossier via un fichier local ".cvsignore". (Reportez-vous à info:/cvs/cvsignore). + Trouver les fichiers et dossiers cachés :Sur certains systèmes de fichiers les fichiers ont un attribut "Caché". Sur d'autres un nom de fichier commençant par un point "." le cache. Cette option vous permet de décider si il faut inclure ces fichiers dans l'arborescence ou non. Option activée par défaut. + Suivre les liens vers les fichiers :Pour les liens vers les fichiers : Quand cette option est désactivée, alors les liens symboliques sont comparés. Quand elle est activée, alors ce sont les fichiers situé derrière les liens qui sont comparés. Désactivée par défaut. + Suivre les liens vers les dossiers :Pour les liens vers les dossiers : Quand désactivé, alors les liens symboliques seront comparés. Quand activée alors le lien sera traité comme un dossier et sera scanné récursivement. (Notez que le programme ne vérifie pas si le lien est "récursif". Si par exemple un dossier contenait un lien vers lui-même, cela causerait une boucle infinie, et après quelque temps il y aurait dépassement de tampon ou toute la mémoire serait utilisée, crashant le programme. + Ne lister que les différences :Seuls les éléments qui ne sont pas égaux dans tous les dossiers seront listés et seuls les fichiers changés seront visibles. Ici les fichiers étant égaux dans tous les dossiers ne seront pas copiés durant une fusion, vous pouvez oublier quelques fichiers après. (Cette option a de fortes chances d'être changée dans une prochaine version). Désactivée par défaut. + + Mode de comparaison des fichiers : + + Comparaison binaireC'est le mode de comparaison de fichiers par défaut. + Analyse complèteFaire une analyse complète de chaque fichier et afficher la colonne d'informations statistiques. (Nombre de conflits résolus, non résolus, d'espacement ou non). L'analyse complète est plus lente qu'une simple analyse binaire, et plus lente quand utilisée sur des fichiers ne contenant pas du texte. (Spécifiez les anti-modèles de fichiers appropriés). + Croire la date de modification :Si vous comparez des gros dossiers sur un réseau lent, cela peut être plus rapide de ne comparer que les dates de modification et les longueurs des fichiers. Mais cette augmentation de vitesse comporte néanmoins un petit doute. Utilisez cette option avec précaution. Désactivée par défaut. + Croire la taille :Identique à croire la date de modification. Pas de réelle comparaison, les deux fichiers sont considérés comme égaux si leur tailles sont égales. C'est utile lorsqu'une opération de copie ne conserve pas la date de modification. Utilisez cette option avec précaution. Désactivé par défaut. + + + Synchroniser des dossiers :Active le "Mode synchroniser" quand deux dossiers sont comparés et qu'il n'y a pas de dossier de destination explicitement spécifié. Dans ce mode les opérations proposées seront choisies pour que les deux dossier sources soient égaux après coup. Aussi le résultat de la fusion sera écrit dans les deux dossiers. Désactivé par défaut. + Copier le plus récent au lieu de fusionner :Au lieu de fusionner l'opération proposée sera copier la source la plus récente si des changements ont eu lieu. (Considéré comme peu sur, car cela implique la connaissance que l'autre fichier n'a pas été édité. Vérifiez le pour vous assurez dans tous les cas). Désactivé par défaut. + Fichiers de sauvegarde :Si un fichier ou un dossier complet est remplacé par un autre ou est supprimé alors la version originale sera renommée avec une extension ".orig". Si un ancien fichier de sauvegarde portant l'extension ".orig" existe toujours alors il sera supprimé sans sauvegarde. Cela affecte aussi la fusion de simples fichiers, pas seulement le mode de fusion de dossiers. Activé par défaut. + + + +Autres fonctions +Mode plein écran/écran partagé +Habituellement la vue de la liste de fusion de dossiers reste visible quand un fichier simple est comparé ou fusionné. Avec la souris vous pouvez déplacer la barre de séparation qui sépare la liste de fichiers de la fenêtre de comparaison. Si vous ne voulez pas faire cela, vous pouvez désactiver "Scinder la fenêtre" Dans le menu "Dossier". vous pouvez aussi utiliser "Basculer la vue" dans le menu "Dossier" pour basculer entre la liste de fichiers et la fenêtre de comparaison qui occupait tout l'écran. + +Comparer ou Fusionner un simple fichier +Probablement vous préférerez un simple double clic sur un fichier pour le comparer. Néanmoins il existe aussi une entrée dans le menu "Dossier". vous pouvez aussi fusionner directement un simple fichier, sans lancer la fusion de dossiers via "Fusionner un simple fichier" dans le menu "Dossier". A l'enregistrement des résultats l'état sera validé, et le fichier ne sera plus fusionné si une fusion de dossiers est démarrée. Mais notez que l'information de l'état sera perdue lorsque vous relancerez un scan de dossier via : "Dossier"/"Rescanner" + + +
+ + +Sujets divers + +Transparence réseau via KIO +KIO-Slaves +KDE supporte la transparence réseau via KIO. KDiff3 utilise cela pour lire les fichiers en entrée ou scanner les dossiers. Cela signifie que vous pouvez spécifier des fichiers et des dossiers locaux ou distants via des URL. Exemple : +kdiff3 test.cpp ftp://ftp.faraway.org/test.cpp + kdiff3 tar:/home/hacker/archive.tar.gz/dos /dos + + +La première ligne compare un fichier local avec un fichier sur un serveur FTP. La seconde compare un dossier contenu dans une archive compressée a un dossier local. Les autres KIOslaves intéressants sont : + +Fichiers depuis le WWW (http:), +Fichiers depuis un FTP (ftp:), +Transfert de fichier crypté (fish;, sftp;), +Ressources Windows (smb:), +Fichiers locaux (file:), + +D'autres choses sont possibles, mais probablement moins utiles sont : + +Pages man (man:), +Pages info (info:), + + + +Comment écrire des URLs +Une URL a une syntaxe différence par rapport aux chemins pour les fichiers et dossiers locaux. Certains éléments doivent être considérés : + +Un chemin peut être relatif et contenir "." ou "..". Ce n'est pas possible pour les URL qui sont toujours absolues. Les caractères spéciaux doivent être écrits avec des espaces ("#"->"%23", espace +>"%20", etc). Par exemple un fichier nommé "#foo#" aura l'URL "file:/%23foo%23". Quand les URLs ne fonctionnent pas comme attendu, essayez de les ouvrir tout d'abord avec Konqueror. + + + + +Possibilités des KIO-Slaves +La transparence réseau à un inconvénient : Toutes les ressources n'ont les mêmes possibilités. Parfois ceci est dû au système de fichiers du serveur, parfois au protocole. Voici une liste de restrictions : + +Parfois il n'y a pas de support des liens. Ou il n'y a pas moyen de distinguer si un lien pointe vers un fichier ou un dossier ; on estime que c'est toujours un fichier.(ftp :, sftp :). Ne peut pas toujours déterminer la taille des fichiers. Support limité des permissions. Il est impossible de modifier les permissions ou la date de dernière modification, les permissions ou la date de dernière modification d'une copie diffèrent donc de l'original. (Voir l'option "Croire la taille"). (Modifier les permissions ou la date de dernière modification n'est possible que pour les fichiers locaux). + + + + + +Utiliser &kdiff3; en tant que KPart +&kdiff3; fait partie de KPart. Actuellement il implémente l'interface KParts::ReadOnlyPart. Son utilisation principale est en tant que visionneur de différences pour KDevelop. KDevelop démarre tout le temps par le visionneur de différences interne. Pour invoquer KDiff3, faites un clic droit sur le visionneur de différences et sélectionnez "Afficher dans KDiff3Part" depuis le menu contextuel. KDiff3 a normalement besoin de deux fichiers complets en entrée. Quand utilisé dans KPart, KDiff3 estimera que le fichier en entrée est un fichier patch dans le format unifié. KDiff3 retrouvera alors les noms de fichiers originaux depuis le patch. Au moins un des deux fichiers doit être disponible. Kdiff3 invoquera alors patch pour recréer le second fichier. Dans Konqueror, vous pouvez sélectionner un fichier patch et sélectionner "Aperçu dans"-"KDiff3Part" depuis le menu contextuel. Soyez conscient que cela ne fonctionnera pas si aucun des fichiers originaux n'est disponible, et que ce n'est pas fiable si les fichiers originaux ont changé depuis que le patch a été généré. Quand lancé à l'intérieur de KPart, KDiff3 ne propose qu'une comparaison à deux fichiers, une barre d'outils et un menu très petits. La fusion et la comparaison de dossiers n'est donc pas gérée. + + + + +Foire Aux Questions +&reporting.bugs; &updating.documentation; + +Pourquoi l'appeler "KDiff3" ? Des outils nommés "KDiff" et "KDiff2" (désormais appelé "Kompare") existent déjà. "KDiff3" suggère aussi qu'il peut fusionner comme l'outil "diff3" dans la collection des Outils Diff. + +Pourquoi le logiciel est-il sous licence GPL ? J'utilise les programmes GPL depuis très longtemps désormais et j'ai appris beaucoup de choses en jetant un oeil aux sources. Voici mon "Merci" à tous les programmeurs qui ont aussi ou qui feront aussi de même. + +Certains boutons ou fonctions sont manquantes. Quel est le problème ? Vous avez compilé depuis la source mais vous n'avez probablement pas spécifier le bon préfixe de KDE lors de la configuration. Par défaut configure veut installer dans /usr/local mais dans ce cas KDE ne peut trouver le fichier de ressource de l'interface utilisateur (c.é.d. kdiff3ui.rc). Le fichier README contient plus d'informations à propos du préfixe correct. + +Souvent les lignes similaires mais non identiques apparaissent côte à côte mais parfois pas. Pourquoi ? Les lignes ou seules les quantités d'espaces sont différentes sont traitées comme "égales", tandis qu'une différence d'un caractère seulement peut changer l'état des lignes en "différentes". Si des lignes similaires apparaissent côte à côte, c'est actuellement une coïncidence mais heureusement c'est souvent le cas. + +Pourquoi tous les conflits doivent-ils être résolus avant que le résultat de la fusion puisse être enregistré ? Pour chaque section égale ou différente, l'éditeur dans la fenêtre de résultat de la fusion se souvient ou elle commence ou se termine. Cela est nécessaire pour que les conflits puissent être résolus manuellement en sélectionnant simplement le bouton de source (A, B ou C). Cette information sera perdue quand vous enregistrerez un texte et c'est trop compliqué de créer un format de fichier spécial supportant l'enregistrement et la restauration de toutes les informations nécessaires. + +Pourquoi l'éditeur dans la fenêtre de résultat n'a pas de fonction "annuler" ? C'était très compliqué jusqu'à présent. Vous pouvez toujours restaurer une version depuis une source (A, B ou C) en cliquant sur le bouton respectif. Pour une édition importante, l'utilisation d'un autre éditeur comme Kwrite est recommandée. + +Quand j'ai supprimé du texte, soudainement, "<Pas de ligne de la source>" est apparu et ne peut être supprimé. Qu'est-ce que cela signifie et comment supprimer cela ? Pour chaque section égale ou différente, l'éditeur dans la fenêtre de résultat de fusion se souvient, de son début et de sa fin. "<Pas de ligne de la source>" signifie qu'il n'y a plus rien dans une section, même plus de caractère de nouvelle ligne. Cela peut apparaître soit lors de la fusion automatique ou lors de l'édition. Ce n'est pas un problème, étant donné que cela n'apparaîtra pas dans le fichier enregistré. Si vous voulez que la source originale réapparaisse, sélectionnez juste la section (un clic sur la colonne de résumé de gauche) et cliquez alors le bouton de source avec le contenu nécessaire (A/B ou C). + +Pourquoi KDiff3 ne supporte-t-il pas le surlignement des syntaxes ? KDiff3 utilise déjà beaucoup de couleurs pour le surlignement des différences. Plus de surlignement amènerait de la confusion. Utilisez un autre éditeur pour cela. + +Il y a beaucoup d'informations ici, mais votre question ne trouve toujours pas de réponse ? Veuillez m'envoyer vos questions. J'apprécie chaque commentaire. + + + + + + +Remerciements et licence + +&kdiff3; - Outil de Comparaison et de Fusion de Fichiers et Dossier +Programme protégé par copyright 2002-2004 Joachim Eibl joachim.eibl at gmx.de +Beaucoup de bonnes idées et de rapports de bogue viennent de collègues et de beaucoup d'inconnus du Web. Merci ! + +Documentation Copyright © 2002-2004 Joachim Eibl joachim.eibl at gmx.de + +&traducteurSimonDepiets; +&underFDL; &underGPL; + + +Installation + + +Comment obtenir &kdiff3; + +Vous pouvez télécharger la dernière version de KDiff3 depuis sa page web http://kdiff3.sourceforge.net. KDiff3 est aussi disponibles sur d'autres plates-formes. Veuillez vous reporter à la page web pour plus de détails. + + + + + +Configuration minimale + +Pour utiliser avec succès toutes les fonctionnalités de &kdiff3;, vous aurez besoin de &kde; +>3.1. Pour plus d'informations sur le lancement de KDiff3 sur d'autres plates-formes sans KDE, veuillez vous reportez à la page web. Vous pouvez trouver une liste des changements surhttp://kdiff3.sourceforge.net/ChangeLog ou dans le fichier "ChangeLog" de la source. + + + +Compilation et Installation + +Pour compiler et installer &kdiff3; sur un système avec KDE, saisissez ce qui suit dans le dossier de base de votre dossier de &kdiff3; : + +% ./configure --prefix=dos-kde +% make +% make install + +dos-kde spécifie le dossier contenant KDE sur votre système. Si vous ne connaissez pas celui-ci, lisez le fichier README pour les détails. +Étant donné que &kdiff3; utilise autoconf et automake vous ne devriez pas avoir de problèmes à les compiler. Si vous rencontriez des problèmes, veuillez les reporter aux listes de diffusion &kde;. + + + + + +&documentation.index; +
+ + diff --git a/doc/fr/iteminfo.png b/doc/fr/iteminfo.png new file mode 100644 index 0000000..0b81443 Binary files /dev/null and b/doc/fr/iteminfo.png differ diff --git a/doc/fr/letter_by_letter.png b/doc/fr/letter_by_letter.png new file mode 100644 index 0000000..8ddd48a Binary files /dev/null and b/doc/fr/letter_by_letter.png differ diff --git a/doc/fr/merge_current.png b/doc/fr/merge_current.png new file mode 100644 index 0000000..3f2e341 Binary files /dev/null and b/doc/fr/merge_current.png differ diff --git a/doc/fr/new.png b/doc/fr/new.png new file mode 100644 index 0000000..df3fd25 Binary files /dev/null and b/doc/fr/new.png differ diff --git a/doc/fr/open_dialog.png b/doc/fr/open_dialog.png new file mode 100644 index 0000000..029f8d4 Binary files /dev/null and b/doc/fr/open_dialog.png differ diff --git a/doc/fr/screenshot_diff.png b/doc/fr/screenshot_diff.png new file mode 100644 index 0000000..d2865d5 Binary files /dev/null and b/doc/fr/screenshot_diff.png differ diff --git a/doc/fr/screenshot_merge.png b/doc/fr/screenshot_merge.png new file mode 100644 index 0000000..1eb935b Binary files /dev/null and b/doc/fr/screenshot_merge.png differ diff --git a/doc/fr/triple_diff.png b/doc/fr/triple_diff.png new file mode 100644 index 0000000..c635d14 Binary files /dev/null and b/doc/fr/triple_diff.png differ diff --git a/doc/fr/white_space.png b/doc/fr/white_space.png new file mode 100644 index 0000000..e40a1c7 Binary files /dev/null and b/doc/fr/white_space.png differ diff --git a/doc/it/Makefile.am b/doc/it/Makefile.am new file mode 100644 index 0000000..e235de1 --- /dev/null +++ b/doc/it/Makefile.am @@ -0,0 +1,4 @@ +KDE_DOCS = kdiff3 +KDE_LANG = it + + diff --git a/doc/it/dirbrowser.png b/doc/it/dirbrowser.png new file mode 100644 index 0000000..d3c63b2 Binary files /dev/null and b/doc/it/dirbrowser.png differ diff --git a/doc/it/dirmergebig.png b/doc/it/dirmergebig.png new file mode 100644 index 0000000..b26b65c Binary files /dev/null and b/doc/it/dirmergebig.png differ diff --git a/doc/it/index.docbook b/doc/it/index.docbook new file mode 100644 index 0000000..11d4b21 --- /dev/null +++ b/doc/it/index.docbook @@ -0,0 +1,2442 @@ + +KDiff3"> + + + + +]> + + + + + + +Manuale di &kdiff3; + + +Joachim Eibl
joachim.eibl at gmx.de +
+
+
+ +StelvioRosset
srosset@satelgroup.net
Traduzione della documentazione -2004
AndreaCelli
a.celli@caltanet.it
Aggiornamento e revisione della traduzione - 2005
+ + +2002-2005 +Joachim Eibl + + + +&FDLNotice; + + + +2005-01-30 +0.9.87 + + + + +&kdiff3; è uno strumento per verificare differenze ed eseguire fusioni tra file e directory, il quale +confronta e fonde due o tre file di testo o directory in ingresso, +mostra le loro differenze riga per riga o carattere per carattere(!), +fornisce semplici automatismi per fonderli, +possiede un editor per la risoluzione dei conflitti di fusione, +rende trasparente la rete con l'uso di KIO, +permette di nascondere o mostrare le differenze costituite da spazi bianchi o commenti, +supporta l'Unicode, UTF-8 e altre codifiche. + +Questo documento descrive la versione 0.9.87 di KDiff3. + + + + + +KDE +kdeextragear +kdiff3 +diff +merge +CVS +triplediff +compare +file +directory +controllo versione +three-way-merge +in-line-differences +synchronise +kpart +kio +networktransparent +editor +spazio bianco +commenti + + +
+ +Introduzione +Un'altra interfaccia per confrontare file? +Per la comparazione dei file esistono numerosi strumenti grafici. Perché dovresti scegliere KDiff3? Lascia che ti spieghi perché l'ho scritto. KDiff3 è nato perché dovevo eseguire una difficile fusione tra file. La fusione è necessaria quando molte persone, in un progetto, lavorano sugli stessi file. La fusione può essere piuttosto automatica, quando gli strumenti di fusione non solo permettono la modifica dei nuovi file ("rami") ma anche del file originale ("base"). Lo strumento per la fusione sceglierà automaticamente solo le modifiche eseguite all'interno di un ramo. Quando più persone cambiano le stesse righe, allora lo strumento di fusione trova un conflitto che dovrà essere risolto manualmente. In quel caso la fusione era difficile in quanto uno aveva cambiato molte cose e corretto l'indentazione in molti punti. Inoltre, un altro aveva variato molto testo in alcuni file, dando luogo a molti conflitti durante l'operazione di fusione. Lo strumento che utilizzai mostrava solamente le righe variate, ma non cosa era cambiato all'interno di esse. Inoltre non c'era nessuna informazione riguardo la variazione di indentazione. La fusione era un piccolo incubo. Così fu l'inizio. La prima versione poteva mostrare le differenze all'interno di una riga e la differenza degli spazi bianchi. Successivamente molte altre caratteristiche furono introdotte per aumentarne l'utilità. Per esempio, se vuoi comparare velocemente alcuni testi, è possibile copiarne il contenuto negli appunti e quindi incollarlo in una finestra di KDiff3. Una caratteristica che ha richiesto un grosso sforzo è stata la comparazione tra directory e la funzione di fusione, le quali hanno trasformato il programma in un vero e proprio navigatore di file. Spero che KDiff3 sia utile anche a te. Divertiti! Joachim Eibl (2003) + + +Schermate e caratteristiche +Questa schermata mostra la differenza tra due file di testo +(Usando una versione recente di KDiff3): + + + + +È supportata la fusione di tre file. Questa è particolarmente utile se due persone variano indipendentemente il codice. Il file originale (il file base) è utilizzato per aiutare KDiff3 a selezionare automaticamente i cambiamenti da salvare. Sotto le finestre che evidenziano le differenze una finestra di modifica ti permetterà di risolvere i conflitti riscontrati, mostrandone il risultato ottenuto. Potrai inoltre modificare il risultato delle operazioni. Questa schermata mostra il risultato della fusione di tre file in ingresso: + + + + + +KDiff3 aiuta anche a comparare e fondere intere directory. Questa schermata mostra KDiff3 durante una fusione di directory: + + + + + + +Altre caratteristiche +Indicazione delle differenze per riga e per carattere +Sfruttando le possibilità dei monitor grafici a colori, KDiff3 evidenzia accuratamente quali sono le differenze. Quando avrai la necessità di fare molte revisioni di codice, apprezzerai questo aiuto. + + + + + +Vedere le differenze di spazi bianchi a colpo d'occhio +Saranno visibili spazi e tabulatori che risultano diversi. Quando le righe differiscono solamente di uno spazio bianco questo potrà essere subito visibile nella colonna di sommario posizionata sul lato sinistro. Non dovrai più preoccuparti quando qualcuno cambia l'indentazione! + + + + + +Confronto tra tre file +Analizza tre file e verifica dove differiscono. Le finestre sinistra/centrale/destra si chiamano A/B/C ed hanno rispettivamente il colore /blu/verde/magenta. Se per una riga due file sono uguali ed un altro è diverso, il colore mostrerà quello diverso. Il colore rosso significa che tutti i file sono diversi. + + + + + +Comoda fusione di due o tre file di input +KDiff3 può essere usato per fondere due o tre file di ingresso ed automaticamente fonde quanto è possibile. Il risultato è presentato in una finestra di modifica dove molti conflitti possono essere risolti con un semplice clic del mouse: Selezionando i pulsanti A/B/C dalla barra si seleziona la sorgente che deve essere utilizzata. È possibile selezionare più di un file sorgente. Dato che questa finestra è un editor anche i conflitti che hanno bisogno di ulteriori correzioni possono essere qui risolti senza bisogno di un altro strumento. + + +Inoltre ... + + Pulsanti per la navigazione veloce. + Un clic del mouse nella colonna di sommario sincronizzerà tutte le finestre per mostrare la stessa posizione. + Seleziona e copia da una qualsiasi finestra ed incolla nella finestra del risultato della fusione. + Colonna riassuntiva, che mostra dove sono i cambiamenti ed i conflitti. + È possibile modificare i colori secondo le tue preferenze personali. + Dimensione della tabulazione modificabile. + Opzione per inserire spazi invece che tabulatori. + È possibile aprire i file comodamente dalla finestra di dialogo oppure specificandoli sulla riga di comando. + Ricerca stringhe in tutto il testo della finestra. Trova (Ctrl-F) e Trova Successivo (F3) + Mostra il numero di riga per ogni riga. + Incolla dagli appunti o trascina il testo nella finestra di KDiff3. + Trasparenza di rete tramite KIO. + Può essere utilizzato come visualizzatore delle differenze in Kdevelop 3. + Accapo per righe lunghe. + Supporto per l'Unicode, UTF-8 e altri codec. + Supporto per le lingue scritte da destra a sinistra. + ... + + + + + +Confronto e fusione tra file + +Opzioni della riga di comando + +Confronta 2 file: +kdiff3 file1 file2 + + + +Fondi 2 file: +kdiff3 file1 file2 -m + kdiff3 file1 file2 -o outputfile + + + +Confronta 3 file: +kdiff3 file1 file2 file3 + + + +Fondi 3 file: +kdiff3 file1 file2 file3 -m + kdiff3 file1 file2 file3 -o outputfile + +Da notare che file1 potrebbe essere trattato come base di file2 e file3. + + +Caso particolare: File con lo stesso nome +Se tutti i file hanno lo stesso nome ma si trovano in directory diverse, è possibile specificare solamente il nome del primo file. Es.: +kdiff3 dir1/filename dir2 dir3 + + + +Riga di comando per avviare il confronto e la fusione tra directory: +Non cambia molto, ma ora lavoriamo su delle directory. +kdiff3 dir1 dir2 + kdiff3 dir1 dir2 -o destdir + kdiff3 dir1 dir2 dir3 + kdiff3 dir1 dir2 dir3 -o destdir + +Per maggiori informazioni su confronto e fusione tra directory leggi qui. + + +Per maggiori informazioni sulle opzioni della riga di comando usa: +kdiff3 --help +Opzioni: + -m, --merge Fondi l'input. + -b, --base file Fissa il file di base. Per compatibilità con alcuni programmi. + -o, --output file File di output. Implica -m. Es.: -o nuovofile.txt + --out file File di output (Per compatibilità con alcuni programmi). + --auto Senza GUI se tutti i conflitti possono essere risolti automaticamente (richiede -o file) + --qall Non risolve i conflitti automaticamente. (Per compatibilità...) + --L1 alias1 Sostituzione del nome visibile per file input 1 (base). + --L2 alias2 Sostituzione del nome visibile per file input 2. + --L3 alias3 Sostituzione del nome visibile per file input 3. + -L, --fname alias Sostituzione del nome visibile alternativo. Da specificare per ogni input. + -u Non ha effetti. Per compatibilità con alcuni programmi. + + + + + +Dialogo di apertura file +Poiché devono essere selezionati molti file, il programma ha un particolare dialogo di apertura file: + + + +Il dialogo di apertura file permette di digitare il nome del file, di selezionare un file con il navigatore ("File...") o di scegliere i file più recenti da una lista a comparsa. Quando aprirai nuovamente il dialogo di selezione dei file vi troverai i nomi dei file in uso. Il nome del terzo file non è richiesto. Se il campo per "C" rimane vuoto, le operazioni di confronto riguarderanno solo due file. Puoi anche selezionare una directory con "Directory...". Se per A è specificata una directory allora sarà automaticamente attivata la comparazione/fusione di directory. Se A specifica un file ma B e C o l'output specifica una directory, allora KDiff3 utilizza il nome del file di A nella directory specificata. Se viene selezionato "Fusione", allora l'opzione "Output" diverrà modificabile. Ma non è richiesto di specificare subito il nome del file in uscita. Potrai specificarlo successivamente. L'opzione "Configura..." apre un menu di opzioni, in modo che tu possa impostare le varie opzioni prima di avviare l'analisi. + + +Incolla e trascina l'input +Molte volte vuoi comparare parti di testo che non sono un file. KDiff3 permette anche di incollare testo dagli appunti nella finestra di verifica delle differenze selezionata. L'analisi delle differenze apparirà immediatamente. Nel dialogo di selezione file non avrai la necessità di specificare i file, potrai semplicemente chiudere con l'opzione "Annulla". È possibile utilizzare il trascinamento: prendi un file dal file manager o seleziona un testo da un editor e trascinalo dentro una finestra di verifica. Qual è l'idea? Alcune volte un file contiene due funzioni simili, ma per controllarne il grado di similitudine sarebbe dispendioso se tu dovessi prima creare due file e quindi ricaricarli. Ora puoi semplicemente copiare, incollare e comparare la sola parte di interesse. Nota: Attualmente non è possibile trascinare qualsiasi cosa all'interno di KDiff3. Puoi solo portare qualcosa nella finestra di verifica delle differenze. Attenzione: Alcuni editor interpretano il trascinamento in altri programmi come operazioni di taglia (invece che copia) ed incolla. In tal caso i dati originali andrebbero quindi persi. + + +Capire le informazioni della finestra di ingresso + + + +Sopra ad ogni finestra di testo c'è una "riga informativa". Queste righe contengono una lettera "A", "B" o "C", il nome del file ed il numero della prima riga visibile nella finestra. (Nota che "C" è opzionale). Ogni riga informativa appare con colori diversi. (Se i percorsi sono troppo lunghi, è possibile muovere il mouse sulla riga informativa e un suggerimento visualizzerà l'intero nome). Alle tre finestre di input sono assegnate le lettere "A", "B" e "C". "A" è colorata di blu, "B" di verde e "C" di rosso. Questi sono i colori predefiniti, ma puoi cambiarli dal menu delle impostazioni. Quando si trova una differenza allora il colore mostra quale file di ingresso differisce. Quando entrambi gli altri file di input differiscono il colore utilizzato per evidenziare questo sarà il rosso ("Colore di conflitto" nelle impostazioni). Questo schema di colori è molto utile nel caso di tre file di ingresso, che discuteremo nella prossima sezione (Fusione). A sinistra di ogni testo è posizionata la "colonna di sommario". Se ci sono differenze su una riga, la colonna di sommario mostrerà il colore corrispondente. Nel sommario le differenze di soli spazi bianchi saranno evidenziate con una griglia. Per i linguaggi di programmazione in cui non è importante la posizione degli spazi bianchi è molto utile notare a colpo d'occhio se qualcosa di importante è stato variato. (In C/C++ lo spazio bianco è importante solamente all'interno delle stringhe, commenti, istruzioni per il preprocessore e solo in altre situazioni molto particolari). La linea verticale che separa la colonna di sommario ed il testo è interrotta se il file di input non presenta righe in questo punto. Quando è attivato il ritorno a capo questa linea verticale apparirà punteggiata in corrispondenza delle righe che vanno a capo. Sul lato destro, a sinistra della barra di scorrimento, è presente una colonna informativa. Essa mostra sinteticamente la colonna di sommario dell'ingresso "A". Differenze e conflitti sono visibili a colpo d'occhio. Quando vengono utilizzate solo due finestre di input, tutte le differenze appaiono in rosso, in quanto ogni differenza è un conflitto. Un rettangolo nero incornicia la parte visibile dell'input. Per file di ingresso molto lunghi, quando il numero delle righe è maggiore dell'altezza, in pixel, della colonna di sommario, molte righe di ingresso condividono un'unica riga di sommario. Un conflitto qui ha priorità sulle semplici differenze, che hanno priorità sui "non-cambiamenti". In tal modo così nessuna differenza o conflitto viene perso. Con un clic sopra questa colonna di sommario, il testo corrispondente verrà visualizzato. + + + +Operazione di fusione e la finestra di modifica del risultato + + + +Anche la finestra di modifica del risultato della fusione (sotto la finestra di ingresso) ha una riga informativa sovrastante che mostra "Output:", il nome del file e "[Modificato]" se qualcosa è stato variato. Normalmente essa contiene del testo creato dagli automatismi della fusione, ma spesso conterrà anche dei conflitti. !!! Il salvataggio è disabilitato fino a quando tutti i conflitti non sono risolti !!! (Usa l'opzione "Vai al precedente/prossimo conflitto non risolto" per ricercare i conflitti rimanenti). Se i file di ingresso sono solodue, ogni differenza è un conflitto che deve essere risolto manualmente. Con tre file di input il primo è considerato come base, mentre il secondo ed il terzo contengono le modifiche. Quando in qualche riga solo il file B o il file C presenta una differenza, ma non entrambi, allora il file modificato sarà automaticamente selezionato. Solo quando B e C hanno delle differenze sulle stesse righe il programma si accorgerà del conflitto il quale dovrà essere risolto manualmente. Quando B e C coincidono, ma differiscono con A, allora sarà selezionato C. La finestra di modifica del risultato di fusione ha anche una colonna di sommario sulla sinistra. Essa mostra la lettera dell'input da dove la riga è stata selezionata o nulla se tutte le tre sorgenti hanno la stessa riga. Per i conflitti essa mostra un punto interrogativo "?" e la riga mostra "<Conflitto nel fondere>", tutto in rosso. Dato che risolvere conflitti riga per riga richiede molto tempo, le righe sono raggruppate per gruppi con le stesse caratteristiche di differenza e conflitto. Saranno separati solo i conflitti di spazi bianchi dai conflitti di spazi non bianchi in modo da facilitare la fusione dei file in cui l'indentazione, su molte righe, cambia. Quando si fa clic sulla colonna di sommario con il tasto sinistro del mouse in una finestra, il gruppo appartenente a quella riga sarà selezionato in tutte le finestre e la parte iniziare del gruppo sarà visualizzata. (Questo potrebbe coinvolgere un posizionamento automatico nella finestra se l'inizio del gruppo non è visibile). Questo gruppo diverrà quindi il "gruppo corrente". Esso è visualizzato con il "Colore di fondo per questo intervallo corrente" e una barra nera apparirà sul lato sinistro del testo. I pulsanti di selezione dell'ingresso contengono le lettere "A", "B" e "C" nella barra dei pulsanti sotto la barra dei menu. Quando si fa un clic su un pulsante di selezione dell'ingresso, le righe di questo input saranno aggiunte alla fine del gruppo selezionato se questo gruppo non conteneva già tale testo. Altrimenti le righe di questo file di ingresso saranno rimosse. Inoltre puoi modificare direttamente qualsiasi riga. La colonna di sommario mostrerà "m" su ogni riga che hai modificato. Alcune volte, quando una riga viene rimossa dalla fusione automatica o da una modifica manuale, e non rimangono altre righe nel gruppo, allora apparirà in questa riga il messaggio <Riga origine mancante>. Questa posizione verrà mantenuta dal gruppo nel caso tu cambiassi idea e volessi sezionare qualche altro sorgente. Questo testo non verrà reimmesso nel file salvato o in altre selezioni che desideri copiare ed incollare. Il testo "<Fondi conflitti>" apparirà negli appunti se copi ed incolli del testo contenente questa riga. Fai comunque attenzione nell'eseguire tale operazione. La normale fusione partirà per la risoluzione automatica di semplici conflitti. Ma il menu "Fondi" permette alcune azioni per altre comuni necessità. Se devi selezionare lo stesso sorgente per molti conflitti, potrai selezionare sempre "A", "B" o "C", o solamente per i conflitti non risolti restanti, o per i conflitti di spazi bianchi non risolti. Se vuoi decidere tu stesso ogni singola differenza "Considera le differenze come conflitti". O se vuoi ritornare all'opzione automatica di KDiff3 seleziona "Risolvi automaticamente i conflitti semplici". KDiff3 riavvierà quindi la fusione. Per azioni che cambiano le tue precedenti modifiche KDiff3 ti chiederà la conferma prima di procedere. Nota: Quando scegliendo un sorgente per conflitti non risolti di spazi bianchi e le opzioni "Ignora numeri" o "Ignora commenti C/C++" sono utilizzate allora variazioni nei numeri o nei commenti saranno anch'essi trattati come spazi bianchi. + + +Navigazione e modifica +È possibile navigare con le barre di scorrimento, con il mouse oppure con l'uso dei tasti. Se fai clic dentro una finestra potrai usare i pulsanti del cursore sinistra, destra, alto, basso, pagina successiva, pagina precedente, inizio, fine, ctrl-inizio, ctrl-fine come per gli altri programmi. La colonna descrittiva dopo la barra di scorrimento verticale del file di ingresso può anche essere utilizzata per la navigazione facendo clic su questa. È possibile utilizzare la rotellina del mouse solo per scorrere su e giù. Per modificare il risultato della fusione di file puoi utilizzare solamente i tasti di modifica. Puoi invertire la modalità di inserimento e sovrascrittura con il tasto insert. (la modalità di inserimento è quella predefinita). Premendo il pulsante sinistro del mouse dentro una colonna di sommario saranno aggiornate tutte le finestre, che mostreranno l'inizio dello stesso gruppo di righe (come spiegato nella sezione "Fusione"). La barra dei pulsanti contiene inoltre altri pulsanti di navigazione con i quali è possibile saltare alla corrente/prima/ultima differenza, alla prossima/precedente differenza (ctrl-giù/ctrl-su), al prossimo/precedente conflitto (ctrl-pgdown/ctrl-pgup), o al prossimo/precedente conflitto non risolto. Nota che per KDiff3 un "conflitto" che non è stato automaticamente risolto all'inizio della fusione permane "conflitto"anche se risolto. Quindi la necessità di distinguere "conflitti non risolti". C'è anche un pulsante "Vai automaticamente al prossimo conflitto non risolto dopo aver selezionato la fonte" (Avanzamento automatico). Selezionandolo quando un sorgente è selezionato, KDiff3 salterà automaticamente alla selezione del prossimo conflitto non risolto. Questo può aiutare quando scegli solamente un unico file di ingresso. Quando hai bisogno di entrambi i sorgenti, o vuoi modificare dopo la selezione, vorrai probabilmente disattivarlo. Prima di procedere al prossimo conflitto non risolto KDiff3 mostrerà l'effetto della tua scelta per un breve periodo. Questo tempo è modificabile nell'impostazione di Verifica & Fusione: È possibile specificare la "Pausa nell'avanzamento automatico" in millisecondi tra 0 e 2000. Suggerimento: Stanco di troppi Clic? - Quando ci sono molti conflitti usa un tempo basso di avanzamento automatico e le scorciatoie Ctrl-1/2/3 per selezionare A/B/C. + + +Selezione, Copia ed Incolla +La finestre dell'ingresso non mostra un cursore, così le selezioni devono essere fatte con il mouse, fai clic con il tasto sinistro all'inizio, e, mantenendolo premuto, muoversi fino a fine selezione, dove dovrai rilasciare il tasto. Con un doppio clic è possibile selezionare una unica parola. Nella finestra del risultato è possibile selezionare anche tramite la tastiera, mantenendo il tasto "shift" e muovendosi con i tasti del cursore. Per copiare negli appunti è necessario premere il pulsante "Copia" (Ctrl-C o Ctrl-Ins). Ma esiste anche l'opzione "Copia automatica". Se attiva, ogni volta che si seleziona del testo esso verrà copiato immediatamente e non dovrai esplicitarlo. Presta però attenzione all'utilizzo perché i contenuti degli appunti potrebbero accidentalmente essere distrutti. "Taglia" (Ctrl-X o Shift-Delete) copia il testo selezionato negli appunti e lo elimina, mentre "Incolla" (Ctrl-V o Shift-Insert) inserisce il testo contenuto negli appunti nella posizione corrente o in sostituzione all'attuale selezione. + + +Salvataggio +Il salvataggio sarà permesso solamente quando tutti i conflitti saranno risolti. Se il file esiste e l'opzione "File di copia" è abilitata allora il file esistente sarà rinominato con estensione ".orig", ma se tale file esiste sarà rimosso. All'uscita o all'avvio di un'altra analisi delle differenze se il risultato non è stato ancora salvato KDiff3 richiederà se si vuole salvare, annullare o procedere senza salvare. (KDiff3 non intercetta nessun segnale. Quindi se si esegue un "kill" di KDiff3 tutti i dati saranno persi). I terminatori di riga sono salvati secondo il metodo tradizionale del sistema operativo. Per i sistemi Unix la riga termina con il solo carattere "\n", mentre per i sistemi Win32 ogni riga termina con i caratteri ritorno a capo + nuova riga "\r\n". KDiff3 non mantiene il terminatore originale del file, quindi non utilizzare KDiff3 con i file binari. + + +Ricerca Stringhe +È possibile ricercare una stringa in ogni finestra di KDiff3. Il comando "Ricerca ..." (Ctrl-F) nel menu di Modifica apre un dialogo che permette di specificare la stringa da ricercare. È anche possibile selezionare la finestra sulla quale fare la ricerca. La ricerca partirà sempre dall'inizio. Usare il comando "Ricerca successivo" (F3) per la prossima occorrenza. Se decidi di cercare su più finestre allora la ricerca sarà dall'alto al basso nella prima finestra, poi dall'alto al basso nella seconda, ecc. + + + +Opzioni +Le opzioni e la lista del file recenti saranno memorizzate all'uscita del programma, e ricaricate quando verrà avviato. (Menu Impostazioni->Configura KDiff3 ...) +Tipo di caratteri +Seleziona un tipo carattere a larghezza fissa. (in alcuni sistemi questo dialogo potrebbe presentare anche la selezione della larghezza del font, ma non è consigliabile usarla). + + Corsivo per le differenze:Selezionando questo, le differenze di testo saranno rappresentate con il tipo di carattere scelto ma in stile corsivo. Se il tipo di carattere non supporta il corsivo l'opzione non avrà effetto. + + + + +Colori + + Colore primo piano:Normalmente nero. + Colore di fondo:Normalmente bianco. + Colore di fondo per le differenze:Normalmente grigio chiaro. + Colore A:Normalmente blu scuro. + Colore B:Normalmente verde scuro. + Colore C:Normalmente magenta scuro. + Colore per i conflitti:Normalmente rosso. + Colore di sfondo per questo intervallo corrente:Normalmente giallo chiaro. + Colore di sfondo per questo intervallo:Normalmente giallo scuro. + +Su sistemi con soli 16 o 256 colori alcuni colori non sono disponibile nella forma originale. In tali sistemi l'opzione "Predefiniti" selezionerà un colore puro. + + +Impostazioni dell'editor + + I Tab inseriscono spazi:Se questo è disabilitato e viene premuto il tasto di tabulazione, un carattere tabulatore verrà inserito, altrimenti verranno inseriti un numero appropriato di caratteri. + Dimensione di Tab:Può essere modificato per le tue necessità. Il predefinito è 8. + Rientro automatico:Quando premi Invio o Return verrà utilizzata, per la nuova riga, l'indentazione della riga precedente. + Copia automaticamente la selezione:Ogni selezione è immediatamente copiata negli appunti quando attiva e non sarà necessario esplicitare la copia. + Tipo di fine riga:Quando salvi un file puoi decidere il modo con cui vengono terminate le righe. La modalità preimpostata è quella abituale del sistema operativo in uso. + Usa la codifica locale:Per la visualizzazione di caratteri non ASCII. Puoi provare a cambiarla se alcuni caratteri della tua lingua non vengono visualizzati correttamente. + + + +Impostazioni di verifica & fusione +Quando si comparano dei file, KDiff3 prima proverà a confrontare le righe che sono uguali in tutti i file di ingresso. Solo durante questa fase potrebbe ignorare gli spazi bianchi. La seconda fase confronta ogni riga. In tale fase gli spazi bianchi non saranno ignorati. Inoltre durante la fusione gli spazi bianchi non saranno ignorati. + + + Mantieni il ritorno a capo (CR):Alcuni editor (in alcuni sistemi) salvano il ritorno a capo '\r' e avanzamento riga '\n' mentre altri salvano solamente il ritorno a capo '\n'. Normalmente KDiff3 ignora il ritorno a capo, ma quando i file non hanno la stessa dimensione potrebbero comunque risultare uguali dopo una verifica parallela. Quando l'opzione è abilitata allora il ritorno a capo è reso visibile ma trattato come uno spazio bianco. Questa opzione deve essere disattivata durante la fusione. Normalmente disabilitata. + Ignora i numeri:Normalmente disabilitato. I caratteri numerici ('0'-'9','.','-') saranno ignorati nella prima parte dell'analisi nella quale viene fatta la verifica delle righe. Nel risultato delle differenze saranno tuttavia mostrate, ma sono trattate come spazi bianchi. + Ignora commenti C/C++:Normalmente disabilitato. Le variazioni nei commenti saranno trattati come variazioni degli spazi bianchi. + Ignora maiuscole:Normalmente disabilitato. I caratteri che differiscono solo per essere maiuscoli o minuscoli (come "A" e "a") saranno trattati come le variazioni nel numero di spazi bianchi. + Comandi del preprocessoreVedi la prossima sezione. + Comando del preprocessore per confrontare righe:Vedi la prossima sezione. + Ricerca approfondita:Ricerca approfondita per ricercare la più piccola differenza (Normalmente attiva). Questo sarà probabilmente utile per file complicati e lunghi. E lento per file molto lunghi. + Pausa nell'avanzamento automatico (ms):Quando l'opzione di auto avanzamento automatico è attiva si specifica quando lungo mostrare il risultato delle selezione prima di saltare al prossimo conflitto non risolto. + Trattamento predefinito degli spazi bianchi nel fondere 2 file:Automaticamente risolve tutti i conflitti di spazi bianchi scegliendo lo specifico file (Scelta manuale predefinita). Utile se lo spazio bianco non è importante in molti file. Se hai bisogno di questo solo occasionalmente è meglio usare "Scegli A/B/C per tutti i conflitti non risolti di spazio bianco" nel menu di fusione. Nota che se hai abilitato l'opzione "Ignora numeri" o "Ignora commenti C/C++" allora questa auto selezione verrà applicata anche per i conflitti nei numeri o nei commenti. + + + + +Fusione di directory +Queste opzioni sono considerate con la scansione delle directory e la manipolazione della fusione: Vedi Directory Comparazione/Fusione Documentazione per maggiori dettagli. Tuttavia qui esiste una opzione che è anche rilevante per il salvataggio di singoli file: + + File di backup:Quando viene salvato un file ed esiste una versione meno recente, la versione originale sarà rinominata con l'estensione ".orig". Se già esiste una versione con estensione ".orig" questa verrà eliminata senza una copia di riserva. + + + +Opzioni locali e per la lingua + + Lingua:Cambia la lingua usata per l'interfaccia utente. Le modifiche a questa opzione non hanno effetto immediato sul programma. Devi chiudere Kdiff3 e riavviarlo affinché la lingua venga cambiata. Questa opzione non è disponibile nella versione KDE di KDiff3 perché la lingua viene cambiata tramite le impostazioni globali di KDE. + Usa la stessa codifica per tutto:Le opzioni di codifica che seguono possono essere fissate separatamente per ogni voce o, se questa opzione è attivata, il primo valore vale per tutti. + Codifica locale:Davanti al selettore di codec appare una nota che ti dice quale è la codifica locale. Non è modificabile, serve solo a ricordarti quale è la codifica locale nel caso che tu non lo sapessi già. tuttavia devi selezionarla. + Codifica per i file A/B/C:Cambia la codifica dei file in ingresso. Ha effetto sulla visualizzazione dei caratteri speciali. Poiché puoi aggiustare separatamente le codifiche, potrai confrontare e fondere file prodotti con codifiche diverse. + Codifica per i file fusione e salvataggio:Quando avrai modificato un file, potrai scegliere con quale codifica salvarlo sul disco fisso. + Codifica per i file sottoposti al preprocessore:Quando definisci un preprocessore questo deve essere in grado di operare sulla codifica in uso. Ad esempio i tuoi file sono 16-bit-unicode e il tuo preprocessore può operare solo su file 8-bit-ascii. Con questa opzione puoi definire la codifica del risultato del preprocessore. + Lingue scritte da destra a sinistra:Alcune lingue sono scritte sa destra a sinistra. Quando questa opzione è attivata KDiff3 scrive i testi da destra a sinistra nelle finestre per il confronto e per la fusione. Nota che se avvii KDiff3 da riga di comando con l'opzione "--reverse", anche tutta l'interfaccia grafica sarà scritta da destra a sinistra. Questa è una potenzialità fornita da Qt. Questa documentazione è stata scritta pensando che l'opzione "Lingue scritte da destra a sinistra" e l'aspetto grafico "reverse" non siano attivati. Altrimenti alcuni riferimenti a "destra" e "sinistra" dovranno essere scambiati per utilizzare correttamente queste opzioni. + + + + +Varie +(Queste opzioni ed azioni sono disponibile nei menu o nelle barre dei pulsanti). + + Mostra i numeri di riga:Puoi selezionare se, per il file di ingresso, il numero di riga deve essere visualizzato. + Mostra anche le differenze date da spazi e tabulatori:Alcune volte la visualizzazione degli spazi e dei tabulatori disturba. È possibile eliminarla. + Mostra spazio bianco:Disabilita questo per sopprimere ogni evidenziazione di spazi bianchi cambiati nel testo o nelle colonne di sommario (Nota che questo è anche applicato a cambiamenti nei numeri o nei commenti se sono attive le opzioni "Ignora numeri" o "Ignora commenti C/C++"). + Opzioni di impaginazione:Queste opzioni sono disponibili solo quando si confrontano tre file. Nella modalità normale tutte le differenze vengono mostrate in una colonna riassuntiva con colori codificati. Però, a volte, potrebbe servirti evidenziare solo le differenze tra due dei tre file. Selezionando confronto di "A con B", "A con C" o "B con C" si aprirà, a fianco di quella normale, una seconda colonna riassuntiva con le informazioni richieste. + A capo nelle finestre delle differenze:Le righe più lunghe della larghezza della finestra vengono mostrate su più righe. + Mostra finestra A/B/C:Alle volte vuoi usare meglio lo spazio dello schermo per righe lunghe. Nascondere le finestre che non sono importanti (Nel menu di Finestra). + Inverti orientamento divisione:Inverti tra la finestra delle differenze e le altre (A a sinistra di B a sinistra di C) o sopra le altre (A sopra B sopra C). Questo potrebbe anche aiutare in presenza di molte righe (Nel menu di Finestra). + Avviare velocemente una fusione:Alcune volte stai visualizzando le differenze e decidi di fondere. "Fondi il file corrente" nel menu di Directory funziona anche solo comparando due file. Un solo clic ed inizia la fusione che utilizza, come predefinito, il nome del file dell'ultimo file considerato (Quando questo è utilizzato per far ripartire la fusione, allora il nome del file di output sarà mantenuto). + + + +Configurazione delle scorciatoie da tastiera +Attualmente solo la versione KDE supporta la configurazione personalizzata dei tasti scorciatoia. (Menu Impostazioni->Configurazione Scorciatoie...) + + + +Comandi per il preprocessore +Kdiff3 prevede due opzioni per il preprocessore. + + Comandi del preprocessoreQuando un file viene letto, esso sarà inoltrato come ingresso a questo comando esterno. Il risultato del comando sarà considerato al posto del file originale. Potrai scrivere un tuo preprocessore in base alle tue esigenze. Utilizzalo per tagliare parti di file che disturbano, o per correggere automaticamente l'indentazione, ecc. + Comando del preprocessore per confrontare righe:Quando un file viene letto, esso viene trattato da questo comando esterno. Se viene specificato un comando come preprocessore (vedi sopra), allora l'uscita dal preprocessore è anche l'ingresso del preprocessore che confronta le righe. Il risultato sarà usato durante la fase di analisi delle righe coincidenti. Puoi scrivere un tuo preprocessore personalizzato che risolva le tue esigenze. Ogni riga in ingresso deve avere una riga corrispondente in uscita. + + +L'idea è quella di permettere la maggior flessibilità possibile nell'impostare il risultato del confronto. Purtroppo ciò richiede l'uso di un programma esterno, e molti utenti non hanno voglia di scriversene uno. La buona notizia è che molto spessosed o perl sono perfettamente in grado di svolgere il lavoro richiesto. +Un semplice esempio con un file di testo: prendi il file a.txt (6 righe): + aa + ba + ca + da + ea + fa + e il file b.txt (3 righe): + cg + dg + eg + Senza un preprocessore appariranno le seguenti righe affiancate: + aa - cg + ba - dg + ca - eg + da + ea + fa + Probabilmente non era quello che desideravi, poiché la prima lettera contiene l'informazione realmente interessante. Per aiutare l'algoritmo di confronto ad ignorare la seconda lettera potremmo usare come preprocessore un comando che rimpiazzi riga per riga "g" con "a": + sed 's/g/a/' + Con questo comando il risultato del confronto sarà: + aa + ba + ca - cg + da - dg + ea - eg + fa + Internamente l'algoritmo di confronto usa i file elaborati riga per riga dal preprocessore, ma sullo schermo il file non appare modificato. Un preprocessore normale avrebbe cambiato anche i dati visualizzati. + +Basi del <command +>sed</command +> +Questa sezione spiega sommariamente alcune possibilità elementari di sed. Per maggiori informazioni vedi info:/sed o http://www.gnu.org/software/sed/manual/html_mono/sed.html. Puoi trovare una versione di sed precompilata per Windows a http://unxutils.sourceforge.net. nota che gli esempi che seguono danno per scontato che l'eseguibile di sed sia in una directory della variabile di ambiente PATH. Se non fosse vero, dovrai specificare il percorso completo dell'eseguibile. Nota anche che negli esempi si usano le virgolette semplici ('), che non funzionano in Windows. Sotto Windows dovrai usare al loro posto le virgolette doppie ("). +In questo paragrafo userò solo il comando di sed per sostituire.: + sed 's/ESPR_REGOLARE/NUOVO_TESTO/FLAG' + Prima di usare un nuovo comando in Kdiff3 sarebbe meglio provarlo in una console. Per farlo è utile il comando echo. Ad esempio: + echo abracadabra | sed 's/a/o/' + -> obracadabra + Questo esempio mostra un semplicissimo comando sed che sostituisce la prima occorrenza di "a" con "o". Se tu volessi sostituire tutte le occorrenze, ti basterebbe aggiungere il flag "g": + echo abracadabra | sed 's/a/o/g' + -> obrocodobro + Il simbolo "|" è il comando "pipe" che incanala l'uscita dal comando precedente nell'ingresso del comando successivo. Se vuoi fare una prova su un file più lungo, puoi usare cat nei sistemi di tipo Unix o type in sistemi di tipo Windows. sed opererà una sostituzione riga per riga. cat nome_file | sed opzioni + + + +Esempi di utilizzi di <command +>sed</command +> in KDiff3 +Ignorare altri tipi commenti +Attualmente KDiff3 riconosce solo i commenti di C/C++. Usando il preprocessore per il confronto delle righe in ingresso puoi fare in modo che altri tipi di commento vengano ignorati. basterà convertirli in commenti di tipo C/C++. Ad esempio, per ignorare commenti che iniziano con "#", potresti convertirli in "//". Tieni presente che dovrai anche attivare l'opzione "Ignora i commenti C/C++" affinché il trucco funzioni. Un appropriato comando per preprocessore le righe potrebbe essere: + sed 's/#/\/\//' + Poiché per sed il carattere "/" ha un significato speciale, è necessario porre un carattere "\" prima di ogni "/" nella stringa del nuovo testo. Spesso il carattere "\" è richiesto per aggiungere o togliere un significato speciale a certi caratteri. La virgoletta semplice (') all'inizio e alla fine del comando di sostituzione è molto importante qui. Altrimenti la shell cercherebbe di interpretare cerci caratteri speciali (ad es. '#', '$' or '\' ) prima di passarli a sed. Tieni presente che in Windows devi usare le virgolette doppie (") a questo scopo. Windows sostituisce altri caratteri come "%", quindi è meglio fare qualche prova. + +Ignorare distinzione maiuscole/minuscole +Usa questo comando per preprocessare le righe in modo da convertire tutto in maiuscolo: + sed 's/\(.*\)/\U\1/' + ".*" è un'espressione regolare che corrisponde con tutte le stringhe e, in questo contesto, con tutti i caratteri della riga. Il "\1" nella stringa di sostituzione rappresenta il testo trovato in corrispondenza al contenuto della prima coppia di parentesi "\(" e "\)". La "\U" converte in maiuscolo il testo inserito. + + +Ignorare le keyword per il controllo della versione +CVS ed altri sistemi per il controllo delle versioni utilizzano molte parole chiave per inserire stringhe generate automaticamente (info:/cvs/Keyword substitution). Esse seguono lo schema comune "$KEYWORD testo generato$". A questo punto ci serve un comando per il preprocessore che rimuova solo il testo generato: + sed 's/\$\(Revision\|Author\|Log\|Header\|Date\).*\$/\$\1\$/' + Le "\|" separano le possibili parole chiave. Puoi modificare questa lista in base alle tue esigenze. La "\" prima del "$" è necessaria, altrimenti il "$" verrebbe interpretato come "fine della riga". +Nel provare sed potrai incominciare a capire ed apprezzare queste strane "espressioni regolari". Esse sono particolarmente utili perché molti altri programmi utilizzano cose molto simili. + + +Ignorare i numeri +Attualmente c'è un'opzione interna che permette di ignorare i numeri. Però è utile vedere come lo si può fare con un comando per il preprocessore. + sed 's/[0123456789.-]//g' + Ogni carattere compreso tra le parentesi quadre verrà riconosciuto e sostituito con nulla. + + +Ignorare alcune colonne +A volte un testo è formattato molto rigorosamente e contiene delle colonne che tu vuoi ignorare, mentre ci sono altre colonne che tu vuoi esaminare. Nel seguente esempio le prime 5 colonne (ciascuna di un carattere) verranno ignorate, poi vengono salvate 10 colonne, ignorate altre cinque e salvato il resto della riga. + sed 's/.....\(..........\).....\(.*\)/\1\2/' + Ogni punto "." rappresenta un carattere. "\1" e "\2" nella stringa del nuovo testo indicano il contenuto della prima e seconda coppia "\(" e "\)", ossia il testo da preservare. + + +Combinare piùsostituzioni +A volte, potresti voler applicare contemporaneamente diverse sostituzioni. In tal caso basta usare un punto e virgola ";" per separarle l'una dall'altra. Ad esempio: echo abracadabra | sed 's/a/o/g;s/\(.*\)/\U\1/' + -> OBROCODOBRO + + + + +Utilizzare <command +>perl</command +> invece di <command +>sed</command +> +Invece di sed potresti voler utilizzare un altro comando, ad esempio perl. + perl -p -e 's/ESPR_REGOLAR/NUOVO_TESTO/FLAGS' + Ma in perl alcuni particolari sono differenti. Nota, ad esempio, che mentre sed vuole "\(" e "\)", in perl serve un più semplice "(" e ")", non precedute da '\'. Esempio: sed 's/\(.*\)/\U\1/' + perl -p -e 's/(.*)/\U\1/' + + + + + +Precedenze nel preprocessare i dati +I dati sono incanalati (piped) attraverso tutti i preprocessori interni ed esterni nel seguente ordine: + +Preprocessore normale, +Preprocessore esterno riga per riga, +Ignorare differenze maiuscolo/minuscolo (tutto in maiuscolo), +Individuare commenti C/C++: +Ignorare i numeri, +Ignorare spazi bianchi, + +I dati, dopo essere passati dal preprocessore normale saranno utilizzati sia per essere mostrati che fusi. Le altre operazioni modificano solo i dati visti dall'algoritmo che controlla le differenze tra le righe corrispondenti. Nei rari casi in cui si usa il preprocessore normale bisogna tener presente che il preprocessore sul contenuto delle righe utilizza l'uscita del preprocessore normale come proprio ingresso. + + +Attenzione +I comandi per il preprocessore sono spesso utilissimi ma, come succede con ogni opzione che modifichi i vostri testi o che nasconda automaticamente certe differenze, potrebbero farti sfuggire differenze significative o, nel peggiore dei casi, distruggere dati importanti. Per questa ragione, se durante una fusione è in funzione un comando del preprocessore normale, KDiff3 ti chiederà se vuoi disattivarlo. Però non ti avviserà se è attivo un comando del preprocessore sul contenuto delle righe. La fusione non sarà completata se prima non saranno risolti tutti i conflitti. Se hai disabilitato "Mostra gli spazi bianchi" anche le differenze che son state rimosse con il preprocessore sul contenuto delle righe saranno del tutto invisibili. Se il bottone "Salva" rimane disattivato durante una fusione (perché sussistono dei conflitti), assicurati di aver attivato "Mostra gli spazi bianchi". Se poi non vorrai sistemare manualmente le differenze meno importanti, potrai azionare "Scegli [A|B|C] per per risolvere tutti i conflitti di spazi bianchi" nel menu "Fondi". + + + + + +Comparazione e fusione di directory con KDiff3 +Introduzione +Spesso i programmatori devono modificare molti file nelle directory per realizzare i loro scopi. Per questo KDiff3 permette anche di comparare e fondere intere directory ricorsivamente! Anche se comparare e fondere le directory sembra abbastanza ovvio, ci sono molti dettagli che bisogna considerare. Il più importante è il fatto che ora molti file potrebbero essere coinvolti in ogni operazione. Se non hai creato copia di riserva dei dati originali, può essere molto difficile se non impossibile recuperare lo stato originale. Quindi prima di avviare una fusione assicurati che i tuoi dati siano sicuri e sia possibile un recupero. Se crei un archivio o usi un sistema di controllo versioni è una tua decisione, ma anche gli esperti programmatori ed integratori hanno bisogno dei vecchi sorgenti prima o poi. E nota che anche se io (autore di KDiff3) cerco di fare del mio meglio, non posso garantire che non ci siano errori. In accordo con la licenza GNU-GPL NON CI SONO GARANZIE alcuna per questo programma. Quindi attenzione e ricordate: +
+ Errare è umano, ma per incasinare davvero tutto è necessario un computer. +
+Questo è quello che questo programma può fare per te: KDiff3 ... + + ... legge e compara due o tre directory ricorsivamente, + ... fa particolare attenzione ai file simbolici, + ... permette di selezionare i file con un doppio clic del mouse, + ... per ogni elemento propone una operazione di fusione, che puoi cambiare prima di avviare la fusione delle directory, + ... permette la simulazione della fusione e visualizza le azioni che dovrebbero essere fatte, senza eseguirle, + ... permette di fondere, e permette l'intervento manuale quando questo è necessario, + ... ti permette di avviare l'operazione selezionata per tutti gli elementi (tasto F7) o per l'elemento selezionato (tasto F6), + ... permette di continuare la fusione dopo l'interazione manuale con il tasto F7, + ... opzionalmente crea una copia di riserva, con l'estensione ".orig", + ... + +
+ +Avviare la comparazione o la fusione di directory +Questa operazione è molto simile alla comparazione e fusione di un file. È necessario specificare le directory nella riga di comando o nel dialogo di selezione file. +Compara/Fondi due directory: +kdiff3 dir1 dir2 + kdiff3 dir1 dir2 -o destdir + +Se nessuna directory è stata specificata, KDiff3 utilizzerà dir2. + + +Compara/Fondi tre directory: +kdiff3 dir1 dir2 dir3 + kdiff3 dir1 dir2 dir3 -o destdir + +Quando tre directory vengono fuse allora dir1 verrà utilizzata come base della fusione. Se nessuna directory di destinazione è stata specificata, KDiff3 utilizzerà dir3 come directory di destinazione per la fusione. + +Si noti che solamente la comparazione inizia automaticamente, non la fusione. Per questo tu devi prima selezionare un elemento del menu o il tasto F7 (Ulteriori dettagli di seguito). + + + +Mostra informazioni +Durante la lettura delle directory un messaggio informativo appare per notificare lo stato di avanzamento. Se annulli l'operazione di scansione, solamente i file che sono stati comparati fino a quel momento saranno riportati. Quando la scansione del directory è stata completata KDiff3 mostra una lista dei risultati della sinistra, ... + + + +... ed i dettagli dell'elemento attualmente selezionato sulla destra: + + + + + +Colonna del nome +Ogni file e directory trovato durante la scansione è mostrato qui in un albero. Puoi selezionare un elemento facendo clic con il mouse. Normalmente le directory sono collassate. È possibile espanderle e collassarle con un clic su "+"/"-" o con un doppio clic sull'elemento o usando i tasti sinistra/destra. Il menu "Directory" contiene inoltre due azioni "Chiudi sottodirectory" e "Apri sottodirectory" con le quali puoi collassare o espandere tutte le directory in una sola volta. Se fai doppio clic sopra un file allora la comparazione verrà avviata e apparirà la finestra di verifica file. +L'immagine nella colonna riflette il tipo di file nella prima directory ("A"). Può essere una di queste: + + File normale + Directory normale (Immagine della directory) + Collegamento ad un file (Immagine del file con una freccia di collegamento) + Collegamento ad una directory (Immagine della directory con una freccia di collegamento) + +Se il tipo di file è diverso nelle altre directory allora questo è visibile nelle colonne A/B/C e nella finestra che mostra i dettagli dell'elemento selezionato. Nota che in questo caso nessuna operazione di fusione potrà essere selezionata automaticamente. Quando la fusione partirà l'utente sarà informato di questo problema. + + +Le colonne A/B/C e lo schema dei colori +Come si può vedere, nell'immagine sopra, i colori rosso, verde, giallo e nero sono utilizzati nelle colonne A/B/C. + + Nero: Questo elemento non esiste in questa directory. + Verde: Elemento più recente. + Giallo: Più vecchio del verde, più recente del rosso. + Rosso: Elemento più vecchio. + +Ma per gli elementi che erano identici nella comparazione il loro colore è anche identico anche se l'età non lo è. Le directory sono considerate uguali se tutti gli elementi contenuti sono identici. Essi avranno quindi lo stesso colore. Ma l'età di una directory non è considerata per il proprio colore. L'idea di questo schema di colorazione l'ho avuta da dirdiff. I colori sembrano i colori di un foglio che è verde quando nuovo, diventa giallo successivamente e rosso quando è vecchio. + +La colonna dell'operazione +Dopo la comparazione delle directory KDiff3 valuterà inoltre una proposta per l'operazione di fusione. Questo è visibile nella colonna "Operazione". È possibile modificare l'operazione facendo clic sopra l'operazione che desideri cambiare. Apparirà un piccolo menu che permetterà di selezionare una operazione per quell'elemento (Puoi anche selezionare le operazioni necessarie tramite tastiera. Ctrl+1/2/3/4/Del seleziona rispettivamente, se disponibili, A/B/C/Fondi/Cancella). Questa operazione potrà essere eseguita durante la fusione. Dipende dall'elemento e dalla modalità di fusione in cui ti trovi, quale operazione è disponibile. La modalità di fusione è una delle + + Fusione di tre directory ("A" è considerato la base più vecchia di entrambe). + Fusione di due directory. + Modalità di sincronizzazione directory (attivabile con l'opzione "Sincronizza Directory"). + +Nella fusione di tre directory l'operazione proposta sarà: Se per un elemento ... + + ... le tre directory sono uguali: Copia da C + ... A e C sono uguali ma B no: Copia da B (o se B non esiste, cancella, se esiste, la destinazione) + ... A e B sono uguali ma C no: Copia da C (o se C non esiste, cancella, se esiste, la destinazione) + ... B e C sono uguali ma A no: Copia da C (o se C non esiste, cancella, se esiste, la destinazione) + ... esiste solo A: Eliminare la destinazione (se esiste) + ... esiste solo B: Copia da B + ... esiste solo C: Copia da C + ... A,B e C non sono uguali: Fusione + ... A, B e C non sono dello stesso tipo (es. A è una directory, B è un file): "Errore: Conflitto nel tipo di file". Fino a quando tali elementi esistono la fusione non può essere avviata. + +Nella fusione di due directory l'operazione proposta sarà: Se per un elemento ... + + ... entrambe le directory sono uguali: Copia da B + ... A esiste, ma non B: Copia da A + ... B esiste, ma non A: Copia da B + ... A e B esistono ma non sono uguali: Fusione + ... A e B non sono dello stesso tipo (es. A è una directory, B è un file): "Errore: Conflitto nel tipo di file". Fino a quando tale elemento esiste la fusione delle directory non può essere avviata. + +La modalità di sincronizzazione è attiva se solo due directory e nessuna destinazione è stata specificata e se l'opzione "Sincronizza directory" è attiva. KDiff3 selezionerà quindi una operazione predefinita così entrambe le directory, successivamente, sono uguali. Se per un elemento ... + + ... entrambe le directory sono uguali: Nulla da fare. + ... A esiste, ma non B: Copia A su B + ... B esiste, ma non A: Copia B su A + ... A e B esistono, ma non sono uguali: Fondi e memorizza il risultato in entrambe le directory. (...) + ... A e B non sono dello stesso tipo (es. A è una directory, B è un file): "Errore: Conflitto nel tipo di file". Fino a quando tale elemento esiste la fusione delle directory non può essere avviata. + +Se due directory vengono fuse e l'opzione "Copia il più recente invece di fondere" è selezionata, KDiff3 verificherà le date e proporrà di scegliere il file più recente. Se i file non sono uguali ma hanno data uguale, il risultato dell'operazione sarà "Errore: Le date sono uguali ma i file no." Finché esistono file in questa situazione la fusione delle directory non potrà iniziare. + + +La colonna di stato +Durante la fusione i file saranno processati uno dopo l'altro. La colonna di stato mostrerà "Fatto" per gli elementi correttamente fusi, e altri messaggi se è accaduto qualcosa di inaspettato. Quando una fusione è completa, bisognerebbe fare un'ultima verifica per vedere se gli stati di tutti gli elementi concordano. + + +La colonna delle statistiche +Quando è attiva l'opzione "Analisi completa" per il confronto, KDiff3 mostrerà delle colonne supplementari contenenti il numero di conflitti non risolti, risolti, relativi a spazi non bianchi e relativi a spazi bianchi. La colonna dei conflitti risolti verrà mostrata solo quando si confrontano o fondono tre directory. + + + + + +Avviare una fusione +Puoi inoltre fondere l'elemento attualmente selezionato (file o directory), o tutti gli elementi.Quando hai scelto tutte le tue operazioni (anche in tutte le sottodirectory) puoi far partire la fusione. Attenzione che se non viene specificata una directory di destinazione esplicitamente, allora la destinazione sarà "C" nella modalità di tre directory, "B" nella modalità di due directory, e nella modalità di sincronizzazione sarà "A" e/o "B". Se è stata specificata la directory di destinazione verificare anche che tutti gli elementi di output siano anche nell'albero. Ci sono alcune opzioni che causano l'omissione di certi elementi dalla comparazione e dalla fusione delle directory. Verifica queste opzioni per non avere delle brutte sorprese: + + "Sottodirectory": Se disabilitato, gli elementi nelle sottodirectory non saranno esaminati. + "Categorie"/"Categorie escluse": Include/Esclude elementi dalla verifica + "Escludi file nascosti" + "Elenca solo le differenze": I file verificati in tutte le directory non appaiono nell'albero, così come anche della destinazione. + +(Nell'attuale versione devi eseguire manualmente una riscansione tramite il menu "Directory"->"Riscandisci" solo dopo aver cambiato le opzioni che hanno effetto sulla directory scansionata). Se così sei soddisfatto, il resto è facile. Per fondere tutti gli elementi: Seleziona "Avvia/Continua la funzione directory" nel menu "Directory" o premi il tasto F7 (la scorciatoia). Per fondere solamente l'elemento attualmente selezionato: Seleziona "Avvia operazione per l'elemento corrente" o premi F6. Se per un conflitto nel tipo di file, persiste la non validità dell'operazione scelta per alcuni file, allora apparirà un messaggio che indica elementi, in modo che tu possa selezionare un'operazione valida per essi. Se fondi tutti gli elementi allora apparirà un dialogo, proponendoti le opzioni "Fallo", "Simula" e "Annulla". + + Seleziona "Simula" se vuoi vedere cosa dovrebbe essere fatto senza effettivamente farlo. Una lista dettagliata di tutte le operazioni sarà mostrata. + Altrimenti seleziona "Esegui" per avviare l'effettiva fusione. + +Quindi KDiff3 avvierà l'operazione specifica per tutti gli elementi. Se è richiesta una interazione manuale (fusione di un singolo file), sarà aperta la finestra di fusione (guarda la schermata grande). Quando hai finito con il file, seleziona nuovamente "Avvia/Continua la fusione di directory" o il tasto F7. Se non hai ancora salvato, un dialogo chiederà di farlo. KDiff3 continuerà quindi con il prossimo elemento. Quando KDiff3 incontra un errore, avvertirà di questo e mostrerà un dettagliato stato informativo. Sul fondo di questa lista ci saranno alcuni messaggi di errore i quali dovrebbero aiutare a capire la causa del problema. Quando continui con la fusione (tasto F7) KDiff3 ti chiederà o di riprovare o di trascurare l'elemento che ha causato il problema.Ciò significa che prima di continuare puoi scegliere un'altra operazione o risolvere il problema attraverso altri mezzi. Quando la fusione è completa, KDiff3 informerà quindi tramite un dialogo con messaggio. Se alcuni elementi sono stati fusi individualmente allora KDiff3 ne terrà conto (mentre la corrente sessione di fusione avanza) e non li fonderà nuovamente fino a quando la fusione per tutti gli altri elementi non sarà eseguita. Anche quando la fusione viene saltata o non è stato salvato nulla questi elementi sono considerati completati. Solo quando cambi le operazioni di fusione l'elemento sarà nuovamente fuso. + + +Opzioni per comparare e fondere directory +Le preferenze di KDiff3 (menu"Impostazioni"->"Configura KDiff3") ora ha una sezione chiamata "Fusione directory" con queste opzioni: + + + Sottodirectory:Seleziona se ricercare le directory ricorsivamente. + Tipi di file:Solo i file che corrispondono al tipo saranno messi nell'albero. Più di un tipo può essere specificato utilizzando il punto e virgola ";" come separatore. Caratteri jolly possibili: '*' e '?'. (Es. "*.cpp;*.h"). Predefinito è "*". Le directory non hanno bisogni di tali tipi. + File da escludere:I file e le sottodirectory che corrispondono a questo tipo saranno esclusi dall'albero. Più di uno schema potrebbe essere specificato utilizzando il punto e virgola ";" come separatore. Caratteri jolly validi: '*' e '?'. Il predefinito è "*.orig;*.o". + Utilizza CVS-Ignore:Ignora i file e le directory dovrebbero essere ignorate anche dal CVS. Molti file generati automaticamente sono ignorati dal CVS. Il grosso vantaggio è che questo può essere una directory specificata dal file locale ".cvsignore". (Vedi info:/cvs/cvsignore). + Esamina file e directory nascosti:Su alcuni file system esiste l'attributo "Nascosto". Su altri sistemi il nome del file inizia con il punto "." che significa nascosto. Questa opzione permette di decidere se includere questi file nell'albero oppure no. Normalmente attivo. + Segui i link dei file:Per collegamenti a file: Quando disabilitato, il collegamenti simbolici verranno comparati. Quando abilitati, quindi i file collegati saranno comparati. Normalmente disabilitato. + Segui i link delle directory:Per collegamenti a directory: Quando disabilitato, i collegamenti simbolici saranno comparati. Quando attivo i collegamenti saranno trattati come una directory e saranno scansionate ricorsivamente. (Notare che il programma non verifica se il collegamento è "ricorsivo". Quando per esempio una che contiene un collegamento ad una directory dovrebbe causare un ciclo infinito, e dopo un po' di tempo ciò causerebbe un riempimento dello stack o l'utilizzo di tutta la memoria, causando il blocco del programma). Normalmente disabilitato. + Elenca solo le differenze:Solo gli elementi che non sono uguali in tutte le directory di ingresso saranno elencate e solo e file cambiati sono visibili. Quindi i file che sono uguali in tutte le directory non dovrebbero essere copiati durante una fusione e se la directory di destinazione non contiene il file prima della fusione, potresti perdere alcuni file successivamente. (Questa opzione è probabilmente diversa nelle future versioni). Normalmente disattiva. + + Modalità di confronto dei file: + + Confronto binario:Questa è la modalità di confronto predefinita. + Analisi completa:Opera un analisi approfondita di ogni file e mostra le colonne con le informazioni statistiche (numero di conflitti non risolti, risolti, relativi a spazi non bianchi e relativi a spazi bianchi). L'analisi completa è più lenta di una semplice analisi binaria, e ancora più lenta se applicata a file non di testo. (Indica il "file-antipatterns" appropriato). + Basati sulla data di modifica:Se si comparano directory lunghe in una rete lenta, potrebbe essere più veloce comparare solamente le date di modifica e la dimensione del file. Ma questo aumento di velocità ha il prezzo di un piccola incertezza. Usare questa opzione con cura. Normalmente disattiva. + Basati sulla dimensione:Simile a considerare la data di modifica. Non avviene una reale comparazione. Due file sono considerati uguali se la loro dimensione risulta uguale. Questo è utile quando l'operazione di copia file non ha mantenuto la data di modifica. Usa questa opzione con cautela. Normalmente disabilitata. + + + Sincronizza le directory:Attiva la modalità "Sincronizza" quanto vengono comparate due directory e non è stata indicata la directory di destinazione. In questa modalità le operazioni proposte saranno scelte in modo che entrambe le directory sorgenti sono uguali successivamente. Anche il risultato di fusione sarà scritto in entrambe le directory. Normalmente disabilitato. + Copia il più recente invece di fondere:Invece di fondere l'operazione proposta copierà il sorgente più recente se appena cambiato. (Considerato pericoloso, perché ciò implica la conoscenza, che gli altri file non siano stati ancora modificati. Verifica in ogni caso per essere sicuro). Normalmente disattivata. + File di backup:Se un file o una intera directory è sostituita con un'altra o è cancellata la versione originale sarà rinominata con l'estensione ".orig". Se una vecchia copia con estensione ".orig" esiste già allora questa sarà eliminata senza copia. Questo inoltre interessa la normale fusione di singoli file, non solo nella fusione di directory. Normalmente attivo. + + + +Altre funzioni +Schermo intero/diviso +Normalmente la lista di visualizzazione della fusione delle directory rimane visibile fino il file è comparato e fuso. Con il mouse puoi muovere la barra di divisione che separa la lista dei file dalla finestra di verifica. Se non vuoi questo puoi disabilitare l'opzione "Mostra lo schermo diviso" nel menu "Directory". Sarà quindi possibile usare "Inverti vista" nel menu "Directory" per invertire tra la lista di file e la visualizzazione delle differenze che quindi occuperà tutto lo schermo. + +Comparare o fondere un singolo file +Probabilmente preferiresti un semplice doppio clic del mouse sul file in questione per compararlo. Tuttavia esiste anche una voce nel menu "Directory". È possibile anche fondere direttamente un singolo file, senza avviare l'operazione di fusione directory tramite "Fondi singolo file" nel menu "Directory". Successivamente al salvataggio lo stato sarà impostato a fatto e il file non sarà nuovamente fuso se una fusione di directory è avviata. Ma notare che queste informazioni di stato saranno perse quando si ritorna alla directory scandita: menu "Directory": "Riscandire" + + +
+ + +Argomenti vari + +Trasparenza di rete con KIO +Gli slave KIO +KDE supporta la trasparenza di rete tramite gli slave KIO. KDiff3 utilizza questo metodo per leggere i file in ingresso e per la scansione delle directory. Questo significa che è possibile specificare file e directory in locale o in remoto tramite URL. Esempio: +kdiff3 test.cpp ftp://ftp.faraway.org/test.cpp + kdiff3 tar:/home/hacker/archive.tar.gz/dir ./dir + + +La prima riga confronta un file locale con un file su un server FTP. La seconda riga confronta una directory all'interno di un un archivio compresso con una directory locale. Altri slave KIO interessanti sono: + +File da WWW (http:), +File da FTP (ftp:), +Trasferimento file crittografato (fish:, sftp:), +Windows-resources (smb:), +File locali (file:), + +Altre cose che sono possibili, ma probabilmente meno utili sono: + +Man-pages (man:), +Info-pages (info:), + + + +Come scrivere gli URL +Un URL ha una sintassi diversa se comparata con un percorso per i file e le directory locali. Dovrebbe essere considerate alcune cose: + +Un percorso può essere relativo e può contenere "." o "..". Quando non è possibile con URL che sono sempre assoluti. I caratteri speciali devono essere scritti con l'"escaping". ("#"->"%23", spazio->"%20", ecc.) Es. Un file con nome "/#pippo#" dovrebbe avere l'URL "file:/%23pippo%23". Quando un URL non funziona come ci si aspettava, prova ad aprirlo prima con Konqueror. + + + + +Possibilità di KIO-Slaves +La trasparenza della rete ha uno svantaggio. Non tutte le risorse hanno le stesse possibilità. Alcune volte questo è causato dal file system del server, altre volte dal protocollo. Di seguito una breve lista delle limitazioni: + +Alcune volte i collegamenti non sono supportati. O non c'è modo di distinguere se il collegamento punti ad un file o ad una directory; spesso si assume a file. (ftp:, sftp:). Dimensione del file non sempre determinabile. Supporto limitato per permessi. Non è possibile cambiareare permessi o date di modifica, altrimenti i permessi e la data della copia sarebbero diversi dall'originale. (Vedere l'opzione "Basati sulla dimensione"). Queste operazioni sono permesse solo per i file locali. + + + + + +Usare &kdiff3; come un KPart +&kdiff3; è un KPart. Attualmente esso implementa l'interfaccia KParts::ReadOnlyPart. In KDevelop l'uso principale è come visualizzatore di differenze. KDevelop fa sempre partire prima il visualizzatore delle differenze interno. Per richiamare KDiff3 premi il tasto destro del mouse nella finestra delle differenze e seleziona "Mostra nel KDiff3Part" dal menu contestuale. KDiff3 richiede normalmente due file completi in ingresso. Quando usato come componente KDiff3 assumerà che il file di input sia un file di patch con un formato indefinito. KDiff3 recupererà il nome del file originale dal file patch. Almeno uno dei due file deve essere disponibile. KDiff3 invocherà quindi patch per ricreare il secondo file. In Konqueror puoi selezionare un file di patch e selezionare dal menu contestuale "Preview in"-"KDiff3Part". Attenzione che questo non funzionerà se nessun file originale è disponibile e non è sicuro se i file originali sono stati modificati prima della generazione del file di patch. Quando avviato come componente KDiff3 ha due finestre di comparazione e una piccola barra degli strumenti e un piccolo menu. La fusione o la comparazione delle directory non sono quindi supportate. + + + + +Domande e risposte +&reporting.bugs; &updating.documentation; + +Perché il nome "KDiff3"? Gli strumenti "KDiff" e "KDiff2" (ora "Kompare") esistono già. Inoltre "KDiff3" dovrebbe suggerire che può fondere come il programma "diff3" presente nella collezione Diff-Tool. + +Perché ho registrato sotto GPL? Utilizzando programmi GPL da molto tempo ed ho imparato molto guardando altri sorgenti. Così questo è il mio "Grazie" a tutti i programmatori che a loro volta hanno fatto lo stesso. + +Mancano alcuni pulsanti e funzioni. Cos'è errato? Si sta compilando dai sorgenti, ma probabilmente non è stato correttamente specificato KDE-prefix con configure. Se non specificato configure installerà in usr/local, ma in questa maniera KDE non potrà trovare il file delle informazioni di risorse dell'interfaccia utente (es: kdiff3ui.rc).Il file README contiene molte informazioni su come correggere il prefisso. + +Spesso le righe che sono simili ma non uguali appaiono dopo le altre ma alcune volte no. Perché? Le righe che presentano differenze per soli spazi bianchi sono trattate inizialmente come "uguali", mentre altre differenze porteranno al risultato di righe "differenti". Se righe simili appaiono dopo delle altre è una coincidenza ma questo fortunatamente è spesso il caso. + +Perché tutti i conflitti devono essere risolti prima salvare il risultato della fusione? Per ogni sezione diversa o uguale l'editor, nella finestra del risultato di fusione, ricorda dove queste iniziano e finiscono. Questo è necessario in quanto i conflitti possono essere risolti manualmente semplicemente selezionando il pulsante del sorgente (A/B o C). Questa informazione saranno perse successivamente al salvataggio del testo in quanto è troppo oneroso creare un file specializzato al mantenimento di tutte le informazioni per il ripristino. + +Perché l'editor nella finestra del risultato di fusione non presenta la funzione di annulla modifica? Questa funzione richiedeva troppo sforzo. È sempre possibile ripristinare la versione facendo clic il pulsante rispettivo (A/B o C). + +Quando rimuovo parte del testo, appare improvvisamente "<No src line>" e non può essere eliminato. Cosa significa e come può essere rimosso? Per ogni sezione diversa o uguale l'editor, nella finestra di risultato della fusione, ricorda dove inizia e dove finisce. "<No src line>"significa che non è rimasto nulla nella sezione, nemmeno un carattere di nuova riga. Questo può capitare sia nella fusione automatica che in quella manuale. Questo non è un problema, poiché non apparirà nel file salvato. Se vuoi tornare al file originale è sufficiente selezionare la sezione (fai un clic sulla colonna di sommario con il tasto sinistro del mouse) quindi fai clic sul pulsante del sorgente con il contenuto voluto (A/B e C). + +Perché KDiff3 non supporta l'evidenziazione della sintassi? KDiff3 già usa molti colori per le differenti evidenziazioni e molte di queste potrebbero essere confuse. Per questi scopi usa un altro editor. + +Qui si possono trovare molte informazioni, ma la tua domanda non ha ancora una risposta? Sei pregato di inviarmi le tue domanda. Ogni commento sarà apprezzato. + + + + + + +Riconoscimenti e Licenza + +&kdiff3; - Strumento per comparare e fondere file e directory +Copyright sul programma 2002-2005 Joachim Eibl joachim.eibl at gmx.de +Sono ben accette nuove idee e segnalazioni di errori da colleghi e da tutte le persone della grande rete WWW. Grazie! + +Copyright della documentazione © 2002-2005 Joachim Eibl joachim.eibl at gmx.de + +Traduzione 2004: Stelvio Rosset srosset@satelgroup.netAggiornamento e revisione della traduzione (2005): AndreaCelli a.celli@caltanet.it +&underFDL; &underGPL; + + +Installazione + + +Come procurarsi &kdiff3; + +È possibile scaricare la versione più recente di KDiff3 da http://kdiff3.sourceforge.net. KDiff3 è disponibile anche per altre piattaforme. Per maggiori dettagli consultare la homepage. + + + + + +Requisiti + +Per sfruttare tutte le potenzialità di &kdiff3; serve &kde;3.1 o successivo. Per informazioni riguardanti KDiff3 su altre piattaforme sprovviste di KDE si rimanda a homepage. La lista dei cambiamenti la puoi trovare sul sito http://kdiff3.sourceforge.net/ChangeLog oppure nel file "ChangeLog" del pacchetto dei sorgenti. + + + +Compilazione ed installazione + +Al fine di compilare ed installare &kdiff3; sul tuo sistema con KDE, posizionati sulla directory base della distribuzione &kdiff3; e digita: + +% ./configure --prefix=kde-dir +% make +% make install + +kde-dir specifica la directory contenente KDE nel tuo sistema. Se non sei sicuro, leggi il file README per maggiori dettagli. +Dato che &kdiff3; utilizza autoconf e automake non dovresti avere problemi nel compilarlo. Se invece pensi di aver trovato un problema sei pregato di segnalarlo alla &kde; mailing list. + + + + + +&documentation.index; +
+ + diff --git a/doc/it/iteminfo.png b/doc/it/iteminfo.png new file mode 100644 index 0000000..0b81443 Binary files /dev/null and b/doc/it/iteminfo.png differ diff --git a/doc/it/letter_by_letter.png b/doc/it/letter_by_letter.png new file mode 100644 index 0000000..8ddd48a Binary files /dev/null and b/doc/it/letter_by_letter.png differ diff --git a/doc/it/merge_current.png b/doc/it/merge_current.png new file mode 100644 index 0000000..3f2e341 Binary files /dev/null and b/doc/it/merge_current.png differ diff --git a/doc/it/new.png b/doc/it/new.png new file mode 100644 index 0000000..df3fd25 Binary files /dev/null and b/doc/it/new.png differ diff --git a/doc/it/open_dialog.png b/doc/it/open_dialog.png new file mode 100644 index 0000000..029f8d4 Binary files /dev/null and b/doc/it/open_dialog.png differ diff --git a/doc/it/screenshot_diff.png b/doc/it/screenshot_diff.png new file mode 100644 index 0000000..d2865d5 Binary files /dev/null and b/doc/it/screenshot_diff.png differ diff --git a/doc/it/screenshot_merge.png b/doc/it/screenshot_merge.png new file mode 100644 index 0000000..1eb935b Binary files /dev/null and b/doc/it/screenshot_merge.png differ diff --git a/doc/it/triple_diff.png b/doc/it/triple_diff.png new file mode 100644 index 0000000..c635d14 Binary files /dev/null and b/doc/it/triple_diff.png differ diff --git a/doc/it/white_space.png b/doc/it/white_space.png new file mode 100644 index 0000000..e40a1c7 Binary files /dev/null and b/doc/it/white_space.png differ diff --git a/doc/nl/Makefile.am b/doc/nl/Makefile.am new file mode 100644 index 0000000..31b67c4 --- /dev/null +++ b/doc/nl/Makefile.am @@ -0,0 +1,4 @@ +KDE_DOCS = kdiff3 +KDE_LANG = nl + + diff --git a/doc/nl/dirbrowser.png b/doc/nl/dirbrowser.png new file mode 100644 index 0000000..d3c63b2 Binary files /dev/null and b/doc/nl/dirbrowser.png differ diff --git a/doc/nl/dirmergebig.png b/doc/nl/dirmergebig.png new file mode 100644 index 0000000..b26b65c Binary files /dev/null and b/doc/nl/dirmergebig.png differ diff --git a/doc/nl/index.docbook b/doc/nl/index.docbook new file mode 100644 index 0000000..8f3a294 --- /dev/null +++ b/doc/nl/index.docbook @@ -0,0 +1,2407 @@ + +KDiff3"> + + + + +]> + + + + + + +Het handboek van &kdiff3; + + +Joachim Eibl
joachim.eibl at gmx.de +
+
+
+ +&Sander.Koning; + + +2002-2005 +Joachim Eibl + + + +&FDLNotice; + + + +2005-01-30 +0.9.87 + + + + +&kdiff3; is een hulpmiddel om bestanden en mappen te vergelijken en samen te voegen dat +twee of drie tekstbestanden of mappen vergelijkt en samenvoegt, +de verschillen regel-voor-regel en teken-voor-teken(!) aangeeft, +een automatische samenvoegfunctie biedt, +een editor heeft voor het comfortabel oplossen van samenvoegconflicten, +netwerktransparantie via KIO biedt, +opties heeft voor het accentueren of verbergen van wijzigingen in witruimte of commentaar, +Unicode, UTF-8 en andere bestandscoderingen ondersteunt. + +Dit document beschrijft KDiff3 versie 0.9.87. + + + + + +KDE +kdeextragear +kdiff3 +verschil +samenvoegen +CVS +drievoudig verschil +vergelijken +bestanden +mappen +versiebeheer +drievoudig samenvoegen +verschillen in regels +synchroniseren +kpart +kio +netwerktransparant +editor +witruimte +commentaar + + +
+ +Inleiding +Alweer een front-end voor diff? +Er bestaan diverse grafische hulpmiddelen voor diff. Waarom KDiff3 gebruiken? Laat me uitleggen waarom ik het geschreven heb. KDiff3 begon omdat ik een moeilijke samenvoegoperatie moest doen. Samenvoegen is nodig als diverse mensen aan dezelfde bestanden in een project werken. Een samenvoeging kan enigszins geautomatiseerd worden, als het samenvoeghulpmiddel daartoe niet alleen de nieuwe, gewijzigde bestanden heeft ("takken") maar ook het originele bestand ("basis"). Het samenvoeghulpmiddel kiest automatisch een verandering die alleen in één tak is gedaan. Als diverse mensen dezelfde regels veranderen, detecteert het samenvoeghulpmiddel een conflict dat handmatig opgelost moet worden. De samenvoeging was moeilijk omdat één van de helpers veel dingen had gewijzigd en de insprong op veel plaatsen had verbeterd. Een andere helper had ook veel tekst in hetzelfde bestand veranderd, hetgeen in diverse samenvoegconflicten resulteerde. Het hulpmiddel dat ik toen gebruikte toonde alleen de gewijzigde regels, maar niet wat er in die regels was gewijzigd. En er was geen informatie over of alleen de insprong gewijzigd was. Het samenvoegen was een kleine ramp. Dus dat was het begin. De eerste versie kon verschillen binnen een regel en verschillen in witruimte tonen. Later werden veel andere mogelijkheden toegevoegd om het nut te vergroten. Als u bijvoorbeeld snel wat tekst wilt vergelijken, kunt u het naar het klembord kopiëren en in een van de vergelijkingsvensters plakken. Een optie die veel werk vereiste was het vergelijken en samenvoegen van mappen, dat het programma bijna in een bestandsverkenner veranderde. Ik hoop dat KDiff3 ook voor u werkt. Veel plezier! Joachim Eibl (2003) + + +Schermafdrukken en mogelijkheden +Deze schermafdruk toont het verschil tussen twee tekstbestanden +(met een vroege versie van KDiff3): + + + + +3-voudig samenvoegen wordt volledig ondersteunt. Dit is nuttig als twee mensen code onafhankelijk wijzigen. Het originele bestand (de basis) wordt gebruikt om KDiff3 te helpen bij het automatisch selecteren van de goede wijzigingen. In de samenvoeg-editor onder de verschillenvensters kunt u conflicten oplossen, terwijl u de uitvoer ziet die dat oplevert. U kunt zelfs de uitvoer wijzigen. Deze schermafdruk toont het samenvoegen van drie invoerbestanden: + + + + + +KDiff3 helpt u ook bij het vergelijken en samenvoegen van complete mappen. Deze schermafdruk toont KDiff3 gedurende het samenvoegen van een map. + + + + + + +Meer mogelijkheden +Verschillen regel-voor-regel en teken-voor-teken tonen +Door de mogelijkheden van een grafisch kleurenbeeldscherm te gebruiken toont KDiff3 u precies wat het verschil is. U zult dit prettig vinden als u veel code moet doornemen. + + + + + +Verschillen in witruimte in één oogopslag zien +Spaties en tabs die verschillen worden getoond. Als regels alleen in de hoeveelheid witruimte verschillen kunt u dit in één oogopslag zien in de overzichtskolom aan de linkerkant. (Geen zorgen meer als mensen de insprong veranderen.) + + + + + +Drievoudig verschil +Drie bestanden analyseren en zien waar ze verschillen. De vensters links, midden en rechts heten A, B en C en zijn respectievelijk blauw, groen en magenta gekleurd. Als één bestand hetzelfde is en één bestand verschilt op een regel geeft de kleur aan welk bestand verschilt. De rode kleur geeft aan dat beide andere bestanden verschillen. + + + + + +Comfortabel samenvoegen van twee of meer invoerbestanden +U kunt KDiff3 gebruiken om twee of drie invoerbestanden samen te voegen en het samenvoegen zo veel mogelijk automatisch te laten verlopen. Het resultaat wordt getoond in een bewerkbaar venster waarin de meeste conflicten met een enkele muisklik opgelost kunnen worden: kies de knoppen A/B/C uit de knoppenbalk om de bron te kiezen die gebruikt moet worden. U kunt hier ook meer dan één bron kiezen. Aangezien dit uitvoervenster een editor is, kunnen ook conflicten die verdere correctie vereisen hier uitgevoerd worden zonder een extra hulpmiddel. + + +En... + + Snelle navigatie via knoppen. + Een muisklik in een samenvattingskolom synchroniseert alle vensters om dezelfde positie te laten zien. + Selecteer en kopieer vanuit elk venster en plak het in het samengevoegde resultaatvenster. + Een overzichtskolom die toont waar de wijzigingen en conflicten zijn. + De kleuren zijn aan te passen aan uw specifieke voorkeuren. + Aanpasbare tabgrootte. + Een optie om spaties in plaats van tabs in te voegen. + Bestanden comfortabel openen via een dialoogvenster of bestanden opgeven op de opdrachtregel. + Zoeken naar tekenreeksen in alle tekstvensters. Zoek (Ctrl-F) en Volgende zoeken (F3). + De regelnummers voor elke regel tonen. + Het klembord plakken of tekst in een verschil-invoervenster slepen. + Netwerktransparantie via KIO. + Kan gebruikt worden als verschillentoner in KDevelop 3. + Regelafbreking voor lange regels. + Ondersteuning voor Unicode, UTF-8 en andere coderingen. + Ondersteuning voor talen die rechts-naar-links schrijven. + ... + + + + + +Documentatie voor bestandsvergelijking en -samenvoeging + +Opdrachtregel-opties + +2 bestanden vergelijken: +kdiff3 bestand1 bestand2 + + + +2 bestanden samenvoegen: +kdiff3 bestand1 bestand2 -m + kdiff3 bestand1 bestand2 -o uitvoerbestand + + + +3 bestanden vergelijken: +kdiff3 bestand1 bestand2 bestand3 + + + +3 bestanden samenvoegen: +kdiff3 bestand1 bestand2 bestand3 -m + kdiff3 bestand1 bestand2 bestand3 -o uitvoerbestand + +Merk op dat bestand1 als basisbestand voor bestand2 en bestand3 gebruikt zal worden. + + +Speciaal geval: bestanden met dezelfde naam +Als alle bestanden dezelfde naam hebben maar zich in verschillende mappen bevinden, kunt u typewerk besparen door de bestandsnaam alleen voor het eerste bestand op te geven. Bijvoorbeeld: +kdiff3 map1/bestandsnaam map2 map3 + + + +Opdrachtregel voor het vergelijken of samenvoegen van mappen: +Dit lijkt er erg op, maar gaat nu over mappen. +kdiff3 map1 map2 + kdiff3 map1 map2 -o doelmap + kdiff3 map1 map2 map3 + kdiff3 map1 map2 map3 -o doelmap + +Voor het vergelijken en samenvoegen van mappen kunt u hier verder lezen. + + +Voor meer informatie over opdrachtregel-opties gebruikt u: +kdiff3 --help +Opties: + -m, --merge De invoer samenvoegen. + -b, --base bestand Expliciet basisbestand (voor compatibiliteit). + -o, --output bestand Uitvoerbestand. Impliceert -m. Bijv: -o nieuw.txt + --out bestand Uitvoerbestand. Voor compatibiliteit met bepaalde programma's.) + --auto Geen GUI als alle conflicten automatisch te doen zijn. (Vereist -o) + --qall Los conflicten niet automatisch op. (Voor compatibiliteit...) + --L1 alias1 Zichtbare naamvervanging voor invoerbestand1 (basis). + --L2 alias2 Zichtbare naamvervanging voor invoerbestand 2. + --L3 alias3 Zichtbare naamvervanging voor invoerbestand 3. + -L, --fname alias Alternatieve zichtbare naamvervanging. Eenmaal voor elke invoer opgeven.. + -u Geen effect. Voor compatibiliteit met bepaalde programma's. + + + + + +Het venster "Openen" +Aangezien veel bestanden geselecteerd moeten kunnen worden, heeft het programma een speciaal dialoogvenster hiervoor: + + + +In dit dialoogvenster kunt u de bestandsnamen met de hand wijzigen, een bestand via de bladeraar kiezen ("Bestand...") of recente bestanden via de afrolmenu's kiezen. Als u het dialoogvenster opnieuw opent, blijven de huidige bestandsnamen staan. Het derde invoerbestand is niet verplicht. Als het item bij "C" leeg blijft, wordt slechts een verschillenanalyse op twee bestanden uitgevoerd. U kunt ook een map kiezen met "Map...". Als voor A een map opgegeven is wordt een vergelijking/samenvoeging op mappen gestart. Als A een bestand opgeeft maar B, C of de uitvoer een map opgeeft, gebruikt KDiff3 de bestandsnaam van A in de opgegeven mappen. Als "Samenvoegen" geselecteerd is, kunt u de regel "Uitvoer" bewerken. Maar het is niet nodig om direct de uitvoerbestandsnaam op te geven. U kunt hiermee ook wachten tot bij het opslaan. De knop "Instellen..." opent het optievenster, waarmee u de opties kunt instellen voordat de analyse gestart wordt. + + +Invoer plakken en slepen +Soms wilt u tekstdelen die niet in een eigen bestand staan vergelijken. KDiff3 biedt u ook de mogelijkheid tekst vanaf het klembord in een vergelijkingsvenster te plakken. De vergelijkingsanalyse begint dan direct. In het venster "Openen" hoeft u dan geen bestanden op te geven, sluit dit gewoon met "Annuleren". U kunt ook slepen en neerzetten: Sleep een bestand uit een bestandsbeheerder of geselecteerde tekst uit een editor en zet deze neer in een verschillenvenster. Wat is het idee? Soms bevat een bestand twee gelijksoortige functies, maar bekijken hoe gelijk ze werkelijk zijn is een grote moeite als u eerst twee bestanden moet maken en deze dan moet laden. Nu kunt u eenvoudigweg de relevante secties kopiëren, plakken, en vergelijken. Merk op: Momenteel kunt u niets uit KDiff3 slepen. Alleen slepen naar de vergelijkingsinvoer wordt ondersteund. Waarschuwing: Sommige editors interpreteren slepen en neerzetten in een ander programma nog steeds als knippen (in plaats van kopiëren) en plakken. Uw originele gegevens kunnen daardoor verloren gaan. + + +De informatie in de invoervensters interpreteren + + + +Bovenaan elk tekstvenster staat de "inforegel". De inforegels van de invoervensters bevatten een letter "A", "B" of "C", de bestandsnaam en het regelnummer van de eerste zichtbare regel in het venster. (Merk op dat venster "C" optioneel is.) Elke inforegel verschijnt in een aparte kleur. (Als de paden te lang zijn om te passen, kunt u de muis op de inforegel plaatsen voor een hulpballon die de complete naam toont.) De drie invoervensters krijgen de letters "A", "B" en "C". "A" heeft de kleur blauw, "B" is groen en "C" is magenta. (Dit zijn de standaardkleuren, u kunt ze wijzigen via het menu Instellingen.) Als er een verschil opgemerkt wordt, toont de kleur welk invoerbestand er verschilt. Als beide andere invoerbestanden verschillen is de kleur die dit aangeeft standaard rood ("Conflictkleur" in Instellingen). Dit kleurenschema is vooral handig in het geval van drie invoerbestanden, hetgeen u zult zien in de volgende sectie (Samenvoegen). Links van elke tekst staat een "samenvattingskolom". Als er verschillen op een regel opgetreden zijn geeft deze kolom de respectievelijke kleur aan. Voor een verschil alleen in witruimte is de samenvatting geblokt. Voor programmeertalen waar witruimte niet zo belangrijk is, is dit nuttig om te zien of er iets belangrijks veranderd is. (In C/C++ is witruimte alleen interessant binnen tekenreeksen, commentaar, voor de preprocessor, en sommige zeer uitzonderlijke situaties.) De verticale lijn die de overzichtskolom en de tekst scheidt wordt onderbroken als het invoerbestand daar geen regels heeft. Als regelafbreking ingeschakeld is, wordt deze lijn gestippeld voor afgebroken regels. Aan de rechterkant is een "overzichts"-kolom zichtbaar links van de verticale schuifbalk. Deze toont gecomprimeerd de samenvattingskolom van invoer "A". Alle verschillen en conflicten zijn in één oogopslag zichtbaar. Als er slechts twee invoervensters gebruikt worden, verschijnen alle verschillen in rood omdat elk verschil dan een conflict is. Een zwarte rechtoek omrandt het zichbare deel van de invoer. Voor zeer lange invoerbestanden, waarbij het aantal regels groter is dan de hoogte van de overzichtskolom in pixesl, delen diverse invoerregels één overzichtsregel. Een conflict heeft dan topprioriteit boven eenvoudige verschillen, die prioriteit hebben boven geen wijziging, zodat geen verschil of conflict verloren gaat. Door in deze overzichtskolom te klikken wordt de bijbehorende tekst getoond. + + + +Samenvoegen en het editorvenster voor samenvoegingsuitvoer + + + +Het editorvenster voor de samenvoegingsuitvoer (onder de verschil-invoervensters) heeft ook een inforegel bovenaan met "Uitvoer:", de bestandsnaam en "[gewijzigd]" als u iets bewerkt hebt. Meestal bevat dit wat tekst door de automatische samenvoegingsfunctie, maar vaak ook conflicten. !!! Opslaan is niet mogelijk todat alle conflicten opgelost zijn !!! (Gebruik de knoppen "Ga naar vorig/volgend onopgelost conflict" om de overgebleven conflicten te vinden.) Met maar twee invoerbestanden is elk verschil ook een conflict dat handmatig opgelost moet worden. Met drie invoerbestanden wordt het eerste bestand als basis gebruikt, en het tweede en derde bestand bevatten wijzigingen. Als op een bepaalde regel alleen invoer B of C gewijzigd is, maar niet beide, wordt de veranderde bron gekozen. Alleen als B en C op dezelfde regel veranderd zijn, detecteert het hulpmiddel een conflict dat handmatig opgelost moet worden. Als B en C hetzelfde zijn, maar niet hetzelfde als A, wordt C gekozen. Het editorvenster voor samenvoegingsuitvoer heeft ook links een samenvattingskolom. Deze toont de letter van de invoer waaruit een regel geselecteerd is of niets als alledrie de bronnen gelijk waren op die regel. Bij conflicten wordt een vraagteken "?" getoond en de regel toont dan "<Samenvoegconflict>", het geheel in rood. Omdat conflicten regel voor regel oplossen erg lang duurt, worden de regels gegroepeerd in groepen die dezelfde verschil- en conflictkenmerken hebben, Alleen-witruimte-conflicten worden gescheiden van niet-witruimte-conflicten om het samenvoegen van bestanden waarin de insprong gewijzigd is, gemakkelijker te maken. Als u met de linkermuisknop in een samenvattingskolom klikt, wordt de groep die bij die regel hoort geselelecteerd in alle vensters en wordt het begin van de groep getoond. (Dit kan een plaatsveranderind in de vensters veroorzaken als het begin van de groep niet zichtbaar is.) Deze groep wordt dan de "huidige groep", en wordt geaccentueerd met de achtergrond voor "Huidig bereik". Verder verschijnt een zwarte balk links van de tekst. Merk op dat de invoerselector de letters "A", "B" en "C" in de knoppenbalk bevat. Als u op een knop in de invoerselector klikt, worden de regels van die invoer toegevoegd aan het eind van de geselecteerde groep als de groep die bron nog niet bevatte. Anders worden de regels uit die invoer verwijderd. Daarnaast kunt u direct elke regel bewerken. De samenvattingskolom toont een "m" voor elke regel die gewijzigd is. Soms verschijnt de tekst "<Geen regel in de bron>" in een regel als die ofwel door automatisch samenvoegen ofwel door bewerken verwijderd is, en er geen andere regels in die groep overblijven. Dit is een plaatshouder voor de groep voor als u zich bedenkt en weer een bron aangeeft. De tekst verschijnt niet in het opgeslagen bestand of in gekopieerde of geplakte selecties. De tekst " Samenvoegconflict<" verschijnt in het klembord als u tekst met zo'n regel kopieert en plakt. Maar wees alsnog voorzichtig. < Het normale samenvoegen begint door het automatisch oplossen van eenvoudige conflicten. Maar het menu "Samenvoegen" biedt wat acties voor andere veelvoorkomende zaken. Als u dezelfde bron voor de meeste conflicten wilt gebruiken, kunt u "A", "B" of "C" overal kiezen, of alleen voor de overgebleven niet-opgeloste conflicten, of voor de niet-opgeloste witruimteconflicten. Als u elk apart onderscheid zelf wilt bepalen, kunt u "Elk onderscheid maken bij conflicten" instellen. Of als u terug wilt gaan naar de automatische keuzes van KDiff3 kiest u "Eenvoudige conflicten automatisch oplossen". KDiff3 herstart het samenvoegen dan. Voor acties die uw vorige wijzigingen aanpassen vraagt KDiff3 om uw instemming alvorens door te gaan. Merk op: als u één van de bronnen voor onopgeloste witruimte-conflicten kiest, en de optie "Getallen negeren" of "C/C++ commentaar negeren" is gekozen, dan worden wijzigingen in getallen respectievelijk commentaar ook als witruimte behandeld. + + +Navigatie en bewerken +Veel navigatie doet u met de schuifbalken en de muis maar u kunt ook met de toetsen navigeren. Als u in een venster klikt, kunt u de pijltoesen links, rechts, omhoog en omlaag en Page Up, Page Down, Home, End, Ctrl-Home en Ctrl-End gebruiken als in andere programma's. De overzichtskolom naast de verticale schuifbalk van de invoerbestanden kan ook voor navigatie gebruikt worden door erin te klikken. U kunt ook een wielmuis gebruiken om omhoog en omlaag te bladeren. In de uitvoereditor kunt u ook de andere toetsen gebruiken om de tekst te bewerken. U kunt tussen invoeg- en overschrijfmodus wisselen met de toets Insert. (Standaard is invoegmodus.) Een klik met de linker muisknop in een samenvattingskolom synchroniseert alle vensters zodat ze het begin van dezelfde groep regels tonen (zoals uitgelegd in de sectie Samenvoegen). De knoppenbalk heeft ook zeven navigatieknoppen waarmee u naar het huidige/eerste/laatste verschil kunt springen, naar het volgende/vorige verschil (Ctrl-omlaag/Ctrl-omhoog), naar het volgende/vorige conflict (Ctrl-PageDown/Ctrl-PageUp), of naar het volgende/vorige onopgeloste conflict. Merk op dat voor KDiff3 een "conflict" dat niet automatisch werd opgelost bij het begin van het samenvoegen een "conflict" blijft, zelfs als het wordt opgelost. Vandaar de noodzaak om "onopgeloste conflicten" te onderscheiden. Er is ook een knop "Automatisch naar het volgende onopgeloste conflict gaan" (Automatisch doorgaan). Als u dit inschakelt, springt KDiff3 automatisch naar het volgende onopgeloste conflict, zodra u een bron hebt geselecteerd. Dit kan helpen als u altijd slechts één bron wilt kiezen. Als u beide bronnen nodig hebt, of als u na het kiezen nog wilt wijzigen, wilt u deze optie waarschijnlijk uitschakelen. Voordat u naar het volgende onopgeloste conflict gaat, toont KDiff3 u korte tijd het effect van uw keuze. Deze tijd is instelbaar in de Verschil- en samenvoeginstellingen: de tijd voor "Automatisch doorgaan" is instelbaar in milliseconden tussen 0 en 2000. Tip: Niet te veel klikken? Kies een korte tijdsduur voor Automatisch doorgaan en de sneltoetsen Ctrl-1/2/3 om A/B/C voor conflicten te selecteren. + + +Selecteren, kopiëren en plakken +De invoervensters tonen geen cursor, dus selecteren moet gedaan worden met de muis door met de linkermuisknop aan het begin te klikken, de muisknop ingedrukt te houden en naar het eind te bewegen, waar u de muisknop weer loslaat. U kunt ook een woord selecteren door erop te dubbelklikken. In de samenvoegeditor kunt u ook met het toetsenbord selecteren met Shift en de pijltoetsen. Om naar het klembord te kopiëren moet u de knop "Kopiëren" kiezen (Ctrl-C of Ctrl-Insert). Maar er bestaat een optie "Selectie automatisch kopiëren". Als deze is ingeschakeld, wordt geselecteerde tekst direct naar het klembord gekopieerd. Let er hierbij wel op dat bestaande inhoud van uw klembord niet per ongeluk ongewenst verwijderd wordt. "Knippen" (Ctrl-X of Shift-Delete) kopieert de geselecteerde tekst naar het klembord en verwijdert deze; "Plakken" (Ctrl-V of Shift-Insert) voegt de tekst op het klembord in op de cursorpositie of over de huidige selectie. + + +Opslaan +Opslaan is alleen toegestaan als alle conflicten opgelost zijn. Als het bestand al bestaat en de optie "Reservekopie" ingeschakeld is, wordt het bestaande bestand hernoemd met een extensie ".orig", een bestaande reservekopie wordt hierbij overschreven. Als u afsluit of een andere verschillenanalyse start en de gegevens nog niet zijn opgeslagen, vraagt KDiff3 u of u wilt opslaan, annuleren of doorgaan zonder opslaan. (KDiff3 vangt geen signalen. Dus als u KDiff3 "kill"t gaan uw gegevens verloren.) Regeleindes worden opgeslagen volgens de normale methode op het onderliggende besturingssysteem. Voor Unix-systemen eindigt elke regel met een 'linefeed' "\n", terwijl op Win32-systemen elke regel met een 'carriage return' en een 'linefeed' eindigt "\r\n". KDiff3 bewaart de regeleindes van de invoerbestanden niet, hetgeen ook betekent dat u KDiff3 niet met binaire bestanden moet gebruiken. + + +Tekenreeksen zoeken +U kunt naar tekenreeksen zoeken in elk tekstvenster van KDiff3. De opdracht "Zoeken..." (Ctrl-F) in het menu Bewerken opent een venster waarin u de te zoeken tekenreeks kunt opgeven. U kunt ook de vensters opgeven waarin gezocht moet worden. Zoeken begint altijd bovenaan. Gebruik de opdracht "Volgende zoeken" (F3) om naar het volgende voorkomen door te gaan. Als u meerdere vensters opgeeft om in te zoeken wordt het eerste venster van boven naar beneden doorzocht, voordat het volgende venster weer van bovenaf wordt doorzocht, enzovoort. + + + +Opties +Opties en de recente-bestandenlijst worden opgeslagen als u het programma afsluit, en opnieuw ingelezen als u het start. (Instellingen -> KDiff3 instellen...) +Lettertype +Kies een lettertype met vaste breedte. (Op sommige systemen toont dit dialoogvenster ook lettertypes met variabele breedte, maar die dient u liever niet te gebruiken.) + + Cursief lettertype voor onderscheiden:Als u dit kiest, worden tekstverschillen getoond met de cursieve versie van het geselecteerde lettertype. Als het lettertype geen cursief ondersteunt, doet dit niets. + + + + +Kleuren + + Voorgrondkleur:Gewoonlijk zwart. + Achtergrondkleur:Gewoonlijk wit. + Achtergrondkleur bij verschillen:Gewoonlijk lichtgrijs. + Kleur voor A:Gewoonlijk donkerblauw. + Kleur voor B:Gewoonlijk donkergroen. + Kleur voor C:Gewoonlijk donkermagenta. + Kleur voor conflicten:Gewoonlijk rood. + Achtergrondkleur voor huidig bereik:Gewoonlijk lichtgeel. + Achtergrondkleur voor verschillen in huidig bereik:Gewoonlijk donkergeel. + +Op systemen met slechts 16 of 256 kleuren zijn sommige kleuren niet beschikbaar in pure vorm. Op zulke systemen zorgt de knop "Standaard" voor een pure kleur. + + +Editor-instellingen + + Tab voegt spaties in:Als dit uitgeschakeld is en u de toets Tab indrukt, wordt een tab-teken ingevoegd, anders het aangegeven aantal spaties. + Tabgrootte:Kan ingesteld worden voor uw specifieke wensen. Standaard is 8. + Automatisch inspringen:Als u Enter drukt wordt de insprong van de vorige regel gebruikt voor de nieuwe. + Automatische kopieerselectie:Elke selectie wordt automatisch naar het klembord gekopieerd, u hoeft niet expliciet te kopiëren. + Regeleinde:Bij het opslaan kunt u opgeven welk regeleinde u verkiest. De standaardinstelling is de gebruikelijke keuze voor het gebruikte besturingssysteem. + Locale-codering gebruiken:Voor het weergeven van buitenlandse lettertekens. Probeer dit te wijzigen als sommige lettertekens in uw taal niet goed getoond worden. + + + +Instellingen voor vergelijking & samenvoeging +Bij het vergelijken van bestanden, probeert KDiff3 eerst regels te vinden die gelijk zijn in alle invoerbestanden. Alleen gedurende deze stap wordt witruimte mogelijk genegeerd. De tweede stap vergelijkt elke regel. In deze stap wordt witruimte niet genegeerd. Ook gedurende het samenvoegen wordt witruimte niet genegeerd. + + + 'Carriage return' behouden:Sommige editors (op sommige systemen) slaan 'carriage returns' ('\r') en 'linefeeds' ('\n') op aan het einde van een regel, terwijl andere alleen de 'linefeed' ('\n') opslaan. Normaal gesproken negeert KDiff3 de 'carriage return', maar dan kunnen bestanden niet dezelfde grootte hebben maar wel gelijk lijken. Als deze optie ingeschakeld is, worden de 'carriage returns' zichtbaar gemaakt en behandeld als witruimte. Bij samenvoegen moet deze optie uit staan. Standaard staat deze optie uit. + Getallen negeren:Standaard uit. Getaltekens ('0'-'9', '.', '-') worden genegeerd in het eerste deel van de analyse waarin regels worden vergeleken. In het resultaat worden de verschillen wel getoond, maar behandeld als witruimte. + C/C++ commentaar negeren:Standaard uit. Wijzigingen in commentaar worden behandeld als wijzigingen in witruimte. + Geen onderscheid hoofd-/kleine letters:Standaard uit. Verschillen in hoofd-/kleine letters ('A' en 'a') worden behandeld als verschillen in witruimte. + Preprocessorcommando:Zie de volgende sectie. + Preprocessor-commando alleen voor regelcontroles:Zie de volgende sectie. + Grondig zoeken:Doe veel moeite om kleinere onderscheiden te vinden (standaard aan). Dit is waarschijnlijk effectief voor gecompliceerde, grote bestanden. En langzaam voor erg grote bestanden. + Vertraging voor automatisch doorgaan (ms):Bij het automatisch doorgaan bepaalt deze instelling hoe lang het resultaat van de selectie getoond wordt voordat er naar het volgende onopgeloste conflict gesprongen wordt. + Standaardsamenvoeging van witruimtes bij 2/3 bestanden:Automatisch alle witruimteconflicten oplossen door een gespecificeerd bestand te kiezen. (Standaard is handmatige keuze.) Nuttig als witruimte in veel bestanden niet belangrijk is. Als u dit alleen af en toe nodig hebt kunt u beter "A/B/C voor alle onopgeloste conflicten kiezen" in het menu Samenvoegen kiezen. Merk op dat als u "Getallen negeren" of "C/C++ commentaar negeren" hebt ingeschakeld, deze automatische keuze ook voor conflicten in getallen of commentaar geldt. + + + + +Mapsamenvoeging +Deze opties gaan over het doorzoeken van de map en de afhandeling van het samenvoegen: zie Mapvergelijking/samenvoeging voor details. Er is hier echter één optie die ook relevant is voor het opslaan van enkele bestanden: + + Reservekopiebestanden:Als een bestand wordt opgeslagen en er al een oudere versie bestaat, wordt het oude bestand hernoemd met een extensie ".orig". Als een oud reservekopiebestand met de extensie ".orig" al bestaat, wordt deze zonder reservekopie verwijderd. + + + +Regio- en taalinstellingen + + Taal:Past de taal van de gebruikersinterface aan. Het wijzigen van deze optie heeft geen invloed op het huidige programma. U dient KDiff3 af te sluiten en te herstarten om de taal te veranderen. (Deze optie is niet beschikbaar in de KDE-versie van KDiff3 omdat de taal in te stellen is in de globale instellingen van KDE.) + Dezelfde codering gebruiken voor alles:De volgende coderingsopties kunnen apart aangepast worden voor elk item. Als deze optie is ingeschakeld nemen alle waarden deze over. + Lokale codering:Boven de coderings-selectors komt een opmerking die u vertelt wat de lokale codering is. (Dit is niet aan te passen, maar wordt aangegeven als u uw lokale codering niet weet, maar wel wilt kiezen.) + Bestandscodering voor A/B/C:Pas de bestandscodering voor invoerbestanden aan. Dit heeft effect op hoe speciale tekens geïnterpreteerd worden. Aangezien u elke codering apart kunt instellen, kunt u zelfs bestanden vergelijken en samenvoegen die met verschillende coderingen zijn opgeslagen. + Bestandscodering voor samenvoeguitvoer en opslag:Als u een bestand hebt bewerkt, kunt op aanpassen met welke codering het weer op schijf wordt opgeslagen. + Bestandscodering voor preprocessorbestanden:Als u preprocessors opgeeft kunnen deze misschien niet met uw codering werken (bijvoorbeeld: uw bestanden zijn 16-bits unicode en uw preprocessor kan alleen met 8-bits ascii overweg). Met deze optie kunt u de codering van preprocessor-uitvoer opgeven. + Rechts-naar-links-taalSommige talen worden van rechts naar links geschreven. Als ieze optie is ingeschakeld, tekent KDiff3 de tekst van rechs naar links in de verschillenvensters en in het uitvoervenster. Merk op dat, aals u KDiff3 met de opdrachtregeloptie "--reverse" start, alle schermopmaak ook van rechts naar links gedaan wordt. (Dit is een optie die door Qt aangeboden wordt.) Deze documentatie is geschreven met de aanname dat "Rechts-naar-links-taal" of omgekeerde indeling uitgeschakeld zijn. Sommige verwijzingen naar "links" en "rechts" moeten dus omgedraaid worden als u die opties gebruikt. + + + + +Diverse +(Deze opties en acties zijn in menu's of in de knoppenbalk beschikbaar.) + + Regelnummering tonen:U kunt kiezen of regelnummers voor de invoerbestanden getoond moeten worden. + Spaties & tabulator-tekens in verschillen tonen:Soms zijn de zichtbare spaties en tabs storend. U kunt dit uitschakelen. + Witruimte tonen:Schakel dit uit om accentuering van alleen-witruimte-veranderingen in de tekst of overzichtskolommen uit te schakelen. (Merk op dat dit ook van toepassing is op wijzigingen in getallen of commentaar als de opties "Getallen negeren" of "C/C++ commentaar negeren" actief zijn.) + Overzichtsopties:Deze keuzes zijn alleen beschikbaar als u drie bestanden vergelijkt. In normale modus worden alle verschillen getoond in één kleurgecodeerde overzichtskolom. Maar soms bent u speciaal geïnteresseerd in de verschillen tussen slechts twee van deze drie bestanden. Door "A vs B", "A vs C" of "B vs C" te kiezen wordt er een tweede overzichtskolom met de vereiste informatie getoond naast het normale overzicht. + Regels afbreken in vensters met verschillen:Regels afbreken als hun lengte de breedte van een venster zou overschrijden. + Venster A/B/C tonen:Soms wilt u de ruimte op het scherm beter gebruiken voor lange regels. Verberg dan de vensters die niet belangrijk zijn. (In het menu Venster.) + Splitsen van vensters omschakelen:Wisselen tussen weergave van verschilvensters naast elkaar (A links van B links van C) of boven elkaar (A boven B boven C). Dit moet ook voor lange regels helpen. (In het menu Venster). + Samenvoegen snel starten:Soms bekijkt u de onderscheiden en besluit u te willen samenvoegen. "Huidig bestand samenvoegen" in het menu Map werkt ook als u slechts twee bestanden vergelijkt. Een enkele klik start het samenvoegen en gebruikt de bestandsnaam van het laatste invoerbestand als het standaard uitvoerbestand. (Als dit gebruikt wordt om een samenvoeging te herstarten, wordt de uitvoerbestandsnaam behouden.) + + + +Sneltoetsen instellen +Momenteel ondersteunt alleen de KDE-versie gebruikergedefinieerde sneltoetsen (Menu Instellingen -> Sneltoetsen instellen...) + + + +Preprocessor-opdrachten +KDiff3 ondersteunt twee preprocessor-opties. + + Preprocessorcommando:Als een bestand gelezen is, wordt het door deze externe opdracht gesluisd. De uitvoer van deze opdracht is dan zichtbaar in plaats van het originele bestand. U kunt uw eigen preprocessor schrijven om uw specifieke wensen te vervullen. Gebruik dit om storende delen van het bestand weg te halen, of automatisch de insprong te verbeteren, enzovoort. + Preprocessor-commando alleen voor regelcontroles:Als een bestand gelezen is, wordt het door deze externe opdracht gesluisd. Als een preprocessor-opdracht (zie boven) ook opgegeven wordt, wordt de uitvoer van de preprocessor de invoer van de preprocessor voor regelovereenkomsten. De uitvoer wordt dan alleen gebruikt bij de regelvergelijkingsfase van de analyse. U kunt uw eigen preprocessor schrijven om uw specifieke wensen te vervullen. Elke invoerregel moet een overeenkomende uitvoerregel hebben. + + +Het idee is om de gebruiker grotere flexibiliteit te geven bij het instellen van het resultaat. Maar dit vereist een extern programma, en veel gebruikers willen dat niet zelf schrijven. Het goede nieuws is dat sed of perl vaak voldoende is. +Voorbeeld: een eenvoudig testgeval: Beschouw het bestand a.txt (6 regels): + aa + ba + ca + da + ea + fa + en het bestand b.txt (3 regels): + cg + dg + eg + Zonder preprocessor zouden de volgende regels naast elkaar geplaatst worden: + aa - cg + ba - dg + ca - eg + da + ea + fa + Dit is waarschijnlijk niet gewenst omdat de eerste letter de feitelijk interessante informatie bevat. Om het zoekalgoritme te helpen bij het negeren van de tweede letter kunnen we een preprocessor-opdracht voor regelovereenkomsten gebruiken, die 'g' door 'a' vervangt: + sed 's/g/a/' + Met deze opdracht wordt het resultaat van de vergelijking: + aa + ba + ca - cg + da - dg + ea - eg + fa + Intern wordt het zoeken van bij elkaar passende regels na het uitvoeren van de preprocessor voor regelovereenkomsten gedaan, maar op het scherm is het bestand ongewijzigd. (De normale preprocessor verandert de gegevens ook op het scherm.) + +De basis van <command +>sed</command +> +Deze sectie geeft alleen een inleiding op een paar basismogelijkheden van sed. Zie voor meer informatie info:/sed of http://www.gnu.org/software/sed/manual/html_mono/sed.html. Een voorgecompileerde versie voor Windows kunt u vinden op http://unxutils.sourceforge.net. Merk op dat de volgende voorbeelden ervan uitgaan dat de opdracht sed in een map in uw omgevingsvariabele PATH staat. Als dit niet het geval is, dient u het volledige absolute pad voor de opdracht te gebruiken. Merk ook op dat de volgende voorbeelden het enkelvoudige aanhalingsteken (') gebruiken dat niet in Windows werkt. Op Windows dient u in plaats daarvan dubbele aanhalingstekens (") te gebruiken. +In deze context wordt alleen de vervangingsopdracht van sed gebruikt: + sed 's/REGEXP/VERVANGING/VLAGGEN' + Voordat u een nieuwe opdracht in KDiff3 gebruikt, zou u deze eerst in een console moeten testen. Hiervoor is de opdracht echo nuttig. Voorbeeld: + echo abrakadabra | sed 's/a/o/' + -> obrakadabra + Dit voorbeeld toont een zeer eenvoudige sed-opdracht die het eerste voorkomen van "a" door "o" vervangt. Als u alle voorkomens wilt vervangen, hebt u de vlag "g" nodig: + echo abrakadabra | sed 's/a/o/g' + -> obrokodobro + Het symbool "|" is de doorsluisopdracht die de uitvoer van de vorige opdracht naar de invoer van de volgende opdracht doorgeeft. Als u dit wilt uitproberen met een langer bestand kunt u op Unix-systemencat gebruiken en type op Windows-systemen. sed voert de vervanging op elke regel uit. cat bestand | sed opties + + + +Voorbeelden voor het gebruik van <command +>sed</command +> in KDiff3 +Andere soorten commentaar negeren +Momenteel begrijpt KDiff3 alleen C/C++ commentaar. Met de preprocessoropdracht voor regelovereenkomsten kunt u ook andere soorten commentaar negeren, door ze in C/C++ commentaar om te zetten. Voorbeeld: om commentaar dat met "#" begint te negeren, wilt u deze omzetten naar "//". Merk op dat u hiervoor ook de optie "C/C++ commentaar negeren" moet inschakelen om effect te krijgen. Een goede preprocessoropdracht voor regelovereenkomsten zou dan zijn: + sed 's/#/\/\//' + Omdat in sed het teken "/" een aparte betekenis heeft, is het nodig om het teken "\" voor elke "/" in de vervangende tekenreeks te plaatsen. Soms is de "\" ook nodig om een teken een speciale betekenis te geven of deze juist weg te halen. De enkele aanhalingstekens (') voor en na de vervangingsopdracht zijn nu belangrijk, omdat de shell anders zal proberen sommige speciale tekens als '#', '$' of '\' te interpreteren voordat deze aan sed worden doorgegeven. Merk op dat u op Windows hier de dubbele aanhalingstekens (") nodig hebt. Windows vervangt andere tekens als '%', dus u moet hier misschien wat experimenteren. + +Niet-hoofdlettergevoelige verschillen +Gebruik de volgende preprocessoropdracht voor regelovereenkomsten om alle invoer naar hoofdletters om te zetten: + sed 's/\(.*\)/\U\1/' + Hier is de ".*" een reguliere expressie die met elke tekenreeks overeenkomt en in deze context met alle lettertekens op de regel overeenkomt. De "\1" in de vervangende tekenreeks verwijst naar de overeenkomende tekst binnen het eerste paar "\(" en "\)". De "\U" zet de ingevoegde tekst om in hoofdletters. + + +Versiebeheer-trefwoorden negeren +CVS en andere versiebeheersystemen gebruiken diverse trefwoorden om automatisch gegenereerde tekenreeksen in te voegen (info:/cvs/Trefwoordvervanging. Deze volgen allemaal het patroon "$TREFWOORD gegenereerde tekst$". We hebben nu een preprocessoropdracht voor regelovereenkomsten nodig die alleen de gegenereerde tekst verwijdert: + sed 's/\$\(Revision\|Author\|Log\|Header\|Date\).*\$/\$\1\$/' + De "\|" scheidt de mogelijke trefwoorden. U wilt deze lijst misschien aan uw eigen wensen aanpassen. De "\" voor de "$" is nodig omdat anders de "$" met het einde van de regel overeenkomt. +Terwijl u experimenteert met sed gaat u wellicht deze reguliere expressies begrijpen en op prijs stellen. Ze zijn nuttig omdat er veel andere programma's zijn die soortgelijke dingen ondersteunen. + + +Getallen negeren +Getallen negeren is in feite een ingebouwde optie. Maar als een ander voorbeeld is dit de preprocessoropdracht voor regelovereenkomsten: + sed 's/[0123456789.-]//g' + Elk teken tussen '[' en ']' komt overeen en wordt vervangen door niets. + + +Bepaalde kolommen negeren +Soms is een tekst erg strict opgebouwd, en bevat deze kolommen die u altijd wilt negeren, terwijl er andere kolommen zijn die u voor analyse wilt bewaren. In het volgende voorbeeld worden de eerste vijf kolommen (lettertekens) genegeerd, de volgende tien worden bewaard, dan worden er weer vijf genegeerd en de rest van de regel wordt bewaard. + sed 's/.....\(..........\).....\(.*\)/\1\2/' + Elke punt '.' komt overeen met een willekeurig teken. De "\1" en "\2" in de vervangende tekenreeks verwijzen naar de overeenkomende tekst in het eerste en tweede paar "\(" en "\)" die de tekst aangeven die bewaard moet worden. + + +Diverse vervangingen combineren +Soms wilt u diverse vervangingen tegelijk uitvoeren. U kunt dan de puntkomma ';' gebruiken om deze van elkaar te scheiden. Voorbeeld: echo abrakadabra | sed 's/a/o/g;s/\(.*\)/\U\1/' + -> OBROKODOBRO + + + + +<command +>perl</command +> in plaats van <command +>sed</command +> gebruiken +In plaats van sed wilt u wellicht iets anders gebruiken zoals perl. + perl -p -e 's/REGEXP/VERVANGING/VLAGGEN' + Maar sommige details zijn anders in perl. Merk op waar sed "\(" en "\)" vereist, perl de eenvoudigere "(" en ")" zonder voorafgaande '\' vereist. Voorbeeld: sed 's/\(.*\)/\U\1/' + perl -p -e 's/(.*)/\U\1/' + + + + + +Uitvoervolgorde van preprocessors +De data wordt doorgesluisd door alle interne en externe preprocessors, in deze volgorde: + +Normale preprocessor. +Preprocessor voor regelovereenkomsten. +Hoofdletterongevoelig (conversie naar hoofdletters). +Opsporen van C/C++ commentaar. +Getallen negeren. +Witruimte negeren. + +De gegevens zoals die na de normale preprocessor zijn worden bewaard voor weergave en samenvoeging. De andere handelingen wijzigen alleen de gegevens die het verschillenalgoritme voor regelovereenkomsten ziet. Merk op dat, in de zeldzame gevallen waar u een normale preprocessor gebruikt, de preprocessor voor regelovereenkomsten de uitvoer van de normale preprocessor als invoer ziet. + + +Waarschuwing +De preprocessor-opdrachten zijn vaak erg nuttig, maar net zoals elke andere optie die automatisch uw teksten wijzigt of bepaalde verschillen verbergt, kunt u per ongeluk bepaalde verschillen over het hoofd zien en in het ergste geval belangrijke gegevens vernietigen. Om deze reden vertelt KDiff3 u het als er een normale preprocessor-opdracht wordt gebruikt bij het samenvoegen, en wordt u gevraagd of deze uitgeschakeld moet worden of niet. Maar u wordt niet gewaarschuwd als er een preprocessoropdracht voor regelovereenkomsten actief is. Het samenvoegen is niet voltooid totdat alle conflicten opgelost zijn. Als u "Witruimte tonen" uitgeschakeld hebt, zijn de verschillen die met de preprocessoropdracht voor regelovereenkomsten verwijderd zijn, ook onzichtbaar. Als de knop "Opslaan" inactief blijft tijdens het samenvoegen (door overblijvende conflicten), schakel dan "Witruimte tonen" in. Als u deze minder belangrijke verschillen niet handmatig wilt samenvoegen kunt u "[A|B|C] voor alle onopgeloste witruimteconflicten gebruiken" kiezen uit het menu "Samenvoegen". + + + + + +Mappen vergelijken en samenvoegen met KDiff3 +Inleiding +Programmeurs moeten vaak veel bestanden in een map veranderen om hun doel te bereiken. Hierom laat KDiff3 u ook hele mappen recursief vergelijken en samenvoegen! Hoewel het vergelijken en samenvoegen van mappen nogal duidelijk lijkt, zijn er aan paar details die u moet kennen. Het belangrijkste is natuurlijk het feit dat nu door elke handeling veel bestanden gewijzigd kunnen worden. Als u geen reservekopieën van uw originele gegevens hebt, kan het erg moeilijk of zelfs onmogelijk zijn om naar de originele staat terug te keren. Dus voordat u een samenvoeging start, zorg ervoor dat uw gegevens veilig zijn en dat u terug kunt keren. Of u een archief maakt of een versiebeheersysteem gebruikt is uw keuze, maar zelfs ervaren programmeurs en integrators hebben zo nu en dan de oude broncodes nodig. En merk op dat ik (de auteur van KDiff3) mijn best doe, kan ik niet garanderen dat er geen bugs zijn. Volgens de GNU-GPL is er GEEN WAARBORG op welke manier dan ook voor dit programma. Dus wees bescheiden en onthoud: +
+ Vergissen is menselijk, maar om dingen echt te verknoeien hebt u een computer nodig. +
+Dus dit kan dit programma voor u doen: KDiff3 ... + + ... leest en vergelijkt twee of drie mappen recursief, + ... houdt speciaal rekening met symbolische koppelingen, + ... laat u door bestanden bladeren door te dubbelklikken, + ... stelt voor elk item een samenvoegingsoperatie voor, die u kunt wijzigen voordat het samenvoegen van de mappen begint, + ... laat u het samenvoegen simuleren en geeft de acties aan die plaats zouden vinden, zonder ze uit te voeren, + ... laat u het samenvoegen doen, en geeft u de mogelijkheid in te springen als er menselijke interactie nodig is, + ... laat u de geselecteerde handling op alle items (F7) of alleen het geselecteerde item (F6) uitvoeren, + ... laat u het samenvoegen voortzetten na handmatige interactie met F7, + ... maakt optioneel reservekopieën met de extensie ".orig", + ... + +
+ +Mappen vergelijken of samenvoegen +Dit lijkt erg op het vergelijken en samenvoegen van een enkel bestand. U hoeft slechts mappen op de opdrachtregel of in het venster "Openen" te kiezen. +Twee mappen vergelijken/samenvoegen: +kdiff3 map1 map2 + kdiff3 map1 map2 -o doelmap + +Als er geen doelmap wordt opgegeven, gebruikt KDiff3 map2. + + +Drie mappen vergelijken/samenvoegen +kdiff3 map1 map2 map3 + kdiff3 map1 map2 map3 -o doelmap + +Bij het samenvoegen van drie mappen wordt map1 als basis voor het samenvoegen gebruikt. Als er geen doelmap wordt opgegeven, gebruikt KDiff3 map3 als doelmap voor het samenvoegen.doelmpa + +Merk op dat alleen het vergelijken automatisch start, niet het samenvoegen. Hiervoor dient u eerst een menu-item of de toets F7 te gebruiken. (Meer details later.) + + + +Zichtbare informatie +Terwijl de mappen worden gelezen verschijnt een melding die u over de voortgang informeert. Als u het inlezen van de mappen annuleert, worden alleen bestanden getoond die tot dan toe zijn vergeleken. Als het inlezen van de mappen klaar is, toont KDiff3 een lijst met de resultaten links ... + + + +... en details over het geselecteerde item rechts. + + + + + +De kolom "Naam" +Elk bestand en elke map die tijdens het inlezen gevonden is, wordt hier in een boomstructuur getoond. U kunt een item selecteren door er éénmaal met de muis op te klikken. Standaard zijn de mappen ingeklapt. U kunt ze uitklappen en weer inklappen door op de "+"/"-" te klikken of door op het item te dubbelklikken, of door de linker en rechter pijltoetsen te gebruiken. Het menu "Map" bevat ook twee acties "Alle submappen invouwen" en "Alle submappen uitvouwen" waarmee u alle mappen in één keer kunt inklappen of uitklappen. Als u op een bestand dubbelklikt wordt de bestandsvergelijking gestart en verschijnt het verschillenvenster. +De afbeelding in de naamkolom geeft het bestandstype in de eerste map ("A") aan. Dit kan zijn: + + Normaal bestand + Normale map (map-afbeelding) + Koppeling naar een bestand (bestandsafbeelding met pijl) + Koppeling naar een map (mapafbeelding met pijl) + +Als het bestandstype anders is in de andere mappen, is dit zichtbaar in de kolommen A/B/C en in het venster dat de details over het geselecteerde item toont. Merk op dat het samenvoegen in zo'n geval niet automatisch gedaan kan worden. Als u het samenvoegen start, wordt u geïnformeerd over zulke problemen. + + +De kolommen A/B/C en het kleurenschema +Zoals in de afbeelding te zien is, worden de kleuren rood, groen, geel en zwart gebruikt in de kolommen A/B/C. + + Zwart: Dit item bestaat niet in deze map + Groen: Nieuwste item. + Geel: Ouder dan groen, nieuwer dan rood. + Rood: Oudste item. + +Maar voor items die hetzelfde waren in de vergelijking, is ook de kleur hetzelfde, ook al zijn ze niet even oud. Mappen worden als gelijk beschouwd als alle items die ze bevatten hetzelfde zijn. Dan hebben ze ook dezelfde kleur. De leeftijd van een map wordt niet gebruikt bij het bepalen van de kleur. Het idee voor dit kleurenschema kreeg ik bij dirdiff. De kleuren stellen een blad voor dat groen is als het nieuw is, later geel wordt, en rood wordt als het oud is. + +De kolom "Operatie" +Na het vergelijken van mappen maakt KDiff3 ook een voorstel voor een samenvoegingsoperatie. Dit wordt getoond in de kolom "Operatie". U kunt een operatie wijzigen door erop te klikken. Er verschijnt dan een klein menu waarmee u de operatie voor dat item kunt kiezen. (U kunt ook de meestgebruikte operaties met het toetsenbord kiezen. Ctrl+1/2/3/4/Del kiest respectievelijkg A/B/C/Samenvoegen/Verwijderen.) Deze operatie wordt dan bij het samenvoegen uitgevoerd. Afhankelijk van de item en de samenvoegmodus zijn er andere operaties beschikbaar. De samenvoegmodus kan zijn: + + Samenvoegen van drie mappen ("A" wordt als oudere basis van beide beschouwd) + Samenvoegen van twee mappen + Synchroniseren van twee mappen (via de optie "Mappen synchroniseren") + +Bij het samenvoegen van drie mappen is het voorstel voor de operatie: Als voor een item ... + + ... alledrie de mappen gelijk zijn: kopiëren vanuit C + ... A en C gelijk zijn maar B niet: Kopiëren vanuit B (of als B niet bestaat, de bestemming verwijderen als deze bestaat) + ... A en B gelijk zijn maar C niet: Kopiëren vanuit C (of als C niet bestaat, de bestemming verwijderen als deze bestaat) + ... B en C gelijk zijn maar A niet: Kopiëren vanuit C (of als C niet bestaat, de bestemming verwijderen als deze bestaat) + ... alleen A bestaat: De bestemming verwijderen (als deze bestaat) + ... alleen B bestaat: Vanuit B kopiëren + ... alleen C bestaat: Vanuit C kopiëren + ... A, B en C niet gelijk zijn: Samenvoegen + ... A, B en C niet hetzelfde bestandstype hebben (bijvoorbeeld, A is een map en B een bestand): "Fout: Conflicterende bestandstypen". Zolang zulke items bestaan kan het samenvoegen van de mappen niet beginnen. + +Bij het samenvoegen van twee mappen is het voorstel voor de operatie: Als voor een item... + + ... beide mappen gelijk zijn: Kopiëren vanaf B + ... A bestaat, maar B niet: Kopiëren vanaf A + ... B bestaat, maar A niet: Kopiëren vanaf B + ... A en B bestaan maar niet gelijk zijn: Samenvoegen + ... A en B niet hetzelfde bestandstype hebben (bijvoorbeeld, A is een map en B een bestand): "Fout: Conflicterende bestandstypen". Zolang zulke items bestaan kan het samenvoegen van de mappen niet beginnen. + +Synchronisatiemodus is actief als er slechts twee mappen en geen expliciet doel zijn opgegeven, en als de optie "Mappen synchroniseren" actief is. KDiff3 kiest dan een standaard operatie zodanig dat beide mappen naderhand hetzelfde zijn. Als voor een item ... + + ... beide mappen gelijk zijn: Niets. + ... A bestaat, maar B niet: A naar B kopiëren + ... B bestaat, maar A niet: B naar A kopiëren + ... A en B bestaan, maar niet gelijk zijn: samenvoegen en het resultaat in beide mappen opslaan. (Voor de gebruiker is de zichtbare naam B, maar KDiff3 kopieert dan B naar A.) + ... A en B niet hetzelfde bestandstype hebben (bijvoorbeeld, A is een map en B een bestand): "Fout: Conflicterende bestandstypen". Zolang zulke items bestaan kan het samenvoegen van de mappen niet beginnen. + +Als twee mappen samengevoegd worden en de optie "Nieuwere kopiëren in plaats van samenvoegen" geselecteerd is, kijkt KDiff3 naar de datums en stelt dan voor om het nieuwere bestand te kiezen. Als de bestanden niet gelijk zijn maar wel gelijke datums hebben, bevat de operatie "Fout: Datums zijn gelijk maar bestanden niet." Zolang zulke items bestaan kan het samenvoegen niet beginnen. + + +De statuskolom +Gedurende het samenvoegen wordt het ene bestand na het andere verwerkt. De statuskolom toont "Gereed" bij items waar het samenvoegen is afgerond, en andere teksten als er iets onverwachts gebeurd is. Als het samenvoegen klaar is, dient u een laatste controle te doen om te zien of de status van alle items goed is. + + +Statistiekkolommen +Als de bestandsvergelijkingsmodus "Volledige analyse" ingeschakeld is in de opties, toont KDiff3 extra kolommen met het aantal onopgeloste en opgeloste conflicten en het aantal (niet-)witruimteconflicten. (De kolom met het aantal apgeloste conflicten wordt alleen getoond bij het vergelijken of samenvoegen van drie mappen.) + + + + + +Een samenvoeging doen +U kunt het geselecteerde item (bestand of map) samenvoegen, of alle items. Als u alle keuzes voor de operaties hebt gemaakt (ook in alle submappen) kunt u het samenvoegen starten. Wees erop bedacht dat, als u niet expliciet een doelmap heeft opgegeven, de doelmap "C" is bij het behandelen van drie mappen, "B" bij het samenvoegen van twee mappen, en "A" en/of "B" in sychronisatiemodus. Controleer ook als u een doelmap hebt opgegeven of alle items die zich in de uitvoer zouden moeten bevinden, daadwerkelijk in de boomstructuur staan. Er zijn enkele opties die ervoor zorgen dat bepaalde items uit het vergelijken en samenvoegen van mappen worden weggelaten. Controleer deze opties om onplezierige verrassingen te voorkomen: + + "Recursieve mappen": Als dit uitgeschakeld is, worden items in submappen niet gevonden. + "Patroon"/"Anti-patroon": Overeenkomende items al dan niet invoegen + "Verborgen bestanden uitsluiten" + "Alleen onderscheid tonen": Bestanden die in alle mappn overeenkomen, verschijnen niet in de boomstructuur, en dus ook niet in de bestemming. + +(In de huidige versie dient u de map handmatig opnieuw in te laten lezen door "Map"->"Opnieuw inlezen" te kiezen, nadat u opties hebt gewijzigd die van invloed zijn op het inlezen van mappen.) Als u tot hier tevreden bent, is de rest eenvoudig. Om alle items samen te voegen: kies "Mapsamenvoeging starten/voortzetten" in het menu "Map" of druk op F7 (sneltoets). Om alleen het huidige item samen te voegen: kies "Operatie uitvoeren voor huidig item" of druk op F6. Als er door conflicterende bestandstypes nog bestanden zijn met ongeldige operaties, verschijnt er een melding, worden die items aangewezen en kunt u een geldige operatie voor die items kiezen. Als u alle items samenvoegt, verschijnt er een dialoogvenster met de opties "Starten", "Simuleren" en "Annuleren". + + Kies "Simuleren" als u wilt zien wat er gedaan zou worden, zonder dit werkelijk te doen. Er wordt een uitgebreide lijst van alle operaties getoond. + Kies anders "Doorgaan" om het samenvoegen echt te starten. + +KDiff3 voert dan de gekozen operatie uit op alle items. Als u handmatige actie moet ondernemen (samenvoegen van een enkel bestand) verschijnt er een samenvoegvenster (zie de grote schermafdruk). Als u klaar bent met een bestand, kiest u opnieuw "Samenvoegen starten/voortzetten" of drukt u op F7. Als u nog niet hebt opgeslagen, wordt er een dialoogvenster getoond dat u vraagt om dat te doen. KDiff3 gaat dan verder met het volgende item. Als KDiff3 een fout tegenkomt, meldt het dit en wordt de uitgebreide stautsinformatie getoond. Ondaraan deze lijst zullen er wat foutmeldingen staan die u zouden moeten helpen bij het begrijpen van de oorzaak van het probleem. Als u doorgaat met samenvoegen (F7) geeft KDiff3 u de keuze tussen opnieuw proberen of het item overslaan dat het probleem veroorzaakte. Dit betekent dat u, voordat u doorgaat, een andere operatie kunt kiezen of het probleem door andere middelen kunt oplossen. Als het samenvoegen voltooid is, niformeert KDiff3 u hierover via een berichtvenster. Als sommige items afzonderlijk samengevoegd zijn, onthoudt KDiff3 dit (tijdens de samenvoegsessie) en worden deze niet opnieuw samengevoegd als later het samenvoegen voor alle items gestart wordt. Zelfs als het samenvoegen overgeslagen is of er niets is opgeslagen, tellen deze items als voltooid. Alleen als u de samenvoegoperatie wijzigt, wordt het item opnieuw samengevoegd. + + +Opties voor het vergelijken en samenvoegen van mappen +De voorkeuren van KDiff3 (menu "Instellingen"->"KDiff3 instellen") bevatten nu een sectie "Mappen samenvoegen" met deze opties: + + + Recursieve mappen:Kies of mappen recursief doorzocht moeten worden. + Bestandspatroon(en):Alleen bestanden die hier met een patroon overeenkomen worden in de boom geplaatst. U kunt hier meer dan één patroon opgeven door een puntkomma ";" als scheidingsteken te gebruiken. Geldige jokertekens: '*' en '?' (bijvoorbeeld "*.cpp;*.h"). Standaard is "*". Mappen hoeven niet aan dit patroon te voldoen. + Anti-patroon(en):Bestanden en mappen die hier met een patroon overeenkomen worden niet in de boom geplaatst. U kunt hier meer dan één patroon opgeven door een puntkomma ";" als scheidingsteken te gebruiken. Geldige jokertekens: '*' en '?'. Standaard is "*.orig;*.o". + CVS-ignore gebruiken:Negeer bestanden en mappen die ook door CVS genegeerd zouden worden. Veel automatisch gegenereerde bestanden worden genegeerd door CVS. Het grote voordeel hiervan is dat dit mapspecifiek opgegeven kan worden via een bestand ".cvsignore". (Zie info:/cvs/cvsignore.) + Verborgen bestanden en mappen zoeken:Op sommige bestandssystemen hebben bestanden een attribuut "verborgen". Op andere systemen zorgt een punt "." aan het begin van ene bestandnaam ervoor dat het bestand verborgen is. Met deze optie kunt u deze bestanden al dan niet in de boom laten opnemen. Standaard is aan. + Bestandskoppelingen volgen:Voor koppelingen naar bestanden: Als dit uitgeschakeld is, worden de koppelingen vergeleken. Als dit ingeschakeld is, worden de bestanden achter de koppelingen vergeleken. Standaard is uit. + Mapkoppelingen volgen:Voor koppelingen naar mappen: Als dit uitgeschakeld is, worden de symbolische koppelingen vergeleken. Als dit ingeschakeld is, worden de koppelingen beschouwd als mappen en recursief ingelezen. (Merk op dat het programmme niet controleert of de koppeling "recursief" is. Dus bijvoorbeeld een map die een koppeling naar zichzelf bevat, zorgt voor een oneindige lus, en na enige tijd, als de "stack" overloopt of al het geheugen op is, voor ene crash van het programma.) Standaard is uit. + Alleen onderscheid tonen:Alleen de items die niet in alle invoermappen gelijk zijn worden getoond en alleen de gewijzigde bestanden zijn zichtbaar. Bestanden die in alle mappen gelijk zijn werden dus niet gekopieerd tijdens het samenvoegen en als de doelmap de bestanden vóór het samenvoegen niet bevat, mist u wellicht later bestanden. (Deze optie wordt in een volgende versie waarschijnlijk gewijzigd.) Standaard is uit. + + Bestandsvergelijkingsmodus: + + Binaire vergelijking:Dit is de standaard vergelijkingsmodus. + Volledige analyse:Doe een volledige analyse van elk bestand en toon de kolommen met statistische informatie. (Aantal opgeloste en onopgeloste, niet-witruimte- en witruimteconflicten.) De volledige analyse is langzamer dan een eenvoudige binaire analyse, en veel langzamer bij bestanden die geen tekst bevatten. (Geef de van toepassing zijnde bestandsantipatronen op.) + Wijzigingsdatum vertrouwen:Als u grote mappen over een langzaam netwerk vergelijkt, kan het sneller om alleen de wijzigingsdatums en bestandsgroottes te vergelijken. Deze snelheidsverbetering brengt echter wat onzekerheid met zich mee. Wees voorzichtig bij het gebruiken van deze optie. Standaard is uit. + Grootte vertrouwen:Vergelijkbaar met het vertrouwen van de wijzigingsdatum. Er vindt geen echte vergelijking plaats. Twee bestanden worden als gelijk beschouwd als ze dezelfde grootte hebben. Dit is nuttig als de kopieeroperatie de wijzigingsdatum niet intact heeft gehouden. Wees voorzichtig bij het gebruiken van deze optie. Standaard is uit. + + + Mappen synchroniseren:Activeert de "synchronisatiemodus" als twee mappen vergeleken worden en er geen expliciete doelmap is opgegeven. In deze modus worden de voorgestelde operaties dusdanig gekezen dat beide bronmappen na de synchronisatie gelijk zijn. Het resultaat van het samenvoegen wordt ook naar beide mappen geschreven. Standaard is uit. + Nieuwere bestanden kopiëren in plaats van samenvoegen:In plaats van het uitvoeren van de voorlgestelde operatie wordt het nieuwere bestand gekopieerd als er wijzigingen zijn opgetreden. (Dit wordt als onveilig beschouwd, want het veronderstelt dat u weet dat het andere bestand niet ook gewijzigd is. Controleer dit in elk geval.) Standaard is uit. + Reservekopiebestanden:Als een bestand of gehele map door een andere wordt vervangen of verwijderd vordt, wordt de originele versie hernoemd met de extensie ".orig". Als een oud reservekopiebestand met de extensie ".orig" al bestaat, wordt dit zonder reservekopie verwijderd. Dit beïnvloedt ook het normale samenvoegen van enkele bestanden, niet alleen bij het samenvoegen van mappen. Standaard is aan. + + + +Andere functies +Splitsen / Volledig-scherm-modus +Normaal gesproken blijft de lijstweergave voor het samenvoegen van mappen zichtbaar als er een enkel bestand wordt vergeleken of samengevoegd. Met de muis kunt u de splitsbalk verplaatsen die de bestandenlijst van de verschillenvensters scheidt. Als u dat niet wilt, kunt u "Vensters splitsen" in het menu "Map" uitschakelen. U kunt dan "Weergave omschakelen" in het menu "Map" kiezen om tussen de bestandenlijst en de verschillenweergave over te schakelen, die dan het volledige scherm in beslag nemen. + +Een enkel bestand vergelijken of samenvoegen +U dubbelklikt waarschijnlijk het liefst op een bestand om het te vergelijken. Desalniettemin is er hiervoor ook een item in het menu "Map". U kunt ook direct een enkel bestand samenvoegen, zonder de mapsamenvoeging te starten, met "Enkel bestand samenvoegen" in het menu "Map". Als u het resultaat opslaat, wordt de status op "voltooid" gezet, en wordt het bestand niet opnieuw samengevoegd als er een mapsamenvoeging wordt gestart. Merk op dat deze statusinformatie verloren gaat als u de map opnieum inleest (menu "Map", item "Opnieuw inlezen") + + +
+ + +Diverse onderwerpen + +Netwerktransparantie via KIO +KIO-slaves +KDE biedt netwerktransparantie via KIO-slaves. KDiff3 gebruikt dit om invoerbestanden en mappen te lezen. Dit betekent dat u bestanden en mappen op lokale en externe bronnen kunt opgeven via URL-adressen. Voorbeeld: +kdiff3 test.cpp ftp://ftp.verweg.org/test.cpp + kdiff3 tar:/home/hacker/archief.tar.gz/map ./map + + +De eerste regel vergelijkt een lokaal bestand met een bestand op een FTP-server. De tweede regel vergelijkt een map binnen een gecomprimeerd archief met een lokale map. Andere interessante KIO-slaves zijn: + +Bestanden op het www (http:), +Bestanden op ftp (ftp:), +Versleutelde bestandsoverdracht (fish:, sftp:), +Windows-bronnen (smb:), +Lokale bestanden (file:). + +Andere (waarschijnlijk minder nuttige) mogelijkheden zijn: + +Man-pagina's (man:), +info-pagina's (info:). + + + +Hoe URL-adressen te schrijven +Een URL heeft een andere syntaxis vergeleken met paden naar lokale bestanden en mappen. U dient met een aantal zaken rekening te houden: + +Een pad kan relatief zijn en "." of ".." bevatten. Dit kan niet met URL-adressen, die altijd absoluut zijn. Speciale tekens dienen omgezet te worden. ("#"->"%23", spatie->"%20", enz.) Een bestand met de naam "/#foo#" wordt bijvoorbeeldhet URL-adres "file:/%23foo%23". Als URL-adressen niet werken zoals u verwacht, probeer ze dan eerst in Konqueror te openen. + + + + +Mogelijkheden van KIO-slaves +Netwerktransparantie heeft één nadeel: niet alle bronnen hebben dezelfde mogelijkheden. Soms ligt dit aan het bestandssysteem van de server, soms aan het protocol. Een korte lijst van beperkingen: + +Er is soms geen ondersteuning voor koppelingen. Of er is geen manier om te onderscheiden of een koppeling naar een map of een bestand verwijst, er wordt dan altijd van bestanden uitgegaan (ftp:, sftp:). De bestandsgrootte kan niet altijd bepaald worden. Beperkte ondersteuning voor permissies. Geen mogelijkheden om permissies of wijzigingsdatums te veranderen, zodat de permissies of tijd van een kopie verschillen van het origineel. (Zie de optie "Grootte vertrouwen"). (Permissies of wijzigingsdatum veranderen is alleen mogelijk bij lokale bestanden.) + + + + + +&kdiff3; als een KPart gebruiken +&kdiff3; is een KPart. Het implementeert momenteel de interface KParts::ReadOnlyPart. Het belangrijkste gebruik is als een verschillentoner in KDevelop. KDevelop start altijd eerst de interne verschillentoner. Om KDiff3 op te starten klikt u met de rechtermuisknop op het verschilvenster en kiest u "In KDiff3Part tonen" uit het contextmenu. Kdiff3 vereist normaal gesproken twee complete bestanden als invoer. Als het als een KPart gebruikt wordt, neemt KDiff3 aan dat het invoerbestand een patch-bestand in het standaard formaat is. KDiff3 haalt dan de twee bestandsnamen op uit het patch-bestand. Minstens één van de twee bestanden moet beschikbaar zijn. KDiff3 roept dan patch aan om het andere bestand opnieuw te maken. In Konqueror kunt u een patch-bestand selecteren en "Tonen in"-"KDiff3Part" uit het contextmenu kiezen. Merk op dat dit niet werkt als geen van de originele bestanden beschikbaar is, en dat het niet betrouwbaar is als een origineel bestand gewijzigd is sinds het patch-bestand gegenereerd is. Als het als een KPart gestart wordt, biedt KDiff3 alleen een verschillenmodus voor twee bestanden, een kleine werkbalk en een menu. Samenvoegen of mappen vergelijken worden dan niet ondersteund. + + + + +Vraag en antwoord +&reporting.bugs; &updating.documentation; + +Waarom heet het "KDiff3"? Hulpmiddelen met de naam "KDiff" en "KDiff2" (nu "Kompare") bestaan al. "KDiff3" moet ook suggereren dat het kan samenvoegen, net als het programma "diff3". + +Waarom heb ik het onder GPL uitgegeven? Ik gebruik al heel lang GPL-programma's en heb veel geleerd door de vele broncodes te bekijken. Dit is daarom mijn dankbetuiging aan alle programmeurs die hetzelfde hebben gedaan of zullen doen. + +Sommige knoppen en functies ontbreken. Wat is er mis? U hebt waarschijnlijk vanuit de broncode gecompileerd zonder het juiste KDE-prefix in "configure" op te geven. Standaard wil "configure" in de map /usr/local installeren, maar KDE kan het bronbestand voor de gebruikersinterface dan niet vinden (kdiff3ui.rc). Het bestand README bevat meer informatie over de goede prefix. + +Regels die op elkaar lijken maar niet hetzelfde zijn, verschijnen vaak naast elkaar, maar soms niet. Waarom? Regels waar alleen de hoeveelheid witruimte verschillend is worden in eerste instantie als "gelijk" beschouwd, terwijl slechts één verschillend niet-witruimte-teken ervoor zorgt dat de regels "verschillend" zijn. Als op elkaar lijkende regels naast elkaar verschijnen is dit slechts toeval, maar dit is gelukkig vaak het geval. + +Waarom moeten alle conflicten opgelost worden voordat het resultaat opgeslagen kan worden? Voor elke gelijke of verschillende sectie onthoudt de editor in het resultaatvenster waar deze begint en eindigt. Dit is nodig omdat dan conflicten handmatig opgelost kunnen worden door op de knop van de broncode (A, B of C) te drukken. Deze informatie is opgelost bij het opslaan als tekst en het is te veel werk om een speciaal bestandsformaat te maken waarmee alle benodigde informatie opgeslagen en ingelezen kan worden. + +Waarom heeft de editor in het resultaatvenster geen functie "ongedaan maken"? Dit was tot nu toe te veel werk. U kunt altijd een versie vanuit ene bron (A, B of C) herstellen daar op de overeenkomstige knop te klikken. Voor grote wijzigingen wordt het gebruik van een andere editor sowieso aanbevolen. + +Toen ik wat tekst verwijderde, verscheen plotseling "<Geen regel in de bron>" en ik kon dit niet verwijderen. Wat betekent dit en hoe kan ik dit verwijderen? Voor elke gelijke of verschillende sectie onthoudt de editor in het resultaatvenster waar deze begint en eindigt. "<Geen regel in de bron>" betekent dat er niets over is in de sectie (zelfs geen regeleinde). Dit kan tijdens automatisch samenvoegen of tijdens bewerken gebeuren. Dit is geen probleem, want de aanwijzing verschijnt niet in het opgeslagen bestand. Als u de originele bron terug wilt, selecteert u de sectie (klik op de linker overzichtkolom) en klikt u op de knop van de bron met de gewenste inhoud (A, B of C). + +Waarom ondersteunt KDiff3 geen syntaxis-accentuering? KDiff3 gebruikt al veel kleuren voor het accentueren van verschillen. Meer accentuering zou verwarrend worden, gebruik daar een andere editor voor. + +Er staat hier zo veel informatie, maar uw vraag is nog niet beantwoord? Stuur me uw vraag. Ik stel alle opmerkingen op prijs. + + + + + + +Dankbetuigingen en licentie + +&kdiff3; - Hulpmiddel voor vergelijken en samenvoegen van bestanden en mappen +Programma copyright 2002-2005 Joachim Eibl joachim.eibl at gmx.de +Diverse gave ideeën en bugrapporten van collega's en veel mensen op het Wilde Wilde Web. Bedankt! + +Documentatie copyright © 2002-2005 Joachim Eibl joachim.eibl at gmx.de + +&meld.fouten;&vertaling.sander; +&underFDL; &underGPL; + + +Installatie + + +&kdiff3; verkrijgen + +U kunt de laatste versie van KDiff3 downloaden vanaf de webpagina http://kdiff3.sourceforge.net. KDiff3 is ook beschikbaar vaar andere platformen. Zie de website voor details. + + + + + +Vereisten + +Om alle mogelijkheden van &kdiff3; goed te gebruiken, hebt u &kde; +>3.1 nodig. Voor informatie over het draaien van KDiff3 op andere platformen zonder KDE, kijkt u op de homepage. Een lijst met wijzigingen kunt u vinden op http://kdiff3.sourceforge.net/ChangeLogof in het bestand "ChangeLog" uit het bronpakket. + + + +Compileren en installeren + +Om &kdiff3; op een systeem met KDE te installeren, typt u het volgende in de basismap van de &kdiff3;-distributie: + +% ./configure --prefix=kde-map +% make +% make install + +kde-mapgeeft de map op uw systeem aan waarin KDE zich bevindt. Als u niet zeker bent, kijk dan in het bestand README. +Omdat &kdiff3; autoconf enautomake gebruikt, zou u geen problemen mogen hebben met compileren. Als u problemen hebt, meld die dan op de mailinglijsten van &kde;. + + + + + +&documentation.index; +
+ + diff --git a/doc/nl/iteminfo.png b/doc/nl/iteminfo.png new file mode 100644 index 0000000..0b81443 Binary files /dev/null and b/doc/nl/iteminfo.png differ diff --git a/doc/nl/letter_by_letter.png b/doc/nl/letter_by_letter.png new file mode 100644 index 0000000..8ddd48a Binary files /dev/null and b/doc/nl/letter_by_letter.png differ diff --git a/doc/nl/merge_current.png b/doc/nl/merge_current.png new file mode 100644 index 0000000..3f2e341 Binary files /dev/null and b/doc/nl/merge_current.png differ diff --git a/doc/nl/new.png b/doc/nl/new.png new file mode 100644 index 0000000..df3fd25 Binary files /dev/null and b/doc/nl/new.png differ diff --git a/doc/nl/open_dialog.png b/doc/nl/open_dialog.png new file mode 100644 index 0000000..029f8d4 Binary files /dev/null and b/doc/nl/open_dialog.png differ diff --git a/doc/nl/screenshot_diff.png b/doc/nl/screenshot_diff.png new file mode 100644 index 0000000..d2865d5 Binary files /dev/null and b/doc/nl/screenshot_diff.png differ diff --git a/doc/nl/screenshot_merge.png b/doc/nl/screenshot_merge.png new file mode 100644 index 0000000..1eb935b Binary files /dev/null and b/doc/nl/screenshot_merge.png differ diff --git a/doc/nl/triple_diff.png b/doc/nl/triple_diff.png new file mode 100644 index 0000000..c635d14 Binary files /dev/null and b/doc/nl/triple_diff.png differ diff --git a/doc/nl/white_space.png b/doc/nl/white_space.png new file mode 100644 index 0000000..e40a1c7 Binary files /dev/null and b/doc/nl/white_space.png differ diff --git a/doc/pt/Makefile.am b/doc/pt/Makefile.am new file mode 100644 index 0000000..141629f --- /dev/null +++ b/doc/pt/Makefile.am @@ -0,0 +1,4 @@ +KDE_DOCS = kdiff3 +KDE_LANG = pt + + diff --git a/doc/pt/dirbrowser.png b/doc/pt/dirbrowser.png new file mode 100644 index 0000000..d3c63b2 Binary files /dev/null and b/doc/pt/dirbrowser.png differ diff --git a/doc/pt/dirmergebig.png b/doc/pt/dirmergebig.png new file mode 100644 index 0000000..b26b65c Binary files /dev/null and b/doc/pt/dirmergebig.png differ diff --git a/doc/pt/index.docbook b/doc/pt/index.docbook new file mode 100644 index 0000000..db2c21f --- /dev/null +++ b/doc/pt/index.docbook @@ -0,0 +1,2975 @@ + +KDiff3"> + + + + +]> + + + + + + +O Manual do &kdiff3; + + +Joachim Eibl
joachim.eibl at gmx.de +
+
+PedroMorais
morais@kde.org
Tradução
+
+ + +2002-2006 +Joachim Eibl + + + +&FDLNotice; + + + +2006-05-14 +0.9.90 + + + +O &kdiff3; é uma ferramenta de diferenças e junção das mesmas para ficheiros e pasta que +compara e junta dois ou três ficheiros de texto ou pastas de entrada, +mostra as diferenças linha-a-linha e carácter-a-carácter(!), +oferece uma funcionalidade de junção automática, +tem um editor para resolver confortavelmente os conflitos de junção, +oferece a transparência de rede através do KIO, +tem opções para realçar ou esconder as alterações nos espaços em branco ou comentários, +suporta o Unicode, o UTF-8 e outras codificações de ficheiros, +imprime as diferenças, +suporta as palavras-chave de controlo de versões e de junção do histórico. + +Este documento descreve o &kdiff3; versão 0.9.89. + + + + + +KDE +kdeextragear +kdiff3 +diff +juntar +CVS +'diff' triplo +comparar +ficheiros +pastas +controlo de versões +junção-por-três-vias +diferenças-nas-linhas +sincronizar +kpart +kio +transparente na rede +editor +espaços em branco +comentários + + +
+ +Introdução +Outra Interface para o Diff? +Existem várias ferramentas de detecção de diferenças. Porquê escolher o &kdiff3;? Deixe que o autor diga porque o escreveu. O &kdiff3; começou porque eu tinha de fazer uma junção difícil. A junção é necessária quando várias pessoas trabalham nos mesmos ficheiros de um projecto. Uma junção poderá de alguma forma ser automatizada, quando a ferramenta de junção não só tem os novos ficheiros modificados (chamados de 'ramificações' ou 'branches'), mas também o ficheiro original (chamado de 'base'). A ferramenta de junção irá escolher automaticamente as modificações que só foram feitas numa das ramificações. Quando vários contribuintes alteram as mesmas linhas, então a ferramenta de junção detecta um conflito que terá de ser resolvido manualmente. "A junção foi então difícil porque um dos colaboradores alterou várias coisas e corrigiu a indentação em vários sítios. Outro também alterou bastante texto, o que resultou em vários conflitos de junção". "A ferramenta que usei então só mostrava as linhas modificadas, mas não o que tinha sido alterado dentro dessas linhas. E não havia nenhuma informação sobre os locais em que só a indentação tinha sido alterada. A junção foi um pequeno pesadelo por isso". "Daí, foi este o início. A primeira versão podia mostrar as diferenças dentro de uma linha e mostrava as diferenças de espaços em branco. Depois, muitas outras funcionalidades foram adicionada para aumentar a utilidade". "Por exemplo, se você quiser comparar algum texto rapidamente, então poderá copiá-lo para a área de transferência e colá-lo noutra janela de diferenças". "Uma funcionalidade que necessitou de um grande esforço foi a comparação de pastas e a funcionalidade de junção, o que transformou o programa quase num navegador de ficheiros completo". Espero que o &kdiff3; funcione para si também. Divirta-se! Joachim Eibl (2003) + + +Imagens e Funcionalidades +Esta imagem mostra a diferença entre dois ficheiros de texto +(A usar uma versão anterior do &kdiff3;): + + + + +A junção por 3-vias é suportada por completo. Isto é útil se duas pessoas alterarem o código independentemente. O ficheiro original (a base) é usado para ajudar o &kdiff3; a seleccionar automaticamente as alterações correctas. O editor de junções por baixo das janelas de diferenças permite-lhe resolver os conflitos, enquanto lhe mostra o resultado que você irá obter. Até poderá editar o resultado. Esta imagem mostra três ficheiros de entrada a serem reunidos: + + + + + +O &kdiff3; também o ajuda a comparar e a juntar pastas completas. Esta imagem mostra o &kdiff3; durante a junção de pastas: + + + + + + +Mais Funcionalidades +Visualizador de Diferenças Linha-a-Linha e Carácter-a-Carácter +Usando as possibilidades de um ambiente gráfico a cores, o &kdiff3; mostra exactamente o que é a diferença. Quando tiver de fazer várias revisões de código, irá gostar disto. + + + + + +Ver as Diferenças de Espaços em Branco de uma Vez +Os espaços e as tabulações que são diferentes aparecem visivelmente. Quando as linhas diferem apenas pelo número de espaços em branco, isto poderá ser visto num instante se olhar para a coluna do resumo do lado esquerdo. (Não há mais problemas quando as pessoas mudam a indentação). + + + + + +Diferenças Triplas +Analise três ficheiros e veja no que eles diferem. As janelas da esquerda/meio/direita são intituladas A/B/C e têm as cores azul/verde/magenta, respectivamente. Se um dos ficheiros for igual e o outro for diferente numa linha, então a cor mostra qual o ficheiro que é diferente. A cor vermelha indica que ambos os ficheiros são diferentes. + + + + + +Junção Confortável de Dois ou Três Ficheiros de Entrada +O &kdiff3; pode ser usado para juntar dois ou três ficheiros de entrada e junta automaticamente o máximo possível. O resultado é apresentado numa janela editável em que a maioria dos conflitos poderá ser resolvida com um simples 'click' do rato: Seleccione os botões A/B/C na barra de botões para seleccionar a origem que deverá ser usada. Dado que esta janela de resultado é um editor, até mesmo os conflitos que necessitem de mais correcções poderão ser resolvidos aqui sem necessitarem de outra ferramenta. + + +E ... + + Navegação rápida através de botões. + Um 'click' do rato numa coluna de resumo sincroniza todas as janelas para mostrarem a mesma posição. + Seleccionar e copiar de qualquer janela para colar na janela do resultado da junção. + Uma coluna de visão geral que mostra onde estão as alterações e os conflitos. + As cores são ajustáveis de acordo com as suas preferências específicas. + Um tamanho de tabulação ajustável. + Uma opção para inserir espaço em vez de tabulações. + Abertura confortável dos ficheiros através de uma janela ou da linha de comandos. + Procurar por sequências de texto em todas as janelas de texto. Procurar (Ctrl-F) e Procurar o Seguinte (F3). + Mostrar os números de linha para cada linha. + Colar o conteúdo da área de transferência e arrastar o texto para uma janela de introdução de diferenças. + Transparência na rede através do KIO. + Pode ser usado como visualizador de diferenças no KDevelop 3. + Mudança de linha para as linhas compridas para as repartir. + Suporte para o Unicode, UTF-8 e outras codificações. + Suporte para as línguas escritas da direita-para-esquerda. + ... + + + + + +Comparação e Junção de Ficheiros + +Opções da Linha de Comandos + +Comparar 2 ficheiros: +kdiff3 ficheiro1 ficheiro2 + + + +Juntar 2 ficheiros: +kdiff3 ficheiro1 ficheiro2 +kdiff3 ficheiro1 ficheiro2 resultado + + + +Comparar 3 ficheiros: +kdiff3 ficheiro1 ficheiro2 ficheiro3 + + + +Juntar 3 ficheiros: +kdiff3 ficheiro1 ficheiro2 ficheiro3 +kdiff3 ficheiro1 ficheiro2 ficheiro3 resultado + +Repare que o ficheiro1 será tratado como base para o ficheiro2 e o ficheiro3. + + +Caso especial: Ficheiros com o mesmo nome +Se todos os ficheiros tiverem o mesmo nome mas estiverem em pastas diferentes, poderá reduzir o trabalho de escrita se indicar apenas o nome do ficheiro para o primeiro parâmetro. P.ex.: +kdiff3 pasta1/ficheiro pasta2 pasta3 + + + +Linha de comandos para iniciar uma comparação ou junção de pastas: +É bastante semelhante, mas diz respeito agora apenas às pastas. +kdiff3 pasta1 pasta2 +kdiff3 pasta1 pasta2 destino +kdiff3 pasta1 pasta2 pasta3 +kdiff3 pasta1 pasta2 pasta3 destino + +Para a comparação e junção de pastas, poderá continuar a ler aqui. + + +Outras opções da linha de comandos +Para mais informações sobre as opções da linha de comandos use +kdiff3 --help + +Exemplo do resultado: +kdiff3 --help +Opções: + -m, --merge Junta o resultado. + -b, --base ficheiro Ficheiro de base explícito. Para compatibilidade com certas ferramentas. + -o, --output ficheiro Ficheiro de resultado. O -m é implícito. P.ex.: -o novo_ficheiro.txt + --out ficheiro O ficheiro de resultado, mais uma vez. (Para compatibilidade com certas ferramentas.) + --auto Sem interface gráfica se todos os conflitos são resolúveis. (Necessita do -o) + --qall Não resolve os conflitos automaticamente. (Para compatibilidade...) + --L1 nome1 Substituto visível do nome do ficheiro 1 (base). + --L2 nome2 Substituto visível do nome do ficheiro 2. + --L3 nome3 Substituto visível do nome do ficheiro 3. + -L, --fname nome Um substituto visível alternativo para o nome. Use este uma vez para cada ficheiro de entrada. + --cs texto Substitui uma opção de configuração. Use uma vez para cada opção. P.ex. --cs "AutoAdvance=1" + --confighelp Mostra uma lista com as opções de configuração e os valores actuais. + --config ficheiro Usa um ficheiro de configuração diferente. + +A opção permite-lhe ajustar um valor de configuração que, de outro modo, só é ajustável através das janelas de configuração. Mas tenha em mente que, quando o &kdiff3; então terminar, o valor alterado será gravado com as outras opções. Com o , poderá descobrir os nomes dos itens disponíveis e dos valores actuais. +Através do , poderá indicar um ficheiro de configuração diferente. Quando usar frequentemente o &kdiff3; com opções completamente diferentes, isto permitir-lhe-á mudar rapidamente entre elas. + +Ignorar as opções da linha de comandos +Muitas pessoas querem usar o &kdiff3; com alguns sistemas de controlos de versões. Mas quando esse sistema de controlo de versões chama o &kdiff3;, usando os parâmetros da linha de comandos que o &kdiff3; não reconhece, então o &kdiff3; termina com um erro. A configuração da integração permite indicar parâmetros da linha de comandos que deverão ser ignorados pelo &kdiff3;. Eles irão aparecer na ajuda de utilização, como neste exemplo: +--xpto Ignorado. (Definido pelo utilizador.) + + + Opções da linha de comandos a ignorar:Uma lista de opções, separadas pelo ponto-e-vírgula ';'. Quando alguma destas opções aparecer na linha de comandos, então o &kdiff3; ignorá-la-á e irá executar sem indicar qualquer erro. (Por omissão é "u;query;html;abort"). + +Quando isto não for suficiente, então recomenda-se que crie um programa que faça a tradução das opções. + + + + +Janela de Abertura +Dado que é necessário seleccionar vários ficheiros, o programa tem uma janela de abertura especial: + + + +A janela de abertura permite editar os nomes dos ficheiros à mão, seleccionando um ficheiro através do navegador dos ficheiros ("Ficheiro...") ou permite escolher os ficheiros recentes a partir das listas respectivas. Se abrir a janela de novo, então os nomes actuais irão nela permanecer. O terceiro ficheiro de entrada não é obrigatório. Se o item do "C" continuar em branco, então só será efectuada uma análise de diferenças com dois ficheiros. Poderá também seleccionar uma pasta com o "Dir...". Se for indicado como A uma pasta, então será iniciada uma comparação/junção de pastas. Se o A se referir a um ficheiro, mas o B, o C ou o destino corresponderem a pastas, então o &kdiff3; usa o nome do ficheiro em A nas pastas indicadas. Se a "Junção" estiver seleccionada, então o campo "Resultado" fica editável. Mas não é obrigatório indicar o nome do ficheiro do resultado imediatamente. Você poderá também adiar isto até à gravação. O botão "Configurar..." abre a janela de opções, para que possa definir as opções antes de executar a análise. + + +Colar e Arrastar Dados +Em algumas ocasiões, você poderá querer comparar partes de um texto que não está em nenhum ficheiro próprio. O &kdiff3; também lhe permite colar texto da área de transferência para a janela de introdução de diferenças que esteja em primeiro plano. A análise de diferenças irá ocorrer então. Na janela de abertura, você não irá necessitar de indicar ficheiros, fechando-a então com o "Cancelar". O utilizador também poderá usar o 'drag and drop': Arraste um ficheiro de um gestor de ficheiros ou o texto seleccionado de um editor e arrastá-lo para uma janela de introdução de diferenças. Qual é a ideia? Algumas vezes um ficheiro contém duas funções semelhantes, mas a verificação sobre as semelhanças entre elas é um grande esforço, se você precisar de criar primeiro dois ficheiros e depois carregá-los. Assim, poderá simplesmente copiar, colar e comparar as secções relevantes. Nota: De momento, você não poderá arrastar nada a partir do &kdiff3;. Só é permitido largar dados nas janelas de introdução de diferenças. Atenção: Alguns editores ainda interpretam à mesma o 'drag and drop' noutro programa como o Cortar (em vez do Copiar) e Colar. Os seus dados originais poderão deste modo perder-se. + + +Comparar os Ficheiros e Interpretar a Informação nas Janelas de Entrada + + + +Linha de InformaçãoNo cimo de cada janela de texto existe a sua "linha de informação". As linhas de informação das janelas de introdução de diferenças contêm uma letra "A", "B" ou "C", o nome do ficheiro e o número da primeira linha visível da janela. (Lembre-se que a janela "C" é opcional). Cada linha de informação aparece com uma cor diferente. (Se as localizações forem demasiado extensas para caberem, poderá mover o cursor do rato para cima da linha de informação, de modo a que apareça uma dica com o nome completo). Quando tiver seleccionado outro ficheiro através de navegação ou acabar de editar o nome do ficheiro aqui, carregando para tal em Enter, o novo ficheiro será carregado e comparado com os ficheiros já carregados previamente. ColoraçãoAs três janelas de entrada têm atribuídas as letras "A", "B" e "C". O "A" tem uma cor azul, o "B" tem uma verde e o "C" magenta. (Estas são as cores por omissão, mas podem ser alteradas no menu de configuração). Quando é detectada uma diferença, então a cor mostra qual o ficheiro de entrada que é diferente. Quando os outros ficheiros de entrada diferem todos, então a cor usada para exprimir isto é a vermelha por omissão ("Cor do conflito" na Configuração). Este esquema de cores é particularmente útil no caso de três ficheiros de entrada, os quais serão vistos na próxima secção (Juntar). Coluna de ResumoÀ esquerda de cada texto está a "coluna de resumo". Se ocorrerem diferenças numa linha, então a coluna do resumo mostra a cor respectiva. Para uma diferença por espaços em branco, o resumo fica axadrezado. Para as linguagens de programação em que os espaços em branco não são muito importantes, isto é útil para ver de um modo geral se existe algo de importante modificado. (No C/C++, os espaços em branco só são importantes dentro de cadeias de caracteres, comentários, pré-processador e em algumas outras situações esotéricas. A linha vertical que separa a coluna do resumo e o texto é interrompida (tracejada), se o ficheiro de entrada não tiver aí nenhuma linha. Quando a mudança de linha estiver activa, então esta linha vertical aparece ponteada para as linhas repartidas. Coluna de ResumoDo lado direito, aparece uma coluna de "resumo" à esquerda da barra de posicionamento vertical. Ela mostra a coluna de resumo comprimida dos dados de "A". Todas as diferenças e conflitos ficam visíveis numa vista rápida. Quando só são usadas duas janelas de entrada, então todas as diferenças aparecem a vermelho, dado que cada diferença é também um conflito. Um rectângulo preto delimita a parte visível dos dados de entrada. Para as linhas de dados bastante compridas, quando o número de linhas de dados é maior do que a altura da coluna de resumo em pixels, então várias linhas de dados de entrada irão partilhar uma linha de resumo. Um conflito, neste caso, terá então uma prioridade elevada sobre as diferenças simples, que por sua vez têm prioridade sobre a ausência de alterações, como tal não se perde nenhuma diferença ou conflito neste caso. Se carregar nesta coluna de resumo, será mostrado o texto correspondente. Alinhar Manualmente as LinhasEm alguns casos, o algoritmo coloca as linhas erradas a seguir umas às outras. Ou se deseja comparar um pedaço de texto com outro que se encontra numa posição completamente diferente no outro ficheiro. Para esses casos, poderá indicar manualmente ao &kdiff3; para alinhar certas linhas. Marque o texto, com o qual deseja melhorar o alinhamento, com o rato como faria na cópia e colagem na primeira janela de diferenças e escolhe então o "Adicionar o Alinhamento Manual das Diferenças" na janela de "Diferenças" (atalho de teclado "Ctrl-Y") . Irá aparecer uma barra laranja na coluna do resumo, a seguir ao texto escolhido. Repita isto para a segunda e (se disponível) a terceira janela de diferenças. O &kdiff3; irá calcular imediatamente de novo as diferenças sempre que fizer isto, alinhando as linhas escolhidas. Obviamente, algumas das linhas anteriormente correspondentes poderão não corresponder mais de novo. De momento, a junção não suporta a utilização da ajuda de diferenças manual. + + + +Juntar e a Janela do Editor do Resultado da Junção + + + +A janela do editor do resultado da junção (por baixo das janelas de introdução de diferenças) também tem uma linha de informação no topo que mostra "Resultado:", o nome do ficheiro e "[Modificado]" se você tiver alterado alguma coisa. Normalmente irá conter algum texto resultante das funcionalidades de junção automática, mas frequentemente irá conter também conflitos. A gravação está desactivada até que todos os conflitos estejam resolvidos. (Use os botões para "Ir para o Conflito por Resolver Anterior/Seguinte" para descobrir os conflitos que faltam.) Com apenas dois ficheiros de entrada, todas as diferenças são também conflitos que necessitam de ser resolvidos manualmente. Com três ficheiros de entrada, o primeiro ficheiro é tratado como a base, enquanto que o segundo e o terceiro contêm as modificações. Quando, em qualquer linha, só o ficheiro B ou o C tiverem sido alterados mas não ambos, então será seleccionada a origem alterada. Só quando o B e o C alteraram as mesmas linhas é que a ferramenta detecta um conflito que deverá ser resolvido manualmente. Quando o B e o C são iguais mas não são o mesmo que o A, é seleccionado o C. A Coluna de ResumoA janela do editor do resultado da junção também tem uma coluna de resumo à esquerda. Mostra a letra do ficheiro de entrada para o qual foi seleccionada a linha ou nada, se todas as três origens são iguais nessa linha. Para os conflitos, ela mostra um ponto de interrogação "?" e a linha mostra "<Conflito na Junção>", tudo a vermelho. Dado que a resolução de conflitos linha a linha poderá levar bastante tempo, as linhas são reunidas em grupos com as mesmas características de diferenças e conflitos. Mas os conflitos só com espaços em branco são separados dos outros conflitos para facilitar a junção dos ficheiros em que a indentação foi alterada em várias linhas. Configurar o Grupo Actual e Sincronizar a Posição de Visualização da Junção e DiferençasAo carregar na coluna do resumo com o &LMB; em ambas as janelas, o grupo que pertença a essa linha será seleccionado em todas as janelas e o início desse grupo será mostrado. (Isto poderá envolver um salto de posição automático para a janelas se o início do grupo não estiver visível). Este grupo fica então o "grupo actual". Fica realçado com a "Cor de fundo do intervalo actual" e aparece uma barra preta do lado esquerdo do texto. Escolher as Entras A, B ou C para os Conflitos e Edições ActuaisA barra de botões por baixo do menu contém três botões de selecção que contêm as letras "A", "B" e "C". Carregue no selector de entrada para inserir (ou remover se já estiver inserido) as linhas da origem respectiva. Para escolher as linhas de várias entradas, carregue nos botões respectivos pela ordem necessária. Por exemplo, se quiser que as linhas de "B" apareçam antes das linhas de "A" no resultado, carregue primeiro em "B" e depois em "A". Se usar a opção de avanço automático ("Ir automaticamente para o próximo conflito não resolvido após a selecção da fonte"), deverá desactivar isto antes de escolher as linhas de várias entradas ou se quiser editar as linhas após a sua escolha. Caso contrário, o &kdiff3; irá saltar para o próximo conflito após a selecção da primeira entrada. Normalmente é útil editar directamente o resultado da junção. A coluna de resumo irá mostrar "m" por cada linha modificada manualmente. Quando, por exemplo, as diferenças estão alinhadas de forma que não seja satisfatório escolher simplesmente as entradas, então poderá marcar o texto necessário e usar a cópia e colagem normais para colocar no resultado da junção. Algumas das vezes, quando uma linha é removida tanto por junção automática como por edição e não ficam mais nenhumas linhas nesse grupo, então o texto "<Sem linha de origem>" irá aparecer nessa linha. Isto é apenas um substituto para o grupo, quando decidir mudar de ideias e seleccionar algum texto de origem de novo. Este texto não irá aparecer no ficheiro gravado ou em qualquer selecção que deseje copiar e colar. O texto "<Conflito na Junção>" irá aparecer na área de transferência se copiar e colar algum texto que tenha uma dessas linhas. Mas tenha à mesma cuidado ao fazê-lo. Escolher a Entrada A, B ou C para Todos os ConflitosA junção normal irá começar por resolver os conflitos simples automaticamente. Mas o menu "Juntar" oferece algumas acções para outros usos comuns. Se você tiver de seleccionar a mesma origem para a maioria dos conflitos, então poderá escolher "A", "B" ou "C" em qualquer lado ou apenas para os conflitos que continuem ainda por resolver ou então para os conflitos de espaços em branco por resolver. Se quiser decidir cada um dos deltas por si próprio, poderá "Passar os deltas para conflitos". Ou, se preferir voltar às escolhas automáticas do &kdiff3;, seleccione então a opção "Resolver automaticamente os conflitos simples". Nesse caso, o &kdiff3; irá reiniciar a junção. Para as acções que alteram as suas modificações anteriores, o &kdiff3; pedir-lhe-á uma confirmação antes de prosseguir. Nota: Ao escolher uma das origens para os conflitos que não sejam de espaços em branco e as opções "Ignorar os Números" ou "Ignorar os Comentários de C/C++" forem usadas, então as alterações nos números ou comentários serão tratadas como espaços em branco também. Junção Automática das Palavras-Chave e do Histórico do Controlo de Versões (Registo)Muitos sistemas de controlo de versões suportam palavras-chave especiais no ficheiro. (p.ex. "$Date: 2006-03-31 15:21:46 +0100 (Sex, 31 Mar 2006) $", "$Header$", "$Author: scripty $", "$Log$" etc.) Durante o envio de novas versões, o sistema de controlo de versões (SCV) muda essas linhas. Por exemplo, o "$Date: 2006-03-31 15:21:46 +0100 (Sex, 31 Mar 2006) $" passará a "$Date: 2006-03-30 17:52:41 +0200 (Thu, 30 Mar 2006) $". Dado que esta linha será diferente em cada versão do ficheiro, iria necessitar de intervenção manual durante a junção. O &kdiff3; oferece a junção automática destes itens. Para as linhas simples que correspondam à opção da "Expressão regular da junção automática" para todos os ficheiros de entrada, o &kdiff3; irá escolher a linha do B ou - se disponível - do C. (Para além disso, é necessário que as linhas em questão se alinhem na comparação e a linha anterior não contenha conflitos). Esta junção automática pode tanto correr automaticamente após o início de uma junção (active a opção "Executar a junção automática da expressão regular no início da junção") como posteriormente, através do menu de junção "Executar a Junção Automática da Expressão Regular". A junção automática para o histórico do controlo de versões (também chamado de "registo") é também suportada. A junção automática do histórico tanto poderá correr automaticamente quando iniciar a junção, activando para tal a opção "Juntar o histórico do controlo de versões no início da junção" ou mais tarde através do menu de junção "Resolver Automaticamente os Conflitos do Histórico". Normalmente, o histórico do controlo de versões começa por uma linha que contém a palavra-chave "$Log$". Isto deverá corresponder à opção "Expressão regular do início do histórico". O &kdiff3; detecta quais as linhas subsequentes no histórico, analisando os caracteres iniciais que aparecem antes da palavra-chave "$Log$". Se também aparecer o mesmo "comentário inicial" nas linhas seguintes, então estas também serão incluídas no histórico. Durante o envio de cada nova versão, o SCV grava uma linha única que indica a versão, a data e a hora, seguida de linhas com os comentários dos utilizadores. Essas linhas formam um item de histórico. Esta secção do histórico vai crescendo com o envio de versões novas e os itens mais recentes aparecem no topo (a seguir à linha inicial do histórico). Quando, em desenvolvimentos paralelos, dois ou mais programadores enviam versões em ramificações diferentes, o histórico da junção irá conter vários itens que aparecem como conflitos na junção das ramificações. Dado que a junção destes se poderá tornar demasiado aborrecidas, o &kdiff3; oferece o suporte com duas estratégias possíveis: basta introduzir a informação de histórico de ambas as contribuições no topo ou ordenar a informação de histórico do utilizador, usando uma chave definida pelo mesmo. O método basta-inserir-todos-os-itens é mais fácil de configurar. O &kdiff3; só precisa de um método para detectar as linhas que pertencem a um item de histórico. A maioria dos SCV inserem uma linha em branco, após cada item do histórico. Se não existirem mais linhas em branco, então este será um critério suficiente para o &kdiff3;. Basta introduzir uma "Expressão regular do início do item de histórico" em branco. Se o critério da linha vazia não for suficiente, poderá indicar uma expressão regular para detectar o início do item do histórico. Lembre-se que o &kdiff3; irá remover os itens de histórico duplicados. Se um item de histórico aparecia várias vezes no histórico de um ficheiro de entra, só um irá aparecer no resultado. Se quiser ordenar o histórico, então terá de indicar como deverá ser gerada a chave de ordenação. Use parêntesis na "Expressão regular do início do item de histórico" para agrupar as partes da expressão regular que deverão mais tarde ser usadas na chave de ordenação. Indique depois a "Ordem da chave de ordenação do início do item de histórico", indicando para tal uma lista de números separados por ",", referentes à posição do grupo na expressão regular. Dado que isto não é tão simples de pôr a funcionar logo, poderá testar e melhorar as expressões regulares e gerar as chaves, numa janela dedicada, se carregar no botão "Testar as suas expressões regulares". Exemplo: Assuma um histórico que se pareça ao seguinte: +/************************************************************************** +** HISTORY: $Log: \janela_do_ze\Aplicacao\src\algoritmo-complexo.cpp $ +** +** \principal\ramo_integracao_12 2 Abr 2001 10:45:41 ze +** Juntou-se a ramificação manel_versao_15. +** +** \principal\ramo_correccao_erros_7\1 30 Mar 2001 19:22:05 pedro +** Melhorias na velocidade da sub-rotina convertToMesh(). +** Correcção do estoiro. +**************************************************************************/ + A linha inicial do histórico corresponde à expressão regular ".*\$Log.*\$.*". Depois, seguem-se os itens de histórico. A linha com a palavra-chave "$Log$" começa com dois "*", após os quais se segue um espaço. O &kdiff3; usa o primeiro texto não-branco como "comentários iniciais" e assume que o histórico termina na primeira linha sem esse comentário inicial. Neste exemplo, a última linha termina com um texto que também começa por dois "*" mas, em vez de um espaço, seguem-se mais "*". Como tal, esta linha termina o histórico. Se a ordenação do histórico não for necessária, então a expressão regular do início de linha do item de histórico poderá ser algo como se segue. (Esta linha está dividida em dois, por não caber de outra forma.) +\s*\\principal\\\S+\s+[0-9]+ (Jan|Fev|Mar|Abr|Mai|Jun|Jul|Ago|Set|Out|Nov|Dez) + [0-9][0-9][0-9][0-9] [0-9][0-9]:[0-9][0-9]:[0-9][0-9]\s+.* + Para mais detalhes sobre as expressões regulares, veja por favor a documentação da Trolltech sobre expressões regulares. Repare que o "\s" (com o "s" minúsculo) corresponde a qualquer espaço em branco e o "\S" (com o "S" maiúsculo) corresponde a qualquer carácter não-branco. No nosso exemplo, o início do item de histórico, contém primeiro a informação da versão com a expressão regular "\\principal\\\S+", a data consiste no dia "[0-9]+", mês "(Jan|Fev|Mar|Abr|Mai|Jun|Jul|Ago|Set|Out|Nov|Dez)" e no ano "[0-9][0-9][0-9][0-9]", a hora "[0-9][0-9]:[0-9][0-9]:[0-9][0-9]" e, finalmente, o nomes do programador ".*". Lembre-se que o comentário inicial (no exemplo "**") já será removido pelo &kdiff3; antes de tentar a correspondência, logo a expressão regular começa com uma correspondência para zero ou mais caracteres em branco "\s*". Se precisar de um histórico ordenado, então deverá ser calculada a chave de ordenação. Para tal, as partes relevantes da expressão regular deverão ser agrupadas entre parêntesis. (os parêntesis extra poderão ficar à mesma, mesmo que a ordenação do histórico esteja desactivada.) +\s*\\principal\\(\S+)\s+([0-9]+) (Jan|Fev|Mar|Abr|Mai|Jun|Jul|Ago|Set|Out|Nov|Dez) + ([0-9][0-9][0-9][0-9]) ([0-9][0-9]:[0-9][0-9]:[0-9][0-9])\s+(.*) + Os parêntesis contêm agora 1. a informação de versão, 2. dia, 3. mês, 4. ano, 5. hora, 6. nome. Mas, se pretender ordenar por data e hora, é necessário construir uma chave com os elementos por uma ordem de aparência diferente: Primeiro o ano, seguido do mês, dia, hora, informação de versão e nome. Daí, a ordem da chave de ordenação será "4,3,2,5,1,6". Dado que os nomes dos meses não são bons para ordenar (o "Abr" viria em primeiro lugar), o &kdiff3; detecta em que ordem os nomes dos meses foram dados e usa esse número em alternativa ("Abr"->"04"). E, se for encontrado um número puro, será transformado num valor de 4 algarismos com zeros iniciais para ordenar. Finalmente, a chave de ordenação resultante da linha inicial do primeiro item de histórico será: 2001 04 0002 10:45:41 ramo_integracao_12 ze + +Para mais informações, veja também a Configuração de Diferenças e Junção. + + + +Navegação e Edição +Muita da navegação será feita com as barras de posicionamento e com o rato, mas você poderá também navegar com as teclas. Se carregar numa das janelas, então poderá usar as teclas de cursores, o Page Up, o Page Down, o Home, o End, o Ctrl-Home ou o Ctrl-End como iria usar noutros programas. A coluna de resumo ao lado da barra de posicionamento vertical dos ficheiros de entrada poderá também ser usada para navegar se carregar nela. Poderá também usar a roda do rato para subir ou descer. No editor do resultado da junção, poderá também usar as outras teclas para editar. Poderá alternar entre o modo de inserção ou sobreposição com a tecla Insert. (Por omissão, está no modo de inserção). Um 'click' com o botão esquerdo do rato em qualquer coluna de resumo irá sincronizar todas as janelas para mostrar o início do mesmo grupo de linhas (tal como é explicado em Configurar o Grupo Actual e Sincronizar a Posição da Janela de Junção e Diferença). A barra de botões também contém sete botões de navegação com os quais poderá saltar para a primeira/última/actual diferença, para a diferença seguinte/anterior (Ctrl-Baixo/Ctrl-Cima), para o conflito seguinte/anterior (Ctrl-Pg Down/Ctrl-Pg Up) ou para o conflito seguinte/anterior por resolver. Repare que, para o &kdiff3;, um "conflito" que não foi resolvido automaticamente no início da junção irá permanecer como "conflito", mesmo que resolvido. Daí a necessidade de distinguir os "conflitos por resolver". +Avanço Automático +Existe também um botão "Ir automaticamente para o próximo conflito por resolver após a selecção do código" (Avanço Automático). Se activar esta opção, então sempre que seleccionar uma origem, o &kdiff3; irá saltar para o próximo conflito por resolver automaticamente. Isto poderá ajudar quando quiser sempre escolher apenas uma origem. Quando precisar de ambas as origens, ou se quiser editar depois de seleccionar, então provavelmente irá querer desligar esta opção. Antes de prosseguir para o próximo conflito por resolver, o &kdiff3; mostra-lhe o efeito da sua escolha durante algum tempo. Este atraso é ajustável na Configuração da Diferença & Junção: Poderá indicar o "Atraso no avanço automático" num valor entre 0 e 2 000 milisegundos. Sugestão: Cansado de muitos 'clicks'? - Use um atraso de avanço automático reduzido e os atalhos Ctrl-1/2/3 para seleccionar o A/B/C em muitos conflitos. + + + +Seleccionar, Copiar e Colar +As janelas de entrada não mostram nenhum cursor, como tal as selecções necessitam de ser feitas com o rato, ao carregar com o botão esquerdo do rato no início, mantendo o botão do rato carregado e indo até ao fim, momento em que larga o botão do rato de novo. Poderá também seleccionar uma palavra se fizer duplo-click nela. No editor do resultado da junção poderá também seleccionar com o teclado se mantiver a tecla Shift carregada enquanto navega com as teclas de cursores. Se a selecção ultrapassar o intervalo visível, você poderá passar o rato por cima dos extremos da janela, o que fará com que o &kdiff3; se desloque nessa direcção. Para as selecções muito grandes, poderá também usar as teclas de navegação, enquanto mantém pressionado o rato. P. ex., use o Page Up e o Page Down para ir rapidamente para uma dada posição. Na posição final, largue o botão do rato. Para seleccionar tudo na janela actual, use a opção do menu "Editar"->"Seleccionar Tudo" (Ctrl-A). Para copiar para a área de transferência, precisa de carregar no botão "Copiar" (Ctrl-C ou Ctrl-Insert). Porém, existe uma opção para "Copiar Automaticamente a Selecção". Se esta estiver activa, então tudo o que seleccionar será copiado imediatamente, sem que você tenha de copiar explicitamente. Todavia, preste atenção ao usar isto, dado que o conteúdo da área de transferência poderá ficar assim destruído por acidente. O "Cortar" (Ctrl-X ou Shift-Delete) copia para a área de transferência e apaga o texto seleccionado. O "Colar" (Ctrl-V ou Shift-Insert) insere o texto da área de transferência na posição do cursor ou na selecção actual. Se colar numa das janelas de entrada de diferenças, o conteúdo da área de transferência será mostrado nessa janela e a comparação irá reiniciar imediatamente. Isto é útil se quiser pegar rapidamente num pedaço de texto de qualquer local e compará-lo com outra coisa, sem ter de criar ficheiros primeiro. + + +Gravar +A gravação só será permitida quando todos os conflitos tiverem sido resolvidos. Se o ficheiro já existir e a opção de "Salvaguarda dos ficheiros" estiver activa, então o ficheiro existente verá o seu nome mudado de modo a ter uma extensão ".orig", mas se existir um destes ficheiros será removido. Quando você sair ou iniciar outra análise de diferenças e os dados não tiverem sido gravados ainda, então o &kdiff3; irá perguntar se você deseja gravar, cancelar ou prosseguir sem gravar. (O &kdiff3; não lida com nenhuns sinais ('signals') do sistema. Por isso, se fizer um "kill" ao &kdiff3;, então os seus dados serão perdidos.) Os fins de linha são gravados de acordo com o método normal do sistema operativo subjacente. Para os UNIXes, cada linha terminada com um carácter de 'linefeed' "\n", enquanto que nos sistemas baseados em Win32, cada linha termina com um 'carriage-return' + um 'linefeed' "\r\n". O &kdiff3; não preserva os fins de linha dos ficheiros de entrada, o que também significa que você não deverá usar o &kdiff3; com ficheiros binários. + + +Procurar Sequências de Texto +Você poderá procurar por uma sequência de texto em qualquer janela de texto do &kdiff3;. O comando "Procurar ..." (Ctrl-F) no menu "Editar" abre uma janela que lhe permite indicar o texto a procurar. Poderá também seleccionar as janelas que deverão ser pesquisadas. A procura irá ter início sempre no topo do ficheiro. Use o comando "Procurar o Seguinte" (F3) para prosseguir com a próxima ocorrência. Se optar por procurar em várias janelas, então a primeira janela será percorrida de alto a baixo antes de a procura começar na próxima janela a partir do topo de novo, etc. + + +Impressão +O &kdiff3; suporta a impressão das diferenças do ficheiro de texto. O comando "Imprimir..." (Ctrl-P) no menu Ficheiro abre uma janela que lhe permite seleccionar a impressora e ajustar as outras opções. Existem várias possibilidades para ajustar o intervalo. Devido às diferentes janelas de impressão nos diferentes sistemas operativos, o método para obter certas selecções de intervalos varia. + + Tudo:Imprime tudo. + Actual:Imprime uma página que começa na primeira linha visível da janela. (Nos sistemas sem esta opção, isto poderá ser obtido se indicar o número de página 10000 na impressão.) + Selecção:Antes de optar por imprimir, seleccione o texto com o rato (como acontece na cópia e colagem) numa das janelas de entrada das diferenças, para definir a linha inicial e final. Se não foi seleccionado nenhum texto numa das janelas de entrada, então esta opção não estará disponível. (Nos sistemas sem esta opção, isto poderá ser conseguido se indicar para imprimir a página 9999.) + Intervalo:Indica a primeira e última página. + +As outras opções importantes serão retiradas das opções normais: + Tamanho e tipo de letra + Mostrar os números de linha + Mudança de linha + Cores + etc. + +A formatação em paisagem (na horizontal) também é recomendada na impressão. + + +Opções +As opções e a lista de ficheiros recentes serão gravadas quando você sair do programa e serão carregadas de novo quando o iniciar. (Menu Configuração->Configurar o &kdiff3;...) +Tipo de Letra +Seleccione um tipo de letra monoespaçado. (Em alguns sistemas, esta janela irá também apresentar os tipos de letra de tamanho variável, mas você não os deverá usar.) + + Texto Itálico para os Deltas:Se seleccionar isto, então as diferenças no texto serão escritas com a versão itálica do tipo de letra seleccionado. Se o tipo de letra não suportar caracteres itálicos, isto não fará nada. + + + + +Cores + + Cor principal:Normalmente preto. + Cor de fundo:Normalmente branco. + Cor de Fundo das Diferenças:Normalmente a cinzento claro. + Cor A:Normalmente a azul escuro. + Cor B:Normalmente a verde escuro. + Cor C:Normalmente a magenta escuro. + Cor do Conflito:Normalmente a vermelho. + Cor de fundo do intervalo actual:Normalmente a amarelo claro. + Cor de fundo da diferença do intervalo actual:Normalmente a amarelo escuro. + Cor para os intervalos de diferenças seleccionados manualmente:Normalmente a laranja. + Cor dos ficheiros mais recentes na comparação de pastas:Normalmente a verde. + Cor dos ficheiros mais antigos na comparação de pastas:Normalmente a vermelho. + Cor dos ficheiros intermédios na comparação de pastas:Normalmente a amarelo escuro. + Cor dos ficheiros em falta na comparação de pastas:Normalmente preto. + +A mudança das cores na comparação das pastas só fará efeito quando iniciar a próxima comparação de pastas. +Nos sistemas com apenas 16 ou 256 cores, alguns dos tons acima descritos não estão disponíveis de forma pura. Nesses sistemas, o botão "Predefinições" irá escolher uma cor pura. + + +Configuração do Editor + + O Tab insere espaços:Se isto estiver desactivado e você carregar na tecla do tabulador, será inserido um carácter de tabulação, caso contrário serão inseridos os espaços com a quantidade apropriada. + Tamanho das tabulações:Poderá ser ajustado de acordo com as suas necessidades específicas. Por omissão é igual a 8. + Indentação automática:Ao carregar em Enter ou Return, a indentação da linha anterior é usada para uma nova linha. + Copiar automaticamente a selecção:Quando activo, qualquer selecção é posta automaticamente na área de transferência e não precisa de a copiar explicitamente. + Estilo de fim de linha:Ao gravar, o utilizador poderá seleccionar o estilo do fim de linha que prefere.O valor por omissão é a escolha comum para o sistema operativo usado. + + + +Configuração da Diferença e Junção +Ao comparar os ficheiros, o &kdiff3; tenta primeiro corresponder as linhas iguais em todos os ficheiros de entrada. Só durante este passo é que poderá ignorar os espaços em branco. O segundo passo compara cada uma das linhas. Neste passo, os espaços em branco não serão ignorados. Também durante a junção os espaços em branco não serão ignorados. + + + Manter o 'Carriage Return':Alguns editores (em alguns sistemas) gravam os caracteres de 'carriage return' "\r" e 'linefeed' "\n" no fim da linha, enquanto que outros só irão gravar o 'linefeed' "\n". Normalmente o &kdiff3; ignora o 'carriage return', mas aí os ficheiros que não tenham tamanhos iguais pareçam de facto iguais numa comparação lado-a-lado. Quando esta opção estiver activa, então os caracteres de 'carriage return' ficarão visíveis mas serão tratados como espaços em branco. Ela necessita estar desligada durante uma junção. Por omissão, está desligada. + Ignorar os números:Por omissão está desligado. Os caracteres dos números ("0-9", ".", "-") serão ignorados na primeira parte da análise, na qual é feita a correspondência de linhas. No resultado, as diferenças serão mostradas de qualquer forma, mas serão tratadas como espaços em branco. + Ignorar comentários de C/C++:Por omissão está desligado. As alterações nos comentários serão tratadas como as alterações nos espaços em branco. + Ignorar a capitalização:Por omissão está desligado. As diferenças de capitalização dos caracteres (como o 'A' vs. 'a') serão tratadas como alterações de espaços em branco. + Comando do pré-processador:Veja a próxima secção. + Comando do Pré-processador para a Correspondência de Linhas:Veja a próxima secção. + Tentar com Persistência:Tenta com mais afinco encontrar um delta ainda menor. (Por omissão está ligado). Isto irá ser efectivo provavelmente para os ficheiros grandes e complicados. Será também lento para os ficheiros muito grandes. + Atraso no Avanço Automático (ms):Quando estiver no modo de avanço automático esta opção indica o intervalo de tempo durante o qual mostrar o resultado da selecção antes de saltar para o próximo conflito não resolvido. + Predefinição da junção de espaço em branco com 2/3 ficheiros:Resolve automaticamente todos os conflitos de espaços em branco, seleccionando o ficheiro indicado. (Por omissão, é com uma escolha manual). É útil se os espaços em branco não serão importantes em muitos dos ficheiros. Se precisar disto apenas ocasionalmente, é melhor usar o "Escolher A/B/C nos Conflitos de Espaços em Branco Por Resolver" no menu "Junção". Lembre-se que, se activar o "Ignorar os Números" ou o "Ignorar os Comentários de C/C++", então esta escolha automática também se aplica para os conflitos nos números ou nos comentários. + Expressão regular de junção automática:A expressão regular para as linhas onde o &kdiff3; deverá escolher automaticamente uma origem. Veja também a Junção Automática ... + Executar a junção automática da expressão regular no início da junção:Se for activado, o &kdiff3; executa a junção automática com a "Expressão regular da junção automática", quando for iniciada uma junção. + Expressão regular do início do histórico:A expressão regular do início do item de histórico. Normalmente, esta linha contém a palavra-chave "$Log$". Valor por omissão: ".*\$Log.*\$.*" + Expressão regular do início do item de histórico:Um item de junção do histórico consiste em várias linhas. Indique a expressão regular que detecta a primeira linha (sem o comentário inicial). Use os parêntesis para agrupar as chaves que deseja usar na ordenação. Se for deixado em branco, o &kdiff3; assume que as linhas em branco separam os itens de histórico. Veja também a Junção Automática ... + Ordenação da junção do histórico:Activa a ordenação do histórico do controlo de versões. + Ordem da chave de ordenação do início do item de histórico:Cada grupo de parêntesis usado na expressão regular do item de início de histórico agrupa uma chave que poderá ser usada na ordenação. Indique a lista de chaves (que são numeradas por ordem de ocorrência, a começar em 1), usando o ',' como separador (p.ex., "4,5,6,1,2,3,7"). Se for deixado em branco, então não será feita nenhuma ordenação. Veja também a Junção Automática ... + Juntar o histórico do controlo de versões no início da junção:Se estiver activado, o &kdiff3; executa a junção automática do histórico, usando as opções acima mencionadas, quando for iniciada uma junção. + Testar as suas expressões regularesEste botão mostra uma janela que lhe permite melhorar e testar as expressões regulares acima. Basta copiar os dados respectivos dos seus ficheiros para as linhas de exemplo. O "Resultados da correspondência" irá mostrar imediatamente se a correspondência é bem sucedida ou não. O "Resultado da chave de ordenação" irá mostrar a chave usada no histórico da junção do histórico. + Comando de junção irrelevante:Indique um comando próprio, que deverá ser chamado quando o &kdiff3; detectar que, numa junção de três ficheiros, o ficheiro de B não contribui com dados relevantes que não estivessem já contidos no ficheiro em C. O comando é chamado com os três nomes de ficheiros como parâmetros. Os dados correspondentes à "Expressão regular da junção automática" ou no histórico não são considerados relevantes. + + + + +Junção de Pastas +Estas opções dizem respeito à análise da pasta e ao tratamento da junção: Veja em Comparação de Pastas/Juntar para mais detalhes. Existe aqui ainda uma opção que também é relevante para gravar os ficheiros únicos: + + Ficheiros de segurança:Quando um ficheiro é gravado e já existe uma versão anterior, então a versão original irá mudar para um nome com uma extensão ".orig". Se já existir um ficheiro de cópia de segurança antigo com uma extensão ".orig", então este será removido sem ficar nenhuma cópia de segurança. + + + +Opções Regionais e da Língua + + Língua:Ajusta a língua da interface do utilizador. Se mudar esta opção não afectará o programa em execução. Terá de sair e reiniciar o &kdiff3; para que a língua seja alterada. (Esta opção não está disponível na versão para KDE do &kdiff3;, porque a língua é ajustável na configuração global do KDE). + Utilizar a mesma codificação para tudo:As seguintes opções de codificação poderão ser ajustadas em separado para cada item ou, se esta opção for verdadeira, todos os valores irão usar o primeiro valor. + Codificação Local:Por cima dos selectores de codificação, aparece uma nota que lhe indica a sua codificação local. (Esta não é ajustável, mas está aqui apenas para o informar, no caso de não saber qual é a sua codificação local e tiver de a seleccionar). + Codificação do Ficheiro para o A/B/C:Ajuste a codificação do ficheiro para os ficheiros de entrada. Isto provoca algum efeito na forma como os caracteres especiais são interpretados. Dado que poderá ajustar cada codificação em separado, poderá até comparar e juntar ficheiros que foram gravados com codificações diferentes. + Codificação do Ficheiro para Junção de Resultado e Gravação:Quando tiver editado um ficheiro, poderá então ajustar a codificação que será usada ao gravar para o disco. + Codificação do Ficheiro dos Ficheiros de Pré-processador:Quando definir pré-processadores, este poderão não ser capazes de lidar com a sua codificação. (p.ex.: Os seus ficheiros estão em Unicode de 16 bits e o seu pré-processador só consegue lidar com ASCII de 8 bits). Com esta opção, poderá definir a codificação do resultado do pré-processador. + Língua da Esquerda-para-a-Direita:Algumas línguas são escritas da direita para a esquerda. Quando esta opção está activa, o &kdiff3; desenha o texto da direita para a esquerda nas janelas de diferenças dos ficheiros de entrada e na janela do resultado da junção. Repare que, se iniciar o &kdiff3; com a opção da linha de comandos "--reverse", então toda a disposição será feita também da direita para a esquerda. (Esta é uma funcionalidade oferecida pelo Qt.) Esta documentação foi escrita a assumir que a "Língua da direita-para-a-esquerda" ou a disposição inversa estão desactivadas. Por isso, algumas das referências a "esquerda" ou "direita" deverão ser substituídas pela versão inversa, se usar estas opções. + + + + +Diversos +(Estas opções e acções estão disponíveis nos menus ou na barra de botões.) + + Mostrar os números de linha:O utilizador pode seleccionar se os números de linhas são mostrados para os ficheiros de entrada. + Mostrar as diferenças de espaços e tabulações:Algumas das vezes os espaços e tabulações visíveis são incómodos. Poderá com isto desactivar esta funcionalidade. + Mostrar os espaços em branco:Desligue isto para suprimir o realce das alterações apenas nos espaços em branco no texto ou nas colunas de vista geral. (Lembre-se que isto também se aplica às alterações nos números ou comentários se as opções "Ignorar os números" ou "Ignorar os Comentários de C/C++" estiverem activas.) + Opções da vista geral:Estas opções só estão disponíveis quando você compara três ficheiros. No modo normal, todas as diferenças são mostradas na coluna de resumo codificada a cores. Mas, em alguns casos, você está especialmente interessado nas diferenças entre apenas dois desses três ficheiros. Se seleccionar "A vs. B", "A vs. C" ou "B vs. C" na coluna de resumo irá aparecer uma segunda coluna com a informação necessária ao lado do resumo normal. + Quebrar linha nas janelas de diferenças:Reparte as linhas quando o seu tamanho exceder a largura de uma janela. + Mostrar a Janela A/B/C:Em algumas vezes, você poderá usar melhor o espaço no ecrã para as linhas compridas. Esconda as janelas que não são importantes. (No menu "Janelas".) + Comutar a Orientação da Repartição:Define se as janelas de diferenças são mostradas uma ao lado da outra (a A à esquerda da B, que está à esquerda da C) ou uma por cima da outra (a A sobre a B, que está sobre a C). Isto também deverá ajudar para as linhas compridas (No menu "Janelas"). + Iniciar uma junção rapidamente:Às vezes, você está a ver os deltas e decide juntá-los. O "Juntar o ficheiro actual" no menu "Directoria" também resulta se só comparar dois ficheiros. Um único 'click' começa a junção e usa o nome do último ficheiro de entrada como nome do ficheiro do resultado por omissão. (Quando isto for usado para reiniciar uma junção, então o nome do ficheiro do resultado será mantido.) + + + +Configurar os Atalhos de Teclado +De momento, só a versão para KDE suporta os atalhos de teclado configuráveis pelo utilizador. (No menu Configuração->Configurar os Atalhos...) + + + +Comandos do Pré-processador +O &kdiff3; suporta duas opções do pré-processador. + + Comando do pré-processador:Quando for lido qualquer ficheiro, ele será encaminhado através deste comando externo. O resultado deste comando será visível em vez do ficheiro original. O utilizador poderá criar o seu próprio pré-processador que corresponda às suas necessidades específicas. Use isto para cortar partes desnecessárias do ficheiro ou para corrigir automaticamente a indentação, etc. + Comando do Pré-processador para a Correspondência de Linhas:Quando for lido qualquer ficheiro, ele será encaminhado através deste comando externo. Se um comando de pré-processador (ver acima) for também indicado, então o resultado do pré-processador é a entrada para o pré-processador de correspondência de linhas. O resultado só será usado durante a fase de correspondência de linhas da análise. O utilizador poderá escrever o seu próprio pré-processador que corresponda às suas necessidades específicas. Cada linha de entrada terá de ter uma linha de resultado correspondente. + + +A ideia é permitir ao utilizador uma maior flexibilidade ao configurar o resultado das diferenças. Mas isto necessita de um programa externo e muitos dos utilizadores não querem escrever um. As boas notícias é que, muitas das vezes, o sed ou o perl encarregar-se-ão disso. +Exemplo: Caso de teste simples. Considere o ficheiro a.txt (6 linhas): + aa + ba + ca + da + ea + fa + E o ficheiro b.txt (3 linhas): + cg + dg + eg + Sem um pré-processador as seguintes linhas teriam sido colocadas lado a lado: + aa - cg + ba - dg + ca - eg + da + ea + fa + Isto provavelmente não será o desejado, dado que a primeira letra contém a informação realmente interessante. Para ajudar o algoritmo de correspondência a ignorar aa segunda letra, poder-se-ia usar um comando de pré-processamento de correspondências de linhas que substituísse o 'g' pelo 'a': + sed 's/g/a/' + Com este comando, o resultado da comparação seria: + aa + ba + ca - cg + da - dg + ea - eg + fa + Internamente, o algoritmo de correspondência vê os ficheiros depois de correr o pré-processador de correspondência de linhas, mas no ecrã o ficheiro fica inalterado. (O pré-processador normal iria alterar também os dados no ecrã.) + +Bases do <command +>sed</command +> +Esta secção só introduz algumas funcionalidades muito básicas do sed. Para mais informações veja as páginas info:/sed ou http://www.gnu.org/software/sed/manual/html_mono/sed.html. Existe uma versão pré-compilada para o Windows em http://unxutils.sourceforge.net. Repare no facto de que os exemplos seguintes assumem que o comando sed está numa pasta referida pela sua variável de ambiente PATH. Se não for este o caso, você terá de indicar a localização absoluta completa para o comando. +Lembre-se também que os exemplos seguintes usam a plica simples (') que não irá funcionar no Windows. No Windows, deverá usar as aspas (") em alternativa. +Neste contexto apenas o comando de substituição do sed será usado: + sed 's/EXPREG/SUBSTITUTO/OPÇÕES' + Antes de você usar um comando novo no &kdiff3;, deverá primeiro testá-lo numa consola. Aqui, o comando echo é útil. Exemplo: + echo abracadabra | sed 's/a/o/' + -> obracadabra + Este exemplo mostra um comando 'sed' muito simples que substitui a primeira ocorrência do "a" por um "o". Se quiser substituir todas as ocorrências, então irá necessitar da opção "g": + echo abracadabra | sed 's/a/o/g' + -> obrocodobro + O símbolo "|" é o 'pipe' ou canal que transfere o resultado do comando anterior para os dados de entrada do comando seguinte. Se quiser testar com um ficheiro maior, então poderá usar o cat no sistemas do tipo do Unix ou o type nos sistemas do tipo Windows. O sed irá fazer a substituição para cada linha. cat ficheiro | sed opções + + + +Exemplos para a Utilização do <command +>sed</command +> no &kdiff3; +Ignorar Outros Tipos de Comentários +De momento, o &kdiff3; só compreende comentários de C/C++. Se usar o comando "Pré-Processador de Correspondência de Linhas", poderá também ignorar outros tipos de comentários, convertendo-os em comentários de C/C++. Exemplo: Para ignorar comentários que comecem por "#", poderá convertê-los para "//". Lembre-se que terá também de activar a opção "Ignorar os Comentários de C/C++" para obter efeito. Um comando "Pré-Processador de Correspondência de Linhas" seria: + sed 's/#/\/\//' + Dado que para o sed o carácter / tem um significado especial, é necessário colocar o carácter \ antes de cada / no texto de substituição. Algumas das vezes o \ é necessário para adicionar ou remover um significado especial para certos caracteres. As plicas simples (') antes e depois do comando de substituição são importantes, caso contrário a linha de comandos iria tentar interpretar alguns caracteres especiais como o #, o $ ou o \ antes de os passar para o sed. Lembre-se que no &Windows; irá necessitar aqui das aspas ("). O &Windows; substitui os outros caracteres como o %, por isso você terá de fazer algumas experiências. + +Diff sem Distinguir Capitalização +Use o comando "Pré-Processador de Correspondência de Linhas" para converter todo o texto para maiúsculas: + sed 's/\(.*\)/\U\1/' + Aqui o .* é uma expressão regular que corresponde a qualquer texto e, no seu contexto, irá corresponder a todos os caracteres da linha. O \1 no texto de substituição refere-se ao texto correspondente ao primeiro par de \( e \). O \U converte o texto inserido para maiúsculas. + + +Ignorar as Palavras-Chave do Controlo de Versões +O CVS e outros sistemas de controlo de versões usam várias palavras-chave para inserir texto gerado automaticamente (info:/cvs/Keyword substitution). Todas elas seguem o padrão "$PALAVRACHAVE texto gerado$". É preciso agora um comando Pré-Processador de Correspondência de Linhas que remova apenas o texto gerado: + sed 's/\$\(Revision\|Author\|Log\|Header\|Date\).*\$/\$\1\$/' + O "\|" separa as palavras-chave possíveis. Poderá querer modificar esta lista de acordo com as suas necessidades. O "\" antes do "$" é necessário, caso contrário o "$" irá corresponder ao fim da linha. +Ao experimentar com o sed, você poderá vir a compreender e até a gostar destas expressões regulares. Elas são úteis porque existem muitos outros programas que suportam algumas coisas desse género. + + +Ignorar os Números +A indiferença em relação aos números é de facto uma opção incorporada. Mas, como outro exemplo, seria assim como iria ficar como um comando do Pré-Processador da Correspondência de Linhas. + sed 's/[0123456789.-]//g' + Todos os caracteres dentro de '[' e ']' são uma correspondência e será substituído por nada. + + +Ignorar Certas Colunas +Em algumas ocasiões um determinado texto tem uma formatação demasiado restrita e contém colunas que deseja sempre ignorar, enquanto que existem outras colunas que deseje preservar para análise. No exemplo seguinte, as primeiras cinco colunas (caracteres) são ignoradas, as próximas dez são preservadas, depois as próximas cinco colunas serão ignoradas de novo e o resto da linha é preservada. + sed 's/.....\(..........\).....\(.*\)/\1\2/' + Cada ponto '.' corresponde a um único carácter. O "\1" e o "\2" no texto de substituição refere-se ao texto correspondente dentro do primeiro e segundo par de "\(" e "\)", demarcando o texto a ser preservado. + + +Combinar Várias Substituições +Em algumas situações você deseja aplicar várias substituições de uma vez. Poderá então usar o ponto-e-vírgula ";" para separar uma da outra. Exemplo: echo abracadabra | sed 's/a/o/g;s/\(.*\)/\U\1/' + -> OBROCODOBRO + + + + +Usar o <command +>perl</command +> em vez do <command +>sed</command +> +Em vez do sed, você poderá querer usar algo diferente como o perl. + perl -p -e 's/EXPREG/SUBSTITUTO/OPÇÕES' + Porém, alguns detalhes são diferentes no perl. Repare que, onde o sed necessitava do "\(" e do "\)", o perl necessita dos "(" e ")" mais simples e sem o '\' precedente. Exemplo: sed 's/\(.*\)/\U\1/' + perl -p -e 's/(.*)/\U\1/' + + + + + +Order de Execução de Pré-processadores +Os dados são encaminhados através de todos os pré-processadores internos e externos pela seguinte ordem: + +Pré-processador normal, +Pré-processador de Correspondência de Linhas, +Ignorar capitalização (conversão para maiúsculas), +Detecção de Comentários de C/C++, +Ignorar os números, +Ignorar os espaços em branco + +Os dados após o pré-processador normal serão preservados para a apresentação e para a junção. As outras operações só modificam os dados que o algoritmo para a correspondência de linhas nas diferenças vê. Nos casos raros em que você usa um pré-processador normal, repare que o pré-processador da correspondência de linhas vê o resultado no pré-processador normal como dados de entrada. + + +Aviso +Os comandos do pré-processador são normalmente muito úteis, mas como acontece com qualquer opção que modifica os seus textos ou esconde algumas diferenças automaticamente, você poderá saltar por cima de certas diferenças e, no pior dos casos, destruir dados importantes. Por esta razão, durante uma junção, se for usado um comando pré-processador normal, o &kdiff3; dizer-lhe-á isso e perguntar-lhe-á se deverá ser desactivado ou não. Mas não o irá avisar se estiver um Pré-Processador de Correspondência de Linhas activo. A junção não irá ficar completa até que todos os conflitos tenham sido resolvidos. Se tiver desactivado o "Mostrar os Espaços em Branco", então as diferenças que foram removidas com o Pré-Processador de Correspondência de Linhas ficarão também invisíveis. Se o botão para Gravar continuar inactivo durante uma junção (devido a conflitos por resolver), verifique se activa o "Mostrar os Espaços em Branco". Se não quiser juntar essas diferenças menos importantes poderá escolher a opção "Escolher [A|B|C] nos Conflitos de Espaço em Branco por Resolver" no menu "Juntar". + + + + + +Comparação e Junção de Directorias com o &kdiff3; +Introdução à Comparação ou Junção de Pastas +Normalmente, os programadores precisam de modificar vários ficheiros numa pasta para atingir os seus fins. Para isso, o &kdiff3; também lhe permite comparar e juntar várias pastas de forma recursiva! Ainda que a comparação e junção de pastas pareça ser bastante óbvia, existem vários detalhes que o utilizador deverá conhecer. O mais importante é, obviamente, o facto de que vários ficheiros poderão ser afectados por cada operação. Se não tiver cópias de segurança dos seus dados originais, então poderá ser bastante difícil ou mesmo impossível de voltar ao estado original. Por isso, antes de começar uma junção, certifique-se que os seus dados estão a salvo e que é possível voltar atrás. Se cria um pacote ou usa um sistema de controlo de versões é uma decisão sua, mas mesmo os programadores experientes e os integradores precisam do código antigo e do novo. E repare que até ao autor do &kdiff3; tenta fazer o seu melhor, mas não pode garantir que não existam erros. De acordo com a GPL da GNU, não existe NENHUMA GARANTIA de qualquer forma para este programa. Por isso, seja humilde e tenha sempre em mente: +
+ Errar é humano, mas para realmente baralhar as coisas é preciso um computador. +
+Por isso, este é o programa que poderá fazer isto por si: o &kdiff3; ... + + ... lê e compara duas ou três pastas recursivamente, + ... tem um cuidado especial com as ligações simbólicas, + ... permite-lhe navegar nos ficheiros com um duplo-click do rato, + ... propõe para cada item uma operação de junção, a qual poderá alterar antes de iniciar a junção de pastas, + ... permite-lhe simular a junção e lista as acções que iriam tomar lugar, sem fazer nada de facto, + ... permite-lhe fazer realmente a junção, possibilitando também a você interagir nas situações em que é necessária uma interacção manual, + ... permite-lhe executar a operação seleccionada para todos os itens (tecla F7) ou para o item seleccionado (tecla F6), + ... permite-lhe continuar a junção depois de uma interacção manual com a tecla F7, + ... cria opcionalmente cópias de segurança com a extensão ".orig", + ... + +
+ +Iniciar a Comparação ou Junção de Directoria +Isto é bastante semelhante à junção e comparação simples com ficheiros únicos. O utilizador apenas terá de indicar nomes de pastas na linha de comandos ou na janela de abertura de ficheiros. +Comparar/Juntar duas directorias: +kdiff3 pasta1 pasta2 + kdiff3 pasta1 pasta2 -o destino + +Se não for indicada nenhuma pasta de destino, então o &kdiff3; irá usar a pasta2. + + +Comparar/Juntar estas pastas: +kdiff3 pasta1 pasta2 pasta3 + kdiff3 pasta1 pasta2 pasta3 -o destino + +Quando forem reunidas três pastas, então a pasta1 será usada como a base para a junção. Se não for indicada nenhuma pasta de destino, então o &kdiff3; irá usar a pasta3 como pasta de destino para a junção. + +Repare que só a comparação é que começa automaticamente, não a junção. Para tal, terá de seleccionar primeiro um item do menu ou a tecla F7. (Mais detalhes posteriormente.) + + + +Informação Visível da Junção de Pastas +Ao ler as pastas, aparece uma mensagem que o informa do progresso. Se você interromper a pesquisa das pastas, então só os ficheiros que tenham sido comparados até então serão listados. Quando a pesquisa de pastas estiver completa, então o &kdiff3; irá mostrar uma lista com os resultados restantes, ... + + + +... e os detalhes sobre o item seleccionado de momento à direita: + + + + + +A Coluna do Nome +Cada ficheiro e pasta encontrado durante a pesquisa é aqui mostrado numa árvore. Você poderá seleccionar um item se carregar nele uma vez com o rato. As pastas estão fechadas por omissão. Você poderá expandi-las e fechá-las se carregar no "+"/"-" ou se fizer duplo-click no item ou ainda usando as teclas de cursores esquerda/direita. O menu "Directoria" também contém duas acções "Fechar Todas as Sub-Directorias" e "Expandir Todas as Sub-Directorias", com as quais poderá fechar ou abrir todas as subpastas de uma vez. Se fizer duplo-click num item de um ficheiro, então a comparação do ficheiro irá começar e irá aparecer a janela de diferenças do ficheiro. +A imagem na coluna do nome reflecte o tio de ficheiro na primeira pasta ("A"). Poderá ser um dos seguintes: + + Ficheiro normal + Pasta normal (imagem de pasta) + Ligação para um ficheiro (imagem de ficheiro com uma seta de ligação) + Ligação para uma pasta (imagem de pasta com uma seta de ligação) + +Se o tipo de ficheiro for diferente nas outras pastas, então isso é visível nas colunas A/B/C e na janela que mostra os detalhes sobre o item seleccionado. Repare que, neste caso, não poderá ser seleccionada nenhuma operação de junção automaticamente. Ao iniciar a junção, então o utilizador será informado dos problemas desse tipo. + + +As Colunas A/B/C e o Esquema de Cores +Como pode ser visto na imagem acima, as cores vermelha, verde, amarela e preta são usadas nas colunas A/B/C. + + Preto: O item não existe nesta pasta. + Verde: Item mais recente. + Amarelo: Mais antigo que o verde, mais recente que o vermelho. + Vermelho: O item mais antigo. + +Contudo, para os itens que eram idênticos na comparação, a sua cor é também idêntica mesmo que a idade seja diferente. As pastas são consideradas iguais se todos os itens que contêm forem idênticos. Nesse caso, elas terão a mesma cor. Porém, a idade de uma pasta não é tida em consideração de acordo com a sua cor. A ideia do autor para este esquema de coloração veio do dirdiff. As cores lembram as cores de uma folha que é verde quando é nova, vai-se tornando amarela com o tempo e é vermelha quando é antiga. + +A Coluna de Operação +Depois de comparar as patas, o &kdiff3; avalia também uma proposta para uma operação de junção. Esta é mostrada na coluna de "Operação". O utilizador poderá modificar a operação se carregar na operação que deseja alterar. Irá aparecer um pequeno menu que lhe permite seleccionar uma operação para esse item (Poderá também seleccionar as operações mais necessárias através do teclado. O Ctrl+1/2/3/4/Del irá seleccionar o A/B/C/Juntar/Remover, respectivamente, se estiver disponível.) Esta operação será executada durante a junção. Depende do item e do modo de junção em que se encontra e de que operações estão disponíveis. O modo de junção é um dos seguintes + + Junção de três pastas (a "A" é tratada como a base mais antiga de ambas). + Junção de duas pastas. + Modo de sincronização de duas pastas (activado com a opção "Sincronizar as Directorias"). + +Na junção de três pastas, a proposta de operação será: Se para um item ... + + ... todas as três pastas forem iguais: Copiar do C + ... o A e o C são iguais mas o B não: Copiar a partir do B (ou se o B não existir, remover o destino se existir) + ... o A e o B são iguais mas o C não: Copiar a partir do C (ou se o C não existir, remover o destino se existir) + ... o B e o C são iguais mas o A não: Copiar a partir do C (ou se o C não existir, remover o destino se existir) + ... só o A existir: Remover o destino (se existir) + ... só o B existir: Copiar a partir do B + ... só o C existir: Copiar a partir do C + ... o A, o B e o C não são iguais: Juntar + ... o A, o B e o C não tiverem o mesmo tipo de ficheiro (⪚ o A é uma pasta e o B um ficheiro): "Erro: Tipo de Ficheiros em Conflito". Enquanto existirem itens nesta situação, a junção de pastas não poderá começar. + +Na junção de duas pastas, a proposta de operação será: Se para um item ... + + ... ambas as pastas forem iguais: Copiar do B + ... o A existir, mas o B não: Copiar a partir do A + ... o B existir, mas o A não: Copiar a partir do B + ... o A e o B existirem mas não forem iguais: Juntar + ... o A e o B não tiverem o mesmo tipo de ficheiro (p.ex., o A é uma pasta e o B um ficheiro): "Erro: Tipo de Ficheiros em Conflito". Enquanto existirem itens nesta situação, a junção de pastas não poderá começar. + +O modo de sincronização só está activo se forem indicadas duas pastas e não se não for indicado nenhum destino explícito, assim como a opção "Sincronizar as directorias" terá de estar activa. Nesse caso, o &kdiff3; irá seleccionar uma operação por omissão, de modo a que ambas as pastas fiquem iguais no fim. Se, para um item ... + + ... ambas as pastas forem iguais: Não será feito nada. + ... o A existir mas o B não: Copiar o A para o B + ... o B existir mas o A não: Copiar o B para o A + ... o A e o B existirem, mas não forem iguais: Juntar e guardar o resultado em ambas as pastas. (Para o utilizador, o nome do ficheiro gravado visível será o B, mas o &kdiff3; irá copiar o B também para o A.) + ... o A e o B não tiverem o mesmo tipo de ficheiro (p.ex., o A é uma pasta e o B um ficheiro): "Erro: Tipo de Ficheiros em Conflito". Enquanto existirem itens nesta situação, a junção de pastas não poderá começar. + +Quando duas pastas forem reunidas e a opção "Copiar o mais recente em vez de juntar" estiver seleccionada, então o &kdiff3; irá olhar para as datas e irá optar por escolher o ficheiro mais recente. Se os ficheiros não forem iguais mas tiverem datas iguais, então a operação irá conter "Erro: As datas são iguais mas os ficheiros não.". Enquanto esses itens existirem a junção de pastas não poderá começar. + + +A Coluna de Estado +Durante a junção, os ficheiros serão processados um a seguir ao outro. A coluna de estado irá mostrar "Terminado" para os itens em que a operação de junção foi bem sucedida e outros textos se algo ocorreu de inesperado. Quando se terminar uma junção, o utilizador deverá então fazer uma última verificação para confirmar se o estado de todos os itens é aceitável. + + +Colunas de Estatísticas +Quando o modo de comparação de ficheiros "Análise Completa" estiver activo nas opções, então o &kdiff3; irá mostrar colunas extra que contêm o número de conflitos não resolvidos, resolvidos, de espaços em branco e dos outros conflitos. (A coluna de resolvidos só irá aparecer ao comparar ou ao juntar três pastas.) + + +Seleccionar os Ficheiros Listados +Diversas opções influenciam os ficheiros que são listados aqui. Algumas estão acessíveis na janela de configuração. O menu Directoria contém os itens: + "Mostrar os Ficheiros Idênticos": Os ficheiros que foram detectados como iguais em todas as pastas de entrada. + "Mostrar os Ficheiros Diferentes": Os ficheiros que existem em duas ou mais pastas, mas que não são iguais entre si. + "Mostrar os Ficheiros Apenas em A": Os ficheiros que existem apenas em A, mas não em B ou C. + "Mostrar os Ficheiros Apenas em B": Os ficheiros que existem apenas em B, mas não em A ou C. + "Mostrar os Ficheiros Apenas em C": Os ficheiros que existem apenas em C, mas não em A ou B. + +Active apenas as opções "Mostrar" para os itens que deseja listar. Se, por exemplo, quiser listar apenas os itens que existem ou em A ou em B, mas não em ambos, terá de activar o "Mostrar os Ficheiros Apenas em A" e "Mostrar os Ficheiros Apenas em B" e desactivar todos os outros ("Mostrar os Ficheiros Idênticos", "Mostrar os Ficheiros Diferentes", "Mostrar os Ficheiros Apenas em C"). A lista será actualizada imediatamente para reflectir as alterações. Estas opções também se aplicam nas pastas, com uma excepção: Se desactivar o "Mostrar os Ficheiros Diferentes" não irá esconder as pastas por completo. Isto só irá funcionar para os ficheiros dentro delas. Lembre-se que, destas opções, só a "Mostrar os Ficheiros Idênticos" é persistente. As outras ficam activas ao iniciar o &kdiff3;. + + + + + +Fazer uma Junção de Pastas +O utilizador tanto poderá reunir o item seleccionado de momento (ficheiro ou pasta) ou todos os itens. Quando tiver feito todas as suas opções de operação (em todas as subpastas também), aí então poderá iniciar a junção. Tenha em atenção que, se não tiver indicado explicitamente uma pasta de destino, então o destino será o "C" no modo de três pastas, o "B" no modo de junção de duas pastas e no modo de sincronização será o "A" e/ou o "B". Se tiver indicado uma pasta de destino, verifique também que todos os itens que deverão estar no resultado, estão na árvore respectiva. Existem algumas opções que fazem com que certos itens sejam omitidos na comparação e junção de pastas. Assinale estas opções para evitar surpresas desagradáveis: + + "Directorias Recursivas": Se estiver desligada, então os itens em todas as subpastas não serão tratados. + "Padrão"/"Anti-Padrão": Inclui/exclui os itens que correspondam ao padrão + "Excluir os Ficheiros Escondidos" + As opções "Mostrar" (Mostrar os Ficheiros Iguais/Diferentes, Ficheiros apenas em A/B/C) + +Se mudar a configuração, para mostrar mais ficheiros, é preciso fazer uma nova pesquisa, com a opção "Directoria"->"Pesquisar de Novo". (A razão para tal é que o &kdiff3; omite a comparação dos ficheiros suprimidos por estes critérios.) Se mudou os seus padrões de ficheiros e pastas para excluir os ficheiros, então a lista de ficheiros será imediatamente actualizada, ao fechar a janela de opções. Lembre-se que, quando gravar numa pasta completamente nova, normalmente também irá querer copiar os ficheiros iguais. Nesse caso, active a opção "Mostrar os Ficheiros Iguais". Se a sua pasta de destino é uma das entradas, então não será necessário, porque o ficheiro já estará lá. Se estiver satisfeito até agora, o resto é simples. Para juntar todos os itens: Seleccione "Iniciar/Continuar a junção da directoria" no menu "Directoria" ou carregue em F7 (que é o atalho). Para juntar apenas o item actual: Seleccione "Executar a Operação no Item Actual" ou carregue em F6. Se, devido à existência de tipos de ficheiro em conflito, ainda permanecerem alguns itens com operações inválidas, então irá aparecer uma mensagem onde serão evidenciados esses itens, para que possa seleccionar uma operação válida para cada item. Se juntar todos os itens, irá aparecer uma janela que lhe apresenta as opções "Fazê-lo", "Simulá-lo" e "Cancelar". + + Seleccione "Simulá-lo" se quiser ver o que seria feito sobre o item sem aplicar de facto as modificações. Será apresentada uma lista descritiva com todas as operações. + Caso contrário, seleccione "Fazê-lo" para iniciar de facto a junção. + +Nesse caso, o &kdiff3; irá executar a operação indicada para todos os itens. Se for necessária alguma intervenção manual (na junção de ficheiros simples), então irá aparecer uma janela de junção (ver a imagem grande). Quando tiver terminado um ficheiro, seleccione de novo "Iniciar/Continuar a junção da directoria" ou a tecla F7. Se não tiver ainda gravado nada, irá aparecer uma janela a pedir-lhe isso. Aí, o &kdiff3; irá passar ao próximo item. Quando o &kdiff3; encontrar um erro, indicar-lhe-á tal facto e irá mostrar a informação descritiva do estado. No fundo desta lista, existirão algumas mensagens de erro que o deverão ajudar a compreender a causa do problema. Quando continuar a junção (com a tecla F7), o &kdiff3; indicar-lhe-á a opção para repetir ou saltar o item que causou o problema. Isto significa que, antes de continuar, poderá escolher outra operação ou resolver o problema por outros meios. Quando a junção estiver completa, o &kdiff3; informá-lo-á então com uma mensagem. Se alguns dos itens foram reunidos individualmente, então o &kdiff3; irá recordar isto (enquanto esta sessão de junção prosseguir) e não os juntará de novo, até que a junção para todos os itens tenha sido executada. Mesmo quando a junção tenha sido ignorada ou não tenha sido gravado nada, estes itens irão contar como completos. Só quando tiver alterado a operação de junção é que o estado de "Pronto" do item será removido e este poderá ser reunido de novo. + + +Opções para Comparar e Juntar Pastas +As preferências do &kdiff3; (no menu "Configuração"->"Configurar o &kdiff3;") têm agora uma secção intitulada "Junção de Directorias" com as seguintes opções: + + + Directorias Recursivas:Indica se você deseja pesquisar as pastas de forma recursiva. + Padrões de Ficheiros:Só os ficheiros que correspondam ao padrão ou padrões aqui indicados é que serão colocados na árvore. Poderá ser indicado mais do que um padrão através do separador ponto-e-vírgula ";". São considerados caracteres especiais válidos o "*" e o "?". (⪚ "*.cpp;*.h"). Por omissão, este campo é igual a "*". As pastas não precisam de corresponder a este padrão. + Anti-Padrões de Ficheiros:Os ficheiros que correspondam ao padrão ou padrões aqui indicados serão excluídos da árvore. Poderá ser indicado mais do que um padrão através do separador ponto-e-vírgula ";". São considerados caracteres especiais válidos o "*" e o "?". Por omissão, este campo é igual a "*.orig;*.o;*.obj". + Anti-Padrões da Directoria:As pastas que correspondam ao padrão ou padrões aqui indicados serão excluídas da árvore. Poderá ser indicado mais do que um padrão através do separador ponto-e-vírgula ";". São considerados caracteres especiais válidos o "*" e o "?". Por omissão, este campo é igual a "CVS;deps;.svn". + Usar CVS-Ignore:Ignora os ficheiros e pastas que são também ignorados pelo CVS. Muitos dos ficheiros gerados automaticamente são ignorados pelo CVS. A grande vantagem é que esta funcionalidade é específica para cada pasta através de um ficheiro ".cvsignore" local. (Veja em info:/cvs/cvsignore.) + Procurar os Ficheiros e Directorias Escondidos:Em alguns sistemas de ficheiros, existe um atributo "Escondido". Em outros sistemas, um nome de ficheiro que comece por "." faz com que este seja considerados escondido. Esta opção permite-lhe decidir se deve incluir estes ficheiros na árvore ou não. Por omissão, são incluídos. + Seguir as Ligações de Ficheiros:Para as ligações aos ficheiros: Quando a opção estiver desactivada, as ligações simbólicas serão comparadas. Caso contrário, serão compilados os ficheiros para os quais apontam as ligações. Por omissão, a opção está desligada. + Seguir as Ligações de Directorias:Para as ligações a pastas: Quando a opção estiver desactivada, as ligações simbólicas serão comparadas. Se estiver activa, então a ligação será tratada como uma pasta e será pesquisada recursivamente. (Lembre-se que o programa não verifica se a ligação é "recursiva". Por isso, se uma pasta contiver por exemplo uma ligação para ela própria irá causar um ciclo infinito, pelo que ao fim de algum tempo a pilha estoira ou toda a memória será usada e o programa irá estoirar deste modo). Por omissão, a opção está desligada. + Comparação de Nomes de Ficheiros com Distinção de Maiúsculas:Por omissão, é falso no Windows e verdadeiro nos outros sistemas operativos. + Modo de Comparação de Ficheiros: + + Comparação Binária:Este é o modo de comparação de ficheiros por omissão. + Análise Completa:Faz uma análise completa de cada ficheiro e mostra os resultados nas colunas de informação das estatísticas. (O número de conflitos resolvidos, por resolver, devido a espaços em branco ou a outros casos). A análise completa é mais lenta que uma simples comparação binária e é muito mais lenta se for usada em ficheiros que não contenham texto. (Indique os tipos de anti-padrões necessários.) + Confiar na data de modificação:Se comparar pastas grandes numa rede lenta, poderá ser mais rápido comparar somente as datas de modificação e os tamanhos dos ficheiros. Porém, este melhoramento de velocidade traz alguma incerteza. Use esta opção com cuidado. Por omissão, está desligada. + Confiar no tamanho:É semelhante à comparação da data de modificação. Não ocorre nenhuma comparação em si. Dois ficheiros quaisquer são considerados iguais se os seus tamanhos de ficheiros forem iguais. Isto é útil quando a operação de cópia de ficheiros não preservar a data de modificação. Use esta opção com cuidado. Por omissão, está desligada. + + + Sincronizar as Directorias:Activa o "Modo de Sincronização" em que duas pastas são comparadas e não foi indicada nenhuma pasta de destino. Neste modo, as operações propostas serão escolhidas de modo a que ambas as pastas de origem fiquem iguais no fim. Do mesmo modo, o resultado da junção será gravado em ambas as pastas. Por omissão, esta opção está desligada. + Copiar o mais recente em vez de juntar:Em vez de juntar, a operação proposta irá copiar os ficheiros mais recentes se ocorreram algumas alterações. (É considerado inseguro, porque implica saber se o outro ficheiro não foi também alterado. Verifique para se certificar em qualquer um dos casos.). Por omissão, a opção está desligada. + Ficheiros de segurança:Se um ficheiro ou uma pasta completa for substituído por outro ou for removido, então a versão original mudará para um nome com uma extensão ".orig". Se já existir um ficheiro antigo com uma extensão ".orig", então este será removido sem ser criada nenhuma cópia de segurança. Isto também afecta a junção normal de ficheiros simples, não só no modo de junção de pastas. Por omissão, a opção está activa. + + + +Outras Funções na Janela de Junção de Pastas +Modo de Ecrã Repartido/Completo +Normalmente a lista de junção da pasta fica visível enquanto um único ficheiro é comparado ou reunido. Com o rato, o utilizador poderá mover a barra separadora que delimita a lista de ficheiros das janelas de diferenças do texto. Se não a quiser, poderá desactivar a "Janela Repartida" no menu "Directoria". Aí, poderá usar a opção "Comutar a Vista" no menu "Directoria" para alternar entre a lista de ficheiros e a janela de diferenças no texto que irá então ocupar o ecrã completo. + +Comparar ou Juntar um Único Ficheiro +Provavelmente, você irá preferir um duplo-click do rato simples sobre um ficheiro para o poder comparar. Contudo, existe também um item no menu "Directoria". Poderá também juntar directamente um único ficheiro sem iniciar a junção de pastas, através da opção "Juntar o ficheiro actual" do menu "Juntar". Ao gravar o resultado, o estado ficará como terminado e o ficheiro não será reunido de novo se for iniciada uma junção de pastas. Mas repare que esta informação de estado será perdida quando voltar a executar uma pesquisa de pastas: menu "Directoria"->"Pesquisar de novo" + +Comparar ou Juntar Ficheiros com Nomes Diferentes +Em alguns casos, terá de comparar ou juntar ficheiros com nomes diferentes (p.ex., o ficheiro actual e a cópia de segurança na mesma pasta). Seleccione o ficheiro exacto, carregando no ícone na coluna A, B ou C. O primeiro ficheiro seleccionado será então marcado com um "A", enquanto o segundo e o terceiro ficará com um "B" e um "C", independentemente da coluna em que se encontram. Só poderá escolher até três ficheiros desta forma. Siga com a escolha de "Comparar os Ficheiros Explicitamente Seleccionados" ou "Juntar os Ficheiros Explicitamente Seleccionados" no menu "Pasta". Por conveniência, estes itens de menu também aparecem como um menu de contexto, quando carregar com o botão direito no último ficheiro seleccionado. A comparação ou junção de um ficheiro irá acontecer na mesma janela. Se este método for usado para as pastas, será aberta uma nova janela. + +
+ + +Tópicos Diversos + +Transparência na rede através do KIO +KIO-Slaves +O KDE suporta a transparência na rede através dos 'KIO-slaves'. O &kdiff3; usa isto para ler os ficheiros de entrada e para pesquisar as pastas. Isto significa que você poderá indicar ficheiros e pastas em recursos locais e remotos através dos URLs. Exemplo: +kdiff3 teste.cpp ftp://ftp.longe.org/teste.cpp + kdiff3 tar:/home/eu/pacote.tar.gz/pasta ./pasta + + +A primeira linha compara um ficheiro local com outro ficheiro num servidor de FTP. A segunda linha compara uma pasta dentro de um pacote comprimido com uma pasta local. Outros 'KIO-slaves' que serão interessantes: + +Ficheiros da WWW (http:), +Ficheiros de FTP (ftp:), +Transferência de ficheiros cifrada (fish:, sftp:), +Recursos do Windows (smb:), +Ficheiros locais (file:), + +Outras coisas que são possíveis, mas provavelmente serão menos interessantes: + +Páginas do 'man' (man:), +Páginas do 'info' (info:), + + + +Como Escrever URLs +Um dado URL tem uma sintaxe diferente, em comparação com as localizações dos ficheiros e pastas locais. Alguns factores terão de ser tidos em consideração: + +Uma localização poderá ser relativa e conter "." ou "..". Isto não é possível para os URLs, dado que estes são sempre absolutos. Os caracteres especiais têm de ser escritos "escapados". ("#"->"%23", espaço->"%20", etc.) ⪚ Um ficheiro com o nome "/#xpto#" iria ter o URL "file:/%23xpto%23". Quando os URLs não funcionarem como seria de esperar, tente abri-los primeiro no Konqueror. + + + + +Capacidades dos 'KIO-Slaves' +A transparência na rede tem um senão: nem todos os recursos têm as mesmas capacidades. Algumas das vezes estas são devidas ao sistema de ficheiros do servidor, enquanto que noutras ocasiões poderá ser devido ao protocolo. Aqui está uma pequena lista das restrições: + +Em alguns casos não existe o suporte para ligações simbólicas. Ou não existe forma de distinguir se uma ligação aponta para um ficheiro ou uma pasta; é assumido sempre um ficheiro. (ftp:, sftp:). Não é sempre possível determinar o tamanho do ficheiro. Existe um suporte de permissões limitado. Não existe a possibilidade de modificar as permissões ou a data de modificação, como tal as permissões ou a data de uma cópia poderão ser diferentes do original. (Veja a opção "Confiar no tamanho".) (A modificação de permissões ou das datas só é possível para os ficheiros locais.) + + + + + +Usar o &kdiff3; como uma KPart +O &kdiff3; é uma KPart. De momento, implementa a interface "KParts::ReadOnlyPart". A sua utilização principal é como visualizador de diferenças no KDevelop. O KDevelop inicia sempre o visualizador de diferenças interno em primeiro lugar. Para invocar o &kdiff3;, carregue com o botão direito do rato na janela do visualizador de diferenças e seleccionar "Mostrar no KDiff3Part" no menu de contexto. O &kdiff3; necessita normalmente de dois ficheiros completos como entrada. Se for usado como componente KPart, o &kdiff3; irá assumir que o ficheiro de entrada é um ficheiro de 'patch' no formato unificado. O &kdiff3; irá então obter os nomes dos ficheiros originais do ficheiro de 'patch'. Pelo menos um dos dois ficheiros terá de estar disponível. O &kdiff3; irá então invocar o patch para criar de novo o segundo ficheiro. No Konqueror;, o utilizador poderá seleccionar um ficheiro de 'patch' e seleccionar "Antevisão em"-"KDiff3Part" no menu de contexto. Tenha em atenção que isto não irá funcionar se nenhum dos ficheiros originais estiver disponível e não é fiável se os ficheiros originais tiverem sido alterados desde que o ficheiro de 'patch' foi gerado. Quando é executado como um componente, o &kdiff3; só oferece uma diferença de dois ficheiros, uma barra de ferramentas muito pequena e um menu. A junção ou a comparação de pastas não é suportada nesse caso. + + + + +Perguntas e Respostas +&reporting.bugs; &updating.documentation; + +Porque é que se chama "&kdiff3;"? As ferramentas "KDiff" e "KDiff2" (agora chamada Kompare;) já existiam. Para além disso, o &kdiff3; deveria sugerir que consegue juntar ficheiros como a ferramenta "diff3" da colecção de ferramentas do Diff. + +Porque é que é lançado segundo a GPL? O autor usou programas GPL durante bastante tempo até agora e aprendeu bastante ao olhar para bastante código. Daí, este é o "Muito Obrigado" para todos os programadores que também o fizeram ou irão fazer no futuro. + +Faltam alguns botões e funções. O que é que se passa? Você compilou a partir do código mas não indicou provavelmente o prefixo correcto do KDE com o "configure". Por omissão, o "configure" deseja instalar no "/usr/local", mas aí o KDE não consegue encontrar o ficheiro de recursos da interface do utilizador (isto é, o "kdiff3ui.rc"). O ficheiro README contém mais informações sobre o prefixo correcto. + +Muitas das vezes as linhas que são semelhantes mas não idênticas aparecem umas ao lado das outras mas noutros casos não. Porquê? As linhas em que apenas a quantidade de espaços em branco é diferente são tratadas como "iguais" à primeira vista, embora apenas um carácter que não seja um espaço em branco faça com que as linhas sejam "diferentes". Se as linhas semelhantes aparecerem uma ao lado da outra, isto poderá ser de facto uma coincidência, mas é felizmente o caso mais frequente. Veja também em Ajuda das Diferenças Manuais. + +Porque é que todos os conflitos deverão ser resolvidos para que o resultado da gravação possa ser gravado? Para cada secção igual ou diferente, o editor na janela do resultado da junção recorda onde é que esta começa ou termina. Isto é necessário para que os conflitos possam ser resolvidos manualmente ao seleccionar simplesmente o botão da origem (A, B ou C). Esta informação é perdida durante a gravação como texto e corresponde a demasiado esforço criar um formato de ficheiro especial que suporte a gravação e a reposição de toda a informação necessária. + +Como é que posso sincronizar as janelas de diferenças e junção, de modo que todas mostrem a mesma posição de texto? Carregue na coluna de resumo à esquerda do texto. (Veja também aqui.) + +Porque é que o editor na janela do resultado da junção não tem uma função para "desfazer"? Isso era demasiado difícil até agora. Você poderá sempre repor uma versão de uma origem (A, B ou C) se carregar no botão respectivo. Para uma edição extensa, recomenda-se a utilização de outro editor, de qualquer forma. + +Quando eu removi algum texto, apareceu de repente "<Sem linha de origem>" e esta não pode ser removida. O que é que significa e como é que se poderá removê-la? Para cada secção igual ou diferente, o editor na janela do resultado da junção recorda onde é que esta começa ou termina. O "<Sem linha de origem>" significa que não existe mais nada livre numa secção, nem mesmo um carácter de mudança de linha. Isto poderá acontecer durante a junção automática ou durante a edição. Isto não é nenhum problema, dado que esta dica não irá aparecer no ficheiro gravado. Se você quiser os dados originais de volta, basta seleccionar a secção (carregue na coluna de resumo à esquerda) e depois no botão da origem com o conteúdo necessário (A/B ou C). + +Porque é que o &kdiff3; não suporta o realce de sintaxe? O &kdiff3; já usa demasiadas cores para o realce das diferenças. Se suportasse o realce de sintaxe, tornar-se-ia confuso. Use outro editor para esse efeito. + +Posso usar o &kdiff3; para comparar ficheiros do OpenOffice.Org, Word, Excel, PDF, &etc;? Ainda que o &kdiff3; analise qualquer tipo de ficheiro, o resultado poderá não ser muito satisfatório para si. O &kdiff3; foi feito para comparar ficheiros de texto puros. O OpenOffice, Word, Excel etc. gravam muito mais informação nos ficheiros (acerca dos tipos de letra, imagens, páginas, cores, etc.), que o &kdiff3; não conhece. Deste modo, o &kdiff3; mostrar-lhe-á o conteúdo do ficheiro interpretado como texto puro, mas este poderá estar ilegível ou, pelo menos, ficará muito esquisito. Dado que a maioria dos programas, nos dias de hoje, gravam o seu conteúdo no formato XML, poderá ser capaz de os ler como texto puro. Por isso, se a alteração foi pequena, o &kdiff3; podê-lo-á ajudar à mesma. A melhor solução, se quiser apenas comparar o texto (sem as imagens incorporadas, como as imagens), é usar o "Seleccionar Tudo" e o "Copiar" no seu programa, para copiar o texto interessante para a área de transferência e depois, no &kdiff3;, colar o texto em qualquer uma das janelas de entrada. (Veja também o Seleccionar, Copiar e Colar.) + +Para onde foi a opção de pastas "Listar apenas os deltas"? Existem agora várias opções "Mostrar" no menu de pastas. Se desactivar o "Mostrar os ficheiros iguais", irá obter o resultado que o "Listar apenas os deltas" fazia. + +Como é que faço uma grande selecção na janela de entrada de diferenças, dado que o deslocamento leva tanto tempo? Comece a selecção da forma normal (carregue e mantenha o botão esquerdo do rato carregado). Depois, use as teclas de navegação (p.ex., o Page Up, Page Down), enquanto mantém carregado o botão esquerdo do rato. (Veja também em Seleccionar, Copiar e Colar.) + +Existe demasiada informação aqui, mas a sua dúvida ainda não foi respondida? Por favor envie ao autor a sua dúvida. Agradece-se qualquer comentário. + + + + + + +Créditos e Licença + +&kdiff3; - Ferramenta de Comparação e Junção de Ficheiros e Pastas +Programa com 'copyright' 2002-2006 de Joachim Eibl joachim.eibl at gmx.de +Vieram várias ideias giras e relatórios de erros dos colegas do autor e de pessoas da Wild Wild Web. Muito obrigado! + +Documentação Copyright © 2002-2006 Joachim Eibl joachim.eibl at gmx.de + +Tradução de Pedro Morais morais@kde.org +&underFDL; &underGPL; + + +Instalação + + +Como obter o &kdiff3; + +Você poderá obter a última versão do &kdiff3; na sua página pessoal em http://kdiff3.sourceforge.net. O &kdiff3; está também disponível para outras plataformas. Veja a página pessoal para mais detalhes. + + + + + +Requisitos + +Para poder usar todas as funcionalidades com sucesso do &kdiff3;, precisa do &kde; 3.1 ou posterior. Para mais informações sobre como correr o &kdiff3; noutras plataformas sem o KDE, veja por favor a página pessoal. O utilizador poderá encontrar uma lista das alterações em http://kdiff3.sourceforge.net/ChangeLog ou no ficheiro "ChangeLog" do pacote de código. + + + +Compilação e Instalação + +Para poder compilar e instalar o &kdiff3; num sistema com o KDE, escreva o seguinte na pasta de base da distribuição do &kdiff3;: + +% ./configure --prefix=kde-dir +% make +% make install + +O kde-dir corresponde à pasta que contém o KDE no seu sistema. Se não tiver a certeza, leia o ficheiro README para mais detalhes. +Se não usar o KDE, não use o configure, mas siga sim as instruções dos sistemas apenas em Qt, no ficheiro README. +Dado que o &kdiff3; usa o autoconf e o automake, você não deverá ter problemas a compilá-lo. No caso de ter alguns problemas, por favor comunique-os nas listas de correio do &kde;. + + + + + +&documentation.index; +
+ + diff --git a/doc/pt/iteminfo.png b/doc/pt/iteminfo.png new file mode 100644 index 0000000..0b81443 Binary files /dev/null and b/doc/pt/iteminfo.png differ diff --git a/doc/pt/letter_by_letter.png b/doc/pt/letter_by_letter.png new file mode 100644 index 0000000..8ddd48a Binary files /dev/null and b/doc/pt/letter_by_letter.png differ diff --git a/doc/pt/merge_current.png b/doc/pt/merge_current.png new file mode 100644 index 0000000..3f2e341 Binary files /dev/null and b/doc/pt/merge_current.png differ diff --git a/doc/pt/new.png b/doc/pt/new.png new file mode 100644 index 0000000..df3fd25 Binary files /dev/null and b/doc/pt/new.png differ diff --git a/doc/pt/open_dialog.png b/doc/pt/open_dialog.png new file mode 100644 index 0000000..029f8d4 Binary files /dev/null and b/doc/pt/open_dialog.png differ diff --git a/doc/pt/screenshot_diff.png b/doc/pt/screenshot_diff.png new file mode 100644 index 0000000..d2865d5 Binary files /dev/null and b/doc/pt/screenshot_diff.png differ diff --git a/doc/pt/screenshot_merge.png b/doc/pt/screenshot_merge.png new file mode 100644 index 0000000..1eb935b Binary files /dev/null and b/doc/pt/screenshot_merge.png differ diff --git a/doc/pt/triple_diff.png b/doc/pt/triple_diff.png new file mode 100644 index 0000000..c635d14 Binary files /dev/null and b/doc/pt/triple_diff.png differ diff --git a/doc/pt/white_space.png b/doc/pt/white_space.png new file mode 100644 index 0000000..e40a1c7 Binary files /dev/null and b/doc/pt/white_space.png differ diff --git a/doc/sv/Makefile.am b/doc/sv/Makefile.am new file mode 100644 index 0000000..bef483f --- /dev/null +++ b/doc/sv/Makefile.am @@ -0,0 +1,4 @@ +KDE_DOCS = kdiff3 +KDE_LANG = sv + + diff --git a/doc/sv/dirbrowser.png b/doc/sv/dirbrowser.png new file mode 100644 index 0000000..d3c63b2 Binary files /dev/null and b/doc/sv/dirbrowser.png differ diff --git a/doc/sv/dirmergebig.png b/doc/sv/dirmergebig.png new file mode 100644 index 0000000..b26b65c Binary files /dev/null and b/doc/sv/dirmergebig.png differ diff --git a/doc/sv/index.docbook b/doc/sv/index.docbook new file mode 100644 index 0000000..55c61e2 --- /dev/null +++ b/doc/sv/index.docbook @@ -0,0 +1,2938 @@ + +KDiff3"> + + + + +]> + + + + + + +Handbok &kdiff3; + + +Joachim Eibl
joachim.eibl snabela gmx.de +
+
+StefanAsserhäll
stefan.asserhall@comhem.se
Översättare
+
+ + +2002-2006 +Joachim Eibl + + + +&FDLNotice; + + + +2006-05-14 +0.9.90 + + + +&kdiff3; är ett verktyg för jämförelser och sammanfogning av filer och kataloger, som +jämför och sammanfogar två eller tre indatafiler med text eller kataloger, +visar skillnaden rad-för-rad och tecken-för-tecken(!), +tillhandahåller en automatisk sammanfogningsfunktion, +har en editor för bekväm upplösning av sammanfogningskonflikter, +erbjuder nätverkstransparens via KIO, +har alternativ för att färglägga eller dölja ändringar av blanktecken och kommentarer, +stöder Unicode, UTF-8 och andra filkodningar, +skriver ut skillnader, +stöder versionshanteringsnyckelord och historiksammanfogning. + +Det här dokumentet beskriver &kdiff3; version 0.9.89. + + + + + +KDE +kdeextragear +kdiff3 +diff +sammanfoga +CVS +trippeljämförelse +jämföra +filer +kataloger +versionshantering +trevägs sammanfogning +skillnader på plats +synkronisera +kpart +kio +nätverkstransparent +editor +blanktecken +kommentarer + + +
+ +Inledning +Ännu ett jämförelsegränssnitt? +Det finns flera grafiska jämförelseverktyg. Varför ska du välja &kdiff3;? Låt mig tala om varför jag skrev det. &kdiff3; påbörjades därför att jag var tvungen att göra en svår sammanfogning. Att sammanfoga är nödvändigt när flera personer arbetar med samma fil i ett projekt. En sammanfogning kan vara delvis automatiserad, när sammanfogningsverktyget inte bara har tillgång till de nya ändrade filerna (som kallas "grenar"), utan också originalfilen (som kallas "bas"). Sammanfogningsverktyget väljer automatiskt en ändring som bara gjorts i en gren. När flera bidragsgivare ändrar samma rader, detekterar sammanfogningsverktyget en konflikt som måste lösas manuellt. Sammanfogningen var svår eftersom en bidragsgivare hade ändrat mycket och rättat indenteringen på många ställen. Den andra bidragsgivaren hade också ändrat mycket text i samma fil, vilket orsakade flera konflikter vid sammanfogningen. Verktyget som jag då använde visade bara ändrade rader, men inte vad som hade ändrats inom raden. Det fanns inte heller någon information om var bara indenteringen hade ändrats. Sammanfogningen var en mindre mardröm. Det var alltså början. Den första versionen kunde visa skillnader på en rad, och visade skillnader i blanktecken. Senare tillkom många funktioner för att öka användbarheten. Om du till exempel snabbt vill jämföra en text, kan du kopiera den till klippbordet och klistra in i endera jämförelsefönstret. En funktion som krävde en stor ansträngning var funktionen för katalogjämförelse och sammanfogning, som gjorde programmet till en nästan fullständig filbläddrare. Jag hoppas att &kdiff3; fungerar för dig, också. Ha det så kul! Joachim Eibl (2003) + + +Skärmbilder och funktioner +Den här skärmbilden visar skillnaden mellan två textfiler +(Med en tidig version av &kdiff3;): + + + + +Trevägs sammanfogning stöds fullständigt. Den är användbar om två personer ändrar kod oberoende av varandra. Originalfilen (basen) används för att hjälpa &kdiff3; att automatiskt välja de riktiga ändringarna. Sammanfogningseditorn under jämförelsefönstren låter dig lösa konflikter, medan utdata du kommer att få visas. Skärmbilden visar tre indatafiler som håller på att' sammanfogas: + + + + + +&kdiff3; hjälper dig också att jämföra och sammanfoga hela kataloger. Den här skärmbilden visar &kdiff3; under en katalogsammanfogning: + + + + + + +Mer funktioner +Rad-för-rad och tecken-för-tecken jämförelsevisning +Genom att använda möjligheterna hos en grafisk färgskärm, visar &kdiff3; exakt vad skillnaderna är. När du måste göra många kodgranskningar, gillar du det här. + + + + + +Se skillnader i blanktecken med en blick +Mellanslag och tabulatorer som skiljer sig åt syns. När rader bara skiljer sig i mängden blanktecken syns det med en blick i sammanfattningskolumnen till vänster. (Inga mer problem om någon ändrar indenteringen.) + + + + + +Trevägsjämförelse +Analysera tre filer och se var de skiljer sig åt. Vänster/mitten/höger fönster kallas A/B/C och har blå/grön/magenta färg. Om en fil är likadan och en annan annorlunda för en rad, så visar färgerna vilken fil som är annorlunda. Den röda färgen betyder att båda de andra filerna är olika. + + + + + +Bekväm sammanfogning av två eller tre indatafiler +&kdiff3; kan användas för att sammanfoga två eller tre indatafiler och sammanfogar automatiskt så mycket som möjligt. Resultatet visas i ett redigerbart fönster där de flesta konflikter kan lösas med ett enda musklick. Välj knapparna A/B/C i verktygsraden för att välja källan som ska användas. Du kan också välja mer än en källa. Eftersom utmatningsfönstret är en editor, kan till och med konflikter som behöver ytterligare korrigering lösas här utan att kräva ett annat verktyg. + + +Och ... + + Snabb navigering via knappar. + Ett musklick i sammanfattningskolumnen synkroniserar alla fönster så att samma position visas. + Markera och kopiera från vilket fönster som helst, och klistra in i resultatfönstret för sammanfogning. + Översiktskolumn som visar var ändringar och konflikter finns. + Färgerna kan justeras enligt dina specifika önskemål. + Justerbar flikstorlek. + Alternativ för att infoga mellanslag istället för tabulatortecken. + Öppna filer bekvämt via dialogrutor, eller ange filnamn på kommandoraden. + Sök efter strängar i alla textfönster. Sök (Ctrl+F) och Sök igen (F3) + Visa radnummer för varje rad. + Klistra in klippbordet eller dra text till ett indatafönster för jämförelse + Nätverkstransparens via KIO. + Kan användas för jämförelsevisning i KDevelop 3. + Radbrytning för långa rader. + Stöd för Unicode, UTF-8 och andra kodningar. + Stöd för språk som läses från höger till vänster. + ... + + + + + +Filjämförelse och sammanfogning + +Kommandoradsväljare + +Jämföra två filer: +kdiff3 fil1 fil2 + + + +Sammanfoga två filer: +kdiff3 fil1 fil2 -m + kdiff3 fil1 fil2 -o utdatafil + + + +Jämföra tre filer: +kdiff3 fil1 fil2 fil3 + + + +Sammanfoga tre filer: +kdiff3 fil1 fil2 fil3 -m + kdiff3 fil1 fil2 fil3 -o utdatafil + +Observera att fil1 behandlas som bas för fil2 och fil3. + + +Specialfall: Filer med samma namn +Om alla filer har samma namn men finns i olika kataloger, kan du reducera hur mycket du måste skriva genom att bara ange filnamnet för den första filen. T.ex.: +kdiff3 kat1/filnamn kat2 kat3 + + + +Kommandorad för att starta en katalogjämförelse eller sammanfogning: +Det här är mycket likt, men nu handlar det om kataloger. +kdiff3 kat1 kat2 + kdiff3 kat1 kat2 -o målkat + kdiff3 kat1 kat2 kat3 + kdiff3 kat1 kat2 kat3 -o målkat + +För katalogjämförelse och sammanfogning kan du fortsätta att läsa här. + + +Andra kommandoradsväljare +För att se alla tillgängliga kommandoradsväljare, skriv +kdiff3 --help + +Exempel på utmatning: +Väljare: + -m, --merge Sammanfoga indata. + -b, --base file Explicit basfil. För att fungera tillsammans med vissa verktyg. + -o, --output file Utdatafil. Betyder underförstått -m. T.ex.: -o ny_fil.txt + --out file Utdatafil, igen. (för att fungera med vissa verktyg.) + --auto Inget grafiskt gränssnitt om alla konflikter kan lösas automatiskt (kräver -o fil) + --qall Lös inte konflikter automatiskt. (För att fungera med andra verktyg...) + --L1 alias1 Synlig ersättning av namn för indatafil 1 (bas). + --L2 alias2 Synlig ersättning av namn för indatafil 2. + --L3 alias3 Synlig ersättning av namn för indatafil 3. + -L, --fname alias Alternativ synlig ersättning av namn. Ange detta en gång för all indata. + --cs string Överskrid en inställning. Använd en gång för varje inställning, t.ex. --cs "AutoAdvance=1" + --confighelp Visa lista med inställningar och nuvarande värden. + --config file Använd en annan inställningsfil. + +Väljaren låter dig justera ett inställningsalternativ som annars bara kan justeras via inställningsdialogrutorna. Men var medveten om att när &kdiff3; avslutas lagras det ändrade värdet tillsammans med andra inställningar. Med kan du ta reda på namnen på tillgängliga alternativ och nuvarande värden. +Via kan du ange en annan inställningsfil. Om du ofta använder &kdiff3; med helt olika inställningar låter det dig enkelt byta mellan dem. + +Kommandoradsväljare som ignoreras +Många personer vill använda &kdiff3; tillsammans med något versionshanteringssystem, men när versionshanteringssystemet anroppar &kdiff3; med kommandoradsväljare som &kdiff3; inte känner igen, avslutas &kdiff3; med ett fel. Integrationsinställningarna gör det möjligt att ange kommandoradsväljare som ska ignoreras av &kdiff3;. De visas i användningshjälpen som i det här exemplet: +--väljare Ignoreras. (anvädardefinierad) + + + Kommandoradsväljare att ignorera:En lista med väljare, åtskilda med semikolon ';'. När en av dessa väljare finns på kommenderaden, ignorerar &kdiff3; den och kör utan att rapportera ett fel. (Förval är "u;query;html;abort"). + +Om det inte är nog, rekommenderas du att skriva ett skalskript som gör översättningen av väljare. + + + + +Dialogrutan Öppna +Eftersom många indatafiler måste kunna väljas, har programmet en särskild öppningsdialogruta: + + + +Öppningsdialogrutan tillåter att filnamnen redigeras för hand, att en fil väljes via filbläddraren ("Fil...") eller att senast använda filer väljes i kombinationsrutan. Om du öppnar dialogrutan igen, finns de nuvarande namnen fortfarande där. Den tredje indatafilen krävs inte. Om fältet för "C" förblir tomt, görs bara en tvåvägs jämförelseanalys. Du kan också välja en katalog med "Katalog...". Om en katalog anges för A, startar en katalogjämförelse och sammanfogning. Om A anger en fil, men B, C eller utmatningen anger en katalog, använder &kdiff3; filnamnet från A i de angivna katalogerna. Om "Sammanfoga" är valt, blir raden "Utmatning" redigerbar. Det krävs dock inte att utdatafilens namn anges omedelbart. Du kan också vänta med detta till du sparar. Knappen "Anpassa..." visar inställningsdialogrutan, så att du kan ställa in alternativ innan analysen utförs. + + +Klistra in eller släpp indata +Ibland vill du jämföra delar av en text som inte är en egen fil. &kdiff3; låter dig också klistra in text från klippbordet i det indatafönster för jämförelse som har fokus. Jämförelseanalysen sker då omedelbart. I öppningsdialogrutan behöver du då inte ange filer, utan bara stänga den via "Avbryt". Du kan också använda drag och släpp: Dra en fil från en filhanterare eller markerad text från en editor och släpp den på ett indatafönster för jämförelse. Vad är idén? Ibland innehåller en fil två liknande funktioner, men att kontrollera hur lika de verkligen är blir en stor ansträngning om du först måste skapa två filer och sedan ladda dem. Nu kan du helt enkelt kopiera, klistra in och jämföra de relevanta avsnitten. För närvarande kan du inte dra någonting från &kdiff3;. Bara att släppa indata i jämförelsefönstret stöds. Varning: Vissa editorer tolkar fortfarande drag och släpp till ett annat program som klipp ut (istället för kopiera) och klistra in. Ditt ursprungliga data kan då gå förlorat. + + +Jämföra filer och tolka informationen i indatafönstren + + + +InformationsradLängst upp i varje textfönster finns dess "informationsrad". Informationsraderna i indatafönstret innehåller bokstaven "A", "B" eller "C", filnamnet och radnumret för den första synliga raden i fönstret. (Observera att fönstret "C" är valfritt.) Varje informationsrad visas i en egen färg. När du väljer en annan fil genom att bläddra eller avslutar redigera filnamnet här genom att trycka på returtangenten, laddas den nya filen och jämförs med filen eller filerna som redan är laddade. FärgläggningDe tre indatafönstren tilldelas bokstäverna "A", "B" och "C". "A" har blå färg, "B" har grön färg och "C" har magenta. (Det är förvalda färger, men de kan ändras via menyn Inställningar.) När en skillnad upptäcks visar färgen vilken indatafil som skiljer sig åt. När båda övriga indatafiler skiljer sig åt, är färgen som används för att uttrycka det normalt röd ("Konfliktfärg" i inställningarna). Det här färgläggningsschemat är särskilt användbart i fallet med tre indatafiler, som syns i nästa avsnitt (Sammanfogning). SammanfattningskolumnTill vänster om varje text är "sammanfattningskolumnen". Om skillnader uppstod på en rad, visar sammanfattningskolumnen motsvarande färg. För en skillnad som bara består av blanktecken är sammanfattningen kryssad. För programspråk, där blanktecken inte är så viktiga är det användbart för att se med en blick om något av vikt ändrades. (För C/C++ är blanktecken bara intressanta inne i strängar, i kommentarer, för preprocessorn och i några mycket esoteriska situationer.) Den vertikala linjen som skiljer sammanfattningskolumnen och texten är avbruten om indatafilen inte har några rader där. När radbrytning är aktiverad visas den vertikala linjen med punkter för brutna rader. ÖversiktskolumnPå höger sida är en "översiktskolumn" synlig till vänster om den vertikala rullningslisten. Den visar en komprimerad sammanfattning av indata "A". Alla skillnader och konflikter är synliga med en blick. När bara två indatafönster används, syns alla skillnader i rött här, eftersom alla skillnader också är konflikter. En svart rektangel ramar in den synliga delen av indata. För mycket långa indatafiler, där antalet indatarader är större än höjden på översikten i bildpunkter, delar flera indatarader en översiktsrad. En konflikt har prioritet över enkla skillnader, som har prioritet över inga ändringar, så att inga skillnader eller konflikter går förlorade här. Genom att klicka på översiktskolumnen visas motsvarande text. Justera rader manuelltIbland placerar algoritmen fel rader intill varandra, eller så vill du jämföra ett textstycke med text på en helt annan position i den andra filen. I dessa fall kan du manuellt tala om för &kdiff3; att vissa rader ska arrangeras i rak linje. Markera texten som du vill arrangera med musen, som du skulle göra vid kopiera och klistra in, i det första jämförelsefönstret och välj därefter "Lägg till manuell justering av jämförelse" i menyn "Jämförelsevy" (snabbtangenten "Ctrl+Y"). En orange rad visas i sammanfattningskolumnen intill den markerade texten. Upprepa det för den andra och (om tillgänglig) tredje jämförelsevyn. &kdiff3; beräknar omedelbart om jämförelsen varje gång du gör det, och radar upp de markerade raderna. Naturligtvis kanske några av raderna som tidigare matchade inte längre matchar. För närvarande stöder inte sammanfogning användning av manuell hjälp vid jämförelse. + + + +Sammanfogning och editorfönstret för sammanfogningsutdata + + + +Editorfönstret för sammanfogningsutdata (under indatafönstren för jämförelse) har också en informationsrad längst upp som visar "Utmatning", filnamnet och "[Ändrad]" om du redigerat något. Oftast innehåller det någon text från de automatiska sammanfogningsfunktionerna, men det innehåller också ofta konflikter. Spara är inaktiverat till alla konflikter är lösta! (Använd knapparna "Gå till föregående/nästa olösta konflikt" för att hitta återstående konflikter.) Med bara två filer är varje skillnad också en konflikt, som måste lösas manuellt. Med tre indatafiler behandlas den första som bas, medan den andra och tredje indatafilen innehåller ändringar. Om bara indata B eller C har ändrats för en viss rad, men inte båda väljes den ändrade källan automatiskt. Bara om B och C har ändrats på samma rader, detekterar verktyget en konflikt som måste lösas manuellt. När B och C är likadana, men inte samma som A, väljes C.  SammanfattningskolumnenEditorfönstret för sammanfogningsutdata har också en sammanfattningskolumn till vänster. Den visar bokstaven för indata som raden valdes, eller ingenting om alla tre källorna var likadana för raden. Vid konflikter visar den ett frågetecken "?" och raden visar "< Konflikter vid sammanfogning >", allt med rött. Eftersom det skulle ta mycket lång tid att lösa konflikter rad för rad, grupperas rader i grupper som har samma skillnader och konfliktkaraktär. Konflikter med bara blanktecken skiljs dock från andra konflikter för att förbättra sammanfogningen av filer där indenteringen ändrats på många rader. Ställa in aktuell grupp och synkronisera sammanfognings- och jämförelsevyns positionNär du klickar på sammanfattningskolumnen med vänster musknapp i endera fönstret, så markeras gruppen som hör till den raden i alla fönster och gruppens början visas. (Det här kan innebära ett automatiskt byte av position i fönstren om gruppens början inte syns.) Gruppen blir då den "aktuella gruppen". Den markeras med "Bakgrundsfärgen för aktuellt jämförelseintervall" och en svart rad visas till vänster om texten. Välja indata A, B eller C för aktuell konflikt och redigeringKnappraden under menyraden innehåller tre knappar för indataval som innehåller bokstäverna "A", "B" och "C". Klicka på knappen för indataval för att infoga rader (eller ta bort dem om de redan infogats) från respektive källfil. För att välja rader från flera indatafiler klicka på respektive knappar i nödvändig ordning. Om du till exempel vill att rader från "B" ska hamna före rader från "A" i utdata, klicka först på "B" och därefter på "A". Om du använder alternativet för att automatiskt gå vidare (Gå automatiskt till nästa olösta konflikt efter val av källa), måste du inaktivera det innan du väljer rader från flera indatafiler eller om du vill redigera raderna efter du valt dem. Annars går &kdiff3; till nästa konflikt efter den första indatafilen valts. Det är ofta användbart att direkt redigera sammanfogad utdata. Sammanfattningskolumnen visar "m" för varje rad som ändrades manuellt. När skillnaderna till exempel justeras på ett sätt så att ett enkelt val av indata inte är tillfredsställande, kan du markera texten som behövs och använda normal kopiera och klistra in för att placera den i sammanfogad utdata. Ibland, när en rad tas bort antingen på grund av automatisk sammanfogning eller genom redigering och inga andra rader finns kvar i gruppen, visas texten <Ingen källrad> på raden. Det är bara en platsmarkör för gruppen om du ändrar dig och väljer en källa igen. Texten syns inte i sparade filer eller i några markeringar som du vill kopiera och klistra in. Texten "< Konflikter vid sammanfogning >" visas på klippbordet om du kopierar och klistrar in någon text som innehåller en sådan rad. Men var ändå försiktig med att göra det. Välja indata A, B eller C för alla konflikterDen normala sammanfogningen börjar med att automatiskt lösa enkla konflikter. Menyn "Sammanfoga" tillhandahåller också några alternativ för andra vanliga behov. Om du måste välja samma källfil för de flesta konflikter, kan du välja "A", "B" eller "C" överallt, eller bara för återstående olösta konflikter, eller för olösta konflikter med blanktecken. Om du vill bestämma själv för varje enskild skillnad, kan du "Ändra skillnader till konflikter", eller om du vill återgå till de automatiska valen i &kdiff3; kan du välja "Lös automatiskt enkla konflikter". Då startar &kdiff3; om sammanfogningen. För åtgärder som påverkar dina tidigare ändringar frågar &kdiff3; om bekräftelse innan åtgärden utförs. Observera: När endera källan väljes för olösta konflikter för blanktecken och alternativet "Ignorera siffror" eller "Ignorera C/C++ kommentarer" används, så behandlas ändringar i siffror eller kommentarer också som blanktecken. Sammanfoga automatiskt nyckelord för versionshantering och historik (logg)Många versionshanteringssystem stöder särskilda nyckelord i filen (t.ex. "$Date$", "$Header$", "$Author$", "$Log$" etc.) Vid arkivering ändrar versionshanteringssystemet (VCN) dessa rader. Till exempel ändras "$Date$" till "$Date: 2005/03/22 18:45:01 $". Eftersom raden är olika i varje version av filen, skulle den kräva manuell interaktion under sammanfogningen. &kdiff3; erbjuder automatisk sammanfogning av dessa poster. För enkla rader som matchar alternativet "Reguljärt uttryck för automatisk sammanfogning" i alla indatafiler väljer &kdiff3; raden från B, eller om tillgänglig, den från C. (Dessutom är det nödvändigt att raderna i fråga radas upp i jämförelsen och att föregående rad inte innehåller en konflikt.) Den automatiska sammanfogningen kan antingen utföras omedelbart när sammanfogningen startas (aktivera alternativet "Kör automatisk sammanfogning med reguljärt uttryck när sammanfogning startar") eller senare via "Kör automatisk sammanfogning med reguljärt uttryck" i menyn Sammanfoga. Automatisk sammanfogning för versionshanteringshistorik (också kallat "logg") stöds också. Automatisk sammanfogning av historik kan antingen utföras omedelbart när sammanfogningen startas genom att aktivera alternativet "Sammanfogning enligt versionshanteringshistorik när sammanfogning startar" eller senare via "Lös automatiskt historikkonflikter" i menyn Sammanfoga. Oftast börjar versionshanteringshistoriken med en rad som innehåller nyckelordet "$Log$". Den måste matchas av alternativet "Reguljärt uttryck för historikens början". &kdiff3; detekterar vilka efterföljande rader som ingår i historiken genom att analysera de inledande tecknen som fanns före nyckelordet "$Log$". Om samma "inledande kommentar" också finns på följande rader inkluderas de också i historiken. Vid varje arkivering skriver VCS en unik rad som anger version, datum- och tidsinformation följd av rader med användarens kommentarer. Raderna utgör en historikpost. Historikavsnittet växer vid varje arkivering och de senaste posterna visas längst upp (efter historikens startrad). När två utvecklare arkiverar grenar av en fil under parallell utveckling, kommer historiken för sammanfogning att innehålla flera poster som visas som konflikter under sammafogning av grenarna. Eftersom sammafogning av dem kan bli mycket tröttsam, erbjuder &kdiff3; stöd för den med två möjliga strategier: Bara infoga historikinformationen från båda bidragsgivarna längst upp, eller sortera historikinformationen enligt en användardefinierad nyckel. Metoden att bara infoga alla poster är enklast att ställa in. &kdiff3; behöver bara en metod att detektera vilka rader som hör till en historikpost. De flesta VCS infogar en tom rad efter varje historikpost. Om det inte finns några andra tomma rader, är det ett tillräckligt villkor för &kdiff3;. Ange bara en tom "Reguljärt uttryck för historikens början". Om kriteriet med en tom rad inte är tillräckligt kan du ange ett reguljärt uttryck för att detektera historikpostens början. Observera att &kdiff3; tar bort duplicerade historikposter.Om en historikpost fanns flera gånger i en indatafils historik, förblir bara en post i utmatningen. Om du vill sortera historiken måste du ange hur sorteringsnyckeln ska byggas. Använd parenteser som i "Reguljärt uttryck för historikpostens början" för att gruppera delar av det reguljära uttrycket som senare ska användas i sorteringsnyckeln. Ange därefter "Sorteringsnycklarnas ordning från historikpostens början" med en lista av nummer som refererar till gruppens position i det reguljära uttrycket åtskilda av kommatecken ",". Eftersom det inte är så enkelt att få det rätt omedelbart, kan du prova och förbättra det reguljära uttrycket och nyckelgenereringen i en särskild dialogruta genom att klicka på knappen "Prova dina reguljära uttryck". Antag att historiken ser ut så här: +/************************************************************************** +** HISTORIK: $Log: \toms_sammanfogning_huvudvy\Mitt_program\kod\komplexalgoritm.cpp $ +** +** \head\integreringsgren_12 2 Apr 2001 10:45:41 tom +** Sammanfogade grenen simongren_15. +** +** \main\henry_felrättningsgren_7\1 30 Mar 2001 19:22:05 henry +** Förbättrade hastigheten för delrutinen omvandlaTill(). +** Fixade krasch. +**************************************************************************/ + Historikens inledande rad matchar det reguljära uttrycket ".*\$Log.*\$.*". Därefter följer historikposterna. Raden med nyckelordet "$Log$" börjar med två "*" och därefter följer ett mellanslag. &kdiff3; använder den första strängen utan blanktecken som "inledande kommentar" och antar att historiken slutar med den första raden utan denna inledande kommentar. I exemplet slutar den sista raden med en sträng som också börjar med två "*", men istället för ett mellanslag följer fler "*". Därför avslutar denna rad historiken. Om sortering av historiken inte krävs kan det reguljära uttrycket för historikpostens början se ut så här. (Raden är delad i två eftersom den inte skulle få plats annars.) +\s*\\main\\\S+\s+[0-9]+ (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) + [0-9][0-9][0-9][0-9] [0-9][0-9]:[0-9][0-9]:[0-9][0-9]\s+.* + För detaljinformation om reguljära uttryck se Trolltechs dokumentation av reguljära uttryck. Observera att "\s" (med ett litet "s") matchar alla blanktecken och "\S" (med ett stort "S") matchar alla tecken som inte är blanktecken. I vårt exempel innehåller historikpostens början först versionsinformation med det reguljära uttrycket "\\main\\\S+", datumet som består av dagen "[0-9]+", månaden "(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)" och året "[0-9][0-9][0-9][0-9]", tiden "[0-9][0-9]:[0-9][0-9]:[0-9][0-9]" och till sist utvecklarens inloggningsnamn ".*". Observera att den inledande kommentaren (i exemplet "**") redan har tagits bort av &kdiff3; innan matchningsförsöket, därför börjar det reguljära uttrycket med en matchning av en eller flera blanktecken "\s*". Om du kräver sorterad historik måste sorteringsnyckeln beräknas. För att göra det måste relevanta delar i det reguljära uttrycket grupperas med parenteser. (De extra parenteserna kan också vara kvar även om historiksortering inaktiveras.) +\s*\\main\\(\S+)\s+([0-9]+) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) + ([0-9][0-9][0-9][0-9]) ([0-9][0-9]:[0-9][0-9]:[0-9][0-9])\s+(.*) + Parenteserna innehåller nu 1. versionsinformation, 2. dag, 3. månad, 4. år, 5. tid, 6. namn. Men om vi vill sortera enligt datum och tid måste vi skapa en nyckel med elementen synliga i en annan ordning: Först året, följt av månad, dag, tid, versionsinformation och namn. Därför ska sorteringsnyckelns ordning som anges vara "4,3,2,5,1,6". Eftersom månadsnamn inte är bra att sortera enligt ("Apr" skulle vara först) detekterar &kdiff3; vilken ordning månadsnamnen anges och använder det numret istället ("Apr"->"04"). Och om ett rent nummer hittas omvandlas det till ett fyrasiffrors värde med inledande nollor för sortering. Till sist blir den resulterande sorteringsnyckeln för den första historikpostens inledande rad: 2001 04 0002 10:45:41 integreringsgren_12 tom + +För mer information, se också Inställningar av jämför och sammanfoga. + + + +Navigering och redigering +Mycket navigering görs med rullningslisterna och musen, men du kan också navigera med tangentbordet. Om du klickar på något fönster kan du använda markörtangenterna vänsterpil, högerpil, uppåtpil, neråtpil, Page Up, Page Down, Home, End, Ctrl+Home och Ctrl+End som du kan i andra program. Sammanfattningskolumnen intill indatafilernas vertikala rullningslist kan också användas för att navigera genom att klicka i den. Du kan också använda hjulmusen för att rulla uppåt och neråt. I editorn för sammanfogningsutdata kan du också använda andra tangenter för redigering. Du kan byta mellan infognings- och ersättningsläge med tangenten Insert. (Normalläget är infoga.) Ett klick med vänster musknapp i någon sammanfattningskolumn synkroniserar alla fönster för att visa början på samma grupp av rader (som förklaras i avsnittet Ställa in aktuell grupp och synkronisera sammanfognings- och jämförelsevyns position). Verktygsraden innehåller också nio navigeringsknappar som du kan använda för att gå till aktuell/första/sista skillnaden, till nästa/föregående skillnad (Ctrl+Neråtpil eller Ctrl+Uppåtpil), till nästa/föregående konflikt (Ctrl+Page Down eller Ctrl+Page Up) eller till nästa/föregående olösta konflikt. Observera att för &kdiff3; förblir en "konflikt" som inte automatiskt löstes vid start av sammanfogningen alltid en "konflikt" även om den är löst. Därav nödvändigheten att särskilja "olösta konflikter". +Automatisk fortsättning +Det finns också en knapp som heter "Gå automatiskt till nästa olösta konflikt efter val av källa" (automatisk fortsättning). Om du aktiverar det här, så går &kdiff3; automatiskt till nästa olösta konflikt när en källa väljes. Det kan hjälpa till när du bara vill välja en källa. När du behöver båda källor, eller du vill redigera efter valet, bör du troligen stänga av det här. Innan &kdiff3; fortsätter till nästa olösta konflikt, visas effekten av valet en kort tid. Den här fördröjningen kan justeras i inställningarna under Jämför och sammanfoga. Du kan ange "Fördröjning vid automatisk fortsättning" i millisekunder mellan 0 och 2000. Tips: Är du trött på många klick? Använd en kort fördröjning vid automatisk fortsättning och snabbtangenterna Ctrl+1/2/3 för att välja A/B/C för många konflikter. + + + +Markera, kopiera och klistra in +Indatafönstren visar inte någon markör, så markeringar måste göras med musen, genom att klicka med vänster musknapp på början, hålla nere musknappen och gå till slutet, där musknappen släpps upp igen. Du kan också markera ett ord genom att dubbelklicka på det. I editorn för sammanfogningsutdata kan du också markera med tangentbordet, genom att hålla nere skifttangenten och navigera med piltangenterna. Om markeringen överstiger det synliga området, kan du flytta musen över fönsterkanterna, vilket gör att &kdiff3; rullar i den riktningen. För mycket stora markeringar kan du också använda navigationstangenterna medan musknappen hålls nere. Använd t.ex. Page Up och Page Down för att snabbt gå till en viss position. Släpp upp musknappen på slutpositionen. För att markera allt i det nuvarande fönstret, använd menyn "Redigera" -> "Markera allt" (Ctrl+A). För att kopiera till klippbordet måste du trycka på knappen "Kopiera" (Ctrl+C eller Ctrl+Insert). Men det finns ett alternativ som heter "Kopiera automatiskt markering". Om det är aktiverat, kopieras vad du än väljer omedelbart, och du behöver aldrig explicit kopiera. Men var försiktig när du använder detta, eftersom klippbordets innehåll kan förstöras av misstag. "Klipp ut" (Ctrl+X eller Skift+Delete) kopierar till klippbordet och tar bort den markerade texten. "Klistra in" (Ctrl+V eller Skift+Insert) infogar texten på klippbordet vid markörens position eller istället för den nuvarande markeringen. Om du klistrar in i något av jämförelsefönstren visas klippbordets innehåll i fönstret och jämförelsen startas omedelbart om. Det är användbart om du snabbt vill hämta ett textstycke någonstans och jämföra det med något annat utan att först skapa filer. + + +Spara +Att spara tillåts bara när alla konflikter är lösta. Om filen redan finns och alternativet "Säkerhetskopiera filer" är markerat, ändras originalversionens namn med tillägg av filändelsen .orig, och om en sådan fil redan finns tas den bort. När du avslutar eller startar en ny jämförelseanalys och data inte sparats ännu, frågar &kdiff3; om du vill spara, avbryta eller fortsätta utan att spara. (&kdiff3; fångar inga signaler, så om du "dödar" &kdiff3; går data förlorat.) Radslut sparas enligt den normala metoden i det underliggande operativsystemet. För Unix slutar varje rad med ett nyradstecken "\n", medan för Windows-baserade system slutar varje rad med ett returtecken och ett nyradstecken "\r\n". &kdiff3; behåller inte radslut för indatafilerna, vilket också betyder att du inte ska använda &kdiff3; med binärfiler. + + +Söka efter strängar +Du kan söka efter en sträng i vilket textfönster som helst i &kdiff3;. Kommandot "Sök..." (Ctrl+F) i menyn Redigera, visar en dialogruta som låter dig ange strängen att söka efter. Du kan också välja de fönster som ska sökas. Sökning startar alltid från början. Använd kommandot "Sök igen" (F3) för att fortsätta till nästa förekomst. Om du väljer att söka i flera fönster, söks det första fönstret från början till slut innan sökningen fortsätter från början i nästa fönster, etc. + + +Utskrift +&kdiff3; stöder utskrift av skillnader mellan textfiler. Kommandot "Skriv ut..." (Ctrl+P) i menyn Arkiv visar en dialogruta som låter dig välja skrivare och justera andra alternativ. Det finns flera möjligheter att justera intervallet. Beroende på olika utskriftsdialogrutor på olika operativsystem, varierar metoden för att åstadkomma val av ett visst intervall. + + Alla:Skriv ut allt. + Aktuell:Skriv ut en sida som börjar på den första synliga raden i fönstret. (På system utan alternativet kan det åstadkommas genom att ange sidnumret 10000 för utskrift.) + Markering:Innan du väljer att skriva ut, markera text med musen (som för kopiera och klistra in) i ett av jämförelsefönstren för att definiera start- och slutrad. Om ingen text var markerad i något av jämförelsefönstren, är inte alternativet tillgängligt. (På system utan alternativet kan det åstadkommas genom att ange sidnumret 9999 för utskrift.) + Intervall:Ange första och sista sidan. + +Andra viktiga inställningar för utskrift tas från de normala inställningarna: + Teckensnitt, teckenstorlek + Visa radnummer + Radbryt + Färger + etc. + +Liggande formatering rekommenderas också för utskrift. + + +Alternativ +Alternativ och listan med senaste filer sparas när du avslutar programmet, och laddas igen när du startar det. (Menyn Inställningar -> Anpassa &kdiff3;...) +Teckensnitt +Välj ett teckensnitt med fast breddsteg. (På vissa system visar dialogrutan också teckensnitt med variabel bredd, men du bör inte använda dem.) + + Kursiv stil för skillnader:Om du markerar detta, visas textskillnader med kursiv version av det valda teckensnittet. Om teckensnittet inte stöder kursiv stil, gör det ingenting. + + + + +Färger + + Förgrundsfärg:Oftast svart. + Bakgrundsfärg:Oftast vit. + Bakgrundsfärg för jämförelse:Oftast ljusgrå. + Färg A:Oftast mörkblå. + Färg B:Oftast mörkgrön. + Färg C:Oftast mörk magenta. + Konfliktfärg:Oftast röd. + Bakgrundsfärg för aktuellt intervall:Oftast ljusgul. + Bakgrundsfärg för aktuellt jämförelseintervall:Oftast mörkgul. + Färg för manuellt valda jämförelseintervall:Oftast orange. + Färg för nyaste fil i katalogjämförelse:Oftast grön. + Färg för äldsta fil i en katalogjämförelse:Oftast röd. + Färg för medelgamla filer i en katalogjämförelse:Oftast mörkgul. + Färg för saknade filer i en katalogjämförelse:Oftast svart. + +Att ändra färgerna för katalogjämförelser får inte någon effekt förrän nästa katalogjämförelse startas. +För system med bara 16 eller 256 färger är vissa rena färger inte tillgängliga. För sådana system väljer knappen "Förval" en ren färg. + + +Inställningar för editor + + Tabulator infogar mellanslag:Om det här inte är markerat, och du trycker på tabulatortangenten, infogas en tabulator, annars infogas lämpligt antal mellanslag. + Tabulatorbredd:Kan justeras för dina speciella behov. Normalvärdet är 8. + Automatisk indentering:När du trycker på Enter eller returtangenten, används föregående rads indentering för den nya raden. + Kopiera automatiskt markering:Varje markering kopieras omedelbart till klippbordet när den aktiveras, och du behöver inte kopiera den explicit. + Radslutstil:När du sparar kan du välja vilken radslutsstil du föredrar. Förvald inställning är det vanliga valet för operativsystemet som används. + + + +Inställningar av jämför och sammanfoga +När filer jämförs försöker &kdiff3; först att matcha rader som är lika i alla indatafiler. Det är bara under detta steg som blanktecken kan ignoreras. Det andra steget jämför varje rad. Under detta steg ignoreras inte blanktecken. Under sammanfogning ignoreras inte heller blanktecken. + + + Behåll returtecken:Vissa editorer (på vissa system) sparar returtecken '\r' och nyradstecken '\n' i slutet på raden, medan andra bara sparar nyradstecknet '\n'. Oftast ignorerar &kdiff3; returtecknet, men då ser filer som inte har samma storlek likadana ut vid jämförelse sida vid sida. När det här alternativet är markerat, görs returtecken synliga, men behandlas som blanktecken. Det här alternativet måste vara av under en sammanfogning. Normalvärdet är av. + Ignorera siffror:Normalvärdet är av. Siffertecken ('0'-'9', '.', '-') ignoreras under första delen av analysen när radmatchningen görs. Skillnaderna för resultatet visas ändå, men de behandlas som blanktecken. + Ignorera C/C++ kommentarer:Normalvärdet är av. Ändringar i kommentarer behandlas som ändringar i blanktecken. + Ignorera skiftläge:Normalvärdet är av. Ändringar i skiftläge för tecken (som 'A' eller 'a') hanteras som ändringar i blanktecken. + Preprocessorkommando:Se nästa avsnitt. + Radmatchande preprocessorkommando:Se nästa avsnitt. + Var noggrann:Gör en ansträngning att hitta en ännu mindre skillnad (Normalvärdet är på). Det här är troligen effektivt för komplicerade och stora filer, och långsamt för mycket stora filer. + Fördröjning vid automatisk fortsättning (ms):I automatiskt fortsättningsläge anger den här inställningen hur länge resultatet för gruppen ska visas innan hopp till nästa olösta konflikt. + Standardvärde för sammanfogning av blanktecken med två/tre filer:Lös automatiskt alla konflikter för blanktecken genom att välja angiven fil. (Normalvärdet är manuellt val.) Användbart om blanktecken verkligen är oviktiga i många filer. Om du bara behöver det ibland, är det bättre att använda "Välj A/B/C för olösta konflikter med blanktecken" i menyn Sammanfoga. Observera att om du antingen aktiverar "Ignorera siffror" eller "Ignorera C/C++ kommentarer" gäller det automatiska valet också vid konflikter för siffror eller kommentarer. + Reguljärt uttryck för automatisk sammanfogning:Reguljärt uttryck för rader där &kdiff3; automatisk ska välja en källa. Se också Automatisk sammanfogning ... + Kör automatisk sammanfogning med reguljärt uttryck när sammanfogning startar:Om aktiverad utför &kdiff3; den automatiska sammanfogningen med "Reguljärt uttryck för automatisk sammanfogning" när en sammanfogning startas. + Reguljärt uttryck för historikens början:Reguljärt uttryck för början av historikposten för sammanfogning. Oftast innehåller raden nyckelordet "$Log$". Förvalt värde: ".*\$Log.*\$.*" + Reguljärt uttryck för historikpostens början:En historikpost för sammanfogning består av flera rader. Ange det reguljära uttrycket för att detektera den första raden (utan inledande kommentar). Använd parenteser för att gruppera nycklarna du vill använda för sortering. Om det lämnas tomt, antar &kdiff3; att tomma rader skiljer historikposterna åt. Se också Automatisk sammanfogning ... + Sortering av historiksammanfogning:Aktivera sortering av versionshanteringshistorik. + Sorteringsnycklarnas ordning från historikpostens början:Varje parentes som används i det reguljära uttrycket för historikens startpost grupperar en nyckel som kan användas för sortering. Ange listan med nycklar (som numreras i ordning de uppträder med början på 1) med ',' som skiljetecken (t.ex. "4,5,6,1,2,3,7"). Om det lämnas tomt utförs ingen sortering. Se också Automatisk sammanfogning ... + Sammanfogning enligt versionshanteringshistorik när sammanfogningen startar:Om aktiverad utför &kdiff3; den automatiska sammafogningen av historik med tidigarenämnda alternativ när en sammanfogning startas. + Prova dina reguljära uttryckKnappen visar en dialogruta som låter dig förbättra och prova det reguljära uttrycket ovan. Kopiera bara respektive data från dina filer till exempelraderna. "Matchningsresultat" visar omedelbart om matchningen lyckas eller inte. "Sorteringsnyckelresultat" visar nyckeln som används för sortering vid sammanfogning av historik. + Ej relevant sammanfogningskommando:Ange ett eget kommando som ska anropas när &kdiff3; detekterar att filen från B inte bidrar med något relevant data som inte reda finns i filen från C. Kommandot anropas med de tre filnamnen som parametrar. Data som matchas av "Reguljärt uttryck för automatisk sammanfogning" eller i historiken anses inte vara relevant. + + + + +Katalogsammanfogning +De här alternativen har att göra med avsökning av katalogen och hantering av sammanfogningen: Se Katalogjämförelse och sammanfogning för detaljinformation. Ändå finns det ett alternativ här som också är relevant för att spara enstaka filer: + + Säkerhetskopiera filer:När en fil sparas och en äldre version redan finns, ändras originalversionens namn med tillägg av filändelsen ".orig". Om en gammal säkerhetskopia med filändelsen ".orig" redan finns tas den bort utan säkerhetskopiering. + + + +Inställningar för region och språk + + Språk:Justera användargränssnittets språk. Att ändra alternativet påverkar inte programmet som kör. Du måste avsluta och starta om &kdiff3; för att ändra språk. (Alternativet är inte tillgängligt i KDE-versionen av &kdiff3;, eftersom språket kan justeras i de allmänna KDE-inställningarna.) + Använd samma kodning för allt:Följande kodningsalternativ kan justeras separat för varje objekt, eller om alternativet är sant, ställs alla värden in till det första värdet. + Lokal kodning:Ovanför kodningsväljarna visas en anmärkning som talar om för dig vad den lokala kodningen är (Den kan inte justeras, utan bara som information om du inte vet vad den lokala kodningen är, men behöver kunna välja den.) + Filkodning för A/B/C:Justera filkodningen för indatafiler. Det ger effekt på hur specialtecken tolkas. Eftersom du kan justera varje kodning separat, kan du till och med jämföra och sammanfoga filer som sparades med olika kodningar. + Filkodning för sammanfogad utdata och vid spara:När du har redigerat en fil, kan du justera vilken kodning som används när den sparas till disk. + Filkodning för preprocessorfiler:När du definierar preprocessorer kanske de inte kan hantera din kodning (exempelvis om dina filer använder 16-bitars Unicode och preprocessorn bara kan hantera 8-bitars ASCII). Med det här alternativet kan du definiera kodningen för preprocessorns utdata. + Språk som läses från höger till vänsterVissa språk skrivs från höger till vänster. När alternativet är aktiverat, ritar &kdiff3; text från höger till vänster i jämförelsefönstren och i sammanfogningsfönstret. Observera att om du startar &kdiff3; med kommandoradsväljaren "--reverse" så visas all layout också från höger till vänster. (Det är en funktion som Qt tillhandahåller.) Denna dokumentation är skriven med antagandet att "Språk som läses från höger till vänster" eller omvänd layout inte är aktiverade. Vissa referenser till "vänster" eller "höger" måste ersättas av motsatsen om du använder alternativen. + + + + +Diverse +(Dessa alternativ och åtgärder är tillgängliga i menyerna eller verktygsraden.) + + Visa radnummer:Du kan välja om radnummer ska visas för indatafilerna. + Visa mellanslag och tabulatortecken i jämförelse:Ibland är synliga mellanslag och tabulatortecken störande. Du kan stänga av detta. + Visa blanktecken:Stäng av det här för att inte visa ändringar av bara blanktecken i texten eller översiktskolumnerna. (Observera att detta också gäller ändringar av siffror eller kommentarer om alternativen "Ignorera siffror" eller "Ignorera C/C++ kommentarer" är aktiva.) + Översiktsalternativ:Dessa alternativ är bara tillgängliga när du jämför tre filer. I normalläge visas alla skillnader i en färgkodad översiktskolumn, men ibland är du särskilt intresserad av skillnaderna mellan två av de tre filerna. Genom att välja översikten "A mot B", "A mot C" eller "B mot C", visas en andra översiktskolumn med begärd information intill den vanliga översikten. + Radbryt skillnadsfönster:Radbryt rader när deras längd skulle överskrida ett fönsters bredd. + Visa fönster A/B/C:Ibland vill du använda skärmutrymmet bättre för långa rader. Dölj fönster som inte är viktiga. (I menyn Fönster.) + Byt delningsorientering:Byt mellan jämförelsefönster som visas intill varandra (A till vänster om B till vänster om C) eller ovanför varandra (A ovanför B ovanför C). Det bör också hjälpa för långa rader. (I menyn Fönster.) + Starta sammanfogning snabbt:Ibland tittar du på skillnader, och bestämmer dig för att sammanfoga. "Sammanfoga aktuell fil" i menyn Katalog fungerar också om du bara jämför två filer. Ett enkelklick startar sammanfogningen och använder filnamnet på den sista indatafilen som förvalt utmatningsfilnamn. (När detta används för att starta om en sammanfogning, behålls utmatningsfilnamnet.) + + + +Anpassa snabbtangenter +För närvarande stöder bara KDE-versionen anpassningsbara snabbtangenter (Menyn Inställningar -> Anpassa genvägar...) + + + +Preprocessorkommandon +&kdiff3; stöder två preprocessoralternativ. + + Preprocessorkommando:När en fil läses, skickas den via det här externa kommandot. Utmatningen från kommandot visas istället för den ursprungliga filen. Du kan skriva din egen preprocessor som uppfyller dina speciella behov. Använd det här för att ta bort störande delar av filen, eller för att automatiskt korrigera indenteringen, etc. + Radmatchande preprocessorkommando:När en fil läses, skickas den via det här externa kommandot. Om ett preprocessorkommando (se ovan) också anges är utmatningen från preprocessorn inmatning till den radmatchande preprocessorn. Utmatningen används bara under radmatchningsfasen av analysen. Du kan skriva din egen preprocessor som uppfyller dina speciella behov. Varje indatarad måste ha en motsvarande utdatarad. + + +Idén är att ge användaren större flexibilitet när jämförelseresultatet ställs in, men det kräver ett externt program, och många användare vill inte skriva ett själva. De goda nyheterna är att ofta klarar sed eller perl av jobbet. +Till exempel ett enkelt fall att prova: Betrakta filen a.txt (6 rader): + aa + ba + ca + da + ea + fa + Och filen b.txt (3 rader): + cg + dg + eg + Utan en preprocessor skulle följande rader placeras intill varandra: + aa - cg + ba - dg + ca - eg + da + ea + fa + Det är troligen inte vad som önskas eftersom den första bokstaven innehåller den intressanta informationen. För att hjälpa matchningsalgoritmen att ignorera den andra bokstaven kan man använda ett radmatchande preprocessorkommando som ersätter 'g' med 'a': + sed 's/g/a/' + Med det kommandot blir resultatet av matchningen: + aa + ba + ca - cg + da - dg + ea - eg + fa + Internt ser matchningsalgoritmen filerna efter den radmatchande preprocessorn har körts, men på skärmen är filen oförändrad. (Den normala preprocessorn skulle också ändra data på skärmen.) + +Grundläggande information om <command +>sed</command +> +Det här avsnittet introducerar bara några mycket grundläggande funktioner i sed. För mer information se info:/sed eller http://www.gnu.org/software/sed/manual/html_mono/sed.html. En förkompilerad version för Windows finns på http://unxutils.sourceforge.net. Observera att följande exempel antar att sed finns i någon katalog i miljövariabeln PATH. Om det inte är fallet, måste du ange fullständig absolut sökväg till kommandot. +Observera också att följande exempel använder enkla citationstecken ('), vilket inte fungerar i Windows. I Windows ska du istället använda dubbla citationstecken ("). +I det här sammanhanget används bara ersättningskommandot i sed: + sed 's/REGUTTRYCK/ERSÄTTNING/FLAGGOR' + Innan du använder ett nytt kommando inne i &kdiff3;, bör du först prova det i en terminal. Då är kommandot echo användbart. Till exempel: + echo abrakadabra | sed 's/a/o/' + -> obrakadabra + Exemplet visar ett mycket enkelt sed-kommando som ersätter den första förekomsten av "a" med "o". Om du vill ersätta alla förekomster behöver du flaggan "g": + echo abrakadabra | sed 's/a/o/g' + -> obrokodobro + Symbolen "|" är rörledningskommandot som överför utdata från föregående kommando till indata i efterföljande kommando. Om du vill prova med en längre fil kan du använda cat på Unix-liknande system eller type på Windows-liknande system. sed utför ersättningen för varje rad. cat filnamn |sed väljare + + + +Exempel på användning av <command +>sed</command +> i &kdiff3; +Ignorera andra typer av kommentarer +För närvarande förstår &kdiff3; bara C/C++ kommentarer. Genom att använda ett radmatchande preprocessorkommando kan du också ignorera andra typer av kommentarer genom att konvertera dem till C/C++ kommentarer. För att till exempel ignorera kommentarer som börjar med "#", skulle du vilja konvertera dem till "//". Observera att du också måste aktivera alternativet "Ignorera C/C++ kommentarer" för att få någon effekt. Ett lämpligt radmatchande preprocessorkommando skulle vara: + sed 's/#/\/\//' + Eftersom tecknet "/" har en särskild betydelse i sed, är det nödvändigt att lägga till tecknet "\" innan varje "/" i ersättningssträngen. Ibland behövs "\" för att lägga till eller ta bort en särskild betydelse för vissa tecken. De enkla citationstecknen (') innan och efter ersättningskommandot är nu viktiga, eftersom skalet annars skulle försöka tolka vissa specialtecken som '#', '$' eller '\' innan de skickas till sed. Observera att i Windows behöver du dubbla citationstecken (") här. Windows ersätter andra tecken som '%', så du kan behöva experimentera något. + +Jämförelse som inte är skiftlägeskänslig +Använd följande radmatchande preprocessorkommando för att omvandla all indata till stora bokstäver: + sed 's/\(.*\)/\U\1/' + Här är ".*" ett reguljärt uttryck som matchar alla strängar, och i det här sammanhanget matchar alla tecken på raden. Tecknet "\1" i ersättningssträngen motsvarar den matchade texten mellan det första paret "\(" och "\)". "\U" konverterar den infogade texten till stora bokstäver. + + +Ignorera nyckelord för versionshantering +CVS och andra versionshanteringssystem använder flera nyckelord för att infoga automatiskt skapade strängar (info:/cvs/Keyword substitution). Alla följer mönstret "$NYCKELORD skapad text$". Nu behöver vi ett radmatchande preprocessorkommando som bara tar bort den skapade texten: + sed 's/\$\(Revision\|Author\|Log\|Header\|Date\).*\$/\$\1\$/' + Strängen "\|" skiljer de möjliga nyckelorden åt. Du kanske vill ändra listan enligt dina behov. Tecknet "\" framför "$" behövs eftersom annars matchar "$" radens slut. +Medan du experimenterar med sed kan du komma att förstå och till och med tycka om de reguljära uttrycken. De är användbara eftersom det finns många andra program som också stöder liknande funktioner. + + +Ignorera siffror +Att ignorera siffror är i själva verket ett inbyggt alternativ, men som ett annat exempel, visas hur det skulle se ut som ett radmatchande preprocessorkommando. + sed 's/[0123456789.-]//g' + Alla tecken inom '[' och ']' matchar och kommer att ersättas av ingenting. + + +Ignorera vissa kolumner +Ibland är texten mycket strikt formaterad, och innehåller kolumner som du alltid vill ignorera, medan det finns andra kolumner du vill bevara för analys. I följande exempel ignoreras de fem första kolumnerna (tecknen), de följande tio kolumnerna bevaras, därefter ignoreras återigen fem kolumner och resten av raden bevaras. + sed 's/.....\(..........\).....\(.*\)/\1\2/' + Varje punkt '.' motsvarar vilket enstaka tecken som helst. Strängarna "\1" och "\2" i ersättningssträngen refererar till den matchande texten inom det första och andra paret av "\(" och "\)" som anger texten att bevara. + + +Kombinera flera ersättningar +Ibland vill du tillämpa flera ersättningar samtidigt. Då kan du använda semikolon ';' för att skilja dem från varandra. Till exempel: echo abrakadabra | sed 's/a/o/g;s/\(.*\)/\U\1/' + -> OBROKODOBRO + + + + +Använda <command +>perl</command +> istället för <command +>sed</command +> +Istället för sed kanske du vill använda något annat som perl. + perl -p -e 's/REGUTTRYCK/ERSÄTTNING/FLAGGOR' + Men vissa detaljer är annorlunda i perl. Observera att där sed behöver "\(" och "\)" kräver perl det enklare "(" och ")" utan inledande '\'. Till exempel: sed 's/\(.*\)/\U\1/' + perl -p -e 's/(.*)/\U\1/' + + + + + +Ordning vid körning av preprocessor +Data skickas igenom all intern och extern förbehandling i följande ordning: + +Normal preprocessor, +Preprocessor för radmatchning, +Ignorera skiftläge (konvertering till stora bokstäver), +Detektering av C/C++ kommentarer, +Ignorera siffror, +Ignorera blanktecken + +Data efter den normala förbehandlingen bevaras för att visas och sammanfogas. De andra åtgärderna ändrar bara data som algoritmen för radmatchande jämförelse ser. I de sällsynta fall då du använder normal förbehandling, observera att den radmatchande förbehandlingen ser utdata från den normala förbehandlingen som indata. + + +Varning +Förbehandlingskommandon är ofta mycket användbara, men som med alla alternativ som ändrar texten eller döljer vissa skillnader automatiskt, kan du av misstag hoppa över vissa skillnader och i värsta fall förstöra viktig data. Av denna orsak, om ett normalt preprocessorkommando används under en sammanfogning, talar &kdiff3; om det för dig och frågar om det ska inaktiveras eller inte. Men du får ingen varning om ett radmatchande preprocessorkommando är aktivt. Sammanfogningen sker inte förrän alla konflikter är lösta. Om du inaktiverade "Visa blanktecken" blir också skillnaderna som togs bort med det radmatchande preprocessorkommandot osynliga. Om knappen Spara förblir inaktiv under en sammanfogning (på grund av kvarvarande konflikter), försäkra dig om att aktivera "Visa blanktecken". Om du inte vill sammanfoga dessa mindre viktiga skillnader för hand kan du välja "Välj [A|B|C] för olösta konflikter med blanktecken" i menyn "Sammanfoga". + + + + + +Katalogjämförelse och sammanfogning med &kdiff3; +Introduktion till katalogjämförelse och sammanfogning +Ofta måste programmerare ändra många filer i en katalog för att uppnå sina syften. För att åstadkomma detta låter &kdiff3; dig också jämföra och sammanfoga hela kataloger rekursivt! Även om jämförelse och sammanfogning av kataloger verkar vara ganska självklart, finns det flera detaljer som du bör känna till. Det viktigaste är förstås faktum att många filer nu kan påverkas av varje åtgärd. Om du inte har säkerhetskopior av originaldata, kan det vara mycket svårt eller till och med omöjligt att återgå till originalläget. Så innan du påbörjar en sammanfogning, försäkra dig om att data är säkert, och att det är möjligt att återställa. Om du skapar ett arkiv, eller använder ett versionshanteringssystem är ditt eget beslut, men till och med erfarna programmerare och integratörer behöver ibland gammal källkod. Observera också att även om jag (upphovsmannen till &kdiff3;) försöker att göra mitt bästa, kan jag inte garantera att det inte finns fel. Enligt GNU GPL finns det INGEN GARANTI av något slag för det här programmet. Så var ödmjuk, och kom alltid ihåg: +
+ Att fela är mänskligt, men för att verkligen ställa till det behövs en dator. +
+Så det här är vad programmet kan göra åt dig: &kdiff3; ... + + ... läser och jämför två eller tre kataloger rekursivt, + ... hanterar symboliska länkar särskilt, + ... låter dig bläddra mellan filer med ett dubbelklick på musen, + ... föreslår ett sammanfogningsalternativ för varje objekt, som du kan ändra innan katalogsammanfogningen startas, + ... låter dig simulera sammanfogningen och listar åtgärderna som skulle ske, utan att verkligen göra dem, + ... låter dig utföra sammanfogningen, och låter dig bestämma så fort manuell interaktion behövs, + ... låter dig utföra vald åtgärd för alla objekt (tangenten F7 ) eller markerat objekt (tangenten F6), + ... låter dig fortsätta sammanfogningen efter manuell interaktion med tangenten F7, + ... skapar valfria säkerhetskopior, med filändelsen ".orig", + ... + +
+ +Starta katalogjämförelse eller sammanfogning +Det här liknar mycket sammanfogning och jämförelse av en enstaka fil. Du måste bara ange kataloger på kommandoraden eller i dialogrutan för filöppning. +Jämföra eller sammanfoga två kataloger: +kdiff3 kat1 kat2 + kdiff3 kat1 kat2 målkat + +Om ingen målkatalog anges, använder &kdiff3; kat2. + + +Jämföra eller sammanfoga tre kataloger: +kdiff3 kat1 kat2 kat3 + kdiff3 kat1 kat2 kat3 målkat + +När tre kataloger sammanfogas, används kat1 som basen för sammanfogningen. Om ingen målkatalog anges, använder &kdiff3; kat3 som målkatalog för sammanfogningen. + +Observera att bara jämförelsen startas automatiskt, inte sammanfogningen. För det måste du först välja ett menyalternativ eller tangenten F7. (Mer information kommer senare.) + + + +Katalogsammanfogning av synlig information +Medan katalogerna läses visas en meddelanderuta som informerar dig om förloppet. Om du avbryter katalogavsökningen, visas bara filer som hittills har jämförts. När katalogavsökningen är färdig, visar &kdiff3; en listruta med återstående resultat, ... + + + +... och detaljinformation om det markerade objektet till höger: + + + + + +Namnkolumnen +Varje fil och katalog som hittades under avsökningen visas här i ett träd. Du kan välja ett objekt genom att klicka en gång på det med musen. Katalogerna är normalt ihopdragna. Du kan expandera och dra ihop dem genom att klicka på "+"/"-", genom att dubbelklicka på objektet eller genom att använda tangenterna vänsterpil och högerpil. Menyn "Katalog" innehåller också två alternativ "Dra ihop alla underkataloger" och "Expandera alla underkataloger" som du kan använda för att dra ihop eller expandera alla kataloger på en gång. Om du dubbelklickar på ett filobjekt, utförs filjämförelsen och jämförelsefönstret för filer visas. +Ikonen i namnkolumnen motsvarar filtypen i den första katalogen ("A"). Den kan vara någon av dessa: + + Normal fil + Normal katalog (katalogikon) + Länk till en fil (filikon med en länkpil) + Länk till en katalog (katalogikon med en länkpil) + +Om filtypen är annorlunda i övriga kataloger, syns det i kolumnerna A/B/C och i fönstret som visar detaljinformation om det markerade objektet. Observera att i dessa fall kan inte någon sammanfogningsåtgärd väljas automatiskt. När sammanfogningen startas, informeras användaren om den här sortens problem. + + +Kolumnerna A/B/C och färgläggningsschemat +Som syns i bilden ovan, används färgerna röd, grön, gul och svart i kolumnerna A/B/C. + + Svart: Det här objektet finns inte i den här katalogen. + Grön: Nyaste objektet. + Gul: Äldre än grön, nyare än röd. + Röd: Äldsta objektet. + +Utom för objekt som var identiska i jämförelsen, där är färgen också identisk även om åldern inte är det. Kataloger anses vara likadana om alla objekt de innehåller är likadana. Då har de också samma färg. Åldern på en katalog spelar dock ingen roll för dess färg. Idén för färgläggningsschemat hittade jag i dirdiff. Färgerna motsvarar färgerna hos ett löv som är grönt från början, sedan blir gult och till sist rött när det är gammalt. + +Åtgärdskolumnen +Efter att ha jämfört katalogerna utvärderar &kdiff3; också ett förslag på sammanfogningsåtgärd. Det visas i kolumnen "Åtgärd". Du kan ändra den genom att klicka på åtgärden du vill ändra. En liten meny dyker upp och låter dig välja en åtgärd för objektet. (Du kan också välja den oftast använda åtgärden via tangentbordet. Ctrl+1/2/3/4/Delete väljer A/B/C/Sammanfoga/Ta bort om de är tillgängliga.) Åtgärden utförs under sammanfogningen. Vilka åtgärder som är tillgängliga beror på objektet och sammanfogningsläget som används. Sammanfogningsläget är ett av + + Sammanfogning av tre kataloger ("A" behandlas som äldsta bas för båda). + Sammanfogning av två kataloger. + Tvåkatalogs synkroniseringsläge (aktiveras med alternativet "Synkronisera kataloger"). + +Vid trekatalogers sammanfogning är den förslagna åtgärden: Om för ett objekt... + + ... alla tre katalogerna är likadana: Kopiera från C + ... A och C är likadana med B är det inte: Kopiera från B (eller om B inte finns, ta bort målet om det finns) + ... A och B är likadana med C är det inte: Kopiera från C (eller om C inte finns, ta bort målet om det finns) + ... B och C är likadana med A är det inte: Kopiera från C (eller om C inte finns, ta bort målet om det finns) + ... bara A finns: Ta bort målet (om det finns) + ... bara B finns: Kopiera från B + ... bara C finns: Kopiera från C + ... A, B och C är inte likadana: Sammanfoga + ... A, B och C har inte samma filtyp (t.ex. A är en katalog, B är en fil): "Fel: Konflikt i filtyper". Medan sådana objekt finns, kan inte katalogsammanfogningen startas. + +Vid tvåkatalogers sammanfogning är den förslagna åtgärden: Om för ett objekt... + + ... båda katalogerna är likadana: Kopiera från B + ... A finns men inte B: Kopiera från A + ... B finns men inte A: Kopiera från B + ... A och B finns men är inte likadana: Sammanfoga + ... A och B har inte samma filtyp (t.ex. A är en katalog, B är en fil): "Fel: Konflikt i filtyper". Medan sådana objekt finns, kan inte katalogsammanfogningen startas. + +Synkroniseringsläge är bara aktivt om två kataloger och ingen explicit målkatalog anges, och om alternativet "Synkronisera kataloger" är aktivt. &kdiff3; väljer då en standardåtgärd så att båda katalogerna är likadana efteråt. Om för ett objekt ... + + ... båda katalogerna är lika: Ingenting görs. + ... A finns, men inte B: Kopiera A till B + ... B finns, men inte A: Kopiera B till A + ... A och B finns, men är inte likadana: Sammanfoga och lagra resultatet i båda kataloger. (För användaren är det synliga filnamnet för att spara B, men därefter kopierar &kdiff3; också B till A.) + ... A och B har inte samma filtyp (t.ex. A är en katalog, B är en fil): "Fel: Konflikt i filtyper". Medan sådana objekt finns, kan inte katalogsammanfogningen startas. + +När två kataloger sammanfogas och alternativet "Kopiera nyare istället för att sammanfoga" är markerat, tittar &kdiff3; på datum och föreslår att välja den nyare filen. Om filerna inte är lika men har samma datum, innehåller åtgärden "Fel: Datum är lika men filerna är det inte." Medan sådana objekt finns, kan inte katalogsammanfogningen startas. + + +Statuskolumnen +Under sammanfogningen behandlas en fil i taget. Statuskolumnen visar "Klar" för objekt där sammanfogningsåtgärden har lyckats, och någon annan text om något oväntat inträffade. När en sammanfogning är färdig, bör du göra en sista kontroll för att se att status för alla objekt är acceptabel. + + +Statistikkolumner +När filjämförelseläget "Fullständig analys" är aktiverat i alternativen, visar &kdiff3; extra kolumner som innehåller antal oupplösta, upplösta, inte blanka och blanka konflikter. (Kolumnen lösta visas bara när kataloger jämförs eller sammanfogas.) + + +Välja listade filer +Flera alternativ påverkar vilka filer som listas här. Vissa är tillgängliga i inställningsdialogrutan. Menyn Katalog innehåller alternativen: + "Visa identiska filer": Filer som har detekterats som lika i alla indatakataloger. + "Visa olika filer": Filer som finns i två eller flera kataloger men inte är lika. + "Visa bara filer i A": Filer som bara finns i A, men inte i B eller C. + "Visa bara filer i B": Filer som bara finns i B, men inte i A eller C. + "Visa bara filer i C": Filer som bara finns i C, men inte i A eller B. + +Aktivera bara alternativen "Visa" för objekten du vill lista. Om du till exempel bara vill lista alla objekt som antingen finns i A eller i B men inte i båda, måste du aktivera "Visa bara filer i A" och "Visa bara filer i B" och inaktivera alla andra ("Visa identiska filer", "Visa olika filer", "Visa bara filer i C"). Listan uppdateras omedelbart för att motsvara ändringen. Alternativen gäller också för kataloger med ett undantag: Att inaktivera "Visa olika filer" döljer inte hela kataloger. Det fungerar bara för filer inne i dem. Observera att av dessa är bara alternativet "Visa identiska filer" som är bestående Övriga aktiveras när &kdiff3; startas. + + + + + +Utföra en katalogsammanfogning +Du kan antingen sammanfoga markerat objekt (fil eller katalog), eller alla objekt. När du har gjort alla val av åtgärder (också i alla underkataloger), kan du utföra sammanfogningen. Var medveten om att om du inte explicit angav en målkatalog, blir målet "C" i trekatalogsläge, "B" i tvåkatalogsläge, och i synkroniseringsläge är det "A" och/eller "B". Om du också har angivit en målkatalog, kontrollera att alla objekt som ska finnas i utmatningen finns i trädet. Det finns några alternativ som får vissa objekt att utelämnas från katalogjämförelsen och sammanfogningen. Kontrollera dessa alternativ för att undvika obehagliga överraskningar: + + "Rekursiva kataloger": Om det är av, hittas inte objekt i underkataloger. + "Mönster" eller "Undantagsmönster": Inkludera eller undanta objekt som matchar + "Undanta gömda filer" + "Visa"-alternativ (Visa identiska/olika filer, bara filer i A/B/C) + +Om du ändrar inställningarna för att visa fler filer, måste du göra en omsökning via menyn "Katalog" -> "Avsök igen". (Orsaken till det är att &kdiff3; utelämnar jämförelsen för filer enligt kriterierna för att få snabbare jämförelsehastighet.) Om du ändrade fil- och katalogmönster för att undanta filer, uppdateras fillistan omedelbart när inställningsdialogrutan stängs. Observera att när du skriver till en helt ny katalog vill du oftast också kopiera de identiska filerna. Aktivera "Visa identiska filer" i detta fall. Om din målkatalog är en av indatakatalogerna, är det inte nödvändigt eftersom filerna redan finns där. Om du är nöjd hittills, är resten enkelt. För att sammanfoga alla objekt: Välj "Starta eller fortsätt katalogsammanfogning" i menyn "Katalog" eller tryck på F7 (som är snabbtangenten). För att bara sammanfoga aktuellt objekt: Välj "Utför åtgärd för aktuellt objekt" eller tryck på F6. Om vissa objekt med ogiltiga filtyper fortfarande finns, på grund av filtyper med konflikter, visas en meddelanderuta och objekten pekas ut, så att du kan välja en giltig åtgärd för objektet. Om du sammanfogar alla objekt visas en dialogruta som ger dig alternativen "Gör det", "Simulera det" och "Avbryt". + + Välj "Simulera det" om du vill se vad som skulle göras utan att verkligen göra det. En utförlig lista med alla åtgärder visas. + Välj annars "Gör det" för att verkligen utföra sammanfogningen. + +Därefter utför &kdiff3; den angivna åtgärden för alla objekt. Om manuell interaktion krävs (sammanfogning av enstaka fil), visas ett sammanfogningsfönster (se den stora skärmbilden). När du är klar med manuell sammanfogning av en fil, välj återigen "Starta eller fortsätt katalogsammanfogning" eller tryck på F7. Om du inte har sparat ännu, ber en dialogruta dig att göra det. Därefter fortsätter &kdiff3; till nästa objekt. När &kdiff3; stöter på ett fel, meddelas det och utförlig statusinformation visas. Längst ner i listan finns det några felmeddelanden som bör hjälpa dig att förstå problemets orsak. När du fortsätter sammanslagningen (tangenten F7), ger &kdiff3; dig valet att försöka igen eller hoppa över objektet som orsakade problemet. Det betyder att du kan välja en annan åtgärd, eller lösa problemet på annat sätt, innan du fortsätter. När sammanfogningen är färdig, informerar &kdiff3; dig med en meddelanderuta. Om vissa objekt sammanfogades individuellt innan katalogsammanfogningen, kommer &kdiff3; ihåg det (medan sammanfogningssessionen pågår), och sammanfogar dem inte igen när sammanfogningen för alla objekt utförs. Även när sammanfogningen hoppas över eller ingenting sparas räknas dessa objekt som färdiga. Bara när sammanfogningsåtgärden ändras, tas objektets "klar"-status bort och det kan sammanfogas igen. + + +Alternativ för att jämföra och sammanfoga kataloger +Inställning av &kdiff3; (menyn "Inställningar" -> "Anpassa &kdiff3;") har en sida som heter "Katalogsammanfogning" med följande alternativ: + + + Rekursiva kataloger:Välj om kataloger ska sökas igenom rekursivt. + Mönster för filer:Bara filer som matchar något mönster här läggs till i trädet. Mer än ett mönster kan anges genom att använda semikolon ";" som skiljetecken. Giltiga jokertecken: '*' och '?'. (t.ex. "*.cpp;*.h"). Normalvärdet är "*". Mönstret används inte för kataloger. + Undantagsmönster för filer:Filer som matchar något mönster undantas från trädet. Mer än ett mönster kan anges här genom att använda semikolon ";" som skiljetecken. Giltiga jokertecken: '*' och '?'. Normalvärdet är "*.orig;*.o;*.obj". + Undantagsmönster för kataloger:Kataloger som matchar något mönster undantas från trädet. Mer än ett mönster kan anges genom att använda semikolon ";" som skiljetecken. Giltiga jokertecken: '*' och '?'. Normalvärdet är "CVS;deps;.svn". + Använd .cvsignore:Ignorera filer och kataloger som också skulle ignoreras av CVS. Många automatiskt genererade filer ignoreras av CVS. Den stora fördelen är att detta kan vara katalogspecifikt via en lokal ".cvsignore" fil. (Se info:/cvs/cvsignore.) + Sök efter gömda filer och kataloger:För vissa filsystem har filer egenskapen "Dold". För andra system döljs ett filnamn som börjar med en punkt ("."). Alternativet låter dig bestämma om dessa filer ska ingå i trädet eller inte. Normalvärdet är på. + Följ fillänkar:För länkar till filer: Om inaktiverad, jämförs de symboliska länkarna. Om aktiverad, jämförs filerna bakom länkarna. Normalvärdet är av. + Följ kataloglänkar:För länkar till kataloger: Om inaktiverad, jämförs symboliska länkar. Om aktiverad behandlas länken som en katalog och avsöks rekursivt. (Observera att programmet inte kontrollerar om länken är "rekursiv". En katalog som innehåller en länk till samma katalog skulle orsaka en oändlig snurra, och efter en viss tid när stacken blir full eller minnet tar slut, kraschar programmet.) Normalvärdet är av. + Skiftlägeskänslig filnamnsjämförelse:Förvalt värde är falskt på Windows, och sant för andra operativsystem. + Filjämförelseläge: + + Binär jämförelse:Det här är förvalt filjämförelseläge. + Fullständig analys:Gör en fullständig analys av varje fil och visa kolumner med statistisk information. (Antal upplösta, oupplösta, inte blanka och blanka konflikter.) Den fullständiga analysen är långsammare än en enkel binäranalys, och är mycket långsammare för filer som inte innehåller text. (Ange lämpliga filmönster för att undvika dem.) + Lita på ändringsdatum:Om du jämför stora kataloger via ett långsamt nätverk, kan det gå snabbare att bara jämföra ändringsdatum och fillängd. Men hastighetsförbättringen sker till priset av en liten osäkerhet. Använd alternativet med försiktighet. Normalvärdet är av. + Lita på storleken:Liknar att lita på ändringsdatum. Ingen verklig jämförelse sker. Två filer anses vara lika om deras filstorlekar är lika. Detta är användbart när filkopieringsåtgärden inte bevarade ändringsdatum. Använd alternativet med försiktighet. Normalvärdet är av. + + + Synkronisera kataloger:Aktiverar "synkroniseringsläge" när två kataloger jämförs och ingen explicit målkatalog anges. I det här läget väljes föreslagna åtgärder så att båda källkatalogerna är likadana efteråt. Sammanfogningsresultatet skrivs också till båda kataloger. Normalvärdet är av. + Kopiera nyare istället för att sammanfoga:Istället för att sammanfoga kopierar den föreslagna åtgärden den nyare källan om ändringar har skett. (Anses vara osäkert, eftersom det förutsätter att du vet att den andra filen inte också har redigerats. Kontrollera för att vara säker i varje enskilt fall.) Normalvärdet är av. + Säkerhetskopiera filer:Om en fil eller hel katalog ersätts med en annan eller tas bort, då ändras originalversionens namn med tillägg av filändelsen ".orig". Om en gammal säkerhetskopia med filändelsen ".orig" redan finns tas den bort utan säkerhetskopiering. Det här gäller också normal sammanfogning av enstaka filer, inte bara sammanfogningsläge för kataloger. Normalvärdet är på. + + + +Andra funktioner i katalogsammanfogningsfönstret +Delat eller fullskärmsläge +Oftast förblir listfönstret för katalogsammanfogning synligt medan en enstaka fil jämförs eller sammanfogas. Du kan flytta raden som delar fillistan från fönstren för textjämförelse med musen. Om du inte vill göra det, kan du inaktivera "Delad skärmvy" i menyn "Katalog". Därefter kan du använda "Byt vy" i menyn "Katalog" för att byta mellan fillistan och fönstren för textjämförelse, som då upptar hela fönstret. + +Jämföra och sammanfoga en ensam fil +Du föredrar troligen ett vanligt dubbelklick på musen för att jämföra en fil. Hur som helst finns det också ett alternativ i menyn "Katalog". Du kan också direkt sammanfoga en enstaka fil, utan att starta katalogsammanfogning via "Sammanfoga markerade filer" i menyn "Sammanfoga". När resultatet sparas, sätts status till klar, och filen sammanfogas inte igen om en katalogsammanfogning startas. Men observera att statusinformationen går förlorad när du kör om en katalogavsökning: menyn "Katalog", "Avsök igen" + +Jämföra eller sammanfoga filer med olika namn +Ibland behöver du jämföra eller sammanfoga filer med olika namn (t.ex. nuvarande fil och säkerhetskopian i samma katalog). Markera den exakta filen genom att klicka på ikonen i kolumnen A, B eller C. Filen som först markeras på det sättet markeras med "A", den andra och tredje med "B" och "C" oberoende av vilken kolumn de finns i. Bara upp till tre filer kan markeras på detta sätt. Fortsätt genom att välja "Jämför explicit markerade filer" eller "Sammanfoga explicit markerade filer" från menyn "Katalog". Av bekvämlighetsskäl finns också menyalternativen som en sammanhangsberoende meny som visas när du klickar på den senast markerade filen. Jämförelsen eller sammanfogningen av en fil sker i samma fönster. Om metoden används för kataloger öppnas ett nytt fönster. + +
+ + +Diverse ämnen + +Nätverkstransparens via KIO +I/O-slavar +KDE stöder nätverkstransparens via I/O-slavar. &kdiff3; använder dem för att läsa indatafiler och avsöka kataloger. Det betyder att du kan ange filer och kataloger pÃ¥ lokal- och fjärr-resurser via webbadresser. Exempel: +kdiff3 test.cpp ftp://ftp.langtbortistan.org/test.cpp + kdiff3 tar:/home/hackare/arkiv.tar.gz/kat ./kat + + +Den första raden jämför en lokal fil med en fil pÃ¥ en FTP-server. Den andra raden jämför en katalog i ett komprimerat arkiv med en lokal katalog. Andra I/O-slavar som är intressanta är: + +Filer frÃ¥n WWW (http:), +Filer frÃ¥n FTP (ftp:), +Krypterad filöverföring (fish:, sftp:), +Resurser frÃ¥n Windows (smb:), +Lokala filer (file:), + +Andra saker som är möjliga, men troligen mindre användbara, är: + +Manualsidor (man:), +Infosidor (info:), + + + +Hur man skriver webbadresser +En webbadress har en annorlunda syntax jämfört med sökvägar till lokala filer och kataloger. Vissa saker mÃ¥ste tas hänsyn till: + +En sökväg kan vara relativ, och kan innehÃ¥lla "." eller "..". Det är inte möjligt för webbadresser, som alltid är absoluta. Specialtecken mÃ¥ste skrivas med särskilda "teckenföljder". ("#" blir "%23", mellanslag blir "%20", etc.) Till exempel skulle en fil med namnet "/#foo#" ha webbadressen "file:/%23foo%23". När webbadresser inte fungerar som väntat, försök att öppna dem i Konqueror först. + + + + +Möjligheter med I/O-slavar +Nätverkstransparens har en nackdel: Inte alla resurser har samma möjligheter. Ibland beror det pÃ¥ serverns filsystem, ibland pÃ¥ protokollet. Här är en kort lista med begränsningar: + +Ibland finns det inget stöd för länkar. Eller finns det inget sätt att särskilja om en länk pekar pÃ¥ en fil eller katalog, dÃ¥ antas alltid en fil (ftp:, sftp:). Kan inte alltid avgöra filstorleken. Begränsat stöd för rättigheter. Ingen möjlighet att ändra rättigheter eller ändringstid, sÃ¥ rättigheter eller tiden för en kopia skiljer sig frÃ¥n originalet. (Se alternativet "Lita pÃ¥ storlek". Ändring av rättigheter eller ändringstid är bara möjligt för lokala filer.) + + + + + +Använda &kdiff3; som en Kpart +Kdiff3 är en Kpart. För närvarande implementeras gränssnittet KParts::ReadOnlyPart. Den huvudsakliga användningen är för skillnadsvisning i KDevelop. KDevelop startar alltid den interna skillnadsvisningen först. För att använda &kdiff3;, klicka med höger musknapp i skillnadsvisningens fönster och välj "Visa i KDiff3-del" i den sammanhangsberoende menyn. &kdiff3; kräver normalt tvÃ¥ fullständiga filer som indata. När det används som en del, antar &kdiff3; att indatafilen är en programfixfil med unifierat format. &kdiff3; hämtar därefter originalfilernas namn i programfixfilen. Ã…tminstone en av de tvÃ¥ filerna mÃ¥ste vara tillgänglig. &kdiff3; startar dÃ¥ kommandot patch för att Ã¥terskapa den andra filen. Du kan välja en programfixfil i Konqueror och välja "Förhandsgranska i"-"Kdiff3-del" i den sammanhangsberoende menyn. Var medveten om att det inte fungerar om ingen av originalfilerna finns tillgänglig, och är inte tillförlitligt om originalfilen eller filerna har ändrats sedan programfixfilen skapades. När det kör som ett delprogram tillhandahÃ¥ller &kdiff3; bara jämförelse mellan tvÃ¥ filer, en mycket liten verktygsrad och meny. Sammanfogning eller katalogjämförelse stöds dÃ¥ inte. + + + + +Vanliga frÃ¥gor +&reporting.bugs; &updating.documentation; + +Varför kallas det "&kdiff3;"? Verktyg som heter "KDiff" och "KDiff2" (som nu kallas "Kompare") fanns redan. Dessutom ska "Kdiff3" antyda att programmet kan sammanfoga som verktyget "diff3" frÃ¥n samlingen med diff-verktyg. + +Varför licensieras det under GPL? Jag har använt GPL-program under mycket lÃ¥ng tid nu, och lärt mig mycket genom att titta pÃ¥ en hel del av källkoden. AlltsÃ¥ är det här mitt "tack" till alla programmerare som ocksÃ¥ gjorde eller kommer att göra samma sak. + +Vissa knappar och funktioner saknas. Vad är fel? Du kompilerade frÃ¥n källkod, men angav troligen inte rätt KDE-prefix med configure. Normalt vill configure installera i /usr/local, men dÃ¥ kan inte KDE hitta resursfilerna för användargränssnittet (dvs. kdiff3ui.rc). Filen README innehÃ¥ller mer information om riktigt prefix. + +Ofta visas rader som är liknande men inte identiska intill varandra, men inte alltid. Varför? Rader där bara antal blanktecken är olika behandlas som "lika", medan bara ett annorlunda blanktecken gör att raderna är "olika". Om liknande rader finns intill varandra, är detta i själva verket en slump men det är som tur är oftast fallet. Se ocksÃ¥ hjälpen pÃ¥ manualsidan för diff. + +Varför mÃ¥ste alla konflikter vara lösta innan sammanfogningsresultatet kan sparas? För varje likadant eller annorlunda avsnitt kommer editorn i fönstret med sammanfogningsresultatet ihÃ¥g var det börjar och slutar. Det behövs eftersom konflikter kan lösas upp manuellt genom att helt enkelt välja källknappen (A, B eller C). Informationen gÃ¥r förlorad när filen sparas som text, och det är för mycket ansträngning att skapa ett speciellt filformat som stöder att spara och Ã¥terställa all nödvändig information. + +Hur kan jag synkronisera jämförelsevyn och sammanfogningsvyn sÃ¥ att alla vyer visar samma textposition? Klicka pÃ¥ sammanfattningskolumnen till vänster om texten. (Se ocksÃ¥ här.) + +Varför har inte editorn i resultatfönstret för sammanfogning en "Ã¥ngra"-funktion? Hittills har det varit för stor ansträngning. Du kan alltid Ã¥terställa en version frÃ¥n en källa (A, B eller C) genom att klicka pÃ¥ motsvarande knapp. För större redigering, rekommenderas användning av en annan editor ändÃ¥. + +När jag tog bort en del text, visades plötsligt "<Ingen källrad>" och det kan inte tas bort. Vad betyder det och hur kan man ta bort det? För varje likadant eller annorlunda avsnitt kommer editorn i fönstret med sammanfogningsresultatet ihÃ¥g var det börjar och slutar. "<Ingen källrad>" betyder att det inte finns nÃ¥gonting kvar i ett avsnitt, inte ens ett nyradstecken. Detta kan inträffa antingen vid automatisk sammanfogning eller efter redigering. Det är inget problem, eftersom den här informationen inte finns med i den sparade filen. Om du vill ha tillbaka originalkällan, markera bara källan (klicka pÃ¥ sammanfattningskolumnen till vänster) och klicka därefter pÃ¥ källknappen med innehÃ¥llet som önskas (A, B eller C). + +Varför stöder inte &kdiff3; syntaxfärgläggning? &kdiff3; använder redan mÃ¥nga färger för färgläggning av jämförelser. Ytterligare färgläggning skulle vara förvirrande. Använd en annan editor för detta. + +Kan jag använda &kdiff3; för att jämföra filer frÃ¥n OpenOffice.Org, Word, Excel, PDF, och sÃ¥ vidare? Även om &kdiff3; kan analysera alla sorters filer, är resultatet troligen inte särskilt tillfredsställande för dig. &kdiff3; skapades för att jämföra rena textfiler. OpenOffice, Word, Excel, och sÃ¥ vidare, lagrar mycket mer information i filerna (om teckensnitt, bilder, sidor, färger, etc.), som &kdiff3; inte känner till. AlltsÃ¥ visar &kdiff3; dig innehÃ¥llet i filen tolkat som ren text, men det kan vara oläsbart eller Ã¥tminstone se mycket konstigt ut. Eftersom de flesta program nuförtiden lagrar sitt innehÃ¥ll med XML-format, kanske du kan läsa det som ren text. Om ändringen bara var liten, kanske &kdiff3; fortfarande kan hjälpa dig. Den bästa lösningen om du bara vill jämföra texten (utan inbäddade objekt som bilder) är att använda "Markera alla" och "Kopiera" i programmet för att kopiera den intressanta texten till klippbordet och därefter klistra in texten i nÃ¥got av jämförelsefönstren i &kdiff3;. (Se ocksÃ¥ Markera, kopiera och klistra in.) + +Vart har katalogalternativet "Lista bara skillnader" tagit vägen? Det finns nu flera olika "Visa"-alternativ i katalogmenyn. Att inaktivera "Visa identiska filer" Ã¥stadkommer vad aktivering av "Lista bara skillnader" brukade göra. + +Hur kan man göra en stor markering i jämförelsefönstret fastän det tar sÃ¥ lÃ¥ng tid att rulla texten? PÃ¥börja markeringen som vanligt (klicka och hÃ¥ll nere vänster musknapp). Använd därefter navigationstangenterna (t.ex. Page Up, Page Down) medan vänster musknapp hÃ¥lls nere. (Se ocksÃ¥ Markera, kopiera och klistra in.) + +Det finns en stor mängd information här, men din frÃ¥ga har ändÃ¥ inte besvarats? Skicka gärna din frÃ¥ga till mig. Jag uppskattar alla kommentarer. + + + + + + +Tack till och licens + +&kdiff3;: Verktyg för jämförelser och sammanfogning av filer och kataloger +Program copyright 2002-2006 Joachim Eibl joachim.eibl snabela gmx.de +Flera häftiga idéer och felrapporter kom frÃ¥n kolleger och mÃ¥nga personer ute i den Vida Vilda Världen. Tack! + +Dokumentation Copyright © 2002-2006 Joachim Eibl joachim. eibl snabela gmx.de + +Översättning Stefan Asserhällstefan.asserhall@comhem.se +&underFDL; &underGPL; + + +Installation + + +Hur man skaffar &kdiff3; + +Du kan ladda ner senaste version av &kdiff3; frÃ¥n hemsidan http://kdiff3.sourceforge.net. &kdiff3; är ocksÃ¥ tillgänglig för andra plattformar. Se hemsidan för detaljinformation. + + + + + +Krav + +För att använda alla funktioner i &kdiff3; med lyckat resultat behöver du &kde; 3.1 eller senare. För information om hur &kdiff3; kan köras pÃ¥ andra plattformar utan KDE, se hemsidan. Du hittar en lista med ändringar pÃ¥ http://kdiff3.sourceforge.net/ChangeLog eller i filen "ChangeLog" i källkodspaketet. + + + +Kompilering och installation + +För att kompilera och installera &kdiff3; pÃ¥ ett system med KDE, skriv följande i baskatalogen för distributionen av &kdiff3;: + +% ./configure --prefix=kde-katalog +% make +% make install + +kde-katalog anger katalogen som innehÃ¥ller KDE pÃ¥ ditt system. Om du inte är säker, läs filen README för detaljinformation. +Om du inte använder KDE, använd inte configure utan följ instruktionerna för system som bara använder Qt i filen README. +Eftersom &kdiff3; använder autoconf och automake bör du inte ha nÃ¥gra problem med att kompilera det. Skulle du stöta pÃ¥ problem, rapportera dem gärna till &kde;:s e-postlistor. + + + + + +&documentation.index; +
+ + diff --git a/doc/sv/iteminfo.png b/doc/sv/iteminfo.png new file mode 100644 index 0000000..0b81443 Binary files /dev/null and b/doc/sv/iteminfo.png differ diff --git a/doc/sv/letter_by_letter.png b/doc/sv/letter_by_letter.png new file mode 100644 index 0000000..8ddd48a Binary files /dev/null and b/doc/sv/letter_by_letter.png differ diff --git a/doc/sv/merge_current.png b/doc/sv/merge_current.png new file mode 100644 index 0000000..3f2e341 Binary files /dev/null and b/doc/sv/merge_current.png differ diff --git a/doc/sv/new.png b/doc/sv/new.png new file mode 100644 index 0000000..df3fd25 Binary files /dev/null and b/doc/sv/new.png differ diff --git a/doc/sv/open_dialog.png b/doc/sv/open_dialog.png new file mode 100644 index 0000000..029f8d4 Binary files /dev/null and b/doc/sv/open_dialog.png differ diff --git a/doc/sv/screenshot_diff.png b/doc/sv/screenshot_diff.png new file mode 100644 index 0000000..d2865d5 Binary files /dev/null and b/doc/sv/screenshot_diff.png differ diff --git a/doc/sv/screenshot_merge.png b/doc/sv/screenshot_merge.png new file mode 100644 index 0000000..1eb935b Binary files /dev/null and b/doc/sv/screenshot_merge.png differ diff --git a/doc/sv/triple_diff.png b/doc/sv/triple_diff.png new file mode 100644 index 0000000..c635d14 Binary files /dev/null and b/doc/sv/triple_diff.png differ diff --git a/doc/sv/white_space.png b/doc/sv/white_space.png new file mode 100644 index 0000000..e40a1c7 Binary files /dev/null and b/doc/sv/white_space.png differ diff --git a/kdiff3.kdevelop b/kdiff3.kdevelop new file mode 100644 index 0000000..0f1b98c --- /dev/null +++ b/kdiff3.kdevelop @@ -0,0 +1,191 @@ + + + + Joachim Eibl + joachim dot eibl at gmx dot de + 0.9.92 + KDevKDEAutoProject + C++ + + C++ + Code + Qt + KDE + + . + false + + + + + + + src/kdiff3 + debug + + + /daten/home/joachim/kdiff3-0.9.92a/debug/src/kdiff3 + custom + /daten/home/joachim/kdiff3_testdir/ + + true + true + + + + + + + optimized + GccOptions + GppOptions + G77Options + -O2 -g0 + + + --enable-debug=full --prefix=/opt/kde3 + debug + kdevgccoptions + kdevgppoptions + kdevpgf77options + -O0 + + + + + + + + + + + + + + + + + true + 1 + false + + 0 + false + + + + + + + + + + false + false + + + + false + true + + + + + gtk + gnustep + python + php + perl + + + doc/en/ + debug/ + + + + + + + + + libtool + + + + + + true + false + false + + + false + true + 10 + + + + + + + + + + + + -f + + + + -dP + -f + -C -d -P + -u3 -p + + + + + true + true + true + false + true + true + 250 + 400 + true + 250 + + + + + set + m_,_ + theValue + true + true + + + true + 3 + /usr/lib/qt3 + + + + + .h + .cpp + + + + + + + + + + + + + + diff --git a/kdiff3.spec b/kdiff3.spec new file mode 100644 index 0000000..18a1ce9 --- /dev/null +++ b/kdiff3.spec @@ -0,0 +1,61 @@ +Name: kdiff3 +Version: 0.9.91 +Release: 1.fc + +URL: http://www.kde-apps.org/content/show.php?content=9807 +License: GPL +Summary: Tool for Comparison and Merge of Files and Directories +Group: Development/Tools + +Source: http://heanet.dl.sourceforge.net/sourceforge/kdiff3/kdiff3-%{version}.tar.gz +BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root + +Requires: kdelibs > 3.3 +BuildRequires: gcc-c++ >= 3.2 +BuildRequires: xorg-x11-devel +BuildRequires: qt-devel >= 3.3 +BuildRequires: kdelibs-devel >= 3.3 + +%description +Shows the differences line by line and character by character (!). +Provides an automatic merge-facility and +an integrated editor for comfortable solving of merge-conflicts. +Supports KIO on KDE (allows accessing ftp, sftp, fish, smb etc.). +Unicode & UTF-8 support + +%prep +%setup + +%build +[ -n "$QTDIR" ] || . %{_sysconfdir}/profile.d/qt.sh + +export KDEDIR=%{_prefix} + +%configure --prefix=/usr +%{__make} %{?_smp_mflags} + +%install +%{__rm} -rf %{buildroot} +source /etc/profile.d/qt.sh +%makeinstall + +%clean +%{__rm} -rf %{buildroot} + +%files +%doc AUTHORS ChangeLog COPYING NEWS README TODO +%{_bindir}/kdiff3 +%{_datadir}/applnk/* +%{_datadir}/apps/kdiff3/* +%{_datadir}/apps/kdiff3part/* +%{_datadir}/doc/HTML/* +%{_datadir}/icons/* +%{_datadir}/locale/* +%{_datadir}/man/man1/kdiff3* +%{_datadir}/services/kdiff3* +%{_libdir}/kde3/libkdiff3* + +%changelog +* Mon May 15 2006 Vadim Likhota - 0.9.90-1.fc +- write spec for fc/rhel/centos/asp for kdiff3 + diff --git a/kdiff3plugin/Makefile.am b/kdiff3plugin/Makefile.am new file mode 100644 index 0000000..2a4e129 --- /dev/null +++ b/kdiff3plugin/Makefile.am @@ -0,0 +1,20 @@ +INCLUDES = $(all_includes) +METASOURCES = AUTO + +# Install this plugin in the KDE modules directory +kde_module_LTLIBRARIES = libkdiff3plugin.la + +libkdiff3plugin_la_SOURCES = kdiff3plugin.cpp +libkdiff3plugin_la_LIBADD = -lkonq +libkdiff3plugin_la_LDFLAGS = -module $(all_libraries) $(KDE_PLUGIN) + +#KDE_ICON = KDiff3 + +pluginsdir = $(kde_servicesdir) +plugins_DATA = kdiff3_plugin.desktop + +appsdir = $(kde_appsdir)/.hidden +apps_DATA = kdiff3plugin.desktop + +messages: rc.cpp + $(XGETTEXT) *.cpp *.h -o $(podir)/kdiff3_plugin.pot diff --git a/kdiff3plugin/kdiff3_plugin.desktop b/kdiff3plugin/kdiff3_plugin.desktop new file mode 100644 index 0000000..ec8e730 --- /dev/null +++ b/kdiff3plugin/kdiff3_plugin.desktop @@ -0,0 +1,6 @@ +[Desktop Entry] +Encoding=UTF-8 +Type=Service +Name=Compare/Merge Files/Directories +X-KDE-Library=libkdiff3plugin +ServiceTypes=KonqPopupMenu/Plugin,all/all diff --git a/kdiff3plugin/kdiff3plugin.cpp b/kdiff3plugin/kdiff3plugin.cpp new file mode 100755 index 0000000..293f899 --- /dev/null +++ b/kdiff3plugin/kdiff3plugin.cpp @@ -0,0 +1,263 @@ +/* This file is part of the KDiff3 project + + Copyright (C) 2006 Joachim Eibl + + 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; version 2 + of the License. + + 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; see the file COPYING. If not, write to + the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301, USA. +*/ + +#include "kdiff3plugin.h" + +#include +#include +#include +#include +#include +#include +#include +#include + +//#include + +static QStringList* s_pHistory=0; + +class KDiff3PluginFactory : public KGenericFactory < KDiff3Plugin, KonqPopupMenu > +{ + KSimpleConfig* m_pConfig; +public: + KDiff3PluginFactory( const char* instanceName = 0 ) + : KGenericFactory< KDiff3Plugin, KonqPopupMenu >( instanceName ) + { + m_pConfig = 0; + if (s_pHistory==0) + { + //std::cout << "New History: " << instanceName << std::endl; + s_pHistory = new QStringList; + m_pConfig = new KSimpleConfig( "kdiff3pluginrc", false ); + *s_pHistory = m_pConfig->readListEntry("HistoryStack"); + } + } + + ~KDiff3PluginFactory() + { + //std::cout << "Delete History" << std::endl; + if ( s_pHistory && m_pConfig ) + m_pConfig->writeEntry("HistoryStack",*s_pHistory); + delete s_pHistory; + delete m_pConfig; + s_pHistory = 0; + m_pConfig = 0; + } +}; + +K_EXPORT_COMPONENT_FACTORY (libkdiff3plugin, KDiff3PluginFactory ("kdiff3plugin")) + +KDiff3Plugin::KDiff3Plugin( KonqPopupMenu* pPopupmenu, const char *name, const QStringList & /* list */ ) +:KonqPopupMenuPlugin (pPopupmenu, name) +{ + if (KStandardDirs::findExe ("kdiff3").isNull ()) + return; + + m_pParentWidget = pPopupmenu->parentWidget(); + + KGlobal::locale()->insertCatalogue("kdiff3_plugin"); + + // remember currently selected files (copy to a QStringList) + KFileItemList itemList = pPopupmenu->fileItemList(); + for ( KFileItem *item = itemList.first(); item; item = itemList.next() ) + { + //m_urlList.append( item->url() ); + m_list.append( item->url().url() ); + } + + + /* Menu structure: + KDiff3 -> (1 File selected): Save 'selection' for later comparison (push onto history stack) + Compare 'selection' with first file on history stack. + Compare 'selection' with -> choice from history stack + Merge 'selection' with first file on history stack. + Merge 'selection' with last two files on history stack. + (2 Files selected): Compare 's1' with 's2' + Merge 's1' with 's2' + (3 Files selected): Compare 's1', 's2' and 's3' + */ + + KActionMenu* pActionMenu = new KActionMenu (i18n ("KDiff3"), "kdiff3", actionCollection (), "kdiff3_menu" ); + KAction* pAction = 0; + QString s; + + if(m_list.count() == 1) + { + int historyCount = s_pHistory ? s_pHistory->count() : 0; + s = i18n("Compare with %1").arg( historyCount>0 ? s_pHistory->front() : QString() ); + pAction = new KAction ( s,0, this, SLOT(slotCompareWith()), actionCollection()); + pAction->setEnabled( m_list.count()>0 && historyCount>0 ); + pActionMenu->insert (pAction); + + s = i18n("Merge with %1").arg( historyCount>0 ? s_pHistory->front() : QString() ); + pAction = new KAction( s, 0, this, SLOT(slotMergeWith()), actionCollection()); + pAction->setEnabled( m_list.count()>0 && historyCount>0 ); + pActionMenu->insert (pAction); + + s = i18n("Save '%1' for later").arg( ( m_list.front() ) ); + pAction = new KAction ( s, 0, this, SLOT(slotSaveForLater()), actionCollection()); + pAction->setEnabled( m_list.count()>0 ); + pActionMenu->insert(pAction); + + pAction = new KAction (i18n("3-way merge with base"), 0, this, SLOT(slotMergeThreeWay()), actionCollection()); + pAction->setEnabled( m_list.count()>0 && historyCount>=2 ); + pActionMenu->insert (pAction); + + if ( s_pHistory && !s_pHistory->empty() ) + { + KActionMenu* pHistoryMenu = new KActionMenu( i18n("Compare with ..."), "CompareWith", actionCollection (), "kdiff3_history_menu"); + pHistoryMenu->setEnabled( m_list.count()>0 && historyCount>0 ); + pActionMenu->insert(pHistoryMenu); + for (QStringList::iterator i = s_pHistory->begin(); i!=s_pHistory->end(); ++i) + { + pAction = new KAction( *i, "History", 0, this, SLOT(slotCompareWithHistoryItem()), actionCollection()); + pHistoryMenu->insert (pAction); + } + + pAction = new KAction (i18n("Clear list"), 0, this, SLOT(slotClearList()), actionCollection()); + pActionMenu->insert (pAction); + pAction->setEnabled( historyCount>0 ); + } + } + else if(m_list.count() == 2) + { + pAction = new KAction (i18n("Compare"), 0, this, SLOT(slotCompareTwoFiles()), actionCollection()); + pActionMenu->insert (pAction); + } + else if ( m_list.count() == 3 ) + { + pAction = new KAction (i18n("3 way comparison"), 0, this, SLOT(slotCompareThreeFiles()), actionCollection()); + pActionMenu->insert (pAction); + } + pAction = new KAction (i18n("About KDiff3 menu plugin ..."), 0, this, SLOT(slotAbout()), actionCollection()); + pActionMenu->insert (pAction); + + addSeparator(); + addAction( pActionMenu ); + addSeparator(); +} + +KDiff3Plugin::~KDiff3Plugin () +{ +} + +void KDiff3Plugin::slotCompareWith() +{ + if ( m_list.count() > 0 && s_pHistory && ! s_pHistory->empty() ) + { + QStringList args; + args << s_pHistory->front(); + args << m_list.front(); + kapp->kdeinitExec ("kdiff3", args); + } +} + +void KDiff3Plugin::slotCompareWithHistoryItem() +{ + const KAction* pAction = dynamic_cast( sender() ); + if ( m_list.count() > 0 && pAction ) + { + QStringList args; + args << pAction->text(); + args << m_list.front(); + kapp->kdeinitExec ("kdiff3", args); + } +} + +void KDiff3Plugin::slotCompareTwoFiles() +{ + if ( m_list.count() == 2 ) + { + QStringList args; + args << m_list.front(); + args << m_list.back(); + kapp->kdeinitExec ("kdiff3", args); + } +} + +void KDiff3Plugin::slotCompareThreeFiles() +{ + if ( m_list.count() == 3 ) + { + QStringList args; + args << m_list[0]; + args << m_list[1]; + args << m_list[2]; + kapp->kdeinitExec ("kdiff3", args); + } +} + +void KDiff3Plugin::slotMergeWith() +{ + if ( m_list.count() > 0 && s_pHistory && ! s_pHistory->empty() ) + { + QStringList args; + args << s_pHistory->front(); + args << m_list.front(); + args << ( "-o" + m_list.front() ); + kapp->kdeinitExec ("kdiff3", args); + } +} + +void KDiff3Plugin::slotMergeThreeWay() +{ + if ( m_list.count() > 0 && s_pHistory && s_pHistory->count()>=2 ) + { + QStringList args; + args << (*s_pHistory)[1]; + args << (*s_pHistory)[0]; + args << m_list.front(); + args << ("-o" + m_list.front()); + kapp->kdeinitExec ("kdiff3", args); + } +} + +void KDiff3Plugin::slotSaveForLater() +{ + if ( !m_list.isEmpty() && s_pHistory ) + { + while ( s_pHistory->count()>=10 ) + s_pHistory->pop_back(); + s_pHistory->push_front( m_list.front() ); + } +} + +void KDiff3Plugin::slotClearList() +{ + if ( s_pHistory ) + s_pHistory->clear(); +} + +void KDiff3Plugin::slotAbout() +{ + QString s = i18n("KDiff3 Menu Plugin: Copyright (C) 2006 Joachim Eibl\n" + "KDiff3 homepage: http://kdiff3.sourceforge.net\n\n"); + s += i18n("Using the contextmenu extension:\n" + "For simple comparison of two selected 2 files choose \"Compare\".\n" + "If the other file is somewhere else \"Save\" the first file for later. " + "It will appear in the \"Compare With ...\" submenu. " + "Then use \"Compare With\" on second file.\n" + "For a 3-way merge first \"Save\" the base file, then the branch to merge and " + "choose \"3-way merge with base\" on the other branch which will be used as destination.\n" + "Same also applies to directory comparison and merge."); + KMessageBox::information(m_pParentWidget, s, tr("About KDiff3 Menu Plugin") ); +} + +#include "kdiff3plugin.moc" diff --git a/kdiff3plugin/kdiff3plugin.desktop b/kdiff3plugin/kdiff3plugin.desktop new file mode 100644 index 0000000..ce3e9b8 --- /dev/null +++ b/kdiff3plugin/kdiff3plugin.desktop @@ -0,0 +1,7 @@ +[Desktop Entry] +Encoding=UTF-8 +Type=Service +Name=Compare/Merge Files/Directories with KDiff3 +Icon=kdiff3 +X-KDE-ParentApp=konqueror +#DocPath=konq-plugins/kdiff3plugin/index.html \ No newline at end of file diff --git a/kdiff3plugin/kdiff3plugin.h b/kdiff3plugin/kdiff3plugin.h new file mode 100755 index 0000000..14ebf60 --- /dev/null +++ b/kdiff3plugin/kdiff3plugin.h @@ -0,0 +1,50 @@ +/* This file is part of the KDiff3 project + + Copyright (C) 2006 Joachim Eibl + + 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; version 2 + of the License. + + 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; see the file COPYING. If not, write to + the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301, USA. +*/ + +#ifndef _KDIFF3PLUGIN_H_ +#define _KDIFF3PLUGIN_H_ + +#include + +class QStringList; + +class KDiff3Plugin : public KonqPopupMenuPlugin +{ + Q_OBJECT +public: + KDiff3Plugin (KonqPopupMenu *, const char *name, const QStringList & list); + virtual ~KDiff3Plugin(); + +private slots: + void slotCompareWith(); + void slotCompareTwoFiles(); + void slotCompareThreeFiles(); + void slotMergeWith(); + void slotMergeThreeWay(); + void slotSaveForLater(); + void slotClearList(); + void slotCompareWithHistoryItem(); + void slotAbout(); + +private: + QStringList m_list; + QWidget* m_pParentWidget; +}; +#endif diff --git a/kdiff3plugin/po/Makefile b/kdiff3plugin/po/Makefile new file mode 100644 index 0000000..934149d --- /dev/null +++ b/kdiff3plugin/po/Makefile @@ -0,0 +1,661 @@ +# Makefile.in generated by automake 1.9.6 from Makefile.am. +# KDE tags expanded automatically by am_edit - $Revision: 483858 $ +# kdiff3plugin/po/Makefile. Generated from Makefile.in by configure. + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005 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. + + +srcdir = . +top_srcdir = ../.. + +pkgdatadir = $(datadir)/kdiff3 +pkglibdir = $(libdir)/kdiff3 +pkgincludedir = $(includedir)/kdiff3 +top_builddir = ../.. +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +INSTALL = /usr/bin/install -c -p +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 = i486-pc-linux-gnu +host_triplet = i486-pc-linux-gnu +target_triplet = i486-pc-linux-gnu +subdir = kdiff3plugin/po +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \ + $(top_srcdir)/configure.in +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(SHELL) $(top_srcdir)/admin/mkinstalldirs +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +SOURCES = +DIST_SOURCES = +#>- DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +#>+ 1 +#>- DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) $(KDE_DIST) +#>+ 1 +DISTFILES = $(GMOFILES) $(POFILES) $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) $(KDE_DIST) +ACLOCAL = ${SHELL} /home/eike/devel/debian/kdiff3/kdiff3-0.9.92/admin/missing --run aclocal-1.9 +AMDEP_FALSE = # +AMDEP_TRUE = +AMTAR = ${SHELL} /home/eike/devel/debian/kdiff3/kdiff3-0.9.92/admin/missing --run tar +AR = ar +ARTSCCONFIG = /usr/bin/artsc-config +AUTOCONF = $(SHELL) $(top_srcdir)/admin/cvs.sh configure || touch configure +AUTODIRS = +AUTOHEADER = ${SHELL} /home/eike/devel/debian/kdiff3/kdiff3-0.9.92/admin/missing --run autoheader +AUTOMAKE = ${SHELL} /home/eike/devel/debian/kdiff3/kdiff3-0.9.92/admin/missing --run automake-1.9 +AWK = gawk +CC = i486-linux-gnu-gcc +CCDEPMODE = depmode=gcc3 +CFLAGS = -std=iso9899:1990 -W -Wall -Wchar-subscripts -Wshadow -Wpointer-arith -Wmissing-prototypes -Wwrite-strings -D_XOPEN_SOURCE=500 -D_BSD_SOURCE -O2 -Wall -g -O2 -Wformat-security -Wmissing-format-attribute +CONF_FILES = $(top_srcdir)/./admin/configure.in.min $(top_srcdir)/configure.in.in +CPP = i486-linux-gnu-gcc -E +CPPFLAGS = -DQT_THREAD_SUPPORT -D_REENTRANT +CXX = i486-linux-gnu-g++ +CXXCPP = i486-linux-gnu-g++ -E +CXXDEPMODE = depmode=gcc3 +CXXFLAGS = -Wno-long-long -Wundef -ansi -D_XOPEN_SOURCE=500 -D_BSD_SOURCE -Wcast-align -Wconversion -Wchar-subscripts -Wall -W -Wpointer-arith -O2 -Wformat-security -Wmissing-format-attribute -Wno-non-virtual-dtor -fno-exceptions -fno-check-new -fno-common +CYGPATH_W = echo +DCOPIDL = /usr/bin/dcopidl +DCOPIDL2CPP = /usr/bin/dcopidl2cpp +DCOPIDLNG = /usr/bin/dcopidlng +DCOP_DEPENDENCIES = $(DCOPIDL) $(DCOPIDLNG) +DEFS = -DHAVE_CONFIG_H +DEPDIR = .deps +ECHO = echo +ECHO_C = +ECHO_N = -n +ECHO_T = +EGREP = /bin/grep -E +ENABLE_PERMISSIVE_FLAG = -fpermissive +EXEEXT = +F77 = +FFLAGS = +FRAMEWORK_COREAUDIO = +GMSGFMT = /usr/bin/msgfmt +GREP = /bin/grep +HAVE_GCC_VISIBILITY = 0 +INSTALL_DATA = ${INSTALL} -m 644 +INSTALL_PROGRAM = ${INSTALL} $(INSTALL_STRIP_FLAG) +INSTALL_SCRIPT = ${INSTALL} +INSTALL_STRIP_PROGRAM = ${SHELL} $(install_sh) -c -s +KCFG_DEPENDENCIES = $(KCONFIG_COMPILER) +KCONFIG_COMPILER = /usr/bin/kconfig_compiler +KDECONFIG = /usr/bin/kde-config +KDE_CHECK_PLUGIN = $(KDE_PLUGIN) -rpath $(libdir) +KDE_EXTRA_RPATH = +KDE_INCLUDES = -I/usr/include/kde +KDE_LDFLAGS = -L/usr/lib +KDE_MT_LDFLAGS = +KDE_MT_LIBS = -lpthread +KDE_NO_UNDEFINED = -Wl,--no-undefined -Wl,--allow-shlib-undefined +KDE_PLUGIN = -avoid-version -module -no-undefined $(KDE_NO_UNDEFINED) $(KDE_RPATH) $(KDE_MT_LDFLAGS) +KDE_RPATH = +KDE_USE_CLOSURE_FALSE = +KDE_USE_CLOSURE_TRUE = # +KDE_USE_FINAL_FALSE = +KDE_USE_FINAL_TRUE = # +KDE_USE_FPIE = -fPIE +KDE_USE_NMCHECK_FALSE = +KDE_USE_NMCHECK_TRUE = # +KDE_USE_PIE = -pie +KDE_XSL_STYLESHEET = /usr/share/apps/ksgmltools2/customization/kde-chunk.xsl +LDFLAGS = +LDFLAGS_AS_NEEDED = +LDFLAGS_NEW_DTAGS = +LIBCOMPAT = +LIBCRYPT = -lcrypt +LIBDL = -ldl +LIBJPEG = -ljpeg +LIBOBJS = +LIBPNG = -lpng -lz -lm +LIBPTHREAD = -lpthread +LIBRESOLV = -lresolv +LIBS = +LIBSM = -lSM -lICE +LIBSOCKET = +LIBTOOL = $(SHELL) $(top_builddir)/libtool +LIBUCB = +LIBUTIL = -lutil +LIBZ = -lz +LIB_KAB = -lkab +LIB_KABC = -lkabc +LIB_KDECORE = -lkdecore +LIB_KDED = +LIB_KDEPIM = -lkdepim +LIB_KDEPRINT = -lkdeprint +LIB_KDEUI = -lkdeui +LIB_KDNSSD = -lkdnssd +LIB_KFILE = -lkio +LIB_KFM = +LIB_KHTML = -lkhtml +LIB_KIMPROXY = -lkimproxy +LIB_KIO = -lkio +LIB_KJS = -lkjs +LIB_KNEWSTUFF = -lknewstuff +LIB_KPARTS = -lkparts +LIB_KSPELL = -lkspell +LIB_KSYCOCA = -lkio +LIB_KUNITTEST = -lkunittest +LIB_KUTILS = -lkutils +LIB_POLL = +LIB_QPE = +LIB_QT = -lqt-mt $(LIBZ) $(LIBPNG) -lXext $(LIB_X11) $(LIBSM) -lpthread +LIB_SMB = -lsmb +LIB_X11 = -lX11 $(LIBSOCKET) +LIB_XEXT = -lXext +LIB_XRENDER = +LN_S = ln -s +LTLIBOBJS = +MAKEINFO = ${SHELL} /home/eike/devel/debian/kdiff3/kdiff3-0.9.92/admin/missing --run makeinfo +MAKEKDEWIDGETS = +MCOPIDL = /usr/bin/mcopidl +MEINPROC = /usr/bin/meinproc +MOC = /usr/share/qt3/bin/moc +MSGFMT = /usr/bin/msgfmt +NOOPT_CFLAGS = -O0 +NOOPT_CXXFLAGS = -O0 +OBJEXT = o +PACKAGE = kdiff3_plugin +PACKAGE_BUGREPORT = +PACKAGE_NAME = +PACKAGE_STRING = +PACKAGE_TARNAME = +PACKAGE_VERSION = +PATH_SEPARATOR = : +PERL = /usr/bin/perl +QTE_NORTTI = +QT_INCLUDES = -I/usr/include/qt3 +QT_LDFLAGS = -L/usr/share/qt3/lib +RANLIB = ranlib +SET_MAKE = +SHELL = /bin/sh +STRIP = strip +TOPSUBDIRS = doc kdiff3plugin po src +UIC = /usr/share/qt3/bin/uic -L $(kde_widgetdir) -nounload +UIC_TR = tr2i18n +USER_INCLUDES = +USER_LDFLAGS = +USE_EXCEPTIONS = -fexceptions +USE_RTTI = +USE_THREADS = +VERSION = 0.9.92 +WOVERLOADED_VIRTUAL = +XGETTEXT = /usr/bin/xgettext +XMKMF = +XMLLINT = /usr/bin/xmllint +X_EXTRA_LIBS = +X_INCLUDES = -I. +X_LDFLAGS = -L/usr/lib +X_PRE_LIBS = +X_RPATH = +ac_ct_CC = +ac_ct_CXX = +ac_ct_F77 = +all_includes = -I/usr/include/kde -I/usr/include/qt3 -I. +all_libraries = -L/usr/share/qt3/lib -L/usr/lib +am__fastdepCC_FALSE = # +am__fastdepCC_TRUE = +am__fastdepCXX_FALSE = # +am__fastdepCXX_TRUE = +am__include = include +am__leading_dot = . +am__quote = +am__tar = ${AMTAR} chof - "$$tardir" +am__untar = ${AMTAR} xf - +bindir = ${exec_prefix}/bin +build = i486-pc-linux-gnu +build_alias = i486-linux-gnu +build_cpu = i486 +build_os = linux-gnu +build_vendor = pc +datadir = ${datarootdir} +datarootdir = ${prefix}/share +docdir = ${datarootdir}/doc/${PACKAGE} +dvidir = ${docdir} +exec_prefix = ${prefix} +host = i486-pc-linux-gnu +host_alias = i486-linux-gnu +host_cpu = i486 +host_os = linux-gnu +host_vendor = pc +htmldir = ${docdir} +include_ARTS_FALSE = # +include_ARTS_TRUE = +include_libkonq_FALSE = # +include_libkonq_TRUE = +include_x11_FALSE = # +include_x11_TRUE = +includedir = ${prefix}/include +infodir = ${prefix}/share/info +install_sh = /home/eike/devel/debian/kdiff3/kdiff3-0.9.92/admin/install-sh +kde_appsdir = ${datadir}/applnk +kde_bindir = ${exec_prefix}/bin +kde_confdir = ${datadir}/config +kde_datadir = ${datadir}/apps +kde_htmldir = ${datadir}/doc/HTML +kde_icondir = ${datadir}/icons +kde_includes = /usr/include/kde +kde_kcfgdir = ${datadir}/config.kcfg +kde_libraries = /usr/lib +kde_libs_htmldir = /usr/share/doc/kde/HTML +kde_libs_prefix = /usr +kde_locale = ${datadir}/locale +kde_mimedir = ${datadir}/mimelnk +kde_moduledir = ${libdir}/kde3 +kde_qtver = 3 +kde_servicesdir = ${datadir}/services +kde_servicetypesdir = ${datadir}/servicetypes +kde_sounddir = ${datadir}/sounds +kde_styledir = ${libdir}/kde3/plugins/styles +kde_templatesdir = ${datadir}/templates +kde_wallpaperdir = ${datadir}/wallpapers +kde_widgetdir = /usr/lib/kde3/plugins/designer +kdeinitdir = $(kde_moduledir) +libdir = ${exec_prefix}/lib +libexecdir = ${exec_prefix}/libexec +localedir = ${datarootdir}/locale +localstatedir = ${prefix}/var +mandir = ${prefix}/share/man +mkdir_p = mkdir -p -- +oldincludedir = /usr/include +pdfdir = ${docdir} +prefix = /usr +program_transform_name = s,x,x, +psdir = ${docdir} +qt_includes = /usr/include/qt3 +qt_libraries = /usr/share/qt3/lib +sbindir = ${exec_prefix}/sbin +sharedstatedir = ${prefix}/com +sysconfdir = ${prefix}/etc +target = i486-pc-linux-gnu +target_alias = +target_cpu = i486 +target_os = linux-gnu +target_vendor = pc +unsermake_enable_pch_FALSE = +unsermake_enable_pch_TRUE = # +x_includes = . +x_libraries = /usr/lib +xdg_appsdir = ${datadir}/applications/kde +xdg_directorydir = ${datadir}/desktop-directories +xdg_menudir = ${sysconfdir}/xdg/menus +#>- POFILES = AUTO +#>+ 2 +POFILES = pt.po it.po br.po cs.po sv.po pt_BR.po tr.po et.po bg.po sk.po da.po de.po ga.po nl.po el.po +GMOFILES = pt.gmo it.gmo br.gmo cs.gmo sv.gmo pt_BR.gmo tr.gmo et.gmo bg.gmo sk.gmo da.gmo de.gmo ga.gmo nl.gmo el.gmo +#>- all: all-am +#>+ 1 +all: all-nls docs-am all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) +#>- @for dep in $?; do \ +#>- case '$(am__configure_deps)' in \ +#>- *$$dep*) \ +#>- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ +#>- && exit 0; \ +#>- exit 1;; \ +#>- esac; \ +#>- done; \ +#>- echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu kdiff3plugin/po/Makefile'; \ +#>- cd $(top_srcdir) && \ +#>- $(AUTOMAKE) --gnu kdiff3plugin/po/Makefile +#>+ 12 + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ + && exit 0; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu kdiff3plugin/po/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu kdiff3plugin/po/Makefile + cd $(top_srcdir) && perl admin/am_edit kdiff3plugin/po/Makefile.in +.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: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +distclean-libtool: + -rm -f libtool +uninstall-info-am: +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + + +#>- distdir: $(DISTFILES) +#>+ 1 +distdir: distdir-nls $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ + list='$(DISTFILES)'; for file in $$list; do \ + case $$file in \ + $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ + $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ + esac; \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test "$$dir" != "$$file" && test "$$dir" != "."; then \ + dir="/$$dir"; \ + $(mkdir_p) "$(distdir)$$dir"; \ + else \ + dir=''; \ + fi; \ + if test -d $$d/$$file; then \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$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 +installdirs: +install: install-am +install-exec: install-exec-am +install-data: install-data-am +#>- uninstall: uninstall-am +#>+ 1 +uninstall: uninstall-nls uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_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 +#>+ 1 +clean: kde-rpo-clean clean-am + +#>- clean-am: clean-generic clean-libtool mostlyclean-am +#>+ 1 +clean-am: clean-bcheck clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic distclean-libtool + +dvi: dvi-am + +dvi-am: + +html: html-am + +info: info-am + +info-am: + +#>- install-data-am: +#>+ 1 +install-data-am: install-nls + +install-exec-am: + +install-info: install-info-am + +install-man: + +installcheck-am: + +#>- maintainer-clean: maintainer-clean-am +#>+ 1 +maintainer-clean: clean-nls maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-info-am + +.PHONY: all all-am check check-am clean clean-generic clean-libtool \ + distclean distclean-generic distclean-libtool distdir dvi \ + dvi-am html html-am info info-am install install-am \ + install-data install-data-am install-exec install-exec-am \ + install-info install-info-am install-man install-strip \ + installcheck installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-generic \ + mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am \ + uninstall-info-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: + +#>+ 2 +KDE_DIST=nl.po pt.po da.po de.po et.po el.po cs.po tr.po Makefile.in bg.po pt_BR.po sv.po br.po sk.po it.po ga.po Makefile.am + +#>+ 46 +pt.gmo: pt.po + rm -f pt.gmo; $(GMSGFMT) -o pt.gmo $(srcdir)/pt.po + test ! -f pt.gmo || touch pt.gmo +it.gmo: it.po + rm -f it.gmo; $(GMSGFMT) -o it.gmo $(srcdir)/it.po + test ! -f it.gmo || touch it.gmo +br.gmo: br.po + rm -f br.gmo; $(GMSGFMT) -o br.gmo $(srcdir)/br.po + test ! -f br.gmo || touch br.gmo +cs.gmo: cs.po + rm -f cs.gmo; $(GMSGFMT) -o cs.gmo $(srcdir)/cs.po + test ! -f cs.gmo || touch cs.gmo +sv.gmo: sv.po + rm -f sv.gmo; $(GMSGFMT) -o sv.gmo $(srcdir)/sv.po + test ! -f sv.gmo || touch sv.gmo +pt_BR.gmo: pt_BR.po + rm -f pt_BR.gmo; $(GMSGFMT) -o pt_BR.gmo $(srcdir)/pt_BR.po + test ! -f pt_BR.gmo || touch pt_BR.gmo +tr.gmo: tr.po + rm -f tr.gmo; $(GMSGFMT) -o tr.gmo $(srcdir)/tr.po + test ! -f tr.gmo || touch tr.gmo +et.gmo: et.po + rm -f et.gmo; $(GMSGFMT) -o et.gmo $(srcdir)/et.po + test ! -f et.gmo || touch et.gmo +bg.gmo: bg.po + rm -f bg.gmo; $(GMSGFMT) -o bg.gmo $(srcdir)/bg.po + test ! -f bg.gmo || touch bg.gmo +sk.gmo: sk.po + rm -f sk.gmo; $(GMSGFMT) -o sk.gmo $(srcdir)/sk.po + test ! -f sk.gmo || touch sk.gmo +da.gmo: da.po + rm -f da.gmo; $(GMSGFMT) -o da.gmo $(srcdir)/da.po + test ! -f da.gmo || touch da.gmo +de.gmo: de.po + rm -f de.gmo; $(GMSGFMT) -o de.gmo $(srcdir)/de.po + test ! -f de.gmo || touch de.gmo +ga.gmo: ga.po + rm -f ga.gmo; $(GMSGFMT) -o ga.gmo $(srcdir)/ga.po + test ! -f ga.gmo || touch ga.gmo +nl.gmo: nl.po + rm -f nl.gmo; $(GMSGFMT) -o nl.gmo $(srcdir)/nl.po + test ! -f nl.gmo || touch nl.gmo +el.gmo: el.po + rm -f el.gmo; $(GMSGFMT) -o el.gmo $(srcdir)/el.po + test ! -f el.gmo || touch el.gmo + +#>+ 3 +clean-nls: + -rm -f pt.gmo it.gmo br.gmo cs.gmo sv.gmo pt_BR.gmo tr.gmo et.gmo bg.gmo sk.gmo da.gmo de.gmo ga.gmo nl.gmo el.gmo + +#>+ 10 +install-nls: + @for base in pt it br cs sv pt_BR tr et bg sk da de ga nl el ; do \ + echo $(INSTALL_DATA) $$base.gmo $(DESTDIR)$(kde_locale)/$$base/LC_MESSAGES/$(PACKAGE).mo ;\ + $(mkinstalldirs) $(DESTDIR)$(kde_locale)/$$base/LC_MESSAGES ; \ + if test -f $$base.gmo; then $(INSTALL_DATA) $$base.gmo $(DESTDIR)$(kde_locale)/$$base/LC_MESSAGES/$(PACKAGE).mo ;\ + elif test -f $(srcdir)/$$base.gmo; then $(INSTALL_DATA) $(srcdir)/$$base.gmo $(DESTDIR)$(kde_locale)/$$base/LC_MESSAGES/$(PACKAGE).mo ;\ + fi ;\ + done + + +#>+ 17 +uninstall-nls: + rm -f $(DESTDIR)$(kde_locale)/pt/LC_MESSAGES/$(PACKAGE).mo + rm -f $(DESTDIR)$(kde_locale)/it/LC_MESSAGES/$(PACKAGE).mo + rm -f $(DESTDIR)$(kde_locale)/br/LC_MESSAGES/$(PACKAGE).mo + rm -f $(DESTDIR)$(kde_locale)/cs/LC_MESSAGES/$(PACKAGE).mo + rm -f $(DESTDIR)$(kde_locale)/sv/LC_MESSAGES/$(PACKAGE).mo + rm -f $(DESTDIR)$(kde_locale)/pt_BR/LC_MESSAGES/$(PACKAGE).mo + rm -f $(DESTDIR)$(kde_locale)/tr/LC_MESSAGES/$(PACKAGE).mo + rm -f $(DESTDIR)$(kde_locale)/et/LC_MESSAGES/$(PACKAGE).mo + rm -f $(DESTDIR)$(kde_locale)/bg/LC_MESSAGES/$(PACKAGE).mo + rm -f $(DESTDIR)$(kde_locale)/sk/LC_MESSAGES/$(PACKAGE).mo + rm -f $(DESTDIR)$(kde_locale)/da/LC_MESSAGES/$(PACKAGE).mo + rm -f $(DESTDIR)$(kde_locale)/de/LC_MESSAGES/$(PACKAGE).mo + rm -f $(DESTDIR)$(kde_locale)/ga/LC_MESSAGES/$(PACKAGE).mo + rm -f $(DESTDIR)$(kde_locale)/nl/LC_MESSAGES/$(PACKAGE).mo + rm -f $(DESTDIR)$(kde_locale)/el/LC_MESSAGES/$(PACKAGE).mo + +#>+ 2 +all-nls: $(GMOFILES) + +#>+ 8 +distdir-nls:$(GMOFILES) + for file in $(POFILES); do \ + cp $(srcdir)/$$file $(distdir); \ + done + for file in $(GMOFILES); do \ + cp $(srcdir)/$$file $(distdir); \ + done + +#>+ 4 +merge: + $(MAKE) -f $(top_srcdir)/admin/Makefile.common package-merge POFILES="${POFILES}" PACKAGE=${PACKAGE} + + +#>+ 2 +docs-am: + +#>+ 15 +force-reedit: + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ + && exit 0; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu kdiff3plugin/po/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu kdiff3plugin/po/Makefile + cd $(top_srcdir) && perl admin/am_edit kdiff3plugin/po/Makefile.in + + +#>+ 21 +clean-bcheck: + rm -f *.bchecktest.cc *.bchecktest.cc.class a.out + +bcheck: bcheck-am + +bcheck-am: + @for i in ; do \ + if test $(srcdir)/$$i -nt $$i.bchecktest.cc; then \ + echo "int main() {return 0;}" > $$i.bchecktest.cc ; \ + echo "#include \"$$i\"" >> $$i.bchecktest.cc ; \ + echo "$$i"; \ + if ! $(CXX) $(DEFS) -I. -I$(srcdir) -I$(top_builddir) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(KDE_CXXFLAGS) --dump-class-hierarchy -c $$i.bchecktest.cc; then \ + rm -f $$i.bchecktest.cc; exit 1; \ + fi ; \ + echo "" >> $$i.bchecktest.cc.class; \ + perl $(top_srcdir)/admin/bcheck.pl $$i.bchecktest.cc.class || { rm -f $$i.bchecktest.cc; exit 1; }; \ + rm -f a.out; \ + fi ; \ + done + + +#>+ 3 +final: + $(MAKE) all-am + +#>+ 3 +final-install: + $(MAKE) install-am + +#>+ 3 +no-final: + $(MAKE) all-am + +#>+ 3 +no-final-install: + $(MAKE) install-am + +#>+ 3 +kde-rpo-clean: + -rm -f *.rpo + +#>+ 3 +nmcheck: +nmcheck-am: nmcheck diff --git a/kdiff3plugin/po/Makefile.am b/kdiff3plugin/po/Makefile.am new file mode 100644 index 0000000..5bd5973 --- /dev/null +++ b/kdiff3plugin/po/Makefile.am @@ -0,0 +1,2 @@ +PACKAGE=kdiff3_plugin +POFILES = AUTO diff --git a/kdiff3plugin/po/bg.po b/kdiff3plugin/po/bg.po new file mode 100644 index 0000000..cefa5e3 --- /dev/null +++ b/kdiff3plugin/po/bg.po @@ -0,0 +1,83 @@ +# translation of kdiff3_plugin.po to Bulgarian +# +# Zlatko Popov , 2007. +msgid "" +msgstr "" +"Project-Id-Version: kdiff3_plugin\n" +"POT-Creation-Date: 2006-11-19 08:46+0100\n" +"PO-Revision-Date: 2007-01-17 11:52+0200\n" +"Last-Translator: Zlatko Popov \n" +"Language-Team: Bulgarian \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: KBabel 1.11.4\n" + +#: kdiff3plugin.cpp:97 +msgid "KDiff3" +msgstr "KDiff3" + +#: kdiff3plugin.cpp:104 +#, c-format +msgid "Compare with %1" +msgstr "СравнÑване Ñ %1" + +#: kdiff3plugin.cpp:109 +#, c-format +msgid "Merge with %1" +msgstr "Сливане Ñ %1" + +#: kdiff3plugin.cpp:114 +msgid "Save '%1' for later" +msgstr "Запазване на \"%1\" за по-къÑно" + +#: kdiff3plugin.cpp:119 +msgid "3-way merge with base" +msgstr "Тройно Ñливане Ñ Ð¾Ñновата" + +#: kdiff3plugin.cpp:125 +msgid "Compare with ..." +msgstr "СравнÑване Ñ ..." + +#: kdiff3plugin.cpp:137 +msgid "Compare" +msgstr "СравнÑване" + +#: kdiff3plugin.cpp:142 +msgid "3 way comparison" +msgstr "Тройно ÑравнÑване" + +#: kdiff3plugin.cpp:145 +msgid "About KDiff3 menu plugin ..." +msgstr "ОтноÑно приÑтавката за KDiff3 ..." + +#: kdiff3plugin.cpp:240 +msgid "" +"KDiff3 Menu Plugin: Copyright (C) 2006 Joachim Eibl\n" +"KDiff3 homepage: http://kdiff3.sourceforge.net\n" +"\n" +msgstr "" +"ПриÑтавка за KDiff3: Copyright (C) 2006 Joachim Eibl\n" +"Страница в Интернет: http://kdiff3.sourceforge.net\n" +"\n" + +#: kdiff3plugin.cpp:242 +msgid "" +"Using the contextmenu extension:\n" +"For simple comparison of two selected 2 files choose \"Compare\".\n" +"If the other file is somewhere else \"Save\" the first file for later. It will " +"appear in the \"Compare With ...\" submenu. Then use \"Compare With\" on second " +"file.\n" +"For a 3-way merge first \"Save\" the base file, then the branch to merge and " +"choose \"3-way merge with base\" on the other branch which will be used as " +"destination.\n" +"Same also applies to directory comparison and merge." +msgstr "" +"Използване на разширението на контекÑтното меню:\n" +"За нормално ÑравнÑване на два файла, натиÑнете \"СравнÑване\".\n" +"Ðко другиÑÑ‚ файл е нÑкъде другаде, запазете първиÑÑ‚ за по-къÑно. Ще Ñе поÑви в " +"подменюто \"СравнÑване Ñ...\". Тогава използвайте \"СравнÑване Ñ\" за Ð²Ñ‚Ð¾Ñ€Ð¸Ñ " +"файл.\n" +"За тройно Ñливане първо запишете оÑÐ½Ð¾Ð²Ð½Ð¸Ñ Ñ„Ð°Ð¹Ð», поÑле това, което Ñ‚Ñ€Ñбва да Ñе " +"Ñлее и натиÑнете \"Тройно Ñливане Ñ Ð¾Ñновата\" на Ñ‚Ñ€ÐµÑ‚Ð¸Ñ Ñ„Ð°Ð¹Ð».\n" +"Същото важи и за Ñливането и ÑравнÑването на директории." diff --git a/kdiff3plugin/po/br.po b/kdiff3plugin/po/br.po new file mode 100644 index 0000000..4d488e5 --- /dev/null +++ b/kdiff3plugin/po/br.po @@ -0,0 +1,68 @@ +msgid "" +msgstr "" +"Project-Id-Version: all2.po\n" +"POT-Creation-Date: 2006-11-19 08:46+0100\n" +"PO-Revision-Date: 2004-09-20 15:44+0200\n" +"Last-Translator: Thierry Vignaud \n" +"Language-Team: br \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: kdiff3plugin.cpp:97 +msgid "KDiff3" +msgstr "KDiff3" + +#: kdiff3plugin.cpp:104 +#, c-format +msgid "Compare with %1" +msgstr "" + +#: kdiff3plugin.cpp:109 +#, c-format +msgid "Merge with %1" +msgstr "" + +#: kdiff3plugin.cpp:114 +msgid "Save '%1' for later" +msgstr "" + +#: kdiff3plugin.cpp:119 +msgid "3-way merge with base" +msgstr "" + +#: kdiff3plugin.cpp:125 +msgid "Compare with ..." +msgstr "" + +#: kdiff3plugin.cpp:137 +msgid "Compare" +msgstr "" + +#: kdiff3plugin.cpp:142 +msgid "3 way comparison" +msgstr "" + +#: kdiff3plugin.cpp:145 +msgid "About KDiff3 menu plugin ..." +msgstr "" + +#: kdiff3plugin.cpp:240 +msgid "" +"KDiff3 Menu Plugin: Copyright (C) 2006 Joachim Eibl\n" +"KDiff3 homepage: http://kdiff3.sourceforge.net\n" +"\n" +msgstr "" + +#: kdiff3plugin.cpp:242 +msgid "" +"Using the contextmenu extension:\n" +"For simple comparison of two selected 2 files choose \"Compare\".\n" +"If the other file is somewhere else \"Save\" the first file for later. It will " +"appear in the \"Compare With ...\" submenu. Then use \"Compare With\" on second " +"file.\n" +"For a 3-way merge first \"Save\" the base file, then the branch to merge and " +"choose \"3-way merge with base\" on the other branch which will be used as " +"destination.\n" +"Same also applies to directory comparison and merge." +msgstr "" diff --git a/kdiff3plugin/po/cs.po b/kdiff3plugin/po/cs.po new file mode 100644 index 0000000..8d0d74b --- /dev/null +++ b/kdiff3plugin/po/cs.po @@ -0,0 +1,73 @@ +# translation of kdiff3_plugin.po to Czech +# +# Klára Cihlářová , 2007. +msgid "" +msgstr "" +"Project-Id-Version: kdiff3_plugin\n" +"POT-Creation-Date: 2006-11-19 08:46+0100\n" +"PO-Revision-Date: 2007-01-25 19:57+0100\n" +"Last-Translator: Klára Cihlářová \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: KBabel 1.11.4\n" +"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" + +#: kdiff3plugin.cpp:97 +msgid "KDiff3" +msgstr "KDiff3" + +#: kdiff3plugin.cpp:104 +#, c-format +msgid "Compare with %1" +msgstr "Porovnat s %1" + +#: kdiff3plugin.cpp:109 +#, c-format +msgid "Merge with %1" +msgstr "SlouÄit s %1" + +#: kdiff3plugin.cpp:114 +msgid "Save '%1' for later" +msgstr "" + +#: kdiff3plugin.cpp:119 +msgid "3-way merge with base" +msgstr "" + +#: kdiff3plugin.cpp:125 +msgid "Compare with ..." +msgstr "Porovnat s..." + +#: kdiff3plugin.cpp:137 +msgid "Compare" +msgstr "Porovnat" + +#: kdiff3plugin.cpp:142 +msgid "3 way comparison" +msgstr "" + +#: kdiff3plugin.cpp:145 +msgid "About KDiff3 menu plugin ..." +msgstr "" + +#: kdiff3plugin.cpp:240 +msgid "" +"KDiff3 Menu Plugin: Copyright (C) 2006 Joachim Eibl\n" +"KDiff3 homepage: http://kdiff3.sourceforge.net\n" +"\n" +msgstr "" + +#: kdiff3plugin.cpp:242 +msgid "" +"Using the contextmenu extension:\n" +"For simple comparison of two selected 2 files choose \"Compare\".\n" +"If the other file is somewhere else \"Save\" the first file for later. It will " +"appear in the \"Compare With ...\" submenu. Then use \"Compare With\" on second " +"file.\n" +"For a 3-way merge first \"Save\" the base file, then the branch to merge and " +"choose \"3-way merge with base\" on the other branch which will be used as " +"destination.\n" +"Same also applies to directory comparison and merge." +msgstr "" diff --git a/kdiff3plugin/po/da.po b/kdiff3plugin/po/da.po new file mode 100644 index 0000000..1cba3cb --- /dev/null +++ b/kdiff3plugin/po/da.po @@ -0,0 +1,84 @@ +# Danish translation of kdiff3_plugin +# +# Erik Kjær Pedersen , 2006. +msgid "" +msgstr "" +"Project-Id-Version: kdiff3_plugin\n" +"POT-Creation-Date: 2006-11-19 08:46+0100\n" +"PO-Revision-Date: 2006-11-19 16:31-0500\n" +"Last-Translator: Erik Kjær Pedersen \n" +"Language-Team: Danish \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: KBabel 1.11.4\n" + +#: kdiff3plugin.cpp:97 +msgid "KDiff3" +msgstr "KDiff3" + +#: kdiff3plugin.cpp:104 +#, c-format +msgid "Compare with %1" +msgstr "Sammenlign med %1" + +#: kdiff3plugin.cpp:109 +#, c-format +msgid "Merge with %1" +msgstr "Flet sammen med %1" + +#: kdiff3plugin.cpp:114 +msgid "Save '%1' for later" +msgstr "Gem '%1' til senere" + +#: kdiff3plugin.cpp:119 +msgid "3-way merge with base" +msgstr "Trevejs sammenfletning med basis" + +#: kdiff3plugin.cpp:125 +msgid "Compare with ..." +msgstr "Sammenlign med..." + +#: kdiff3plugin.cpp:137 +msgid "Compare" +msgstr "Sammenlign" + +#: kdiff3plugin.cpp:142 +msgid "3 way comparison" +msgstr "Trevejs sammenligning" + +#: kdiff3plugin.cpp:145 +msgid "About KDiff3 menu plugin ..." +msgstr "Om Kdiff3-menuplugin..." + +#: kdiff3plugin.cpp:240 +msgid "" +"KDiff3 Menu Plugin: Copyright (C) 2006 Joachim Eibl\n" +"KDiff3 homepage: http://kdiff3.sourceforge.net\n" +"\n" +msgstr "" +"Kdiff3 menuplugin: Ophavsret © 2006 Joachim Eibl\n" +"Kdiff3 hjemmeside: http://kdiff3.sourceforge.net\n" +"\n" + +#: kdiff3plugin.cpp:242 +msgid "" +"Using the contextmenu extension:\n" +"For simple comparison of two selected 2 files choose \"Compare\".\n" +"If the other file is somewhere else \"Save\" the first file for later. It will " +"appear in the \"Compare With ...\" submenu. Then use \"Compare With\" on second " +"file.\n" +"For a 3-way merge first \"Save\" the base file, then the branch to merge and " +"choose \"3-way merge with base\" on the other branch which will be used as " +"destination.\n" +"Same also applies to directory comparison and merge." +msgstr "" +"Brug af udvidelsen med sammenhængsafhængig menu:\n" +"For nem sammenligning af to markerede filer, vælg \"Sammenlign\".\n" +"Hvis den andre fil findes et andet sted, \"Gem\" den første fil til senere. Den " +"ses i undermenuen \"Sammenlign med...\". Brug derefter \"Sammenlign med\" for " +"den anden fil.\n" +"For en trevejs sammenfletning, \"Gem\" først basisfilen, derefter grenen at " +"sammenflette, og vælg \"Trevejs sammenfletning med basis\" for den anden gren " +"som bruges som mÃ¥l.\n" +"Det samme gælder ogsÃ¥ for mappesammenligning og sammenfletning." diff --git a/kdiff3plugin/po/de.po b/kdiff3plugin/po/de.po new file mode 100644 index 0000000..6c398ed --- /dev/null +++ b/kdiff3plugin/po/de.po @@ -0,0 +1,91 @@ +# translation of kdiff3_plugin.po to German +# translation of kdiff3_plugin.po to +# +# Mark Volkert , 2006. +# Thomas Reitelbach , 2007. +msgid "" +msgstr "" +"Project-Id-Version: kdiff3_plugin\n" +"POT-Creation-Date: 2006-11-19 08:46+0100\n" +"PO-Revision-Date: 2007-01-29 22:54+0100\n" +"Last-Translator: Thomas Reitelbach \n" +"Language-Team: German \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: KBabel 1.11.4\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: kdiff3plugin.cpp:97 +msgid "KDiff3" +msgstr "KDiff3" + +#: kdiff3plugin.cpp:104 +#, c-format +msgid "Compare with %1" +msgstr "Mit %1 vergleichen" + +#: kdiff3plugin.cpp:109 +#, c-format +msgid "Merge with %1" +msgstr "Mit %1 zusammenführen" + +#: kdiff3plugin.cpp:114 +msgid "Save '%1' for later" +msgstr "'%1' für später speichern" + +#: kdiff3plugin.cpp:119 +msgid "3-way merge with base" +msgstr "3-Wege-Vergleich mit Base" + +#: kdiff3plugin.cpp:125 +msgid "Compare with ..." +msgstr "Vergleichen mit ..." + +#: kdiff3plugin.cpp:137 +msgid "Compare" +msgstr "Vergleich" + +#: kdiff3plugin.cpp:142 +msgid "3 way comparison" +msgstr "3-Wege-Vergleich" + +#: kdiff3plugin.cpp:145 +msgid "About KDiff3 menu plugin ..." +msgstr "Ãœber das KDiff3 Menü-Modul ..." + +#: kdiff3plugin.cpp:240 +msgid "" +"KDiff3 Menu Plugin: Copyright (C) 2006 Joachim Eibl\n" +"KDiff3 homepage: http://kdiff3.sourceforge.net\n" +"\n" +msgstr "" +"KDiff3 Menü-Modul: Copyright (C) 2006 Joachim Eibl\n" +"KDiff3 Internetseite: http://kdiff3.sourceforge.net\n" +"\n" + +#: kdiff3plugin.cpp:242 +msgid "" +"Using the contextmenu extension:\n" +"For simple comparison of two selected 2 files choose \"Compare\".\n" +"If the other file is somewhere else \"Save\" the first file for later. It will " +"appear in the \"Compare With ...\" submenu. Then use \"Compare With\" on second " +"file.\n" +"For a 3-way merge first \"Save\" the base file, then the branch to merge and " +"choose \"3-way merge with base\" on the other branch which will be used as " +"destination.\n" +"Same also applies to directory comparison and merge." +msgstr "" +"Verwendung der Kontextmenü-Erweiterung:\n" +"Für einen einfachen Vergleich zweier ausgewählter Dateien wählen Sie " +"\"Vergleichen\".\n" +"Wenn sich die andere Datei woanders befindet, \"Speichern\" Sie die erste Datei " +"zur späteren Verwendung. Sie wird im Untermenü \"Vergleichen mit ...\" " +"erscheinen. Anschließend verwenden Sie mit der zweiten Datei die Funktion " +"\"Vergleichen mit\".\n" +"Um eine 3-Wege-Zusammenführung durchzuführen, \"Speichern\" Sie die " +"Basis-Datei, dann die zusammenzuführende Verzweigung und dann wählen Sie mit " +"der zweiten Verzweigung die Funktion \"3-Wege-Zusammenführung mit Basis\". Das " +"Ziel der Zusammenführung ist die zuletzt gewählte Verzweigung.\n" +"Auf die gleiche Weise funktioniert auch das Vergleichen und Zusammenführen von " +"Ordnern." diff --git a/kdiff3plugin/po/el.po b/kdiff3plugin/po/el.po new file mode 100644 index 0000000..651160e --- /dev/null +++ b/kdiff3plugin/po/el.po @@ -0,0 +1,84 @@ +# translation of kdiff3_plugin.po to Greek +# +# Spiros Georgaras , 2006. +msgid "" +msgstr "" +"Project-Id-Version: kdiff3_plugin\n" +"POT-Creation-Date: 2006-11-19 08:46+0100\n" +"PO-Revision-Date: 2006-11-19 17:37+0200\n" +"Last-Translator: Spiros Georgaras \n" +"Language-Team: Greek \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: KBabel 1.11.4\n" + +#: kdiff3plugin.cpp:97 +msgid "KDiff3" +msgstr "KDiff3" + +#: kdiff3plugin.cpp:104 +#, c-format +msgid "Compare with %1" +msgstr "ΣÏγκÏιση με το %1" + +#: kdiff3plugin.cpp:109 +#, c-format +msgid "Merge with %1" +msgstr "Συγχώνευση με το %1" + +#: kdiff3plugin.cpp:114 +msgid "Save '%1' for later" +msgstr "Αποθήκευση του %1 για αÏγότεÏα" + +#: kdiff3plugin.cpp:119 +msgid "3-way merge with base" +msgstr "ΤÏιπλή συγχώνευση με βάση" + +#: kdiff3plugin.cpp:125 +msgid "Compare with ..." +msgstr "ΣÏγκÏιση με..." + +#: kdiff3plugin.cpp:137 +msgid "Compare" +msgstr "ΣÏγκÏιση" + +#: kdiff3plugin.cpp:142 +msgid "3 way comparison" +msgstr "Ï„Ïιπλή σÏγκÏιση" + +#: kdiff3plugin.cpp:145 +msgid "About KDiff3 menu plugin ..." +msgstr "Σχετικά με το Ï€Ïόσθετο Î¼ÎµÎ½Î¿Ï Ï„Î¿Ï… KDiff3..." + +#: kdiff3plugin.cpp:240 +msgid "" +"KDiff3 Menu Plugin: Copyright (C) 2006 Joachim Eibl\n" +"KDiff3 homepage: http://kdiff3.sourceforge.net\n" +"\n" +msgstr "" +"ΠÏόσθετο Î¼ÎµÎ½Î¿Ï Ï„Î¿Ï… KDiff3: Copyright (C) 2006 Joachim Eibl\n" +"Ιστοσελίδα του KDiff3: http://kdiff3.sourceforge.net\n" +"\n" + +#: kdiff3plugin.cpp:242 +msgid "" +"Using the contextmenu extension:\n" +"For simple comparison of two selected 2 files choose \"Compare\".\n" +"If the other file is somewhere else \"Save\" the first file for later. It will " +"appear in the \"Compare With ...\" submenu. Then use \"Compare With\" on second " +"file.\n" +"For a 3-way merge first \"Save\" the base file, then the branch to merge and " +"choose \"3-way merge with base\" on the other branch which will be used as " +"destination.\n" +"Same also applies to directory comparison and merge." +msgstr "" +"ΧÏήση της επέκτασης μενοÏ:\n" +"Για απλή σÏγκÏιση 3 επιλεγμένων αÏχείων επιλέξτε το \"ΣÏγκÏιση\".\n" +"Αν το δεÏτεÏο αÏχείο βÏίσκεται κάπου αλλοÏ, \"ΑποθηκεÏστε\" το Ï€Ïώτο αÏχείο για " +"αÏγότεÏα. Θα εμφανιστεί στο Ï…Ï€Î¿Î¼ÎµÎ½Î¿Ï \"ΣÏγκÏιση με...\". Στη συνέχεια " +"χÏησιμοποιήστε το \"ΣÏγκÏιση με\" στο δεÏτεÏο αÏχείο.\n" +"Για να κάνετε Ï„Ïιπλή συγχώνευση \"ΑποθηκεÏστε\" το αÏχείο βάσης, και τον Ï€Ïος " +"συγχώνευση κλάδο και επιλέξτε \"ΤÏιπλή συγχώνευση με βάση\" στον άλλο κλάδο, ο " +"οποίος θα χÏησιμοποιηθεί ως Ï€ÏοοÏισμός.\n" +"Τα παÏαπάνω ισχÏουν για για τη σÏγκÏιση και συγχώνευση καταλόγων." diff --git a/kdiff3plugin/po/et.po b/kdiff3plugin/po/et.po new file mode 100644 index 0000000..fd799a8 --- /dev/null +++ b/kdiff3plugin/po/et.po @@ -0,0 +1,83 @@ +# translation of kdiff3_plugin.po to Estonian +# +# Marek Laane , 2006. +msgid "" +msgstr "" +"Project-Id-Version: kdiff3_plugin\n" +"POT-Creation-Date: 2006-11-19 08:46+0100\n" +"PO-Revision-Date: 2006-12-07 02:19+0200\n" +"Last-Translator: Marek Laane \n" +"Language-Team: Estonian \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: KBabel 1.11.4\n" + +#: kdiff3plugin.cpp:97 +msgid "KDiff3" +msgstr "KDiff3" + +#: kdiff3plugin.cpp:104 +#, c-format +msgid "Compare with %1" +msgstr "Võrdle failiga %1" + +#: kdiff3plugin.cpp:109 +#, c-format +msgid "Merge with %1" +msgstr "Ãœhenda failiga %1" + +#: kdiff3plugin.cpp:114 +msgid "Save '%1' for later" +msgstr "Salvesta '%1' hilisemaks" + +#: kdiff3plugin.cpp:119 +msgid "3-way merge with base" +msgstr "Kolme faili ühendamine baasiga" + +#: kdiff3plugin.cpp:125 +msgid "Compare with ..." +msgstr "Võrdle failiga..." + +#: kdiff3plugin.cpp:137 +msgid "Compare" +msgstr "Võrdle" + +#: kdiff3plugin.cpp:142 +msgid "3 way comparison" +msgstr "Kolme faili võrdlemine" + +#: kdiff3plugin.cpp:145 +msgid "About KDiff3 menu plugin ..." +msgstr "KDiff3 menüüplugina info..." + +#: kdiff3plugin.cpp:240 +msgid "" +"KDiff3 Menu Plugin: Copyright (C) 2006 Joachim Eibl\n" +"KDiff3 homepage: http://kdiff3.sourceforge.net\n" +"\n" +msgstr "" +"KDiff3 menüüplugin: autoriõigus (C) 2006 Joachim Eibl\n" +"KDiff3 kodulehekülg: http://kdiff3.sourceforge.net\n" + +#: kdiff3plugin.cpp:242 +msgid "" +"Using the contextmenu extension:\n" +"For simple comparison of two selected 2 files choose \"Compare\".\n" +"If the other file is somewhere else \"Save\" the first file for later. It will " +"appear in the \"Compare With ...\" submenu. Then use \"Compare With\" on second " +"file.\n" +"For a 3-way merge first \"Save\" the base file, then the branch to merge and " +"choose \"3-way merge with base\" on the other branch which will be used as " +"destination.\n" +"Same also applies to directory comparison and merge." +msgstr "" +"Kontekstimenüü laienduse kasutamine:\n" +"Kahe valitud faili lihtsaks võrldemiseks vali \"Võrdle\".\n" +"Kui teine fail asub kuskil mujal, \"salvesta\" esimene fail hilisemaks " +"kasutamiseks. See ilmub alammenüüsse \"Võrdle failiga...\" Seejärel kasuta " +"teise faili jaoks käsku \"Võrdle failiga\".\n" +"Kolme faili ühendamiseks \"salvesta\" kõigepealt baasfail, seejärel ühendatav " +"variant ja vali \"Kolme faili ühendamine baasiga\" variandiga, mida kasutatakse " +"sihtfailina.\n" +"Sama käib kataloogide võrdlemise ja ühendamise kohta." diff --git a/kdiff3plugin/po/ga.po b/kdiff3plugin/po/ga.po new file mode 100644 index 0000000..e7860a9 --- /dev/null +++ b/kdiff3plugin/po/ga.po @@ -0,0 +1,71 @@ +msgid "" +msgstr "" +"Project-Id-Version: extragear-utils/kdiff3_plugin.po\n" +"POT-Creation-Date: 2006-11-19 08:46+0100\n" +"PO-Revision-Date: 2006-11-19 07:45-0500\n" +"Last-Translator: Kevin Patrick Scannell \n" +"Language-Team: Irish \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: kdiff3plugin.cpp:97 +msgid "KDiff3" +msgstr "KDiff3" + +#: kdiff3plugin.cpp:104 +#, c-format +msgid "Compare with %1" +msgstr "Cuir i gcomparáid le %1" + +#: kdiff3plugin.cpp:109 +#, c-format +msgid "Merge with %1" +msgstr "Cumaisc le %1" + +#: kdiff3plugin.cpp:114 +msgid "Save '%1' for later" +msgstr "" + +#: kdiff3plugin.cpp:119 +msgid "3-way merge with base" +msgstr "" + +#: kdiff3plugin.cpp:125 +msgid "Compare with ..." +msgstr "Cuir i gcomparáid le ..." + +#: kdiff3plugin.cpp:137 +msgid "Compare" +msgstr "Cuir i gComparáid" + +#: kdiff3plugin.cpp:142 +msgid "3 way comparison" +msgstr "Comparáid trí bhealach" + +#: kdiff3plugin.cpp:145 +msgid "About KDiff3 menu plugin ..." +msgstr "" + +#: kdiff3plugin.cpp:240 +msgid "" +"KDiff3 Menu Plugin: Copyright (C) 2006 Joachim Eibl\n" +"KDiff3 homepage: http://kdiff3.sourceforge.net\n" +"\n" +msgstr "" +"Breiseán Roghchláir KDiff3: Copyright © 2006 Joachim Eibl\n" +"Leathanach Baile KDiff3: http://kdiff3.sourceforge.net/\n" +"\n" + +#: kdiff3plugin.cpp:242 +msgid "" +"Using the contextmenu extension:\n" +"For simple comparison of two selected 2 files choose \"Compare\".\n" +"If the other file is somewhere else \"Save\" the first file for later. It will " +"appear in the \"Compare With ...\" submenu. Then use \"Compare With\" on second " +"file.\n" +"For a 3-way merge first \"Save\" the base file, then the branch to merge and " +"choose \"3-way merge with base\" on the other branch which will be used as " +"destination.\n" +"Same also applies to directory comparison and merge." +msgstr "" diff --git a/kdiff3plugin/po/it.po b/kdiff3plugin/po/it.po new file mode 100644 index 0000000..dd98c15 --- /dev/null +++ b/kdiff3plugin/po/it.po @@ -0,0 +1,84 @@ +# translation of kdiff3_plugin.po to Italian +# +# Federico Zenith , 2006. +msgid "" +msgstr "" +"Project-Id-Version: kdiff3_plugin\n" +"POT-Creation-Date: 2006-11-19 08:46+0100\n" +"PO-Revision-Date: 2006-11-22 07:28+0100\n" +"Last-Translator: Federico Zenith \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: KBabel 1.11.4\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: kdiff3plugin.cpp:97 +msgid "KDiff3" +msgstr "KDiff3" + +#: kdiff3plugin.cpp:104 +#, c-format +msgid "Compare with %1" +msgstr "Confronta con %1" + +#: kdiff3plugin.cpp:109 +#, c-format +msgid "Merge with %1" +msgstr "Fondi con %1" + +#: kdiff3plugin.cpp:114 +msgid "Save '%1' for later" +msgstr "Memorizza '%1'" + +#: kdiff3plugin.cpp:119 +msgid "3-way merge with base" +msgstr "Fusione a tre con base" + +#: kdiff3plugin.cpp:125 +msgid "Compare with ..." +msgstr "Confronta con..." + +#: kdiff3plugin.cpp:137 +msgid "Compare" +msgstr "Confronta" + +#: kdiff3plugin.cpp:142 +msgid "3 way comparison" +msgstr "Confronto a tre" + +#: kdiff3plugin.cpp:145 +msgid "About KDiff3 menu plugin ..." +msgstr "Informazioni sul plugin KDiff3 per menu..." + +#: kdiff3plugin.cpp:240 +msgid "" +"KDiff3 Menu Plugin: Copyright (C) 2006 Joachim Eibl\n" +"KDiff3 homepage: http://kdiff3.sourceforge.net\n" +"\n" +msgstr "" +"Plugin KDiff3 per menu: Copyright 2006 Joachim Eibl\n" +"Pagina Web di KDiff3: " +"kdiff3.sourceforge.net\n" +"\n" + +#: kdiff3plugin.cpp:242 +msgid "" +"Using the contextmenu extension:\n" +"For simple comparison of two selected 2 files choose \"Compare\".\n" +"If the other file is somewhere else \"Save\" the first file for later. It will " +"appear in the \"Compare With ...\" submenu. Then use \"Compare With\" on second " +"file.\n" +"For a 3-way merge first \"Save\" the base file, then the branch to merge and " +"choose \"3-way merge with base\" on the other branch which will be used as " +"destination.\n" +"Same also applies to directory comparison and merge." +msgstr "" +"Usare l'estensione del menu contestuale:\n" +"Per un semplice confronto di due file selezionati scegli \"Confronta\".\n" +"Se l'altro file è da qualche altra parte, \"Memorizza\" il primo. Apparirà nel " +"sottomenu \"Confronta con...\". Poi usa \"Confronta con\" sul secondo file.\n" +"Per una fusione a tre, prima \"Memorizza\" il file di base, poi il ramo da " +"fondere, e scegli \"Fusione a tre con base\" sul ramo di destinazione.\n" +"Lo stesso vale per il confronto e la fusione tra cartelle." diff --git a/kdiff3plugin/po/nl.po b/kdiff3plugin/po/nl.po new file mode 100644 index 0000000..1c8291c --- /dev/null +++ b/kdiff3plugin/po/nl.po @@ -0,0 +1,87 @@ +# translation of kdiff3_plugin.po to Dutch +# +# Rinse de Vries , 2006. +msgid "" +msgstr "" +"Project-Id-Version: kdiff3_plugin\n" +"POT-Creation-Date: 2006-11-19 08:46+0100\n" +"PO-Revision-Date: 2006-11-27 00:11+0100\n" +"Last-Translator: Rinse de Vries \n" +"Language-Team: Dutch \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: KBabel 1.11.4\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: kdiff3plugin.cpp:97 +msgid "KDiff3" +msgstr "KDiff3" + +#: kdiff3plugin.cpp:104 +#, c-format +msgid "Compare with %1" +msgstr "Vergelijken met %1" + +#: kdiff3plugin.cpp:109 +#, c-format +msgid "Merge with %1" +msgstr "Samenvoegen met %1" + +#: kdiff3plugin.cpp:114 +msgid "Save '%1' for later" +msgstr "'%1' voor later gebruik opslaan" + +#: kdiff3plugin.cpp:119 +msgid "3-way merge with base" +msgstr "3-weg samenvoeging met basis" + +#: kdiff3plugin.cpp:125 +msgid "Compare with ..." +msgstr "Vergelijken met..." + +#: kdiff3plugin.cpp:137 +msgid "Compare" +msgstr "Vergelijken" + +#: kdiff3plugin.cpp:142 +msgid "3 way comparison" +msgstr "3-weg vergelijking" + +#: kdiff3plugin.cpp:145 +msgid "About KDiff3 menu plugin ..." +msgstr "Info over KDiff3-menuplugin..." + +#: kdiff3plugin.cpp:240 +msgid "" +"KDiff3 Menu Plugin: Copyright (C) 2006 Joachim Eibl\n" +"KDiff3 homepage: http://kdiff3.sourceforge.net\n" +"\n" +msgstr "" +"KDif3-menuplugin: Copyright (C) 2006 Joachim Eibl\n" +"KDiff3-website: http://kdiff3.sourceforge.net\n" +"\n" + +#: kdiff3plugin.cpp:242 +msgid "" +"Using the contextmenu extension:\n" +"For simple comparison of two selected 2 files choose \"Compare\".\n" +"If the other file is somewhere else \"Save\" the first file for later. It will " +"appear in the \"Compare With ...\" submenu. Then use \"Compare With\" on second " +"file.\n" +"For a 3-way merge first \"Save\" the base file, then the branch to merge and " +"choose \"3-way merge with base\" on the other branch which will be used as " +"destination.\n" +"Same also applies to directory comparison and merge." +msgstr "" +"De contextmenu-extensie gebruiken:\n" +"Voor eenvoudige vergelijking van 2 geselecteerde bestanden, kies " +"\"Vergelijken\".\n" +"Als het bestand ergens anders staat, sla dan het eerste bestand voor later " +"gebruik op. Het zal verschijnen in het submenu \"Vergelijken met...\". Gebruik " +"daarna \"Vergelijken met\" voor het tweede bestand.\n" +"Voor een 3-weg samenvoeging, sla eerst het basisbestand op, daarna de tak om " +"mee samen te voegen en kies daarna \"3-weg samenvoeging met basis\" op de tak " +"die gebruikt zal worden als bestemming.\n" +"Bovenstaande is ook van toepassing op het vergelijken en samenvoegen van " +"directories." diff --git a/kdiff3plugin/po/pt.po b/kdiff3plugin/po/pt.po new file mode 100644 index 0000000..ec8364d --- /dev/null +++ b/kdiff3plugin/po/pt.po @@ -0,0 +1,82 @@ +msgid "" +msgstr "" +"Project-Id-Version: kdiff3_plugin\n" +"POT-Creation-Date: 2006-11-19 08:46+0100\n" +"PO-Revision-Date: 2006-11-19 14:49+0000\n" +"Last-Translator: José Nuno Coelho Pires \n" +"Language-Team: pt \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-POFile-SpellExtra: Eibl Joachim KDiff\n" + +#: kdiff3plugin.cpp:97 +msgid "KDiff3" +msgstr "KDiff3" + +#: kdiff3plugin.cpp:104 +#, c-format +msgid "Compare with %1" +msgstr "Comparar com o %1" + +#: kdiff3plugin.cpp:109 +#, c-format +msgid "Merge with %1" +msgstr "Juntar com o %1" + +#: kdiff3plugin.cpp:114 +msgid "Save '%1' for later" +msgstr "Gravar o '%1' para mais tarde" + +#: kdiff3plugin.cpp:119 +msgid "3-way merge with base" +msgstr "Junção de 3-vias com a base" + +#: kdiff3plugin.cpp:125 +msgid "Compare with ..." +msgstr "Comparar com ..." + +#: kdiff3plugin.cpp:137 +msgid "Compare" +msgstr "Comparar" + +#: kdiff3plugin.cpp:142 +msgid "3 way comparison" +msgstr "Comparação de 3 vias" + +#: kdiff3plugin.cpp:145 +msgid "About KDiff3 menu plugin ..." +msgstr "Acerca do 'plugin' do menu do KDiff3 ..." + +#: kdiff3plugin.cpp:240 +msgid "" +"KDiff3 Menu Plugin: Copyright (C) 2006 Joachim Eibl\n" +"KDiff3 homepage: http://kdiff3.sourceforge.net\n" +"\n" +msgstr "" +"'Plugin' do Menu do KDiff3: Copyright (C) 2006 Joachim Eibl\n" +"Página Web do KDiff3: http://kdiff3.sourceforge.net\n" +"\n" + +#: kdiff3plugin.cpp:242 +msgid "" +"Using the contextmenu extension:\n" +"For simple comparison of two selected 2 files choose \"Compare\".\n" +"If the other file is somewhere else \"Save\" the first file for later. It will " +"appear in the \"Compare With ...\" submenu. Then use \"Compare With\" on second " +"file.\n" +"For a 3-way merge first \"Save\" the base file, then the branch to merge and " +"choose \"3-way merge with base\" on the other branch which will be used as " +"destination.\n" +"Same also applies to directory comparison and merge." +msgstr "" +"Usar a extensão do menu de contexto:\n" +"Para uma comparação simples de dois ficheiros seleccionados, escolha " +"\"Comparar\".\n" +"Se o outro ficheiro estiver noutro local, opte por \"Gravar\" o primeiro " +"ficheiro para mais tarde. Este irá aparecer no submenu \"Comparar Com ...\". " +"Depois, use o \"Comparar Com\" no segundo ficheiro.\n" +"Para uma junção de 3 vias, primeiro escolha \"Gravar\" o ficheiro de base, " +"depois a ramificação a juntar e finalmente \"junção de 3 vias com a base\" na " +"outra ramificação que será usada como destino.\n" +"O mesmo se aplica também à comparação e junção de pastas." diff --git a/kdiff3plugin/po/pt_BR.po b/kdiff3plugin/po/pt_BR.po new file mode 100644 index 0000000..808af36 --- /dev/null +++ b/kdiff3plugin/po/pt_BR.po @@ -0,0 +1,85 @@ +# translation of kdiff3_plugin.po to Brazilian Portuguese +# +# Diniz Bortolotto , 2006. +msgid "" +msgstr "" +"Project-Id-Version: kdiff3_plugin\n" +"POT-Creation-Date: 2006-11-19 08:46+0100\n" +"PO-Revision-Date: 2006-11-26 22:39-0200\n" +"Last-Translator: Diniz Bortolotto \n" +"Language-Team: Brazilian Portuguese \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: KBabel 1.11.4\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +#: kdiff3plugin.cpp:97 +msgid "KDiff3" +msgstr "KDiff3" + +#: kdiff3plugin.cpp:104 +#, c-format +msgid "Compare with %1" +msgstr "Comparar com %1" + +#: kdiff3plugin.cpp:109 +#, c-format +msgid "Merge with %1" +msgstr "Mesclar com %1" + +#: kdiff3plugin.cpp:114 +msgid "Save '%1' for later" +msgstr "Salvar '%1' para mais tarde" + +#: kdiff3plugin.cpp:119 +msgid "3-way merge with base" +msgstr "Mesclagem de 3-vias com a base" + +#: kdiff3plugin.cpp:125 +msgid "Compare with ..." +msgstr "Comparar com ..." + +#: kdiff3plugin.cpp:137 +msgid "Compare" +msgstr "Comparar" + +#: kdiff3plugin.cpp:142 +msgid "3 way comparison" +msgstr "Comparação de 3 vias" + +#: kdiff3plugin.cpp:145 +msgid "About KDiff3 menu plugin ..." +msgstr "Sobre KDiff3 menu plugin ..." + +#: kdiff3plugin.cpp:240 +msgid "" +"KDiff3 Menu Plugin: Copyright (C) 2006 Joachim Eibl\n" +"KDiff3 homepage: http://kdiff3.sourceforge.net\n" +"\n" +msgstr "" +"KDiff3 Menu Plugin: Copyright (C) 2006 Joachim Eibl\n" +"KDiff3 homepage: http://kdiff3.sourceforge.net\n" +"\n" + +#: kdiff3plugin.cpp:242 +msgid "" +"Using the contextmenu extension:\n" +"For simple comparison of two selected 2 files choose \"Compare\".\n" +"If the other file is somewhere else \"Save\" the first file for later. It will " +"appear in the \"Compare With ...\" submenu. Then use \"Compare With\" on second " +"file.\n" +"For a 3-way merge first \"Save\" the base file, then the branch to merge and " +"choose \"3-way merge with base\" on the other branch which will be used as " +"destination.\n" +"Same also applies to directory comparison and merge." +msgstr "" +"Usando a extensão menu de contexto:\n" +"For simple comparison of two selected 2 files choose \"Compare\".\n" +"If the other file is somewhere else \"Save\" the first file for later. It will " +"appear in the \"Compare With ...\" submenu. Then use \"Compare With\" on second " +"file.\n" +"For a 3-way merge first \"Save\" the base file, then the branch to merge and " +"choose \"3-way merge with base\" on the other branch which will be used as " +"destination.\n" +"Same also applies to directory comparison and merge." diff --git a/kdiff3plugin/po/sk.po b/kdiff3plugin/po/sk.po new file mode 100644 index 0000000..ce2e51e --- /dev/null +++ b/kdiff3plugin/po/sk.po @@ -0,0 +1,73 @@ +# translation of kdiff3_plugin.po to Slovak +# +# Richard Fric , 2006. +msgid "" +msgstr "" +"Project-Id-Version: kdiff3_plugin\n" +"POT-Creation-Date: 2006-11-19 08:46+0100\n" +"PO-Revision-Date: 2006-11-19 16:30+0100\n" +"Last-Translator: Richard Fric \n" +"Language-Team: Slovak \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: KBabel 1.11.4\n" +"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" + +#: kdiff3plugin.cpp:97 +msgid "KDiff3" +msgstr "KDiff3" + +#: kdiff3plugin.cpp:104 +#, c-format +msgid "Compare with %1" +msgstr "" + +#: kdiff3plugin.cpp:109 +#, c-format +msgid "Merge with %1" +msgstr "" + +#: kdiff3plugin.cpp:114 +msgid "Save '%1' for later" +msgstr "" + +#: kdiff3plugin.cpp:119 +msgid "3-way merge with base" +msgstr "" + +#: kdiff3plugin.cpp:125 +msgid "Compare with ..." +msgstr "" + +#: kdiff3plugin.cpp:137 +msgid "Compare" +msgstr "" + +#: kdiff3plugin.cpp:142 +msgid "3 way comparison" +msgstr "" + +#: kdiff3plugin.cpp:145 +msgid "About KDiff3 menu plugin ..." +msgstr "" + +#: kdiff3plugin.cpp:240 +msgid "" +"KDiff3 Menu Plugin: Copyright (C) 2006 Joachim Eibl\n" +"KDiff3 homepage: http://kdiff3.sourceforge.net\n" +"\n" +msgstr "" + +#: kdiff3plugin.cpp:242 +msgid "" +"Using the contextmenu extension:\n" +"For simple comparison of two selected 2 files choose \"Compare\".\n" +"If the other file is somewhere else \"Save\" the first file for later. It will " +"appear in the \"Compare With ...\" submenu. Then use \"Compare With\" on second " +"file.\n" +"For a 3-way merge first \"Save\" the base file, then the branch to merge and " +"choose \"3-way merge with base\" on the other branch which will be used as " +"destination.\n" +"Same also applies to directory comparison and merge." +msgstr "" diff --git a/kdiff3plugin/po/sv.po b/kdiff3plugin/po/sv.po new file mode 100644 index 0000000..d62d6ae --- /dev/null +++ b/kdiff3plugin/po/sv.po @@ -0,0 +1,84 @@ +# translation of kdiff3_plugin.po to Swedish +# +# Stefan Asserhäll , 2006. +msgid "" +msgstr "" +"Project-Id-Version: kdiff3_plugin\n" +"POT-Creation-Date: 2006-11-19 08:46+0100\n" +"PO-Revision-Date: 2006-11-19 20:10+0100\n" +"Last-Translator: Stefan Asserhäll \n" +"Language-Team: Swedish \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: KBabel 1.11.4\n" + +#: kdiff3plugin.cpp:97 +msgid "KDiff3" +msgstr "Kdiff3" + +#: kdiff3plugin.cpp:104 +#, c-format +msgid "Compare with %1" +msgstr "Jämför med %1" + +#: kdiff3plugin.cpp:109 +#, c-format +msgid "Merge with %1" +msgstr "Sammanfoga med %1" + +#: kdiff3plugin.cpp:114 +msgid "Save '%1' for later" +msgstr "Spara '%1' till senare" + +#: kdiff3plugin.cpp:119 +msgid "3-way merge with base" +msgstr "Trevägs sammanfogning med bas" + +#: kdiff3plugin.cpp:125 +msgid "Compare with ..." +msgstr "Jämför med..." + +#: kdiff3plugin.cpp:137 +msgid "Compare" +msgstr "Jämför" + +#: kdiff3plugin.cpp:142 +msgid "3 way comparison" +msgstr "Trevägs jämförelse" + +#: kdiff3plugin.cpp:145 +msgid "About KDiff3 menu plugin ..." +msgstr "Om Kdiff3-menyinsticksprogram..." + +#: kdiff3plugin.cpp:240 +msgid "" +"KDiff3 Menu Plugin: Copyright (C) 2006 Joachim Eibl\n" +"KDiff3 homepage: http://kdiff3.sourceforge.net\n" +"\n" +msgstr "" +"Kdiff3 menyinsticksprogram: Copyright © 2006 Joachim Eibl\n" +"Kdiff3 hemsida: http://kdiff3.sourceforge.net\n" +"\n" + +#: kdiff3plugin.cpp:242 +msgid "" +"Using the contextmenu extension:\n" +"For simple comparison of two selected 2 files choose \"Compare\".\n" +"If the other file is somewhere else \"Save\" the first file for later. It will " +"appear in the \"Compare With ...\" submenu. Then use \"Compare With\" on second " +"file.\n" +"For a 3-way merge first \"Save\" the base file, then the branch to merge and " +"choose \"3-way merge with base\" on the other branch which will be used as " +"destination.\n" +"Same also applies to directory comparison and merge." +msgstr "" +"Användning av utökningen med sammanhangsberoende meny:\n" +"För enkel jämförelse av tvÃ¥ markerade filer, välj \"Jämför\".\n" +"Om den andra filen finns nÃ¥gon annanstans, \"Spara\" den först filen till " +"senare. Den syns i undermenyn \"Jämför med...\". Använd därefter \"Jämför med\" " +"för den andra filen.\n" +"För en trevägs sammanfogning, \"Spara\" först basfilen, därefter grenen att " +"sammanfoga, och välj \"Trevägs sammanfogning med bas\" för den andra grenen som " +"används som mÃ¥l.\n" +"Detsamma gäller ocksÃ¥ för katalogjämförelse och sammanfogning." diff --git a/kdiff3plugin/po/tr.po b/kdiff3plugin/po/tr.po new file mode 100644 index 0000000..a02241a --- /dev/null +++ b/kdiff3plugin/po/tr.po @@ -0,0 +1,75 @@ +# translation of kdiff3_plugin.po to Türkçe +# +# Engin ÇaÄŸatay , 2007. +msgid "" +msgstr "" +"Project-Id-Version: kdiff3_plugin\n" +"POT-Creation-Date: 2006-11-19 08:46+0100\n" +"PO-Revision-Date: 2007-01-21 21:58+0200\n" +"Last-Translator: Engin ÇaÄŸatay \n" +"Language-Team: Türkçe \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: KBabel 1.11.4\n" + +#: kdiff3plugin.cpp:97 +msgid "KDiff3" +msgstr "KDiff3" + +#: kdiff3plugin.cpp:104 +#, c-format +msgid "Compare with %1" +msgstr "%1 ile karşılaÅŸtır" + +#: kdiff3plugin.cpp:109 +#, c-format +msgid "Merge with %1" +msgstr "%1 ile birleÅŸtir" + +#: kdiff3plugin.cpp:114 +msgid "Save '%1' for later" +msgstr "" + +#: kdiff3plugin.cpp:119 +msgid "3-way merge with base" +msgstr "Temel ile 3-yollu birleÅŸtirme" + +#: kdiff3plugin.cpp:125 +msgid "Compare with ..." +msgstr "KarşılaÅŸtır..." + +#: kdiff3plugin.cpp:137 +msgid "Compare" +msgstr "KarşılaÅŸtır" + +#: kdiff3plugin.cpp:142 +msgid "3 way comparison" +msgstr "3 yollu karşılaÅŸtırma" + +#: kdiff3plugin.cpp:145 +msgid "About KDiff3 menu plugin ..." +msgstr "KDiff3 menü eklentisi hakkında ..." + +#: kdiff3plugin.cpp:240 +msgid "" +"KDiff3 Menu Plugin: Copyright (C) 2006 Joachim Eibl\n" +"KDiff3 homepage: http://kdiff3.sourceforge.net\n" +"\n" +msgstr "" +"KDiff3 Menü Eklentisi: Copyright (C) 2006 Joachim Eibl\n" +"KDiff3 ana sayfası: http://kdiff3.sourceforge.net\n" +"\n" + +#: kdiff3plugin.cpp:242 +msgid "" +"Using the contextmenu extension:\n" +"For simple comparison of two selected 2 files choose \"Compare\".\n" +"If the other file is somewhere else \"Save\" the first file for later. It will " +"appear in the \"Compare With ...\" submenu. Then use \"Compare With\" on second " +"file.\n" +"For a 3-way merge first \"Save\" the base file, then the branch to merge and " +"choose \"3-way merge with base\" on the other branch which will be used as " +"destination.\n" +"Same also applies to directory comparison and merge." +msgstr "" diff --git a/po/Makefile.am b/po/Makefile.am new file mode 100644 index 0000000..0fa209c --- /dev/null +++ b/po/Makefile.am @@ -0,0 +1 @@ +POFILES = AUTO diff --git a/po/README b/po/README new file mode 100644 index 0000000..ee133bf --- /dev/null +++ b/po/README @@ -0,0 +1,133 @@ +README for KDiff3-Internationalisation (i18n) +============================================= +Author: Joachim Eibl 2004 + +This text is for you, if you might want to help translating KDiff3 or just want +to learn how this i18n-thing works. + +grep "Language-Team" *.po + +az Azerbaijani +ca LANGUAGE +da Danish +de Deutsch +en_GB British English +es espaniol +et Estonian +fr French +hu Hungarian +it Italian +nl Nederlands +pl Polish +pt_BR Brazilian Portuguese +pt Portuguese +ro Romanian +ru Russian +sr Serbian +sv Svenska +ta +tr Türkçe +zh_CN zh_CN + + +Thanks to all translators! + + +The program was written with English as main language. But to allow automatic +translation of messages, every translatable text in the program was written as +i18n("translatable"). + +i18n() is a translator-function. If a translation table exists, at runtime the +function looks for the given string in that table and returns the translation. + +The translation-table is created in 3 steps: +1. First a template-translation table kdiff3.pot should be created: Usually via + xgettext --keyword=i18n --keyword=I18N_NOOP -C -o ../po/kdiff3.pot *.cpp *.h + + It contains all translatable strings of the program, but no translations. + (xgettext is usually part of package gettext-devel) + +2. Translators create a translation for a specific language. Because we don't want + to modify the template now, we'll create a copy for each language. + e.g.: cp kdiff3.pot de.po + Using KBabel we can comfortably edit the translated strings. + e.g.: kbabel de.po + +3. The last step is to create a fast lookup-table (*.gmo) from the po-file via + msgfmt, but this happens automatically during the build process. + (If a new po-file was added: make -f Makefile.cvs; configure; make) + +Before starting to translate make sure nobody else is already doing it. It would +be a pity, if your precious time is wasted. Look at http://i18n.kde.org/, send a +message to the translation team coordinator for your language, and tell them that +you want to translate KDiff3. He'll inform you if you should proceed. Also read +the other docs on that site. + +============ + +The following is for my own memory and for those who really want to learn dirty tricks and details: + +The KDE-i18n team stores their results in SVN. But I would like to have an independent +copy of all translations in the po-directory of the source package. Actually it's just +copying and renaming, but simplified with these commands: + + +First fetch all available translations from the SVN-repository (access via websvn and wget) + wget http://websvn.kde.org/*checkout*/trunk/l10n/subdirs + for i in `cat subdirs`; do wget http://websvn.kde.org/*checkout*/trunk/l10n/$i/messages/extragear-utils/kdiff3.po -O $i.po; done + + +This was the explanation for translations within KDE. +But KDiff3 can also be compiled and run without KDE: + +Since Qt was used for KDiff3, the first part is quite the same: Only the fast lookup-table +(*.qm-files) must be created with $QTDIR/bin/msg2qm (instead of msgfmt). ($QTDIR/tools/msg2qm) + +Still one detail isn't right: Some strings are not translated, because under KDE their +translation is within KDE-libs or within Qt. But the translations are available: + +For Qt-strings in $QTDIR/translations (already as .qm-files) + +For KDE-libs in the SVN-repository, where we can reuse the previous trick to get +all kdelibs*.po-files: + + for i in `cat subdirs`; do wget http://websvn.kde.org/*checkout*/trunk/l10n/$i/messages/kdelibs/kdelibs.po -O kdelibs_$i.po; done + +Finally the program must only read the correct translation tables: + + QTranslator kdiff3Translator( 0 ); + kdiff3Translator.load( QString("kdiff3_")+QTextCodec::locale(), translationDir ); + app.installTranslator( &kdiff3Translator ); + + QTranslator qtTranslator( 0 ); + qtTranslator.load( QString("qt_")+QTextCodec::locale(), translationDir ); + app.installTranslator( &qtTranslator ); + + QTranslator kdelibsTranslator( 0 ); + kdelibsTranslator.load( QString("kdelibs_")+QTextCodec::locale(), translationDir ); + app.installTranslator( &kdelibsTranslator ); + +This should do the job, if the translation-tables can be found. +The difficult part is: Where to search for the files, because this depends on +where the program was installed. (I didn't solve this puzzle yet.) + +Because it's too much effort to copy all kdelibs*.po-files along: Here is a little info +about how to extract only the needed strings and to create the qm-files. + +1. Only src/kreplacements/kreplacements.cpp contains strings, that were not covered by + the normal translations. Hence a special pot-file is needed. + xgettext --keyword=i18n --keyword=I18N_NOOP -C ../src/kreplacements/kreplacements.cpp -o kreplacements.pot + (xgettext is usually part of package gettext-devel) + +2. Take only needed strings and translations from kdelibs*.po: + msgmerge --no-fuzzy-matching kdelibs_de.po kreplacements.pot >kreplacements_de.po + +3. Concatenate the normal de.po and kreplacements_de.po: + msgcat --use-first de.po kreplacements_de.po >kdiff3_de.po + +4. Finally create the fast lookup table: + $QTDIR/bin/msg2qm kdiff3_de.po kdiff3_de.qm + +5. The intermediate files can then be deleted. + +The script createqm does steps 2-5 for languages where a kdiff3.po-translation exists. diff --git a/po/ar.po b/po/ar.po new file mode 100644 index 0000000..356f593 --- /dev/null +++ b/po/ar.po @@ -0,0 +1,2318 @@ +# translation of kdiff3.po to Arabic +# +# محمد سعد Mohamed SAAD , 2006. +msgid "" +msgstr "" +"Project-Id-Version: kdiff3\n" +"POT-Creation-Date: 2006-11-05 08:45+0100\n" +"PO-Revision-Date: 2006-12-03 19:06+0100\n" +"Last-Translator: محمد سعد Mohamed SAAD \n" +"Language-Team: Arabic \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: KBabel 1.11.4\n" + +#: _translatorinfo.cpp:1 +msgid "" +"_: NAME OF TRANSLATORS\n" +"Your names" +msgstr "Mohamed SAAD محمد سعد" + +#: _translatorinfo.cpp:3 +msgid "" +"_: EMAIL OF TRANSLATORS\n" +"Your emails" +msgstr "metehyi@free.fr" + +#: diff.cpp:246 +msgid "Writing clipboard data to temp file failed." +msgstr "Ùشل كتابة بيانات الحاÙظة إلى المل٠المؤقت." + +#: diff.cpp:250 +msgid "From Clipboard" +msgstr "من الحاÙظة" + +#: diff.cpp:491 +msgid "" +"Preprocessing possibly failed. Check this command:\n" +"\n" +" %1\n" +"\n" +"The preprocessing command will be disabled now." +msgstr "" +"إحتمال Ùشل الإجراء التمهيدي. Ø¥Ùحص هذا الأمر:\n" +"\n" +" %1\n" +"\n" +"سيتم تعطيل الإجراء التمهيدي الآن." + +#: diff.cpp:526 +msgid "" +"The line-matching-preprocessing possibly failed. Check this command:\n" +"\n" +" %1\n" +"\n" +"The line-matching-preprocessing command will be disabled now." +msgstr "" + +#: diff.cpp:1631 diff.cpp:1645 +msgid "" +"Data loss error:\n" +"If it is reproducable please contact the author.\n" +msgstr "" + +#: diff.cpp:1633 diff.cpp:1647 +msgid "Severe Internal Error" +msgstr "خطأ داخلي Ùادح" + +#: difftextwindow.cpp:1643 kdiff3.cpp:753 +msgid "Top line" +msgstr "السطر الأعلى" + +#: difftextwindow.cpp:1653 +msgid "End" +msgstr "النهاية" + +#: directorymergewindow.cpp:142 +msgid "Mix of links and normal files." +msgstr "" + +#: directorymergewindow.cpp:149 +msgid "Link: " +msgstr "" + +#: directorymergewindow.cpp:157 +msgid "Size. " +msgstr "القياس: " + +#: directorymergewindow.cpp:170 +msgid "Date & Size: " +msgstr "التاريخ Ùˆ القياس: " + +#: directorymergewindow.cpp:179 directorymergewindow.cpp:185 +msgid "Creating temp copy of %1 failed." +msgstr "Ùشل إنشاء نسخة مؤقتة من %1." + +#: directorymergewindow.cpp:196 directorymergewindow.cpp:204 +msgid "Opening %1 failed." +msgstr "Ùشل Ùتح %1." + +#: directorymergewindow.cpp:208 +msgid "Comparing file..." +msgstr "جاري مقارنة الملÙ..." + +#: directorymergewindow.cpp:218 directorymergewindow.cpp:224 +#, c-format +msgid "Error reading from %1" +msgstr "خطأ عند القراءة من %1" + +#: directorymergewindow.cpp:282 +msgid "Name" +msgstr "الإسم" + +#: directorymergewindow.cpp:286 +msgid "Operation" +msgstr "العملية" + +#: directorymergewindow.cpp:287 +msgid "Status" +msgstr "الحالة" + +#: directorymergewindow.cpp:288 +msgid "Unsolved" +msgstr "" + +#: directorymergewindow.cpp:289 +msgid "Solved" +msgstr "" + +#: directorymergewindow.cpp:290 +msgid "Nonwhite" +msgstr "" + +#: directorymergewindow.cpp:291 +msgid "White" +msgstr "أبيض" + +#: directorymergewindow.cpp:319 +msgid "" +"You are currently doing a directory merge. Are you sure, you want to abort the " +"merge and rescan the directory?" +msgstr "" + +#: directorymergewindow.cpp:320 directorymergewindow.cpp:2868 +msgid "Rescan" +msgstr "إعادة المسح" + +#: directorymergewindow.cpp:320 kdiff3.cpp:603 pdiff.cpp:979 +msgid "Continue Merging" +msgstr "" + +#: directorymergewindow.cpp:462 +msgid "Opening of directories failed:" +msgstr "Ùشل Ùتح المجلّدات:" + +#: directorymergewindow.cpp:465 +msgid "" +"Dir A \"%1\" does not exist or is not a directory.\n" +msgstr "" +"الدليل A \"%1\" غير موجود أو هو ليس دليل.\n" + +#: directorymergewindow.cpp:468 +msgid "" +"Dir B \"%1\" does not exist or is not a directory.\n" +msgstr "" +"الدليل B \"%1\" غير موجود أو هو ليس دليل.\n" + +#: directorymergewindow.cpp:471 +msgid "" +"Dir C \"%1\" does not exist or is not a directory.\n" +msgstr "" +"الدليل C \"%1\" غير موجود أو هو ليس دليل.\n" + +#: directorymergewindow.cpp:473 +msgid "Directory Open Error" +msgstr "خطأ Ùتح الدليل" + +#: directorymergewindow.cpp:481 +msgid "" +"The destination directory must not be the same as A or B when three directories " +"are merged.\n" +"Check again before continuing." +msgstr "" + +#: directorymergewindow.cpp:483 +msgid "Parameter Warning" +msgstr "تحذير بشأن الضوابط" + +#: directorymergewindow.cpp:488 +msgid "Scanning directories..." +msgstr "جاري مسح المجلّدات...." + +#: directorymergewindow.cpp:537 +msgid "Reading Directory A" +msgstr "قراءة الدليل A" + +#: directorymergewindow.cpp:559 +msgid "Reading Directory B" +msgstr "قراءة الدليل B" + +#: directorymergewindow.cpp:581 +msgid "Reading Directory C" +msgstr "قراءة الدليل C" + +#: directorymergewindow.cpp:607 +msgid "Some subdirectories were not readable in" +msgstr "" + +#: directorymergewindow.cpp:612 +msgid "Check the permissions of the subdirectories." +msgstr "Ø¥Ùحص الأذون للمجلّدات الÙرعية." + +#: directorymergewindow.cpp:646 kdiff3.cpp:552 kdiff3.cpp:636 kdiff3.cpp:661 +#: kdiff3.cpp:934 kdiff3.cpp:955 pdiff.cpp:1059 pdiff.cpp:1131 pdiff.cpp:1169 +#: pdiff.cpp:1185 pdiff.cpp:1215 pdiff.cpp:1226 +msgid "Ready." +msgstr "جاهز." + +#: directorymergewindow.cpp:660 +msgid "Directory Comparison Status" +msgstr "حالة مقارنة المجلّدات" + +#: directorymergewindow.cpp:661 +msgid "Number of subdirectories:" +msgstr "عدد المجلّدات الÙرعية:" + +#: directorymergewindow.cpp:662 +msgid "Number of equal files:" +msgstr "عدد الملÙات المتساوية:" + +#: directorymergewindow.cpp:663 +msgid "Number of different files:" +msgstr "عدد الملÙات المختلÙØ©:" + +#: directorymergewindow.cpp:666 +msgid "Number of manual merges:" +msgstr "" + +#: directorymergewindow.cpp:802 +msgid "This affects all merge operations." +msgstr "" + +#: directorymergewindow.cpp:803 +msgid "Changing All Merge Operations" +msgstr "" + +#: directorymergewindow.cpp:803 mergeresultwindow.cpp:287 +msgid "C&ontinue" +msgstr "&تابع" + +#: directorymergewindow.cpp:1169 +msgid "Processing " +msgstr "جاري الإجراء " + +#: directorymergewindow.cpp:1647 directorymergewindow.cpp:1653 +msgid "To do." +msgstr "واجب العمل." + +#: directorymergewindow.cpp:1756 directorymergewindow.cpp:2899 +msgid "Copy A to B" +msgstr "أنسخ A إلى B" + +#: directorymergewindow.cpp:1757 directorymergewindow.cpp:2900 +msgid "Copy B to A" +msgstr "أنسخ B إلى A" + +#: directorymergewindow.cpp:1758 directorymergewindow.cpp:2901 +msgid "Delete A" +msgstr "أمحي A" + +#: directorymergewindow.cpp:1759 directorymergewindow.cpp:2902 +msgid "Delete B" +msgstr "أمحي B" + +#: directorymergewindow.cpp:1760 +msgid "Delete A & B" +msgstr "أمحي A Ùˆ B" + +#: directorymergewindow.cpp:1761 directorymergewindow.cpp:2904 +msgid "Merge to A" +msgstr "" + +#: directorymergewindow.cpp:1762 directorymergewindow.cpp:2905 +msgid "Merge to B" +msgstr "" + +#: directorymergewindow.cpp:1763 +msgid "Merge to A & B" +msgstr "" + +#: directorymergewindow.cpp:1767 directorymergewindow.cpp:2896 +msgid "Delete (if exists)" +msgstr "أمحي ( إذا كان موجود )" + +#: directorymergewindow.cpp:1768 directorymergewindow.cpp:1769 +#: directorymergewindow.cpp:2895 optiondialog.cpp:809 smalldialogs.cpp:102 +msgid "Merge" +msgstr "" + +#: directorymergewindow.cpp:1768 directorymergewindow.cpp:1769 +msgid "Merge (manual)" +msgstr "" + +#: directorymergewindow.cpp:1770 +msgid "Error: Conflicting File Types" +msgstr "" + +#: directorymergewindow.cpp:1771 +msgid "Error: Dates are equal but files are not." +msgstr "" + +#: directorymergewindow.cpp:1795 directorymergewindow.cpp:1824 +#: directorymergewindow.cpp:1849 +msgid "This operation is currently not possible." +msgstr "هذه العملية ليست ممكنة حالياً." + +#: directorymergewindow.cpp:1795 directorymergewindow.cpp:1824 +#: directorymergewindow.cpp:1849 directorymergewindow.cpp:2106 +msgid "Operation Not Possible" +msgstr "العملية غير ممكنة" + +#: directorymergewindow.cpp:1888 +msgid "" +"This should never happen: \n" +"\n" +"mergeResultSaved: m_pMFI=0\n" +"\n" +"If you know how to reproduce this, please contact the program author." +msgstr "" + +#: directorymergewindow.cpp:1888 +msgid "Program Error" +msgstr "خطأ ÙÙŠ البرنامج" + +#: directorymergewindow.cpp:1899 +msgid "" +"An error occurred while copying.\n" +msgstr "" +"حصل خطأ عند النسخ.\n" + +#: directorymergewindow.cpp:1900 directorymergewindow.cpp:2306 +msgid "Merge Error" +msgstr "" + +#: directorymergewindow.cpp:1905 directorymergewindow.cpp:2311 +msgid "Error." +msgstr "خطأ." + +#: directorymergewindow.cpp:1910 directorymergewindow.cpp:2202 +#: directorymergewindow.cpp:2242 +msgid "Done." +msgstr "إنتهيت." + +#: directorymergewindow.cpp:1933 +msgid "Not saved." +msgstr "غير محÙوظ." + +#: directorymergewindow.cpp:1968 +msgid "Unknown merge operation. (This must never happen!)" +msgstr "" + +#: directorymergewindow.cpp:2000 +msgid "Unknown merge operation." +msgstr "" + +#: directorymergewindow.cpp:2015 +msgid "" +"The merge is about to begin.\n" +"\n" +"Choose \"Do it\" if you have read the instructions and know what you are " +"doing.\n" +"Choosing \"Simulate it\" will tell you what would happen.\n" +"\n" +"Be aware that this program still has beta status and there is NO WARRANTY " +"whatsoever! Make backups of your vital data!" +msgstr "" + +#: directorymergewindow.cpp:2020 +msgid "Starting Merge" +msgstr "" + +#: directorymergewindow.cpp:2020 +msgid "Do It" +msgstr "Ø¥Ùعله" + +#: directorymergewindow.cpp:2020 +msgid "Simulate It" +msgstr "" + +#: directorymergewindow.cpp:2046 +msgid "" +"The highlighted item has a different type in the different directories. Select " +"what to do." +msgstr "" + +#: directorymergewindow.cpp:2055 +msgid "" +"The modification dates of the file are equal but the files are not. Select what " +"to do." +msgstr "" + +#: directorymergewindow.cpp:2106 +msgid "" +"This operation is currently not possible because directory merge is currently " +"running." +msgstr "" + +#: directorymergewindow.cpp:2166 +msgid "" +"There was an error in the last step.\n" +"Do you want to continue with the item that caused the error or do you want to " +"skip this item?" +msgstr "" + +#: directorymergewindow.cpp:2168 +msgid "Continue merge after an error" +msgstr "" + +#: directorymergewindow.cpp:2168 +msgid "Continue With Last Item" +msgstr "تابع بلبند الأخير" + +#: directorymergewindow.cpp:2168 +msgid "Skip Item" +msgstr "" + +#: directorymergewindow.cpp:2202 +msgid "Skipped." +msgstr "" + +#: directorymergewindow.cpp:2209 directorymergewindow.cpp:2435 +msgid "In progress..." +msgstr "جاري..." + +#: directorymergewindow.cpp:2257 +msgid "Merge operation complete." +msgstr "" + +#: directorymergewindow.cpp:2257 directorymergewindow.cpp:2260 +msgid "Merge Complete" +msgstr "" + +#: directorymergewindow.cpp:2269 +msgid "" +"Simulated merge complete: Check if you agree with the proposed operations." +msgstr "" + +#: directorymergewindow.cpp:2305 +msgid "" +"An error occurred. Press OK to see detailed information.\n" +msgstr "" +"حصل خطأ. إضغط مواÙÙ‚ لترى المعلومات المÙصلة.\n" + +#: directorymergewindow.cpp:2348 +msgid "Error: While deleting %1: Creating backup failed." +msgstr "" + +#: directorymergewindow.cpp:2355 +msgid "delete directory recursively( %1 )" +msgstr "" + +#: directorymergewindow.cpp:2357 +msgid "delete( %1 )" +msgstr "" + +#: directorymergewindow.cpp:2372 +msgid "Error: delete dir operation failed while trying to read the directory." +msgstr "" + +#: directorymergewindow.cpp:2391 +msgid "Error: rmdir( %1 ) operation failed." +msgstr "" + +#: directorymergewindow.cpp:2401 +msgid "Error: delete operation failed." +msgstr "" + +#: directorymergewindow.cpp:2427 +msgid "manual merge( %1, %2, %3 -> %4)" +msgstr "" + +#: directorymergewindow.cpp:2430 +msgid "" +" Note: After a manual merge the user should continue by pressing F7." +msgstr "" + +#: directorymergewindow.cpp:2453 +msgid "Error: copy( %1 -> %2 ) failed.Deleting existing destination failed." +msgstr "" + +#: directorymergewindow.cpp:2463 +msgid "copyLink( %1 -> %2 )" +msgstr "" + +#: directorymergewindow.cpp:2474 +msgid "Error: copyLink failed: Remote links are not yet supported." +msgstr "" + +#: directorymergewindow.cpp:2480 +msgid "Error: copyLink failed." +msgstr "" + +#: directorymergewindow.cpp:2500 +msgid "copy( %1 -> %2 )" +msgstr "نسخ( %1 -> %2 )" + +#: directorymergewindow.cpp:2526 +msgid "Error during rename( %1 -> %2 ): Cannot delete existing destination." +msgstr "" + +#: directorymergewindow.cpp:2532 +msgid "rename( %1 -> %2 )" +msgstr "إعادة تسمية( %1 -> %2 )" + +#: directorymergewindow.cpp:2541 +msgid "Error: Rename failed." +msgstr "خطأ: Ùشلت إعادة التسمية." + +#: directorymergewindow.cpp:2559 +msgid "Error during makeDir of %1. Cannot delete existing file." +msgstr "" + +#: directorymergewindow.cpp:2575 +msgid "makeDir( %1 )" +msgstr "" + +#: directorymergewindow.cpp:2585 +msgid "Error while creating directory." +msgstr "خطأ عند إنشاء الدليل." + +#: directorymergewindow.cpp:2608 directorymergewindow.cpp:2725 +msgid "Dest" +msgstr "الهدÙ" + +#: directorymergewindow.cpp:2612 directorymergewindow.cpp:2650 +msgid "Dir" +msgstr "الدليل" + +#: directorymergewindow.cpp:2613 +msgid "Type" +msgstr "النوع" + +#: directorymergewindow.cpp:2614 +msgid "Size" +msgstr "الحجم" + +#: directorymergewindow.cpp:2615 +msgid "Attr" +msgstr "" + +#: directorymergewindow.cpp:2616 +msgid "Last Modification" +msgstr "آخر تغيير" + +#: directorymergewindow.cpp:2617 +msgid "Link-Destination" +msgstr "" + +#: directorymergewindow.cpp:2667 +msgid "not available" +msgstr "غير متوÙر" + +#: directorymergewindow.cpp:2687 +msgid "A (Dest): " +msgstr "" + +#: directorymergewindow.cpp:2690 +msgid "A (Base): " +msgstr "" + +#: directorymergewindow.cpp:2696 +msgid "B (Dest): " +msgstr "" + +#: directorymergewindow.cpp:2704 +msgid "C (Dest): " +msgstr "" + +#: directorymergewindow.cpp:2710 +msgid "Dest: " +msgstr "الهدÙ: " + +#: directorymergewindow.cpp:2775 +msgid "Save Directory Merge State As..." +msgstr "" + +#: directorymergewindow.cpp:2862 +msgid "Start/Continue Directory Merge" +msgstr "" + +#: directorymergewindow.cpp:2863 +msgid "Run Operation for Current Item" +msgstr "Ù†Ùّذ العملية للبند الحالي" + +#: directorymergewindow.cpp:2864 +msgid "Compare Selected File" +msgstr "قارن الملÙات المختارة" + +#: directorymergewindow.cpp:2865 +msgid "Merge Current File" +msgstr "" + +#: directorymergewindow.cpp:2866 +msgid "Fold All Subdirs" +msgstr "" + +#: directorymergewindow.cpp:2867 +msgid "Unfold All Subdirs" +msgstr "" + +#: directorymergewindow.cpp:2871 +msgid "Choose A for All Items" +msgstr "" + +#: directorymergewindow.cpp:2872 +msgid "Choose B for All Items" +msgstr "" + +#: directorymergewindow.cpp:2873 +msgid "Choose C for All Items" +msgstr "" + +#: directorymergewindow.cpp:2874 +msgid "Auto-Choose Operation for All Items" +msgstr "عملية إختيار تلقائية لكل البنود" + +#: directorymergewindow.cpp:2875 +msgid "No Operation for All Items" +msgstr "لا عملية لكل البنود" + +#: directorymergewindow.cpp:2880 +msgid "Show Identical Files" +msgstr "أعرض الملÙات المتشابهة" + +#: directorymergewindow.cpp:2881 +msgid "Show Different Files" +msgstr "أعرض الملÙات المختلÙØ©" + +#: directorymergewindow.cpp:2882 +msgid "Show Files only in A" +msgstr "أعرض الملÙات Ùقط ÙÙŠ Ø£" + +#: directorymergewindow.cpp:2883 +msgid "Show Files only in B" +msgstr "أعرض الملÙات Ùقط ÙÙŠ ب" + +#: directorymergewindow.cpp:2884 +msgid "Show Files only in C" +msgstr "أعرض الملÙات Ùقط ÙÙŠ س" + +#: directorymergewindow.cpp:2888 +msgid "Compare Explicitly Selected Files" +msgstr "" + +#: directorymergewindow.cpp:2889 +msgid "Merge Explicitly Selected Files" +msgstr "" + +#: directorymergewindow.cpp:2891 directorymergewindow.cpp:2898 +msgid "Do Nothing" +msgstr "لا تÙعل أي شيئ" + +#: directorymergewindow.cpp:2892 +msgid "A" +msgstr "Ø£" + +#: directorymergewindow.cpp:2893 +msgid "B" +msgstr "ب" + +#: directorymergewindow.cpp:2894 +msgid "C" +msgstr "س" + +#: directorymergewindow.cpp:2903 +msgid "Delete A && B" +msgstr "أمحي Ø£ Ùˆ ب" + +#: directorymergewindow.cpp:2906 +msgid "Merge to A && B" +msgstr "" + +#: fileaccess.cpp:595 +msgid "" +"While trying to make a backup, deleting an older backup failed. \n" +"Filename: " +msgstr "" + +#: fileaccess.cpp:602 +msgid "" +"While trying to make a backup, renaming failed. \n" +"Filenames: " +msgstr "" + +#: fileaccess.cpp:624 +#, c-format +msgid "Getting file status: %1" +msgstr "جاري طلب حالة الملÙ: %1" + +#: fileaccess.cpp:667 +#, c-format +msgid "Reading file: %1" +msgstr "جاري قراءة الملÙ: %1" + +#: fileaccess.cpp:703 +#, c-format +msgid "Writing file: %1" +msgstr "جاري كتابة الملÙ: %1" + +#: fileaccess.cpp:731 +msgid "Out of memory" +msgstr "" + +#: fileaccess.cpp:766 +#, c-format +msgid "Making directory: %1" +msgstr "" + +#: fileaccess.cpp:786 +#, c-format +msgid "Removing directory: %1" +msgstr "" + +#: fileaccess.cpp:801 +#, c-format +msgid "Removing file: %1" +msgstr "" + +#: fileaccess.cpp:817 +msgid "Creating symbolic link: %1 -> %2" +msgstr "" + +#: fileaccess.cpp:843 +msgid "Renaming file: %1 -> %2" +msgstr "إعادة تسمية الملÙ: %1 -> %2" + +#: fileaccess.cpp:879 +msgid "Copying file: %1 -> %2" +msgstr "نسخ الملÙ: %1 -> %2" + +#: fileaccess.cpp:893 +#, c-format +msgid "" +"Error during file copy operation: Opening file for reading failed. Filename: %1" +msgstr "" + +#: fileaccess.cpp:899 +#, c-format +msgid "" +"Error during file copy operation: Opening file for writing failed. Filename: %1" +msgstr "" + +#: fileaccess.cpp:914 +#, c-format +msgid "Error during file copy operation: Reading failed. Filename: %1" +msgstr "" + +#: fileaccess.cpp:923 +#, c-format +msgid "Error during file copy operation: Writing failed. Filename: %1" +msgstr "" + +#: fileaccess.cpp:1219 +msgid "Reading directory: " +msgstr "" + +#: fileaccess.cpp:1348 +#, c-format +msgid "Listing directory: %1" +msgstr "" + +#: kdiff3.cpp:142 +msgid "Current Configuration:" +msgstr "" + +#: kdiff3.cpp:147 +msgid "Config Option Error:" +msgstr "" + +#: kdiff3.cpp:187 +msgid "Option --auto used, but no output file specified." +msgstr "" + +#: kdiff3.cpp:323 +msgid "Option --auto ignored for directory comparison." +msgstr "" + +#: kdiff3.cpp:359 +msgid "Saving failed." +msgstr "" + +#: kdiff3.cpp:386 pdiff.cpp:1041 pdiff.cpp:1112 +msgid "Opening of these files failed:" +msgstr "" + +#: kdiff3.cpp:395 +msgid "File Open Error" +msgstr "" + +#: kdiff3.cpp:418 +msgid "Opens documents for comparison..." +msgstr "" + +#: kdiff3.cpp:423 +msgid "Saves the merge result. All conflicts must be solved!" +msgstr "" + +#: kdiff3.cpp:425 +msgid "Saves the current document as..." +msgstr "" + +#: kdiff3.cpp:427 +msgid "Print the differences" +msgstr "" + +#: kdiff3.cpp:429 +msgid "Quits the application" +msgstr "يخرج من التطبيق" + +#: kdiff3.cpp:431 +msgid "Cuts the selected section and puts it to the clipboard" +msgstr "" + +#: kdiff3.cpp:433 +msgid "Copies the selected section to the clipboard" +msgstr "" + +#: kdiff3.cpp:435 +msgid "Pastes the clipboard contents to actual position" +msgstr "" + +#: kdiff3.cpp:437 +msgid "Select everything in current window" +msgstr "" + +#: kdiff3.cpp:439 +msgid "Search for a string" +msgstr "" + +#: kdiff3.cpp:441 +msgid "Search again for the string" +msgstr "" + +#: kdiff3.cpp:443 +msgid "Enables/disables the toolbar" +msgstr "" + +#: kdiff3.cpp:445 +msgid "Enables/disables the statusbar" +msgstr "" + +#: kdiff3.cpp:449 +msgid "Configure KDiff3..." +msgstr "" + +#: kdiff3.cpp:470 +msgid "Go to Current Delta" +msgstr "" + +#: kdiff3.cpp:471 +msgid "Go to First Delta" +msgstr "" + +#: kdiff3.cpp:472 +msgid "Go to Last Delta" +msgstr "" + +#: kdiff3.cpp:473 +msgid "(Skips white space differences when \"Show White Space\" is disabled.)" +msgstr "" + +#: kdiff3.cpp:474 +msgid "" +"(Does not skip white space differences even when \"Show White Space\" is " +"disabled.)" +msgstr "" + +#: kdiff3.cpp:475 +msgid "Go to Previous Delta" +msgstr "" + +#: kdiff3.cpp:477 +msgid "Go to Next Delta" +msgstr "" + +#: kdiff3.cpp:479 +msgid "Go to Previous Conflict" +msgstr "" + +#: kdiff3.cpp:481 +msgid "Go to Next Conflict" +msgstr "" + +#: kdiff3.cpp:483 +msgid "Go to Previous Unsolved Conflict" +msgstr "" + +#: kdiff3.cpp:485 +msgid "Go to Next Unsolved Conflict" +msgstr "" + +#: kdiff3.cpp:487 +msgid "Select Line(s) From A" +msgstr "" + +#: kdiff3.cpp:488 +msgid "Select Line(s) From B" +msgstr "" + +#: kdiff3.cpp:489 +msgid "Select Line(s) From C" +msgstr "" + +#: kdiff3.cpp:490 +msgid "Automatically Go to Next Unsolved Conflict After Source Selection" +msgstr "" + +#: kdiff3.cpp:492 +msgid "Show Space && Tabulator Characters for Differences" +msgstr "" + +#: kdiff3.cpp:493 +msgid "Show White Space" +msgstr "" + +#: kdiff3.cpp:495 +msgid "Show Line Numbers" +msgstr "" + +#: kdiff3.cpp:496 +msgid "Choose A Everywhere" +msgstr "" + +#: kdiff3.cpp:497 +msgid "Choose B Everywhere" +msgstr "" + +#: kdiff3.cpp:498 +msgid "Choose C Everywhere" +msgstr "" + +#: kdiff3.cpp:499 +msgid "Choose A for All Unsolved Conflicts" +msgstr "" + +#: kdiff3.cpp:500 +msgid "Choose B for All Unsolved Conflicts" +msgstr "" + +#: kdiff3.cpp:501 +msgid "Choose C for All Unsolved Conflicts" +msgstr "" + +#: kdiff3.cpp:502 +msgid "Choose A for All Unsolved Whitespace Conflicts" +msgstr "" + +#: kdiff3.cpp:503 +msgid "Choose B for All Unsolved Whitespace Conflicts" +msgstr "" + +#: kdiff3.cpp:504 +msgid "Choose C for All Unsolved Whitespace Conflicts" +msgstr "" + +#: kdiff3.cpp:505 +msgid "Automatically Solve Simple Conflicts" +msgstr "" + +#: kdiff3.cpp:506 +msgid "Set Deltas to Conflicts" +msgstr "" + +#: kdiff3.cpp:507 +msgid "Run Regular Expression Auto Merge" +msgstr "" + +#: kdiff3.cpp:508 +msgid "Automatically Solve History Conflicts" +msgstr "" + +#: kdiff3.cpp:509 +msgid "Split Diff At Selection" +msgstr "" + +#: kdiff3.cpp:510 +msgid "Join Selected Diffs" +msgstr "" + +#: kdiff3.cpp:512 +msgid "Show Window A" +msgstr "" + +#: kdiff3.cpp:513 +msgid "Show Window B" +msgstr "" + +#: kdiff3.cpp:514 +msgid "Show Window C" +msgstr "" + +#: kdiff3.cpp:515 kdiff3.cpp:526 +msgid "Focus Next Window" +msgstr "" + +#: kdiff3.cpp:517 +msgid "Normal Overview" +msgstr "" + +#: kdiff3.cpp:518 +msgid "A vs. B Overview" +msgstr "" + +#: kdiff3.cpp:519 +msgid "A vs. C Overview" +msgstr "" + +#: kdiff3.cpp:520 +msgid "B vs. C Overview" +msgstr "" + +#: kdiff3.cpp:521 +msgid "Word Wrap Diff Windows" +msgstr "" + +#: kdiff3.cpp:522 +msgid "Add Manual Diff Alignment" +msgstr "" + +#: kdiff3.cpp:523 +msgid "Clear All Manual Diff Alignments" +msgstr "" + +#: kdiff3.cpp:528 +msgid "Focus Prev Window" +msgstr "" + +#: kdiff3.cpp:529 +msgid "Toggle Split Orientation" +msgstr "" + +#: kdiff3.cpp:531 +msgid "Dir && Text Split Screen View" +msgstr "" + +#: kdiff3.cpp:533 +msgid "Toggle Between Dir && Text View" +msgstr "" + +#: kdiff3.cpp:582 pdiff.cpp:1712 +msgid "The merge result hasn't been saved." +msgstr "" + +#: kdiff3.cpp:583 +msgid "Save && Quit" +msgstr "" + +#: kdiff3.cpp:583 +msgid "Quit Without Saving" +msgstr "" + +#: kdiff3.cpp:591 pdiff.cpp:1721 +msgid "Saving the merge result failed." +msgstr "" + +#: kdiff3.cpp:602 pdiff.cpp:978 +msgid "" +"You are currently doing a directory merge. Are you sure, you want to abort?" +msgstr "" + +#: kdiff3.cpp:625 +msgid "Saving file..." +msgstr "" + +#: kdiff3.cpp:642 +msgid "Saving file with a new filename..." +msgstr "" + +#: kdiff3.cpp:732 +msgid "Printing..." +msgstr "" + +#: kdiff3.cpp:738 kdiff3.cpp:900 +msgid "Printing aborted." +msgstr "" + +#: kdiff3.cpp:870 +msgid "Selection" +msgstr "" + +#: kdiff3.cpp:896 +msgid "Printing completed." +msgstr "" + +#: kdiff3.cpp:906 +msgid "Exiting..." +msgstr "" + +#: kdiff3.cpp:918 +msgid "Toggling toolbar..." +msgstr "" + +#: kdiff3.cpp:939 +msgid "Toggle the statusbar..." +msgstr "" + +#: kdiff3_part.cpp:155 kdiff3_part.cpp:224 +msgid "Couldn't find files for comparison." +msgstr "" + +#: kdiff3_part.cpp:291 +msgid "KDiff3Part" +msgstr "" + +#: kdiff3_shell.cpp:78 +msgid "" +"Could not find our part!\n" +"This usually happens due to an installation problem. Please read the " +"README-file in the source package for details." +msgstr "" + +#: main.cpp:35 +msgid "Tool for Comparison and Merge of Files and Directories" +msgstr "" + +#: main.cpp:40 +msgid "Merge the input." +msgstr "" + +#: main.cpp:42 +msgid "Explicit base file. For compatibility with certain tools." +msgstr "" + +#: main.cpp:44 +msgid "Output file. Implies -m. E.g.: -o newfile.txt" +msgstr "" + +#: main.cpp:45 +msgid "Output file, again. (For compatibility with certain tools.)" +msgstr "" + +#: main.cpp:46 +msgid "No GUI if all conflicts are auto-solvable. (Needs -o file)" +msgstr "" + +#: main.cpp:47 +msgid "Don't solve conflicts automatically. (For compatibility...)" +msgstr "" + +#: main.cpp:48 +msgid "Visible name replacement for input file 1 (base)." +msgstr "" + +#: main.cpp:49 +msgid "Visible name replacement for input file 2." +msgstr "" + +#: main.cpp:50 +msgid "Visible name replacement for input file 3." +msgstr "" + +#: main.cpp:52 +msgid "Alternative visible name replacement. Supply this once for every input." +msgstr "" + +#: main.cpp:53 +msgid "" +"Override a config setting. Use once for every setting. E.g.: --cs " +"\"AutoAdvance=1\"" +msgstr "" + +#: main.cpp:54 +msgid "Show list of config settings and current values." +msgstr "" + +#: main.cpp:55 +msgid "Use a different config file." +msgstr "" + +#: main.cpp:59 +msgid "file1 to open (base, if not specified via --base)" +msgstr "" + +#: main.cpp:60 +msgid "file2 to open" +msgstr "" + +#: main.cpp:61 +msgid "file3 to open" +msgstr "" + +#: main.cpp:93 +msgid "Ignored. (User defined.)" +msgstr "" + +#. i18n: file kdiff3_part.rc line 16 +#: main.cpp:173 rc.cpp:9 +#, no-c-format +msgid "KDiff3" +msgstr "" + +#: main.cpp:186 +msgid "+ Many thanks to those who reported bugs and contributed ideas!" +msgstr "" + +#: mergeresultwindow.cpp:136 mergeresultwindow.cpp:939 +#: mergeresultwindow.cpp:953 mergeresultwindow.cpp:965 +#: mergeresultwindow.cpp:977 +msgid "Number of remaining unsolved conflicts: %1 (of which %2 are whitespace)" +msgstr "" + +#: mergeresultwindow.cpp:285 +msgid "" +"The output has been modified.\n" +"If you continue your changes will be lost." +msgstr "" + +#: mergeresultwindow.cpp:797 pdiff.cpp:511 +msgid "All input files are binary equal." +msgstr "" + +#: mergeresultwindow.cpp:799 +msgid "All input files contain the same text." +msgstr "" + +#: mergeresultwindow.cpp:801 +msgid "" +"Files A and B are binary equal.\n" +msgstr "" + +#: mergeresultwindow.cpp:802 +msgid "" +"Files A and B have equal text. \n" +msgstr "" + +#: mergeresultwindow.cpp:803 +msgid "" +"Files A and C are binary equal.\n" +msgstr "" + +#: mergeresultwindow.cpp:804 +msgid "" +"Files A and C have equal text. \n" +msgstr "" + +#: mergeresultwindow.cpp:805 +msgid "" +"Files B and C are binary equal.\n" +msgstr "" + +#: mergeresultwindow.cpp:806 +msgid "" +"Files B and C have equal text. \n" +msgstr "" + +#: mergeresultwindow.cpp:812 +msgid "Total number of conflicts: " +msgstr "" + +#: mergeresultwindow.cpp:813 +msgid "" +"\n" +"Nr of automatically solved conflicts: " +msgstr "" + +#: mergeresultwindow.cpp:814 +msgid "" +"\n" +"Nr of unsolved conflicts: " +msgstr "" + +#: mergeresultwindow.cpp:816 +msgid "Conflicts" +msgstr "" + +#: mergeresultwindow.cpp:1652 +msgid "" +msgstr "" + +#: mergeresultwindow.cpp:1660 +msgid "" +msgstr "" + +#: mergeresultwindow.cpp:1662 mergeresultwindow.cpp:2427 +msgid "" +msgstr "" + +#: mergeresultwindow.cpp:2635 +msgid "" +"Not all conflicts are solved yet.\n" +"File not saved.\n" +msgstr "" + +#: mergeresultwindow.cpp:2637 +msgid "Conflicts Left" +msgstr "" + +#: mergeresultwindow.cpp:2649 +msgid "" +"\n" +"\n" +"Creating backup failed. File not saved." +msgstr "" + +#: mergeresultwindow.cpp:2649 mergeresultwindow.cpp:2689 +msgid "File Save Error" +msgstr "" + +#: mergeresultwindow.cpp:2689 +msgid "Error while writing." +msgstr "" + +#: mergeresultwindow.cpp:3020 +msgid "Output" +msgstr "" + +#: mergeresultwindow.cpp:3032 mergeresultwindow.cpp:3139 +msgid "[Modified]" +msgstr "" + +#: mergeresultwindow.cpp:3039 +msgid "Encoding for saving" +msgstr "" + +#: mergeresultwindow.cpp:3075 mergeresultwindow.cpp:3081 +#: mergeresultwindow.cpp:3087 +msgid "Codec from" +msgstr "" + +#: optiondialog.cpp:362 +msgid "Unicode, 8 bit" +msgstr "" + +#: optiondialog.cpp:363 +msgid "Unicode" +msgstr "" + +#: optiondialog.cpp:364 +msgid "Latin1" +msgstr "" + +#: optiondialog.cpp:383 +msgid "Change this if non-ASCII characters are not displayed correctly." +msgstr "" + +#: optiondialog.cpp:510 +msgid "Editor & Diff Output Font" +msgstr "" + +#: optiondialog.cpp:531 +msgid "Italic font for deltas" +msgstr "" + +#: optiondialog.cpp:534 +msgid "" +"Selects the italic version of the font for differences.\n" +"If the font doesn't support italic characters, then this does nothing." +msgstr "" + +#: optiondialog.cpp:542 +msgid "Color" +msgstr "" + +#: optiondialog.cpp:542 +msgid "Colors Settings" +msgstr "" + +#: optiondialog.cpp:556 +msgid "Editor and Diff Views:" +msgstr "" + +#: optiondialog.cpp:564 +msgid "Foreground color:" +msgstr "" + +#: optiondialog.cpp:570 +msgid "Background color:" +msgstr "" + +#: optiondialog.cpp:578 +msgid "Diff background color:" +msgstr "" + +#: optiondialog.cpp:585 +msgid "Color A:" +msgstr "" + +#: optiondialog.cpp:592 +msgid "Color B:" +msgstr "" + +#: optiondialog.cpp:599 +msgid "Color C:" +msgstr "" + +#: optiondialog.cpp:605 +msgid "Conflict color:" +msgstr "" + +#: optiondialog.cpp:612 +msgid "Current range background color:" +msgstr "" + +#: optiondialog.cpp:619 +msgid "Current range diff background color:" +msgstr "" + +#: optiondialog.cpp:625 +msgid "Color for manually aligned difference ranges:" +msgstr "" + +#: optiondialog.cpp:630 +msgid "Directory Comparison View:" +msgstr "" + +#: optiondialog.cpp:636 +msgid "Newest file color:" +msgstr "" + +#: optiondialog.cpp:639 +msgid "" +"Changing this color will only be effective when starting the next directory " +"comparison." +msgstr "" + +#: optiondialog.cpp:644 +msgid "Oldest file color:" +msgstr "" + +#: optiondialog.cpp:651 +msgid "Middle age file color:" +msgstr "" + +#: optiondialog.cpp:658 +msgid "Color for missing files:" +msgstr "" + +#: optiondialog.cpp:670 +msgid "Editor" +msgstr "" + +#: optiondialog.cpp:670 +msgid "Editor Behavior" +msgstr "" + +#: optiondialog.cpp:680 +msgid "Tab inserts spaces" +msgstr "" + +#: optiondialog.cpp:683 +msgid "" +"On: Pressing tab generates the appropriate number of spaces.\n" +"Off: A Tab-character will be inserted." +msgstr "" + +#: optiondialog.cpp:689 +msgid "Tab size:" +msgstr "" + +#: optiondialog.cpp:694 +msgid "Auto indentation" +msgstr "" + +#: optiondialog.cpp:697 +msgid "" +"On: The indentation of the previous line is used for a new line.\n" +msgstr "" + +#: optiondialog.cpp:701 +msgid "Auto copy selection" +msgstr "" + +#: optiondialog.cpp:704 +msgid "" +"On: Any selection is immediately written to the clipboard.\n" +"Off: You must explicitely copy e.g. via Ctrl-C." +msgstr "" + +#: optiondialog.cpp:709 +msgid "Line end style:" +msgstr "" + +#: optiondialog.cpp:721 +msgid "" +"Sets the line endings for when an edited file is saved.\n" +"DOS/Windows: CR+LF; UNIX: LF; with CR=0D, LF=0A" +msgstr "" + +#: optiondialog.cpp:732 +msgid "Diff" +msgstr "" + +#: optiondialog.cpp:732 +msgid "Diff Settings" +msgstr "" + +#: optiondialog.cpp:743 +msgid "Preserve carriage return" +msgstr "" + +#: optiondialog.cpp:746 +msgid "" +"Show carriage return characters '\\r' if they exist.\n" +"Helps to compare files that were modified under different operating systems." +msgstr "" + +#: optiondialog.cpp:751 +msgid "Ignore numbers" +msgstr "" + +#: optiondialog.cpp:754 +msgid "" +"Ignore number characters during line matching phase. (Similar to Ignore white " +"space.)\n" +"Might help to compare files with numeric data." +msgstr "" + +#: optiondialog.cpp:759 +msgid "Ignore C/C++ comments" +msgstr "" + +#: optiondialog.cpp:761 +msgid "Treat C/C++ comments like white space." +msgstr "" + +#: optiondialog.cpp:765 +msgid "Ignore case" +msgstr "" + +#: optiondialog.cpp:768 +msgid "Treat case differences like white space changes. ('a'<=>'A')" +msgstr "" + +#: optiondialog.cpp:772 +msgid "Preprocessor command:" +msgstr "" + +#: optiondialog.cpp:776 +msgid "User defined pre-processing. (See the docs for details.)" +msgstr "" + +#: optiondialog.cpp:779 +msgid "Line-matching preprocessor command:" +msgstr "" + +#: optiondialog.cpp:783 +msgid "" +"This pre-processor is only used during line matching.\n" +"(See the docs for details.)" +msgstr "" + +#: optiondialog.cpp:786 +msgid "Try hard (slower)" +msgstr "" + +#: optiondialog.cpp:789 +msgid "" +"Enables the --minimal option for the external diff.\n" +"The analysis of big files will be much slower." +msgstr "" + +#: optiondialog.cpp:794 +msgid "Auto advance delay (ms):" +msgstr "" + +#: optiondialog.cpp:799 +msgid "" +"When in Auto-Advance mode the result of the current selection is shown \n" +"for the specified time, before jumping to the next conflict. Range: 0-2000 ms" +msgstr "" + +#: optiondialog.cpp:809 +msgid "Merge Settings" +msgstr "" + +#: optiondialog.cpp:822 +msgid "White space 2-file merge default:" +msgstr "" + +#: optiondialog.cpp:826 optiondialog.cpp:839 +msgid "Manual Choice" +msgstr "" + +#: optiondialog.cpp:830 optiondialog.cpp:844 +msgid "" +"Allow the merge algorithm to automatically select an input for white-space-only " +"changes." +msgstr "" + +#: optiondialog.cpp:835 +msgid "White space 3-file merge default:" +msgstr "" + +#: optiondialog.cpp:849 +msgid "Automatic Merge Regular Expression" +msgstr "" + +#: optiondialog.cpp:858 smalldialogs.cpp:397 +msgid "Auto merge regular expression:" +msgstr "" + +#: optiondialog.cpp:862 +msgid "" +"Regular expression for lines where KDiff3 should automatically choose one " +"source.\n" +"When a line with a conflict matches the regular expression then\n" +"- if available - C, otherwise B will be chosen." +msgstr "" + +#: optiondialog.cpp:868 +msgid "Run regular expression auto merge on merge start" +msgstr "" + +#: optiondialog.cpp:870 +msgid "" +"Run the merge for auto merge regular expressions\n" +"immediately when a merge starts.\n" +msgstr "" + +#: optiondialog.cpp:875 +msgid "Version Control History Merging" +msgstr "" + +#: optiondialog.cpp:884 smalldialogs.cpp:424 +msgid "History start regular expression:" +msgstr "" + +#: optiondialog.cpp:888 +msgid "" +"Regular expression for the start of the version control history entry.\n" +"Usually this line contains the \"$Log$\"-keyword.\n" +"Default value: \".*\\$Log.*\\$.*\"" +msgstr "" + +#: optiondialog.cpp:894 smalldialogs.cpp:453 +msgid "History entry start regular expression:" +msgstr "" + +#: optiondialog.cpp:906 +msgid "" +"A version control history entry consists of several lines.\n" +"Specify the regular expression to detect the first line (without the leading " +"comment).\n" +"Use parentheses to group the keys you want to use for sorting.\n" +"If left empty, then KDiff3 assumes that empty lines separate history entries.\n" +"See the documentation for details." +msgstr "" + +#: optiondialog.cpp:914 +msgid "History merge sorting" +msgstr "" + +#: optiondialog.cpp:916 +msgid "Sort version control history by a key." +msgstr "" + +#: optiondialog.cpp:926 +msgid "History entry start sort key order:" +msgstr "" + +#: optiondialog.cpp:930 +msgid "" +"Each parentheses used in the regular expression for the history start entry\n" +"groups a key that can be used for sorting.\n" +"Specify the list of keys (that are numbered in order of occurrence\n" +"starting with 1) using ',' as separator (e.g. \"4,5,6,1,2,3,7\").\n" +"If left empty, then no sorting will be done.\n" +"See the documentation for details." +msgstr "" + +#: optiondialog.cpp:941 +msgid "Merge version control history on merge start" +msgstr "" + +#: optiondialog.cpp:943 +msgid "Run version control history automerge on merge start." +msgstr "" + +#: optiondialog.cpp:947 +msgid "Test your regular expressions" +msgstr "" + +#: optiondialog.cpp:952 +msgid "Irrelevant merge command:" +msgstr "" + +#: optiondialog.cpp:956 +msgid "" +"If specified this script is run after automerge\n" +"when no other relevant changes were detected.\n" +"Called with the parameters: filename1 filename2 filename3" +msgstr "" + +#: optiondialog.cpp:966 +msgid "Directory Merge" +msgstr "" + +#: optiondialog.cpp:975 +msgid "Recursive directories" +msgstr "" + +#: optiondialog.cpp:977 +msgid "Whether to analyze subdirectories or not." +msgstr "" + +#: optiondialog.cpp:979 +msgid "File pattern(s):" +msgstr "" + +#: optiondialog.cpp:984 +msgid "" +"Pattern(s) of files to be analyzed. \n" +"Wildcards: '*' and '?'\n" +"Several Patterns can be specified by using the separator: ';'" +msgstr "" + +#: optiondialog.cpp:990 +msgid "File-anti-pattern(s):" +msgstr "" + +#: optiondialog.cpp:995 +msgid "" +"Pattern(s) of files to be excluded from analysis. \n" +"Wildcards: '*' and '?'\n" +"Several Patterns can be specified by using the separator: ';'" +msgstr "" + +#: optiondialog.cpp:1001 +msgid "Dir-anti-pattern(s):" +msgstr "" + +#: optiondialog.cpp:1006 +msgid "" +"Pattern(s) of directories to be excluded from analysis. \n" +"Wildcards: '*' and '?'\n" +"Several Patterns can be specified by using the separator: ';'" +msgstr "" + +#: optiondialog.cpp:1012 +msgid "Use .cvsignore" +msgstr "" + +#: optiondialog.cpp:1015 +msgid "" +"Extends the antipattern to anything that would be ignored by CVS.\n" +"Via local \".cvsignore\"-files this can be directory specific." +msgstr "" + +#: optiondialog.cpp:1020 +msgid "Find hidden files and directories" +msgstr "" + +#: optiondialog.cpp:1023 +msgid "Finds files and directories with the hidden attribute." +msgstr "" + +#: optiondialog.cpp:1025 +msgid "Finds files and directories starting with '.'." +msgstr "" + +#: optiondialog.cpp:1029 +msgid "Follow file links" +msgstr "" + +#: optiondialog.cpp:1032 +msgid "" +"On: Compare the file the link points to.\n" +"Off: Compare the links." +msgstr "" + +#: optiondialog.cpp:1037 +msgid "Follow directory links" +msgstr "" + +#: optiondialog.cpp:1040 +msgid "" +"On: Compare the directory the link points to.\n" +"Off: Compare the links." +msgstr "" + +#: optiondialog.cpp:1056 +msgid "Case sensitive filename comparison" +msgstr "" + +#: optiondialog.cpp:1059 +msgid "" +"The directory comparison will compare files or directories when their names " +"match.\n" +"Set this option if the case of the names must match. (Default for Windows is " +"off, otherwise on.)" +msgstr "" + +#: optiondialog.cpp:1063 +msgid "File Comparison Mode" +msgstr "" + +#: optiondialog.cpp:1067 +msgid "Binary comparison" +msgstr "" + +#: optiondialog.cpp:1068 +msgid "Binary comparison of each file. (Default)" +msgstr "" + +#: optiondialog.cpp:1070 +msgid "Full analysis" +msgstr "" + +#: optiondialog.cpp:1071 +msgid "" +"Do a full analysis and show statistics information in extra columns.\n" +"(Slower than a binary comparison, much slower for binary files.)" +msgstr "" + +#: optiondialog.cpp:1074 +msgid "Trust the modification date (unsafe)" +msgstr "" + +#: optiondialog.cpp:1075 +msgid "" +"Assume that files are equal if the modification date and file length are " +"equal.\n" +"Useful for big directories or slow networks." +msgstr "" + +#: optiondialog.cpp:1078 +msgid "Trust the size (unsafe)" +msgstr "" + +#: optiondialog.cpp:1079 +msgid "" +"Assume that files are equal if their file lengths are equal.\n" +"Useful for big directories or slow networks when the date is modified during " +"download." +msgstr "" + +#: optiondialog.cpp:1083 +msgid "Synchronize directories" +msgstr "" + +#: optiondialog.cpp:1086 +msgid "" +"Offers to store files in both directories so that\n" +"both directories are the same afterwards.\n" +"Works only when comparing two directories without specifying a destination." +msgstr "" + +#: optiondialog.cpp:1092 +msgid "White space differences considered equal" +msgstr "" + +#: optiondialog.cpp:1095 +msgid "" +"If files differ only by white space consider them equal.\n" +"This is only active when full analysis is chosen." +msgstr "" + +#: optiondialog.cpp:1101 +msgid "Copy newer instead of merging (unsafe)" +msgstr "" + +#: optiondialog.cpp:1104 +msgid "" +"Don't look inside, just take the newer file.\n" +"(Use this only if you know what you are doing!)\n" +"Only effective when comparing two directories." +msgstr "" + +#: optiondialog.cpp:1109 +msgid "Backup files (.orig)" +msgstr "" + +#: optiondialog.cpp:1112 +msgid "" +"When a file would be saved over an old file, then the old file\n" +"will be renamed with a '.orig'-extension instead of being deleted." +msgstr "" + +#: optiondialog.cpp:1176 +msgid "Regional Settings" +msgstr "" + +#: optiondialog.cpp:1272 +msgid "Language (restart required)" +msgstr "" + +#: optiondialog.cpp:1304 +msgid "" +"Choose the language of the GUI-strings or \"Auto\".\n" +"For a change of language to take place, quit and restart KDiff3." +msgstr "" + +#: optiondialog.cpp:1322 +msgid "Use the same encoding for everything:" +msgstr "" + +#: optiondialog.cpp:1325 +msgid "" +"Enable this allows to change all encodings by changing the first only.\n" +"Disable this if different individual settings are needed." +msgstr "" + +#: optiondialog.cpp:1330 +msgid "Note: Local Encoding is " +msgstr "" + +#: optiondialog.cpp:1334 +msgid "File Encoding for A:" +msgstr "" + +#: optiondialog.cpp:1340 +msgid "" +"If enabled then Unicode (UTF-16 or UTF-8) encoding will be detected.\n" +"If the file encoding is not detected then the selected encoding will be used as " +"fallback.\n" +"(Unicode detection depends on the first bytes of a file - the byte order mark " +"\"BOM\".)" +msgstr "" + +#: optiondialog.cpp:1344 optiondialog.cpp:1353 optiondialog.cpp:1362 +msgid "Auto Detect Unicode" +msgstr "" + +#: optiondialog.cpp:1349 +msgid "File Encoding for B:" +msgstr "" + +#: optiondialog.cpp:1358 +msgid "File Encoding for C:" +msgstr "" + +#: optiondialog.cpp:1367 +msgid "File Encoding for Merge Output and Saving:" +msgstr "" + +#: optiondialog.cpp:1371 +msgid "Auto Select" +msgstr "" + +#: optiondialog.cpp:1374 +msgid "" +"If enabled then the encoding from the input files is used.\n" +"In ambiguous cases a dialog will ask the user to choose the encoding for " +"saving." +msgstr "" + +#: optiondialog.cpp:1378 +msgid "File Encoding for Preprocessor Files:" +msgstr "" + +#: optiondialog.cpp:1389 +msgid "Right To Left Language" +msgstr "" + +#: optiondialog.cpp:1392 +msgid "" +"Some languages are read from right to left.\n" +"This setting will change the viewer and editor accordingly." +msgstr "" + +#: optiondialog.cpp:1402 +msgid "Integration" +msgstr "" + +#: optiondialog.cpp:1402 +msgid "Integration Settings" +msgstr "" + +#: optiondialog.cpp:1412 +msgid "Command line options to ignore:" +msgstr "" + +#: optiondialog.cpp:1417 +msgid "" +"List of command line options that should be ignored when KDiff3 is used by " +"other tools.\n" +"Several values can be specified if separated via ';'\n" +"This will suppress the \"Unknown option\"-error." +msgstr "" + +#: optiondialog.cpp:1480 +msgid "" +"You selected a variable width font.\n" +"\n" +"Because this program doesn't handle variable width fonts\n" +"correctly, you might experience problems while editing.\n" +"\n" +"Do you want to continue or do you want to select another font." +msgstr "" + +#: optiondialog.cpp:1484 +msgid "Incompatible Font" +msgstr "" + +#: optiondialog.cpp:1485 +msgid "Continue at Own Risk" +msgstr "" + +#: optiondialog.cpp:1485 +msgid "Select Another Font" +msgstr "" + +#: optiondialog.cpp:1521 +msgid "This resets all options. Not only those of the current topic." +msgstr "" + +#: pdiff.cpp:258 +msgid "PreprocessorCmd: " +msgstr "" + +#: pdiff.cpp:263 +msgid "" +"The following option(s) you selected might change data:\n" +msgstr "" + +#: pdiff.cpp:264 +msgid "" +"\n" +"Most likely this is not wanted during a merge.\n" +"Do you want to disable these settings or continue with these settings active?" +msgstr "" + +#: pdiff.cpp:266 +msgid "Option Unsafe for Merging" +msgstr "" + +#: pdiff.cpp:267 +msgid "Use These Options During Merge" +msgstr "" + +#: pdiff.cpp:267 +msgid "Disable Unsafe Options" +msgstr "" + +#: pdiff.cpp:297 +msgid "Loading A" +msgstr "" + +#: pdiff.cpp:301 +msgid "Loading B" +msgstr "" + +#: pdiff.cpp:318 pdiff.cpp:344 +msgid "Diff: A <-> B" +msgstr "" + +#: pdiff.cpp:324 pdiff.cpp:366 +msgid "Linediff: A <-> B" +msgstr "" + +#: pdiff.cpp:335 +msgid "Loading C" +msgstr "" + +#: pdiff.cpp:347 +msgid "Diff: B <-> C" +msgstr "" + +#: pdiff.cpp:350 +msgid "Diff: A <-> C" +msgstr "" + +#: pdiff.cpp:369 +msgid "Linediff: B <-> C" +msgstr "" + +#: pdiff.cpp:372 +msgid "Linediff: A <-> C" +msgstr "" + +#: pdiff.cpp:513 +msgid "All input files contain the same text, but are not binary equal." +msgstr "" + +#: pdiff.cpp:515 pdiff.cpp:517 pdiff.cpp:519 +msgid "" +"Files %1 and %2 are binary equal.\n" +msgstr "" + +#: pdiff.cpp:516 pdiff.cpp:518 pdiff.cpp:520 +msgid "" +"Files %1 and %2 have equal text, but are not binary equal. \n" +msgstr "" + +#: pdiff.cpp:530 +msgid "" +"Some inputfiles don't seem to be pure textfiles.\n" +"Note that the KDiff3-merge was not meant for binary data.\n" +"Continue at your own risk." +msgstr "" + +#: pdiff.cpp:979 +msgid "Abort" +msgstr "" + +#: pdiff.cpp:985 pdiff.cpp:1073 +msgid "Opening files..." +msgstr "" + +#: pdiff.cpp:1050 pdiff.cpp:1121 +msgid "File open error" +msgstr "" + +#: pdiff.cpp:1153 +msgid "Cutting selection..." +msgstr "" + +#: pdiff.cpp:1174 +msgid "Copying selection to clipboard..." +msgstr "" + +#: pdiff.cpp:1190 +msgid "Inserting clipboard contents..." +msgstr "" + +#: pdiff.cpp:1713 +msgid "Save && Continue" +msgstr "" + +#: pdiff.cpp:1713 +msgid "Continue Without Saving" +msgstr "" + +#: pdiff.cpp:1920 +msgid "Search complete." +msgstr "" + +#: pdiff.cpp:1920 +msgid "Search Complete" +msgstr "" + +#: pdiff.cpp:2144 +msgid "Nothing is selected in either diff input window." +msgstr "" + +#: pdiff.cpp:2144 +msgid "Error while adding manual diff range" +msgstr "" + +#. i18n: file kdiff3_part.rc line 4 +#: rc.cpp:3 +#, no-c-format +msgid "&KDiff3" +msgstr "" + +#. i18n: file kdiff3_part.rc line 13 +#: rc.cpp:6 +#, no-c-format +msgid "Configure KDiff3" +msgstr "" + +#. i18n: file kdiff3_shell.rc line 7 +#: rc.cpp:15 +#, no-c-format +msgid "&Directory" +msgstr "" + +#. i18n: file kdiff3_shell.rc line 30 +#: rc.cpp:18 +#, no-c-format +msgid "Current Item Merge Operation" +msgstr "" + +#. i18n: file kdiff3_shell.rc line 38 +#: rc.cpp:21 +#, no-c-format +msgid "Current Item Sync Operation" +msgstr "" + +#. i18n: file kdiff3_shell.rc line 50 +#: rc.cpp:24 +#, no-c-format +msgid "&Movement" +msgstr "" + +#. i18n: file kdiff3_shell.rc line 61 +#: rc.cpp:27 +#, no-c-format +msgid "D&iffview" +msgstr "" + +#. i18n: file kdiff3_shell.rc line 73 +#: rc.cpp:30 +#, no-c-format +msgid "&Merge" +msgstr "" + +#. i18n: file kdiff3_shell.rc line 95 +#: rc.cpp:33 +#, no-c-format +msgid "&Window" +msgstr "" + +#: smalldialogs.cpp:53 +msgid "A (Base):" +msgstr "" + +#: smalldialogs.cpp:59 smalldialogs.cpp:75 smalldialogs.cpp:91 +#: smalldialogs.cpp:134 +msgid "File..." +msgstr "" + +#: smalldialogs.cpp:61 smalldialogs.cpp:77 smalldialogs.cpp:93 +#: smalldialogs.cpp:136 +msgid "Dir..." +msgstr "" + +#: smalldialogs.cpp:86 +msgid "C (Optional):" +msgstr "" + +#: smalldialogs.cpp:108 +msgid "Swap/Copy Names ..." +msgstr "" + +#: smalldialogs.cpp:114 smalldialogs.cpp:115 smalldialogs.cpp:116 +msgid "Swap %1<->%2" +msgstr "" + +#: smalldialogs.cpp:117 smalldialogs.cpp:118 smalldialogs.cpp:119 +msgid "Copy %1->Output" +msgstr "" + +#: smalldialogs.cpp:120 smalldialogs.cpp:121 smalldialogs.cpp:122 +msgid "Swap %1<->Output" +msgstr "" + +#: smalldialogs.cpp:129 +msgid "Output (optional):" +msgstr "" + +#: smalldialogs.cpp:158 +msgid "Configure..." +msgstr "" + +#: smalldialogs.cpp:347 +msgid "Search text:" +msgstr "" + +#: smalldialogs.cpp:354 +msgid "Case sensitive" +msgstr "" + +#: smalldialogs.cpp:357 +msgid "Search A" +msgstr "" + +#: smalldialogs.cpp:362 +msgid "Search B" +msgstr "" + +#: smalldialogs.cpp:367 +msgid "Search C" +msgstr "" + +#: smalldialogs.cpp:372 +msgid "Search output" +msgstr "" + +#: smalldialogs.cpp:377 +msgid "&Search" +msgstr "" + +#: smalldialogs.cpp:394 +msgid "Regular Expression Tester" +msgstr "" + +#: smalldialogs.cpp:405 +msgid "Example auto merge line:" +msgstr "" + +#: smalldialogs.cpp:407 +msgid "For auto merge test copy a line as used in your files." +msgstr "" + +#: smalldialogs.cpp:413 smalldialogs.cpp:442 smalldialogs.cpp:479 +msgid "Match result:" +msgstr "" + +#: smalldialogs.cpp:432 +msgid "Example history start line (with leading comment):" +msgstr "" + +#: smalldialogs.cpp:435 +msgid "" +"Copy a history start line as used in your files,\n" +"including the leading comment." +msgstr "" + +#: smalldialogs.cpp:461 +msgid "History sort key order:" +msgstr "" + +#: smalldialogs.cpp:469 +msgid "Example history entry start line (without leading comment):" +msgstr "" + +#: smalldialogs.cpp:471 +msgid "" +"Copy a history entry start line as used in your files,\n" +"but omit the leading comment." +msgstr "" + +#: smalldialogs.cpp:486 +msgid "Sort key result:" +msgstr "" + +#: smalldialogs.cpp:537 smalldialogs.cpp:547 smalldialogs.cpp:568 +msgid "Match success." +msgstr "" + +#: smalldialogs.cpp:541 smalldialogs.cpp:551 smalldialogs.cpp:574 +msgid "Match failed." +msgstr "" + +#: smalldialogs.cpp:559 +msgid "Opening and closing parentheses don't match in regular expression." +msgstr "" diff --git a/po/az.po b/po/az.po new file mode 100644 index 0000000..801db4e --- /dev/null +++ b/po/az.po @@ -0,0 +1,2312 @@ +# translation of kdiff3.po to Azerbaijani +# Copyright (C) 2004 Free Software Foundation, Inc. +# MÉ™tin Æmirov , 2004. +# +msgid "" +msgstr "" +"Project-Id-Version: kdiff3\n" +"POT-Creation-Date: 2006-11-05 08:45+0100\n" +"PO-Revision-Date: 2004-03-15 21:45+0200\n" +"Last-Translator: MÉ™tin Æmirov \n" +"Language-Team: Azerbaijani \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: KBabel 1.0.2\n" + +#: _translatorinfo.cpp:1 +msgid "" +"_: NAME OF TRANSLATORS\n" +"Your names" +msgstr "MÉ™tin Æmirov" + +#: _translatorinfo.cpp:3 +msgid "" +"_: EMAIL OF TRANSLATORS\n" +"Your emails" +msgstr "metin@karegen.com" + +#: diff.cpp:246 +msgid "Writing clipboard data to temp file failed." +msgstr "" + +#: diff.cpp:250 +msgid "From Clipboard" +msgstr "" + +#: diff.cpp:491 +msgid "" +"Preprocessing possibly failed. Check this command:\n" +"\n" +" %1\n" +"\n" +"The preprocessing command will be disabled now." +msgstr "" + +#: diff.cpp:526 +msgid "" +"The line-matching-preprocessing possibly failed. Check this command:\n" +"\n" +" %1\n" +"\n" +"The line-matching-preprocessing command will be disabled now." +msgstr "" + +#: diff.cpp:1631 diff.cpp:1645 +msgid "" +"Data loss error:\n" +"If it is reproducable please contact the author.\n" +msgstr "" + +#: diff.cpp:1633 diff.cpp:1647 +msgid "Severe Internal Error" +msgstr "" + +#: difftextwindow.cpp:1643 kdiff3.cpp:753 +msgid "Top line" +msgstr "" + +#: difftextwindow.cpp:1653 +msgid "End" +msgstr "Son" + +#: directorymergewindow.cpp:142 +msgid "Mix of links and normal files." +msgstr "" + +#: directorymergewindow.cpp:149 +msgid "Link: " +msgstr "" + +#: directorymergewindow.cpp:157 +msgid "Size. " +msgstr "" + +#: directorymergewindow.cpp:170 +msgid "Date & Size: " +msgstr "" + +#: directorymergewindow.cpp:179 directorymergewindow.cpp:185 +msgid "Creating temp copy of %1 failed." +msgstr "" + +#: directorymergewindow.cpp:196 directorymergewindow.cpp:204 +msgid "Opening %1 failed." +msgstr "" + +#: directorymergewindow.cpp:208 +#, fuzzy +msgid "Comparing file..." +msgstr "QuraÅŸdır..." + +#: directorymergewindow.cpp:218 directorymergewindow.cpp:224 +#, c-format +msgid "Error reading from %1" +msgstr "" + +#: directorymergewindow.cpp:282 +msgid "Name" +msgstr "Ad" + +#: directorymergewindow.cpp:286 +msgid "Operation" +msgstr "ÆmÉ™liyyat" + +#: directorymergewindow.cpp:287 +msgid "Status" +msgstr "VÉ™ziyyÉ™t" + +#: directorymergewindow.cpp:288 +msgid "Unsolved" +msgstr "" + +#: directorymergewindow.cpp:289 +msgid "Solved" +msgstr "" + +#: directorymergewindow.cpp:290 +msgid "Nonwhite" +msgstr "" + +#: directorymergewindow.cpp:291 +msgid "White" +msgstr "" + +#: directorymergewindow.cpp:319 +msgid "" +"You are currently doing a directory merge. Are you sure, you want to abort the " +"merge and rescan the directory?" +msgstr "" + +#: directorymergewindow.cpp:320 directorymergewindow.cpp:2868 +msgid "Rescan" +msgstr "" + +#: directorymergewindow.cpp:320 kdiff3.cpp:603 pdiff.cpp:979 +msgid "Continue Merging" +msgstr "" + +#: directorymergewindow.cpp:462 +msgid "Opening of directories failed:" +msgstr "" + +#: directorymergewindow.cpp:465 +msgid "" +"Dir A \"%1\" does not exist or is not a directory.\n" +msgstr "" + +#: directorymergewindow.cpp:468 +msgid "" +"Dir B \"%1\" does not exist or is not a directory.\n" +msgstr "" + +#: directorymergewindow.cpp:471 +msgid "" +"Dir C \"%1\" does not exist or is not a directory.\n" +msgstr "" + +#: directorymergewindow.cpp:473 +msgid "Directory Open Error" +msgstr "" + +#: directorymergewindow.cpp:481 +msgid "" +"The destination directory must not be the same as A or B when three directories " +"are merged.\n" +"Check again before continuing." +msgstr "" + +#: directorymergewindow.cpp:483 +msgid "Parameter Warning" +msgstr "" + +#: directorymergewindow.cpp:488 +msgid "Scanning directories..." +msgstr "" + +#: directorymergewindow.cpp:537 +msgid "Reading Directory A" +msgstr "" + +#: directorymergewindow.cpp:559 +msgid "Reading Directory B" +msgstr "" + +#: directorymergewindow.cpp:581 +msgid "Reading Directory C" +msgstr "" + +#: directorymergewindow.cpp:607 +msgid "Some subdirectories were not readable in" +msgstr "" + +#: directorymergewindow.cpp:612 +msgid "Check the permissions of the subdirectories." +msgstr "" + +#: directorymergewindow.cpp:646 kdiff3.cpp:552 kdiff3.cpp:636 kdiff3.cpp:661 +#: kdiff3.cpp:934 kdiff3.cpp:955 pdiff.cpp:1059 pdiff.cpp:1131 pdiff.cpp:1169 +#: pdiff.cpp:1185 pdiff.cpp:1215 pdiff.cpp:1226 +msgid "Ready." +msgstr "Hazırdır." + +#: directorymergewindow.cpp:660 +msgid "Directory Comparison Status" +msgstr "" + +#: directorymergewindow.cpp:661 +msgid "Number of subdirectories:" +msgstr "" + +#: directorymergewindow.cpp:662 +msgid "Number of equal files:" +msgstr "" + +#: directorymergewindow.cpp:663 +msgid "Number of different files:" +msgstr "" + +#: directorymergewindow.cpp:666 +msgid "Number of manual merges:" +msgstr "" + +#: directorymergewindow.cpp:802 +msgid "This affects all merge operations." +msgstr "" + +#: directorymergewindow.cpp:803 +msgid "Changing All Merge Operations" +msgstr "" + +#: directorymergewindow.cpp:803 mergeresultwindow.cpp:287 +msgid "C&ontinue" +msgstr "" + +#: directorymergewindow.cpp:1169 +msgid "Processing " +msgstr "" + +#: directorymergewindow.cpp:1647 directorymergewindow.cpp:1653 +msgid "To do." +msgstr "" + +#: directorymergewindow.cpp:1756 directorymergewindow.cpp:2899 +msgid "Copy A to B" +msgstr "" + +#: directorymergewindow.cpp:1757 directorymergewindow.cpp:2900 +msgid "Copy B to A" +msgstr "" + +#: directorymergewindow.cpp:1758 directorymergewindow.cpp:2901 +msgid "Delete A" +msgstr "" + +#: directorymergewindow.cpp:1759 directorymergewindow.cpp:2902 +msgid "Delete B" +msgstr "" + +#: directorymergewindow.cpp:1760 +msgid "Delete A & B" +msgstr "" + +#: directorymergewindow.cpp:1761 directorymergewindow.cpp:2904 +msgid "Merge to A" +msgstr "" + +#: directorymergewindow.cpp:1762 directorymergewindow.cpp:2905 +msgid "Merge to B" +msgstr "" + +#: directorymergewindow.cpp:1763 +msgid "Merge to A & B" +msgstr "" + +#: directorymergewindow.cpp:1767 directorymergewindow.cpp:2896 +msgid "Delete (if exists)" +msgstr "" + +#: directorymergewindow.cpp:1768 directorymergewindow.cpp:1769 +#: directorymergewindow.cpp:2895 optiondialog.cpp:809 smalldialogs.cpp:102 +msgid "Merge" +msgstr "" + +#: directorymergewindow.cpp:1768 directorymergewindow.cpp:1769 +msgid "Merge (manual)" +msgstr "" + +#: directorymergewindow.cpp:1770 +msgid "Error: Conflicting File Types" +msgstr "" + +#: directorymergewindow.cpp:1771 +msgid "Error: Dates are equal but files are not." +msgstr "" + +#: directorymergewindow.cpp:1795 directorymergewindow.cpp:1824 +#: directorymergewindow.cpp:1849 +msgid "This operation is currently not possible." +msgstr "" + +#: directorymergewindow.cpp:1795 directorymergewindow.cpp:1824 +#: directorymergewindow.cpp:1849 directorymergewindow.cpp:2106 +msgid "Operation Not Possible" +msgstr "" + +#: directorymergewindow.cpp:1888 +msgid "" +"This should never happen: \n" +"\n" +"mergeResultSaved: m_pMFI=0\n" +"\n" +"If you know how to reproduce this, please contact the program author." +msgstr "" + +#: directorymergewindow.cpp:1888 +msgid "Program Error" +msgstr "" + +#: directorymergewindow.cpp:1899 +msgid "" +"An error occurred while copying.\n" +msgstr "" + +#: directorymergewindow.cpp:1900 directorymergewindow.cpp:2306 +msgid "Merge Error" +msgstr "" + +#: directorymergewindow.cpp:1905 directorymergewindow.cpp:2311 +msgid "Error." +msgstr "XÉ™ta." + +#: directorymergewindow.cpp:1910 directorymergewindow.cpp:2202 +#: directorymergewindow.cpp:2242 +msgid "Done." +msgstr "Qurtardı." + +#: directorymergewindow.cpp:1933 +msgid "Not saved." +msgstr "" + +#: directorymergewindow.cpp:1968 +msgid "Unknown merge operation. (This must never happen!)" +msgstr "" + +#: directorymergewindow.cpp:2000 +msgid "Unknown merge operation." +msgstr "" + +#: directorymergewindow.cpp:2015 +msgid "" +"The merge is about to begin.\n" +"\n" +"Choose \"Do it\" if you have read the instructions and know what you are " +"doing.\n" +"Choosing \"Simulate it\" will tell you what would happen.\n" +"\n" +"Be aware that this program still has beta status and there is NO WARRANTY " +"whatsoever! Make backups of your vital data!" +msgstr "" + +#: directorymergewindow.cpp:2020 +msgid "Starting Merge" +msgstr "" + +#: directorymergewindow.cpp:2020 +msgid "Do It" +msgstr "" + +#: directorymergewindow.cpp:2020 +msgid "Simulate It" +msgstr "" + +#: directorymergewindow.cpp:2046 +msgid "" +"The highlighted item has a different type in the different directories. Select " +"what to do." +msgstr "" + +#: directorymergewindow.cpp:2055 +msgid "" +"The modification dates of the file are equal but the files are not. Select what " +"to do." +msgstr "" + +#: directorymergewindow.cpp:2106 +msgid "" +"This operation is currently not possible because directory merge is currently " +"running." +msgstr "" + +#: directorymergewindow.cpp:2166 +msgid "" +"There was an error in the last step.\n" +"Do you want to continue with the item that caused the error or do you want to " +"skip this item?" +msgstr "" + +#: directorymergewindow.cpp:2168 +msgid "Continue merge after an error" +msgstr "" + +#: directorymergewindow.cpp:2168 +msgid "Continue With Last Item" +msgstr "" + +#: directorymergewindow.cpp:2168 +msgid "Skip Item" +msgstr "" + +#: directorymergewindow.cpp:2202 +msgid "Skipped." +msgstr "" + +#: directorymergewindow.cpp:2209 directorymergewindow.cpp:2435 +msgid "In progress..." +msgstr "" + +#: directorymergewindow.cpp:2257 +msgid "Merge operation complete." +msgstr "" + +#: directorymergewindow.cpp:2257 directorymergewindow.cpp:2260 +msgid "Merge Complete" +msgstr "" + +#: directorymergewindow.cpp:2269 +msgid "" +"Simulated merge complete: Check if you agree with the proposed operations." +msgstr "" + +#: directorymergewindow.cpp:2305 +msgid "" +"An error occurred. Press OK to see detailed information.\n" +msgstr "" + +#: directorymergewindow.cpp:2348 +msgid "Error: While deleting %1: Creating backup failed." +msgstr "" + +#: directorymergewindow.cpp:2355 +msgid "delete directory recursively( %1 )" +msgstr "" + +#: directorymergewindow.cpp:2357 +msgid "delete( %1 )" +msgstr "" + +#: directorymergewindow.cpp:2372 +msgid "Error: delete dir operation failed while trying to read the directory." +msgstr "" + +#: directorymergewindow.cpp:2391 +msgid "Error: rmdir( %1 ) operation failed." +msgstr "" + +#: directorymergewindow.cpp:2401 +msgid "Error: delete operation failed." +msgstr "" + +#: directorymergewindow.cpp:2427 +msgid "manual merge( %1, %2, %3 -> %4)" +msgstr "" + +#: directorymergewindow.cpp:2430 +msgid "" +" Note: After a manual merge the user should continue by pressing F7." +msgstr "" + +#: directorymergewindow.cpp:2453 +msgid "Error: copy( %1 -> %2 ) failed.Deleting existing destination failed." +msgstr "" + +#: directorymergewindow.cpp:2463 +msgid "copyLink( %1 -> %2 )" +msgstr "" + +#: directorymergewindow.cpp:2474 +msgid "Error: copyLink failed: Remote links are not yet supported." +msgstr "" + +#: directorymergewindow.cpp:2480 +msgid "Error: copyLink failed." +msgstr "" + +#: directorymergewindow.cpp:2500 +msgid "copy( %1 -> %2 )" +msgstr "" + +#: directorymergewindow.cpp:2526 +msgid "Error during rename( %1 -> %2 ): Cannot delete existing destination." +msgstr "" + +#: directorymergewindow.cpp:2532 +msgid "rename( %1 -> %2 )" +msgstr "" + +#: directorymergewindow.cpp:2541 +msgid "Error: Rename failed." +msgstr "" + +#: directorymergewindow.cpp:2559 +msgid "Error during makeDir of %1. Cannot delete existing file." +msgstr "" + +#: directorymergewindow.cpp:2575 +msgid "makeDir( %1 )" +msgstr "" + +#: directorymergewindow.cpp:2585 +msgid "Error while creating directory." +msgstr "" + +#: directorymergewindow.cpp:2608 directorymergewindow.cpp:2725 +msgid "Dest" +msgstr "" + +#: directorymergewindow.cpp:2612 directorymergewindow.cpp:2650 +msgid "Dir" +msgstr "" + +#: directorymergewindow.cpp:2613 +msgid "Type" +msgstr "Növ" + +#: directorymergewindow.cpp:2614 +msgid "Size" +msgstr "Böyüklük" + +#: directorymergewindow.cpp:2615 +msgid "Attr" +msgstr "" + +#: directorymergewindow.cpp:2616 +msgid "Last Modification" +msgstr "" + +#: directorymergewindow.cpp:2617 +msgid "Link-Destination" +msgstr "" + +#: directorymergewindow.cpp:2667 +msgid "not available" +msgstr "" + +#: directorymergewindow.cpp:2687 +msgid "A (Dest): " +msgstr "" + +#: directorymergewindow.cpp:2690 +msgid "A (Base): " +msgstr "" + +#: directorymergewindow.cpp:2696 +msgid "B (Dest): " +msgstr "" + +#: directorymergewindow.cpp:2704 +msgid "C (Dest): " +msgstr "" + +#: directorymergewindow.cpp:2710 +msgid "Dest: " +msgstr "" + +#: directorymergewindow.cpp:2775 +msgid "Save Directory Merge State As..." +msgstr "" + +#: directorymergewindow.cpp:2862 +msgid "Start/Continue Directory Merge" +msgstr "" + +#: directorymergewindow.cpp:2863 +msgid "Run Operation for Current Item" +msgstr "" + +#: directorymergewindow.cpp:2864 +msgid "Compare Selected File" +msgstr "" + +#: directorymergewindow.cpp:2865 +msgid "Merge Current File" +msgstr "" + +#: directorymergewindow.cpp:2866 +msgid "Fold All Subdirs" +msgstr "" + +#: directorymergewindow.cpp:2867 +msgid "Unfold All Subdirs" +msgstr "" + +#: directorymergewindow.cpp:2871 +msgid "Choose A for All Items" +msgstr "" + +#: directorymergewindow.cpp:2872 +msgid "Choose B for All Items" +msgstr "" + +#: directorymergewindow.cpp:2873 +msgid "Choose C for All Items" +msgstr "" + +#: directorymergewindow.cpp:2874 +msgid "Auto-Choose Operation for All Items" +msgstr "" + +#: directorymergewindow.cpp:2875 +msgid "No Operation for All Items" +msgstr "" + +#: directorymergewindow.cpp:2880 +msgid "Show Identical Files" +msgstr "" + +#: directorymergewindow.cpp:2881 +msgid "Show Different Files" +msgstr "" + +#: directorymergewindow.cpp:2882 +msgid "Show Files only in A" +msgstr "" + +#: directorymergewindow.cpp:2883 +msgid "Show Files only in B" +msgstr "" + +#: directorymergewindow.cpp:2884 +msgid "Show Files only in C" +msgstr "" + +#: directorymergewindow.cpp:2888 +msgid "Compare Explicitly Selected Files" +msgstr "" + +#: directorymergewindow.cpp:2889 +msgid "Merge Explicitly Selected Files" +msgstr "" + +#: directorymergewindow.cpp:2891 directorymergewindow.cpp:2898 +msgid "Do Nothing" +msgstr "" + +#: directorymergewindow.cpp:2892 +msgid "A" +msgstr "" + +#: directorymergewindow.cpp:2893 +msgid "B" +msgstr "" + +#: directorymergewindow.cpp:2894 +msgid "C" +msgstr "C" + +#: directorymergewindow.cpp:2903 +msgid "Delete A && B" +msgstr "" + +#: directorymergewindow.cpp:2906 +msgid "Merge to A && B" +msgstr "" + +#: fileaccess.cpp:595 +msgid "" +"While trying to make a backup, deleting an older backup failed. \n" +"Filename: " +msgstr "" + +#: fileaccess.cpp:602 +msgid "" +"While trying to make a backup, renaming failed. \n" +"Filenames: " +msgstr "" + +#: fileaccess.cpp:624 +#, c-format +msgid "Getting file status: %1" +msgstr "" + +#: fileaccess.cpp:667 +#, c-format +msgid "Reading file: %1" +msgstr "" + +#: fileaccess.cpp:703 +#, c-format +msgid "Writing file: %1" +msgstr "" + +#: fileaccess.cpp:731 +msgid "Out of memory" +msgstr "YaddaÅŸ çatışmır" + +#: fileaccess.cpp:766 +#, c-format +msgid "Making directory: %1" +msgstr "" + +#: fileaccess.cpp:786 +#, c-format +msgid "Removing directory: %1" +msgstr "" + +#: fileaccess.cpp:801 +#, c-format +msgid "Removing file: %1" +msgstr "" + +#: fileaccess.cpp:817 +msgid "Creating symbolic link: %1 -> %2" +msgstr "" + +#: fileaccess.cpp:843 +msgid "Renaming file: %1 -> %2" +msgstr "" + +#: fileaccess.cpp:879 +msgid "Copying file: %1 -> %2" +msgstr "" + +#: fileaccess.cpp:893 +#, c-format +msgid "" +"Error during file copy operation: Opening file for reading failed. Filename: %1" +msgstr "" + +#: fileaccess.cpp:899 +#, c-format +msgid "" +"Error during file copy operation: Opening file for writing failed. Filename: %1" +msgstr "" + +#: fileaccess.cpp:914 +#, c-format +msgid "Error during file copy operation: Reading failed. Filename: %1" +msgstr "" + +#: fileaccess.cpp:923 +#, c-format +msgid "Error during file copy operation: Writing failed. Filename: %1" +msgstr "" + +#: fileaccess.cpp:1219 +msgid "Reading directory: " +msgstr "" + +#: fileaccess.cpp:1348 +#, c-format +msgid "Listing directory: %1" +msgstr "" + +#: kdiff3.cpp:142 +msgid "Current Configuration:" +msgstr "" + +#: kdiff3.cpp:147 +msgid "Config Option Error:" +msgstr "" + +#: kdiff3.cpp:187 +msgid "Option --auto used, but no output file specified." +msgstr "" + +#: kdiff3.cpp:323 +msgid "Option --auto ignored for directory comparison." +msgstr "" + +#: kdiff3.cpp:359 +msgid "Saving failed." +msgstr "" + +#: kdiff3.cpp:386 pdiff.cpp:1041 pdiff.cpp:1112 +msgid "Opening of these files failed:" +msgstr "" + +#: kdiff3.cpp:395 +msgid "File Open Error" +msgstr "" + +#: kdiff3.cpp:418 +msgid "Opens documents for comparison..." +msgstr "" + +#: kdiff3.cpp:423 +msgid "Saves the merge result. All conflicts must be solved!" +msgstr "" + +#: kdiff3.cpp:425 +msgid "Saves the current document as..." +msgstr "" + +#: kdiff3.cpp:427 +msgid "Print the differences" +msgstr "" + +#: kdiff3.cpp:429 +msgid "Quits the application" +msgstr "" + +#: kdiff3.cpp:431 +msgid "Cuts the selected section and puts it to the clipboard" +msgstr "" + +#: kdiff3.cpp:433 +msgid "Copies the selected section to the clipboard" +msgstr "" + +#: kdiff3.cpp:435 +msgid "Pastes the clipboard contents to actual position" +msgstr "" + +#: kdiff3.cpp:437 +msgid "Select everything in current window" +msgstr "" + +#: kdiff3.cpp:439 +msgid "Search for a string" +msgstr "Qatarı tap" + +#: kdiff3.cpp:441 +msgid "Search again for the string" +msgstr "" + +#: kdiff3.cpp:443 +msgid "Enables/disables the toolbar" +msgstr "" + +#: kdiff3.cpp:445 +msgid "Enables/disables the statusbar" +msgstr "" + +#: kdiff3.cpp:449 +msgid "Configure KDiff3..." +msgstr "" + +#: kdiff3.cpp:470 +msgid "Go to Current Delta" +msgstr "" + +#: kdiff3.cpp:471 +msgid "Go to First Delta" +msgstr "" + +#: kdiff3.cpp:472 +msgid "Go to Last Delta" +msgstr "" + +#: kdiff3.cpp:473 +msgid "(Skips white space differences when \"Show White Space\" is disabled.)" +msgstr "" + +#: kdiff3.cpp:474 +msgid "" +"(Does not skip white space differences even when \"Show White Space\" is " +"disabled.)" +msgstr "" + +#: kdiff3.cpp:475 +msgid "Go to Previous Delta" +msgstr "" + +#: kdiff3.cpp:477 +msgid "Go to Next Delta" +msgstr "" + +#: kdiff3.cpp:479 +msgid "Go to Previous Conflict" +msgstr "" + +#: kdiff3.cpp:481 +msgid "Go to Next Conflict" +msgstr "" + +#: kdiff3.cpp:483 +msgid "Go to Previous Unsolved Conflict" +msgstr "" + +#: kdiff3.cpp:485 +msgid "Go to Next Unsolved Conflict" +msgstr "" + +#: kdiff3.cpp:487 +msgid "Select Line(s) From A" +msgstr "" + +#: kdiff3.cpp:488 +msgid "Select Line(s) From B" +msgstr "" + +#: kdiff3.cpp:489 +msgid "Select Line(s) From C" +msgstr "" + +#: kdiff3.cpp:490 +msgid "Automatically Go to Next Unsolved Conflict After Source Selection" +msgstr "" + +#: kdiff3.cpp:492 +msgid "Show Space && Tabulator Characters for Differences" +msgstr "" + +#: kdiff3.cpp:493 +msgid "Show White Space" +msgstr "" + +#: kdiff3.cpp:495 +msgid "Show Line Numbers" +msgstr "" + +#: kdiff3.cpp:496 +msgid "Choose A Everywhere" +msgstr "" + +#: kdiff3.cpp:497 +msgid "Choose B Everywhere" +msgstr "" + +#: kdiff3.cpp:498 +msgid "Choose C Everywhere" +msgstr "" + +#: kdiff3.cpp:499 +msgid "Choose A for All Unsolved Conflicts" +msgstr "" + +#: kdiff3.cpp:500 +msgid "Choose B for All Unsolved Conflicts" +msgstr "" + +#: kdiff3.cpp:501 +msgid "Choose C for All Unsolved Conflicts" +msgstr "" + +#: kdiff3.cpp:502 +msgid "Choose A for All Unsolved Whitespace Conflicts" +msgstr "" + +#: kdiff3.cpp:503 +msgid "Choose B for All Unsolved Whitespace Conflicts" +msgstr "" + +#: kdiff3.cpp:504 +msgid "Choose C for All Unsolved Whitespace Conflicts" +msgstr "" + +#: kdiff3.cpp:505 +msgid "Automatically Solve Simple Conflicts" +msgstr "" + +#: kdiff3.cpp:506 +msgid "Set Deltas to Conflicts" +msgstr "" + +#: kdiff3.cpp:507 +msgid "Run Regular Expression Auto Merge" +msgstr "" + +#: kdiff3.cpp:508 +msgid "Automatically Solve History Conflicts" +msgstr "" + +#: kdiff3.cpp:509 +msgid "Split Diff At Selection" +msgstr "" + +#: kdiff3.cpp:510 +msgid "Join Selected Diffs" +msgstr "" + +#: kdiff3.cpp:512 +msgid "Show Window A" +msgstr "" + +#: kdiff3.cpp:513 +msgid "Show Window B" +msgstr "" + +#: kdiff3.cpp:514 +msgid "Show Window C" +msgstr "" + +#: kdiff3.cpp:515 kdiff3.cpp:526 +msgid "Focus Next Window" +msgstr "" + +#: kdiff3.cpp:517 +msgid "Normal Overview" +msgstr "" + +#: kdiff3.cpp:518 +msgid "A vs. B Overview" +msgstr "" + +#: kdiff3.cpp:519 +msgid "A vs. C Overview" +msgstr "" + +#: kdiff3.cpp:520 +msgid "B vs. C Overview" +msgstr "" + +#: kdiff3.cpp:521 +msgid "Word Wrap Diff Windows" +msgstr "" + +#: kdiff3.cpp:522 +msgid "Add Manual Diff Alignment" +msgstr "" + +#: kdiff3.cpp:523 +msgid "Clear All Manual Diff Alignments" +msgstr "" + +#: kdiff3.cpp:528 +msgid "Focus Prev Window" +msgstr "" + +#: kdiff3.cpp:529 +msgid "Toggle Split Orientation" +msgstr "" + +#: kdiff3.cpp:531 +msgid "Dir && Text Split Screen View" +msgstr "" + +#: kdiff3.cpp:533 +msgid "Toggle Between Dir && Text View" +msgstr "" + +#: kdiff3.cpp:582 pdiff.cpp:1712 +msgid "The merge result hasn't been saved." +msgstr "" + +#: kdiff3.cpp:583 +msgid "Save && Quit" +msgstr "" + +#: kdiff3.cpp:583 +msgid "Quit Without Saving" +msgstr "" + +#: kdiff3.cpp:591 pdiff.cpp:1721 +msgid "Saving the merge result failed." +msgstr "" + +#: kdiff3.cpp:602 pdiff.cpp:978 +msgid "" +"You are currently doing a directory merge. Are you sure, you want to abort?" +msgstr "" + +#: kdiff3.cpp:625 +msgid "Saving file..." +msgstr "" + +#: kdiff3.cpp:642 +msgid "Saving file with a new filename..." +msgstr "" + +#: kdiff3.cpp:732 +msgid "Printing..." +msgstr "" + +#: kdiff3.cpp:738 kdiff3.cpp:900 +msgid "Printing aborted." +msgstr "" + +#: kdiff3.cpp:870 +msgid "Selection" +msgstr "" + +#: kdiff3.cpp:896 +msgid "Printing completed." +msgstr "" + +#: kdiff3.cpp:906 +msgid "Exiting..." +msgstr "" + +#: kdiff3.cpp:918 +msgid "Toggling toolbar..." +msgstr "" + +#: kdiff3.cpp:939 +msgid "Toggle the statusbar..." +msgstr "" + +#: kdiff3_part.cpp:155 kdiff3_part.cpp:224 +msgid "Couldn't find files for comparison." +msgstr "" + +#: kdiff3_part.cpp:291 +msgid "KDiff3Part" +msgstr "" + +#: kdiff3_shell.cpp:78 +msgid "" +"Could not find our part!\n" +"This usually happens due to an installation problem. Please read the " +"README-file in the source package for details." +msgstr "" + +#: main.cpp:35 +msgid "Tool for Comparison and Merge of Files and Directories" +msgstr "" + +#: main.cpp:40 +msgid "Merge the input." +msgstr "" + +#: main.cpp:42 +msgid "Explicit base file. For compatibility with certain tools." +msgstr "" + +#: main.cpp:44 +msgid "Output file. Implies -m. E.g.: -o newfile.txt" +msgstr "" + +#: main.cpp:45 +msgid "Output file, again. (For compatibility with certain tools.)" +msgstr "" + +#: main.cpp:46 +msgid "No GUI if all conflicts are auto-solvable. (Needs -o file)" +msgstr "" + +#: main.cpp:47 +msgid "Don't solve conflicts automatically. (For compatibility...)" +msgstr "" + +#: main.cpp:48 +msgid "Visible name replacement for input file 1 (base)." +msgstr "" + +#: main.cpp:49 +msgid "Visible name replacement for input file 2." +msgstr "" + +#: main.cpp:50 +msgid "Visible name replacement for input file 3." +msgstr "" + +#: main.cpp:52 +msgid "Alternative visible name replacement. Supply this once for every input." +msgstr "" + +#: main.cpp:53 +msgid "" +"Override a config setting. Use once for every setting. E.g.: --cs " +"\"AutoAdvance=1\"" +msgstr "" + +#: main.cpp:54 +msgid "Show list of config settings and current values." +msgstr "" + +#: main.cpp:55 +msgid "Use a different config file." +msgstr "" + +#: main.cpp:59 +msgid "file1 to open (base, if not specified via --base)" +msgstr "" + +#: main.cpp:60 +msgid "file2 to open" +msgstr "" + +#: main.cpp:61 +msgid "file3 to open" +msgstr "" + +#: main.cpp:93 +msgid "Ignored. (User defined.)" +msgstr "" + +#. i18n: file kdiff3_part.rc line 16 +#: main.cpp:173 rc.cpp:9 +#, no-c-format +msgid "KDiff3" +msgstr "" + +#: main.cpp:186 +msgid "+ Many thanks to those who reported bugs and contributed ideas!" +msgstr "" + +#: mergeresultwindow.cpp:136 mergeresultwindow.cpp:939 +#: mergeresultwindow.cpp:953 mergeresultwindow.cpp:965 +#: mergeresultwindow.cpp:977 +msgid "Number of remaining unsolved conflicts: %1 (of which %2 are whitespace)" +msgstr "" + +#: mergeresultwindow.cpp:285 +msgid "" +"The output has been modified.\n" +"If you continue your changes will be lost." +msgstr "" + +#: mergeresultwindow.cpp:797 pdiff.cpp:511 +msgid "All input files are binary equal." +msgstr "" + +#: mergeresultwindow.cpp:799 +msgid "All input files contain the same text." +msgstr "" + +#: mergeresultwindow.cpp:801 +msgid "" +"Files A and B are binary equal.\n" +msgstr "" + +#: mergeresultwindow.cpp:802 +msgid "" +"Files A and B have equal text. \n" +msgstr "" + +#: mergeresultwindow.cpp:803 +msgid "" +"Files A and C are binary equal.\n" +msgstr "" + +#: mergeresultwindow.cpp:804 +msgid "" +"Files A and C have equal text. \n" +msgstr "" + +#: mergeresultwindow.cpp:805 +msgid "" +"Files B and C are binary equal.\n" +msgstr "" + +#: mergeresultwindow.cpp:806 +msgid "" +"Files B and C have equal text. \n" +msgstr "" + +#: mergeresultwindow.cpp:812 +msgid "Total number of conflicts: " +msgstr "" + +#: mergeresultwindow.cpp:813 +msgid "" +"\n" +"Nr of automatically solved conflicts: " +msgstr "" + +#: mergeresultwindow.cpp:814 +msgid "" +"\n" +"Nr of unsolved conflicts: " +msgstr "" + +#: mergeresultwindow.cpp:816 +msgid "Conflicts" +msgstr "" + +#: mergeresultwindow.cpp:1652 +msgid "" +msgstr "" + +#: mergeresultwindow.cpp:1660 +msgid "" +msgstr "" + +#: mergeresultwindow.cpp:1662 mergeresultwindow.cpp:2427 +msgid "" +msgstr "" + +#: mergeresultwindow.cpp:2635 +msgid "" +"Not all conflicts are solved yet.\n" +"File not saved.\n" +msgstr "" + +#: mergeresultwindow.cpp:2637 +msgid "Conflicts Left" +msgstr "" + +#: mergeresultwindow.cpp:2649 +msgid "" +"\n" +"\n" +"Creating backup failed. File not saved." +msgstr "" + +#: mergeresultwindow.cpp:2649 mergeresultwindow.cpp:2689 +msgid "File Save Error" +msgstr "" + +#: mergeresultwindow.cpp:2689 +msgid "Error while writing." +msgstr "" + +#: mergeresultwindow.cpp:3020 +msgid "Output" +msgstr "" + +#: mergeresultwindow.cpp:3032 mergeresultwindow.cpp:3139 +msgid "[Modified]" +msgstr "" + +#: mergeresultwindow.cpp:3039 +msgid "Encoding for saving" +msgstr "" + +#: mergeresultwindow.cpp:3075 mergeresultwindow.cpp:3081 +#: mergeresultwindow.cpp:3087 +msgid "Codec from" +msgstr "" + +#: optiondialog.cpp:362 +msgid "Unicode, 8 bit" +msgstr "" + +#: optiondialog.cpp:363 +msgid "Unicode" +msgstr "" + +#: optiondialog.cpp:364 +msgid "Latin1" +msgstr "" + +#: optiondialog.cpp:383 +msgid "Change this if non-ASCII characters are not displayed correctly." +msgstr "" + +#: optiondialog.cpp:510 +msgid "Editor & Diff Output Font" +msgstr "" + +#: optiondialog.cpp:531 +msgid "Italic font for deltas" +msgstr "" + +#: optiondialog.cpp:534 +msgid "" +"Selects the italic version of the font for differences.\n" +"If the font doesn't support italic characters, then this does nothing." +msgstr "" + +#: optiondialog.cpp:542 +msgid "Color" +msgstr "RÉ™ng" + +#: optiondialog.cpp:542 +msgid "Colors Settings" +msgstr "" + +#: optiondialog.cpp:556 +msgid "Editor and Diff Views:" +msgstr "" + +#: optiondialog.cpp:564 +msgid "Foreground color:" +msgstr "Ön plan rÉ™ngi:" + +#: optiondialog.cpp:570 +msgid "Background color:" +msgstr "Arxa plan rÉ™ngi:" + +#: optiondialog.cpp:578 +msgid "Diff background color:" +msgstr "" + +#: optiondialog.cpp:585 +msgid "Color A:" +msgstr "" + +#: optiondialog.cpp:592 +msgid "Color B:" +msgstr "" + +#: optiondialog.cpp:599 +msgid "Color C:" +msgstr "" + +#: optiondialog.cpp:605 +msgid "Conflict color:" +msgstr "" + +#: optiondialog.cpp:612 +msgid "Current range background color:" +msgstr "" + +#: optiondialog.cpp:619 +msgid "Current range diff background color:" +msgstr "" + +#: optiondialog.cpp:625 +msgid "Color for manually aligned difference ranges:" +msgstr "" + +#: optiondialog.cpp:630 +msgid "Directory Comparison View:" +msgstr "" + +#: optiondialog.cpp:636 +msgid "Newest file color:" +msgstr "" + +#: optiondialog.cpp:639 +msgid "" +"Changing this color will only be effective when starting the next directory " +"comparison." +msgstr "" + +#: optiondialog.cpp:644 +msgid "Oldest file color:" +msgstr "" + +#: optiondialog.cpp:651 +msgid "Middle age file color:" +msgstr "" + +#: optiondialog.cpp:658 +msgid "Color for missing files:" +msgstr "" + +#: optiondialog.cpp:670 +msgid "Editor" +msgstr "Editor" + +#: optiondialog.cpp:670 +msgid "Editor Behavior" +msgstr "" + +#: optiondialog.cpp:680 +msgid "Tab inserts spaces" +msgstr "" + +#: optiondialog.cpp:683 +msgid "" +"On: Pressing tab generates the appropriate number of spaces.\n" +"Off: A Tab-character will be inserted." +msgstr "" + +#: optiondialog.cpp:689 +msgid "Tab size:" +msgstr "" + +#: optiondialog.cpp:694 +msgid "Auto indentation" +msgstr "" + +#: optiondialog.cpp:697 +msgid "" +"On: The indentation of the previous line is used for a new line.\n" +msgstr "" + +#: optiondialog.cpp:701 +msgid "Auto copy selection" +msgstr "" + +#: optiondialog.cpp:704 +msgid "" +"On: Any selection is immediately written to the clipboard.\n" +"Off: You must explicitely copy e.g. via Ctrl-C." +msgstr "" + +#: optiondialog.cpp:709 +msgid "Line end style:" +msgstr "" + +#: optiondialog.cpp:721 +msgid "" +"Sets the line endings for when an edited file is saved.\n" +"DOS/Windows: CR+LF; UNIX: LF; with CR=0D, LF=0A" +msgstr "" + +#: optiondialog.cpp:732 +#, fuzzy +msgid "Diff" +msgstr "&KDiff3" + +#: optiondialog.cpp:732 +msgid "Diff Settings" +msgstr "" + +#: optiondialog.cpp:743 +msgid "Preserve carriage return" +msgstr "" + +#: optiondialog.cpp:746 +msgid "" +"Show carriage return characters '\\r' if they exist.\n" +"Helps to compare files that were modified under different operating systems." +msgstr "" + +#: optiondialog.cpp:751 +msgid "Ignore numbers" +msgstr "" + +#: optiondialog.cpp:754 +msgid "" +"Ignore number characters during line matching phase. (Similar to Ignore white " +"space.)\n" +"Might help to compare files with numeric data." +msgstr "" + +#: optiondialog.cpp:759 +msgid "Ignore C/C++ comments" +msgstr "" + +#: optiondialog.cpp:761 +msgid "Treat C/C++ comments like white space." +msgstr "" + +#: optiondialog.cpp:765 +msgid "Ignore case" +msgstr "" + +#: optiondialog.cpp:768 +msgid "Treat case differences like white space changes. ('a'<=>'A')" +msgstr "" + +#: optiondialog.cpp:772 +msgid "Preprocessor command:" +msgstr "" + +#: optiondialog.cpp:776 +msgid "User defined pre-processing. (See the docs for details.)" +msgstr "" + +#: optiondialog.cpp:779 +msgid "Line-matching preprocessor command:" +msgstr "" + +#: optiondialog.cpp:783 +msgid "" +"This pre-processor is only used during line matching.\n" +"(See the docs for details.)" +msgstr "" + +#: optiondialog.cpp:786 +msgid "Try hard (slower)" +msgstr "" + +#: optiondialog.cpp:789 +msgid "" +"Enables the --minimal option for the external diff.\n" +"The analysis of big files will be much slower." +msgstr "" + +#: optiondialog.cpp:794 +msgid "Auto advance delay (ms):" +msgstr "" + +#: optiondialog.cpp:799 +msgid "" +"When in Auto-Advance mode the result of the current selection is shown \n" +"for the specified time, before jumping to the next conflict. Range: 0-2000 ms" +msgstr "" + +#: optiondialog.cpp:809 +msgid "Merge Settings" +msgstr "" + +#: optiondialog.cpp:822 +msgid "White space 2-file merge default:" +msgstr "" + +#: optiondialog.cpp:826 optiondialog.cpp:839 +msgid "Manual Choice" +msgstr "" + +#: optiondialog.cpp:830 optiondialog.cpp:844 +msgid "" +"Allow the merge algorithm to automatically select an input for white-space-only " +"changes." +msgstr "" + +#: optiondialog.cpp:835 +msgid "White space 3-file merge default:" +msgstr "" + +#: optiondialog.cpp:849 +msgid "Automatic Merge Regular Expression" +msgstr "" + +#: optiondialog.cpp:858 smalldialogs.cpp:397 +msgid "Auto merge regular expression:" +msgstr "" + +#: optiondialog.cpp:862 +msgid "" +"Regular expression for lines where KDiff3 should automatically choose one " +"source.\n" +"When a line with a conflict matches the regular expression then\n" +"- if available - C, otherwise B will be chosen." +msgstr "" + +#: optiondialog.cpp:868 +msgid "Run regular expression auto merge on merge start" +msgstr "" + +#: optiondialog.cpp:870 +msgid "" +"Run the merge for auto merge regular expressions\n" +"immediately when a merge starts.\n" +msgstr "" + +#: optiondialog.cpp:875 +msgid "Version Control History Merging" +msgstr "" + +#: optiondialog.cpp:884 smalldialogs.cpp:424 +msgid "History start regular expression:" +msgstr "" + +#: optiondialog.cpp:888 +msgid "" +"Regular expression for the start of the version control history entry.\n" +"Usually this line contains the \"$Log$\"-keyword.\n" +"Default value: \".*\\$Log.*\\$.*\"" +msgstr "" + +#: optiondialog.cpp:894 smalldialogs.cpp:453 +msgid "History entry start regular expression:" +msgstr "" + +#: optiondialog.cpp:906 +msgid "" +"A version control history entry consists of several lines.\n" +"Specify the regular expression to detect the first line (without the leading " +"comment).\n" +"Use parentheses to group the keys you want to use for sorting.\n" +"If left empty, then KDiff3 assumes that empty lines separate history entries.\n" +"See the documentation for details." +msgstr "" + +#: optiondialog.cpp:914 +msgid "History merge sorting" +msgstr "" + +#: optiondialog.cpp:916 +msgid "Sort version control history by a key." +msgstr "" + +#: optiondialog.cpp:926 +msgid "History entry start sort key order:" +msgstr "" + +#: optiondialog.cpp:930 +msgid "" +"Each parentheses used in the regular expression for the history start entry\n" +"groups a key that can be used for sorting.\n" +"Specify the list of keys (that are numbered in order of occurrence\n" +"starting with 1) using ',' as separator (e.g. \"4,5,6,1,2,3,7\").\n" +"If left empty, then no sorting will be done.\n" +"See the documentation for details." +msgstr "" + +#: optiondialog.cpp:941 +msgid "Merge version control history on merge start" +msgstr "" + +#: optiondialog.cpp:943 +msgid "Run version control history automerge on merge start." +msgstr "" + +#: optiondialog.cpp:947 +msgid "Test your regular expressions" +msgstr "" + +#: optiondialog.cpp:952 +msgid "Irrelevant merge command:" +msgstr "" + +#: optiondialog.cpp:956 +msgid "" +"If specified this script is run after automerge\n" +"when no other relevant changes were detected.\n" +"Called with the parameters: filename1 filename2 filename3" +msgstr "" + +#: optiondialog.cpp:966 +msgid "Directory Merge" +msgstr "" + +#: optiondialog.cpp:975 +msgid "Recursive directories" +msgstr "" + +#: optiondialog.cpp:977 +msgid "Whether to analyze subdirectories or not." +msgstr "" + +#: optiondialog.cpp:979 +msgid "File pattern(s):" +msgstr "" + +#: optiondialog.cpp:984 +msgid "" +"Pattern(s) of files to be analyzed. \n" +"Wildcards: '*' and '?'\n" +"Several Patterns can be specified by using the separator: ';'" +msgstr "" + +#: optiondialog.cpp:990 +msgid "File-anti-pattern(s):" +msgstr "" + +#: optiondialog.cpp:995 +msgid "" +"Pattern(s) of files to be excluded from analysis. \n" +"Wildcards: '*' and '?'\n" +"Several Patterns can be specified by using the separator: ';'" +msgstr "" + +#: optiondialog.cpp:1001 +msgid "Dir-anti-pattern(s):" +msgstr "" + +#: optiondialog.cpp:1006 +msgid "" +"Pattern(s) of directories to be excluded from analysis. \n" +"Wildcards: '*' and '?'\n" +"Several Patterns can be specified by using the separator: ';'" +msgstr "" + +#: optiondialog.cpp:1012 +msgid "Use .cvsignore" +msgstr "" + +#: optiondialog.cpp:1015 +msgid "" +"Extends the antipattern to anything that would be ignored by CVS.\n" +"Via local \".cvsignore\"-files this can be directory specific." +msgstr "" + +#: optiondialog.cpp:1020 +msgid "Find hidden files and directories" +msgstr "" + +#: optiondialog.cpp:1023 +msgid "Finds files and directories with the hidden attribute." +msgstr "" + +#: optiondialog.cpp:1025 +msgid "Finds files and directories starting with '.'." +msgstr "" + +#: optiondialog.cpp:1029 +msgid "Follow file links" +msgstr "" + +#: optiondialog.cpp:1032 +msgid "" +"On: Compare the file the link points to.\n" +"Off: Compare the links." +msgstr "" + +#: optiondialog.cpp:1037 +msgid "Follow directory links" +msgstr "" + +#: optiondialog.cpp:1040 +msgid "" +"On: Compare the directory the link points to.\n" +"Off: Compare the links." +msgstr "" + +#: optiondialog.cpp:1056 +msgid "Case sensitive filename comparison" +msgstr "" + +#: optiondialog.cpp:1059 +msgid "" +"The directory comparison will compare files or directories when their names " +"match.\n" +"Set this option if the case of the names must match. (Default for Windows is " +"off, otherwise on.)" +msgstr "" + +#: optiondialog.cpp:1063 +msgid "File Comparison Mode" +msgstr "" + +#: optiondialog.cpp:1067 +msgid "Binary comparison" +msgstr "" + +#: optiondialog.cpp:1068 +msgid "Binary comparison of each file. (Default)" +msgstr "" + +#: optiondialog.cpp:1070 +msgid "Full analysis" +msgstr "" + +#: optiondialog.cpp:1071 +msgid "" +"Do a full analysis and show statistics information in extra columns.\n" +"(Slower than a binary comparison, much slower for binary files.)" +msgstr "" + +#: optiondialog.cpp:1074 +msgid "Trust the modification date (unsafe)" +msgstr "" + +#: optiondialog.cpp:1075 +msgid "" +"Assume that files are equal if the modification date and file length are " +"equal.\n" +"Useful for big directories or slow networks." +msgstr "" + +#: optiondialog.cpp:1078 +msgid "Trust the size (unsafe)" +msgstr "" + +#: optiondialog.cpp:1079 +msgid "" +"Assume that files are equal if their file lengths are equal.\n" +"Useful for big directories or slow networks when the date is modified during " +"download." +msgstr "" + +#: optiondialog.cpp:1083 +msgid "Synchronize directories" +msgstr "" + +#: optiondialog.cpp:1086 +msgid "" +"Offers to store files in both directories so that\n" +"both directories are the same afterwards.\n" +"Works only when comparing two directories without specifying a destination." +msgstr "" + +#: optiondialog.cpp:1092 +msgid "White space differences considered equal" +msgstr "" + +#: optiondialog.cpp:1095 +msgid "" +"If files differ only by white space consider them equal.\n" +"This is only active when full analysis is chosen." +msgstr "" + +#: optiondialog.cpp:1101 +msgid "Copy newer instead of merging (unsafe)" +msgstr "" + +#: optiondialog.cpp:1104 +msgid "" +"Don't look inside, just take the newer file.\n" +"(Use this only if you know what you are doing!)\n" +"Only effective when comparing two directories." +msgstr "" + +#: optiondialog.cpp:1109 +msgid "Backup files (.orig)" +msgstr "" + +#: optiondialog.cpp:1112 +msgid "" +"When a file would be saved over an old file, then the old file\n" +"will be renamed with a '.orig'-extension instead of being deleted." +msgstr "" + +#: optiondialog.cpp:1176 +msgid "Regional Settings" +msgstr "" + +#: optiondialog.cpp:1272 +msgid "Language (restart required)" +msgstr "" + +#: optiondialog.cpp:1304 +msgid "" +"Choose the language of the GUI-strings or \"Auto\".\n" +"For a change of language to take place, quit and restart KDiff3." +msgstr "" + +#: optiondialog.cpp:1322 +msgid "Use the same encoding for everything:" +msgstr "" + +#: optiondialog.cpp:1325 +msgid "" +"Enable this allows to change all encodings by changing the first only.\n" +"Disable this if different individual settings are needed." +msgstr "" + +#: optiondialog.cpp:1330 +msgid "Note: Local Encoding is " +msgstr "" + +#: optiondialog.cpp:1334 +msgid "File Encoding for A:" +msgstr "" + +#: optiondialog.cpp:1340 +msgid "" +"If enabled then Unicode (UTF-16 or UTF-8) encoding will be detected.\n" +"If the file encoding is not detected then the selected encoding will be used as " +"fallback.\n" +"(Unicode detection depends on the first bytes of a file - the byte order mark " +"\"BOM\".)" +msgstr "" + +#: optiondialog.cpp:1344 optiondialog.cpp:1353 optiondialog.cpp:1362 +msgid "Auto Detect Unicode" +msgstr "" + +#: optiondialog.cpp:1349 +msgid "File Encoding for B:" +msgstr "" + +#: optiondialog.cpp:1358 +msgid "File Encoding for C:" +msgstr "" + +#: optiondialog.cpp:1367 +msgid "File Encoding for Merge Output and Saving:" +msgstr "" + +#: optiondialog.cpp:1371 +msgid "Auto Select" +msgstr "" + +#: optiondialog.cpp:1374 +msgid "" +"If enabled then the encoding from the input files is used.\n" +"In ambiguous cases a dialog will ask the user to choose the encoding for " +"saving." +msgstr "" + +#: optiondialog.cpp:1378 +msgid "File Encoding for Preprocessor Files:" +msgstr "" + +#: optiondialog.cpp:1389 +msgid "Right To Left Language" +msgstr "" + +#: optiondialog.cpp:1392 +msgid "" +"Some languages are read from right to left.\n" +"This setting will change the viewer and editor accordingly." +msgstr "" + +#: optiondialog.cpp:1402 +#, fuzzy +msgid "Integration" +msgstr "ÆmÉ™liyyat" + +#: optiondialog.cpp:1402 +msgid "Integration Settings" +msgstr "" + +#: optiondialog.cpp:1412 +msgid "Command line options to ignore:" +msgstr "" + +#: optiondialog.cpp:1417 +msgid "" +"List of command line options that should be ignored when KDiff3 is used by " +"other tools.\n" +"Several values can be specified if separated via ';'\n" +"This will suppress the \"Unknown option\"-error." +msgstr "" + +#: optiondialog.cpp:1480 +msgid "" +"You selected a variable width font.\n" +"\n" +"Because this program doesn't handle variable width fonts\n" +"correctly, you might experience problems while editing.\n" +"\n" +"Do you want to continue or do you want to select another font." +msgstr "" + +#: optiondialog.cpp:1484 +msgid "Incompatible Font" +msgstr "" + +#: optiondialog.cpp:1485 +msgid "Continue at Own Risk" +msgstr "" + +#: optiondialog.cpp:1485 +msgid "Select Another Font" +msgstr "" + +#: optiondialog.cpp:1521 +msgid "This resets all options. Not only those of the current topic." +msgstr "" + +#: pdiff.cpp:258 +msgid "PreprocessorCmd: " +msgstr "" + +#: pdiff.cpp:263 +msgid "" +"The following option(s) you selected might change data:\n" +msgstr "" + +#: pdiff.cpp:264 +msgid "" +"\n" +"Most likely this is not wanted during a merge.\n" +"Do you want to disable these settings or continue with these settings active?" +msgstr "" + +#: pdiff.cpp:266 +msgid "Option Unsafe for Merging" +msgstr "" + +#: pdiff.cpp:267 +msgid "Use These Options During Merge" +msgstr "" + +#: pdiff.cpp:267 +msgid "Disable Unsafe Options" +msgstr "" + +#: pdiff.cpp:297 +msgid "Loading A" +msgstr "" + +#: pdiff.cpp:301 +msgid "Loading B" +msgstr "" + +#: pdiff.cpp:318 pdiff.cpp:344 +msgid "Diff: A <-> B" +msgstr "Diff: A <-> B" + +#: pdiff.cpp:324 pdiff.cpp:366 +msgid "Linediff: A <-> B" +msgstr "Linediff: A <-> B" + +#: pdiff.cpp:335 +msgid "Loading C" +msgstr "" + +#: pdiff.cpp:347 +msgid "Diff: B <-> C" +msgstr "Diff: B <-> C" + +#: pdiff.cpp:350 +msgid "Diff: A <-> C" +msgstr "Diff: A <-> C" + +#: pdiff.cpp:369 +msgid "Linediff: B <-> C" +msgstr "Linediff: B <-> C" + +#: pdiff.cpp:372 +msgid "Linediff: A <-> C" +msgstr "Linediff: A <-> C" + +#: pdiff.cpp:513 +msgid "All input files contain the same text, but are not binary equal." +msgstr "" + +#: pdiff.cpp:515 pdiff.cpp:517 pdiff.cpp:519 +msgid "" +"Files %1 and %2 are binary equal.\n" +msgstr "" + +#: pdiff.cpp:516 pdiff.cpp:518 pdiff.cpp:520 +msgid "" +"Files %1 and %2 have equal text, but are not binary equal. \n" +msgstr "" + +#: pdiff.cpp:530 +msgid "" +"Some inputfiles don't seem to be pure textfiles.\n" +"Note that the KDiff3-merge was not meant for binary data.\n" +"Continue at your own risk." +msgstr "" + +#: pdiff.cpp:979 +msgid "Abort" +msgstr "Ləğv Et" + +#: pdiff.cpp:985 pdiff.cpp:1073 +msgid "Opening files..." +msgstr "" + +#: pdiff.cpp:1050 pdiff.cpp:1121 +msgid "File open error" +msgstr "Fayl açma xÉ™tası" + +#: pdiff.cpp:1153 +msgid "Cutting selection..." +msgstr "" + +#: pdiff.cpp:1174 +msgid "Copying selection to clipboard..." +msgstr "" + +#: pdiff.cpp:1190 +msgid "Inserting clipboard contents..." +msgstr "" + +#: pdiff.cpp:1713 +msgid "Save && Continue" +msgstr "" + +#: pdiff.cpp:1713 +msgid "Continue Without Saving" +msgstr "" + +#: pdiff.cpp:1920 +msgid "Search complete." +msgstr "" + +#: pdiff.cpp:1920 +msgid "Search Complete" +msgstr "" + +#: pdiff.cpp:2144 +msgid "Nothing is selected in either diff input window." +msgstr "" + +#: pdiff.cpp:2144 +msgid "Error while adding manual diff range" +msgstr "" + +#. i18n: file kdiff3_part.rc line 4 +#: rc.cpp:3 +#, no-c-format +msgid "&KDiff3" +msgstr "&KDiff3" + +#. i18n: file kdiff3_part.rc line 13 +#: rc.cpp:6 +#, no-c-format +msgid "Configure KDiff3" +msgstr "" + +#. i18n: file kdiff3_shell.rc line 7 +#: rc.cpp:15 +#, no-c-format +msgid "&Directory" +msgstr "&CÉ™rgÉ™" + +#. i18n: file kdiff3_shell.rc line 30 +#: rc.cpp:18 +#, no-c-format +msgid "Current Item Merge Operation" +msgstr "" + +#. i18n: file kdiff3_shell.rc line 38 +#: rc.cpp:21 +#, no-c-format +msgid "Current Item Sync Operation" +msgstr "" + +#. i18n: file kdiff3_shell.rc line 50 +#: rc.cpp:24 +#, no-c-format +msgid "&Movement" +msgstr "" + +#. i18n: file kdiff3_shell.rc line 61 +#: rc.cpp:27 +#, fuzzy, no-c-format +msgid "D&iffview" +msgstr "&KDiff3" + +#. i18n: file kdiff3_shell.rc line 73 +#: rc.cpp:30 +#, no-c-format +msgid "&Merge" +msgstr "" + +#. i18n: file kdiff3_shell.rc line 95 +#: rc.cpp:33 +#, no-c-format +msgid "&Window" +msgstr "&PÉ™ncÉ™rÉ™" + +#: smalldialogs.cpp:53 +msgid "A (Base):" +msgstr "" + +#: smalldialogs.cpp:59 smalldialogs.cpp:75 smalldialogs.cpp:91 +#: smalldialogs.cpp:134 +msgid "File..." +msgstr "" + +#: smalldialogs.cpp:61 smalldialogs.cpp:77 smalldialogs.cpp:93 +#: smalldialogs.cpp:136 +msgid "Dir..." +msgstr "" + +#: smalldialogs.cpp:86 +msgid "C (Optional):" +msgstr "" + +#: smalldialogs.cpp:108 +msgid "Swap/Copy Names ..." +msgstr "" + +#: smalldialogs.cpp:114 smalldialogs.cpp:115 smalldialogs.cpp:116 +msgid "Swap %1<->%2" +msgstr "" + +#: smalldialogs.cpp:117 smalldialogs.cpp:118 smalldialogs.cpp:119 +msgid "Copy %1->Output" +msgstr "" + +#: smalldialogs.cpp:120 smalldialogs.cpp:121 smalldialogs.cpp:122 +msgid "Swap %1<->Output" +msgstr "" + +#: smalldialogs.cpp:129 +msgid "Output (optional):" +msgstr "" + +#: smalldialogs.cpp:158 +msgid "Configure..." +msgstr "QuraÅŸdır..." + +#: smalldialogs.cpp:347 +msgid "Search text:" +msgstr "" + +#: smalldialogs.cpp:354 +msgid "Case sensitive" +msgstr "Böyük-kiçik hÉ™rfÉ™ hÉ™ssas" + +#: smalldialogs.cpp:357 +msgid "Search A" +msgstr "" + +#: smalldialogs.cpp:362 +msgid "Search B" +msgstr "" + +#: smalldialogs.cpp:367 +msgid "Search C" +msgstr "" + +#: smalldialogs.cpp:372 +msgid "Search output" +msgstr "" + +#: smalldialogs.cpp:377 +msgid "&Search" +msgstr "" + +#: smalldialogs.cpp:394 +msgid "Regular Expression Tester" +msgstr "" + +#: smalldialogs.cpp:405 +msgid "Example auto merge line:" +msgstr "" + +#: smalldialogs.cpp:407 +msgid "For auto merge test copy a line as used in your files." +msgstr "" + +#: smalldialogs.cpp:413 smalldialogs.cpp:442 smalldialogs.cpp:479 +msgid "Match result:" +msgstr "" + +#: smalldialogs.cpp:432 +msgid "Example history start line (with leading comment):" +msgstr "" + +#: smalldialogs.cpp:435 +msgid "" +"Copy a history start line as used in your files,\n" +"including the leading comment." +msgstr "" + +#: smalldialogs.cpp:461 +msgid "History sort key order:" +msgstr "" + +#: smalldialogs.cpp:469 +msgid "Example history entry start line (without leading comment):" +msgstr "" + +#: smalldialogs.cpp:471 +msgid "" +"Copy a history entry start line as used in your files,\n" +"but omit the leading comment." +msgstr "" + +#: smalldialogs.cpp:486 +msgid "Sort key result:" +msgstr "" + +#: smalldialogs.cpp:537 smalldialogs.cpp:547 smalldialogs.cpp:568 +msgid "Match success." +msgstr "" + +#: smalldialogs.cpp:541 smalldialogs.cpp:551 smalldialogs.cpp:574 +msgid "Match failed." +msgstr "" + +#: smalldialogs.cpp:559 +msgid "Opening and closing parentheses don't match in regular expression." +msgstr "" diff --git a/po/bg.po b/po/bg.po new file mode 100644 index 0000000..47134e8 --- /dev/null +++ b/po/bg.po @@ -0,0 +1,2547 @@ +# translation of kdiff3.po to Bulgarian +# +# Zlatko Popov , 2006. +msgid "" +msgstr "" +"Project-Id-Version: kdiff3\n" +"POT-Creation-Date: 2006-11-05 08:45+0100\n" +"PO-Revision-Date: 2006-11-16 23:19+0200\n" +"Last-Translator: Zlatko Popov \n" +"Language-Team: Bulgarian \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: KBabel 1.11.4\n" + +#: _translatorinfo.cpp:1 +msgid "" +"_: NAME OF TRANSLATORS\n" +"Your names" +msgstr "КраÑимира Минчева" + +#: _translatorinfo.cpp:3 +msgid "" +"_: EMAIL OF TRANSLATORS\n" +"Your emails" +msgstr "krasimira_m@yahoo.com" + +#: diff.cpp:246 +msgid "Writing clipboard data to temp file failed." +msgstr "" +"ЗапиÑÑŠÑ‚ на данните от ÑиÑÑ‚ÐµÐ¼Ð½Ð¸Ñ Ð±ÑƒÑ„ÐµÑ€ във Ð²Ñ€ÐµÐ¼ÐµÐ½Ð½Ð¸Ñ Ñ„Ð°Ð¹Ð» беше неуÑпешен." + +#: diff.cpp:250 +msgid "From Clipboard" +msgstr "От ÑиÑÑ‚ÐµÐ¼Ð½Ð¸Ñ Ð±ÑƒÑ„ÐµÑ€" + +#: diff.cpp:491 +msgid "" +"Preprocessing possibly failed. Check this command:\n" +"\n" +" %1\n" +"\n" +"The preprocessing command will be disabled now." +msgstr "" +"Възможно е предварителната обработка да е неуÑпешна. Проверете тази команда:\n" +"\n" +" %1\n" +"\n" +"Командата за предварителна обработка ще бъде неактивна." + +#: diff.cpp:526 +msgid "" +"The line-matching-preprocessing possibly failed. Check this command:\n" +"\n" +" %1\n" +"\n" +"The line-matching-preprocessing command will be disabled now." +msgstr "" +"Възможно е предварителната обработка за ÑравнÑване на редове да е неуÑпешна. " +"Проверете тази команда:\n" +"\n" +" %1\n" +"\n" +"Командата за предварителна обработка за ÑравнÑване на редове ще бъде неактивна." + +#: diff.cpp:1631 diff.cpp:1645 +msgid "" +"Data loss error:\n" +"If it is reproducable please contact the author.\n" +msgstr "" +"Грешка от загуба на данни:\n" +"Ðко продължава, молÑ, Ñвържете Ñе Ñ Ð°Ð²Ñ‚Ð¾Ñ€Ð°.\n" + +#: diff.cpp:1633 diff.cpp:1647 +msgid "Severe Internal Error" +msgstr "Сериозна вътрешна грешка" + +#: difftextwindow.cpp:1643 kdiff3.cpp:753 +msgid "Top line" +msgstr "Ðай-горна линиÑ" + +#: difftextwindow.cpp:1653 +msgid "End" +msgstr "Край" + +#: directorymergewindow.cpp:142 +msgid "Mix of links and normal files." +msgstr "ÐšÐ¾Ð¼Ð±Ð¸Ð½Ð°Ñ†Ð¸Ñ Ð¾Ñ‚ препратки и нормални файлове." + +#: directorymergewindow.cpp:149 +msgid "Link: " +msgstr "Препратка: " + +#: directorymergewindow.cpp:157 +msgid "Size. " +msgstr "Размер. " + +#: directorymergewindow.cpp:170 +msgid "Date & Size: " +msgstr "Дата и размер: " + +#: directorymergewindow.cpp:179 directorymergewindow.cpp:185 +msgid "Creating temp copy of %1 failed." +msgstr "Създаването на временно копие на %1 беше неуÑпешно." + +#: directorymergewindow.cpp:196 directorymergewindow.cpp:204 +msgid "Opening %1 failed." +msgstr "ОтварÑнето на %1 беше неуÑпешно." + +#: directorymergewindow.cpp:208 +msgid "Comparing file..." +msgstr "СравнÑване на файл..." + +#: directorymergewindow.cpp:218 directorymergewindow.cpp:224 +#, c-format +msgid "Error reading from %1" +msgstr "Грешка по време на четене от %1" + +#: directorymergewindow.cpp:282 +msgid "Name" +msgstr "Име" + +#: directorymergewindow.cpp:286 +msgid "Operation" +msgstr "ДейÑтвие" + +#: directorymergewindow.cpp:287 +msgid "Status" +msgstr "СтатуÑ" + +#: directorymergewindow.cpp:288 +msgid "Unsolved" +msgstr "Ðерешен" + +#: directorymergewindow.cpp:289 +msgid "Solved" +msgstr "Решен" + +#: directorymergewindow.cpp:290 +msgid "Nonwhite" +msgstr "Запълнено" + +#: directorymergewindow.cpp:291 +msgid "White" +msgstr "Празно" + +#: directorymergewindow.cpp:319 +msgid "" +"You are currently doing a directory merge. Are you sure, you want to abort the " +"merge and rescan the directory?" +msgstr "" +"Ð’ момента извършвате Ñливане на директориÑ. Сигурни ли Ñте, че иÑкате да " +"прекъÑнете Ñливането и да Ñканирате отново директориÑта?" + +#: directorymergewindow.cpp:320 directorymergewindow.cpp:2868 +msgid "Rescan" +msgstr "Ðово Ñканиране" + +#: directorymergewindow.cpp:320 kdiff3.cpp:603 pdiff.cpp:979 +msgid "Continue Merging" +msgstr "Продължение на Ñливането" + +#: directorymergewindow.cpp:462 +msgid "Opening of directories failed:" +msgstr "ОтварÑнето на директориите беше неуÑпешно:" + +#: directorymergewindow.cpp:465 +msgid "" +"Dir A \"%1\" does not exist or is not a directory.\n" +msgstr "" +"Ð”Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ Ð \"%1\" не ÑъщеÑтвува или не е директориÑ.\n" + +#: directorymergewindow.cpp:468 +msgid "" +"Dir B \"%1\" does not exist or is not a directory.\n" +msgstr "" +"Ð”Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ Ð‘ \"%1\" не ÑъщеÑтвува или не е директориÑ.\n" + +#: directorymergewindow.cpp:471 +msgid "" +"Dir C \"%1\" does not exist or is not a directory.\n" +msgstr "" +"Ð”Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ Ð’ \"%1\" не ÑъщеÑтвува или не е директориÑ.\n" + +#: directorymergewindow.cpp:473 +msgid "Directory Open Error" +msgstr "Грешка при отварÑне на директориÑ" + +#: directorymergewindow.cpp:481 +msgid "" +"The destination directory must not be the same as A or B when three directories " +"are merged.\n" +"Check again before continuing." +msgstr "" +"Когато Ñе Ñливат три директории, целевата Ð´Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ Ð½Ðµ Ñ‚Ñ€Ñбва да бъде Ñъщата " +"като Рили Б.\n" +"Проверете отново преди да продължите." + +#: directorymergewindow.cpp:483 +msgid "Parameter Warning" +msgstr "Предупреждение за параметър" + +#: directorymergewindow.cpp:488 +msgid "Scanning directories..." +msgstr "Сканиране на директориите..." + +#: directorymergewindow.cpp:537 +msgid "Reading Directory A" +msgstr "Четене на Ð´Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ Ð" + +#: directorymergewindow.cpp:559 +msgid "Reading Directory B" +msgstr "Четене на Ð´Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ Ð‘" + +#: directorymergewindow.cpp:581 +msgid "Reading Directory C" +msgstr "Четене на Ð´Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ Ð’" + +#: directorymergewindow.cpp:607 +msgid "Some subdirectories were not readable in" +msgstr "ÐÑкои от поддиректориите Ñа нечетими" + +#: directorymergewindow.cpp:612 +msgid "Check the permissions of the subdirectories." +msgstr "Проверете правата на поддиректориите." + +#: directorymergewindow.cpp:646 kdiff3.cpp:552 kdiff3.cpp:636 kdiff3.cpp:661 +#: kdiff3.cpp:934 kdiff3.cpp:955 pdiff.cpp:1059 pdiff.cpp:1131 pdiff.cpp:1169 +#: pdiff.cpp:1185 pdiff.cpp:1215 pdiff.cpp:1226 +msgid "Ready." +msgstr "Ð’ готовноÑÑ‚." + +#: directorymergewindow.cpp:660 +msgid "Directory Comparison Status" +msgstr "Ð¡Ñ‚Ð°Ñ‚ÑƒÑ Ð½Ð° ÑравнÑването на директории" + +#: directorymergewindow.cpp:661 +msgid "Number of subdirectories:" +msgstr "Бройка на поддиректориите:" + +#: directorymergewindow.cpp:662 +msgid "Number of equal files:" +msgstr "Бройка на еднаквите файлове:" + +#: directorymergewindow.cpp:663 +msgid "Number of different files:" +msgstr "Бройка на различните файлове:" + +#: directorymergewindow.cpp:666 +msgid "Number of manual merges:" +msgstr "Бройка на ръчните ÑливаниÑ:" + +#: directorymergewindow.cpp:802 +msgid "This affects all merge operations." +msgstr "Това заÑÑга вÑички операции по Ñливане." + +#: directorymergewindow.cpp:803 +msgid "Changing All Merge Operations" +msgstr "ПромÑна на вÑички операции по Ñливане" + +#: directorymergewindow.cpp:803 mergeresultwindow.cpp:287 +msgid "C&ontinue" +msgstr "&Продължение" + +#: directorymergewindow.cpp:1169 +msgid "Processing " +msgstr "Обработка " + +#: directorymergewindow.cpp:1647 directorymergewindow.cpp:1653 +msgid "To do." +msgstr "Задача." + +#: directorymergewindow.cpp:1756 directorymergewindow.cpp:2899 +msgid "Copy A to B" +msgstr "Копиране на Рв Б" + +#: directorymergewindow.cpp:1757 directorymergewindow.cpp:2900 +msgid "Copy B to A" +msgstr "Копиране на Б в Ð" + +#: directorymergewindow.cpp:1758 directorymergewindow.cpp:2901 +msgid "Delete A" +msgstr "Изтриване на Ð" + +#: directorymergewindow.cpp:1759 directorymergewindow.cpp:2902 +msgid "Delete B" +msgstr "Изтриване на Б" + +#: directorymergewindow.cpp:1760 +msgid "Delete A & B" +msgstr "Изтриване на Ри Б" + +#: directorymergewindow.cpp:1761 directorymergewindow.cpp:2904 +msgid "Merge to A" +msgstr "Сливане Ñ Ð" + +#: directorymergewindow.cpp:1762 directorymergewindow.cpp:2905 +msgid "Merge to B" +msgstr "Сливане Ñ Ð‘" + +#: directorymergewindow.cpp:1763 +msgid "Merge to A & B" +msgstr "Сливане Ñ Ð Ð¸ Б" + +#: directorymergewindow.cpp:1767 directorymergewindow.cpp:2896 +msgid "Delete (if exists)" +msgstr "Изтриване (ако ÑъщеÑтвува)" + +#: directorymergewindow.cpp:1768 directorymergewindow.cpp:1769 +#: directorymergewindow.cpp:2895 optiondialog.cpp:809 smalldialogs.cpp:102 +msgid "Merge" +msgstr "Сливане" + +#: directorymergewindow.cpp:1768 directorymergewindow.cpp:1769 +msgid "Merge (manual)" +msgstr "Сливане (ръчно)" + +#: directorymergewindow.cpp:1770 +msgid "Error: Conflicting File Types" +msgstr "Грешка: Конфликт в типовете на файлове" + +#: directorymergewindow.cpp:1771 +msgid "Error: Dates are equal but files are not." +msgstr "Грешка: Датите Ñа еднакви, но файловете не Ñа." + +#: directorymergewindow.cpp:1795 directorymergewindow.cpp:1824 +#: directorymergewindow.cpp:1849 +msgid "This operation is currently not possible." +msgstr "Това дейÑтвие в момента не е възможно." + +#: directorymergewindow.cpp:1795 directorymergewindow.cpp:1824 +#: directorymergewindow.cpp:1849 directorymergewindow.cpp:2106 +msgid "Operation Not Possible" +msgstr "ДейÑтвието не е възможно" + +#: directorymergewindow.cpp:1888 +msgid "" +"This should never happen: \n" +"\n" +"mergeResultSaved: m_pMFI=0\n" +"\n" +"If you know how to reproduce this, please contact the program author." +msgstr "" +"Това не би Ñ‚Ñ€Ñбвало да Ñе Ñлучва: \n" +"\n" +"mergeResultSaved: m_pMFI=0\n" +"\n" +"Ðко знаете как да го направите отново, молÑ, Ñвържете Ñе Ñ Ð°Ð²Ñ‚Ð¾Ñ€Ð° на " +"програмата." + +#: directorymergewindow.cpp:1888 +msgid "Program Error" +msgstr "Програмна грешка" + +#: directorymergewindow.cpp:1899 +msgid "" +"An error occurred while copying.\n" +msgstr "" +"Възникна грешка по време на копирането.\n" + +#: directorymergewindow.cpp:1900 directorymergewindow.cpp:2306 +msgid "Merge Error" +msgstr "Грешка при Ñливане" + +#: directorymergewindow.cpp:1905 directorymergewindow.cpp:2311 +msgid "Error." +msgstr "Грешка." + +#: directorymergewindow.cpp:1910 directorymergewindow.cpp:2202 +#: directorymergewindow.cpp:2242 +msgid "Done." +msgstr "Изпълнено." + +#: directorymergewindow.cpp:1933 +msgid "Not saved." +msgstr "Ðе е запиÑан." + +#: directorymergewindow.cpp:1968 +msgid "Unknown merge operation. (This must never happen!)" +msgstr "Ðепозната Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ñ Ð·Ð° Ñливане. (Това не Ñ‚Ñ€Ñбва да Ñе Ñлучва никога!)" + +#: directorymergewindow.cpp:2000 +msgid "Unknown merge operation." +msgstr "Ðепозната Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ñ Ð·Ð° Ñливане." + +#: directorymergewindow.cpp:2015 +msgid "" +"The merge is about to begin.\n" +"\n" +"Choose \"Do it\" if you have read the instructions and know what you are " +"doing.\n" +"Choosing \"Simulate it\" will tell you what would happen.\n" +"\n" +"Be aware that this program still has beta status and there is NO WARRANTY " +"whatsoever! Make backups of your vital data!" +msgstr "" +"Сливането ще започне вÑеки момент.\n" +"\n" +"Изберете \"Изпълнение\" ако Ñте прочел инÑтрукциите и знаете какво правите.\n" +"Изберете \"СимулациÑ\" и ще разберете какво би Ñе Ñлучило.\n" +"\n" +"Имайте предвид, че тази програма е вÑе още бета верÑÐ¸Ñ Ð¸ изобщо ÐЯМРГÐРÐÐЦИЯ! " +"Правете резервни ÐºÐ¾Ð¿Ð¸Ñ Ð½Ð° важната информациÑ!" + +#: directorymergewindow.cpp:2020 +msgid "Starting Merge" +msgstr "Стартиране на Ñливането" + +#: directorymergewindow.cpp:2020 +msgid "Do It" +msgstr "Изпълнение" + +#: directorymergewindow.cpp:2020 +msgid "Simulate It" +msgstr "СимулациÑ" + +#: directorymergewindow.cpp:2046 +msgid "" +"The highlighted item has a different type in the different directories. Select " +"what to do." +msgstr "" +"ОÑветениÑÑ‚ елемент има различни типове в различните директории. Изберете какво " +"да Ñе направи." + +#: directorymergewindow.cpp:2055 +msgid "" +"The modification dates of the file are equal but the files are not. Select what " +"to do." +msgstr "" +"Датите на поÑледна промÑна на файловете Ñа еднакви, но файловете не Ñа. " +"Изберете какво да Ñе направи." + +#: directorymergewindow.cpp:2106 +msgid "" +"This operation is currently not possible because directory merge is currently " +"running." +msgstr "" +"Ð’ момента дейÑтвието е невъзможно, тъй като тече Ð¿Ñ€Ð¾Ñ†ÐµÑ Ð½Ð° Ñливане на " +"директории." + +#: directorymergewindow.cpp:2166 +msgid "" +"There was an error in the last step.\n" +"Do you want to continue with the item that caused the error or do you want to " +"skip this item?" +msgstr "" +"Възникнала е грешка в поÑледната Ñтъпка.\n" +"ИÑкате ли да продължите Ñ ÐµÐ»ÐµÐ¼ÐµÐ½Ñ‚Ð°, който е причинил тази грешка или ще го " +"преÑкочите?" + +#: directorymergewindow.cpp:2168 +msgid "Continue merge after an error" +msgstr "Продължаване на Ñливането Ñлед грешката" + +#: directorymergewindow.cpp:2168 +msgid "Continue With Last Item" +msgstr "Продължаване Ñ Ð¿Ð¾ÑÐ»ÐµÐ´Ð½Ð¸Ñ ÐµÐ»ÐµÐ¼ÐµÐ½Ñ‚" + +#: directorymergewindow.cpp:2168 +msgid "Skip Item" +msgstr "ПреÑкачане на елемент" + +#: directorymergewindow.cpp:2202 +msgid "Skipped." +msgstr "ПреÑкочен." + +#: directorymergewindow.cpp:2209 directorymergewindow.cpp:2435 +msgid "In progress..." +msgstr "ИзпълнÑва Ñе..." + +#: directorymergewindow.cpp:2257 +msgid "Merge operation complete." +msgstr "ОперациÑта по Ñливане завърши." + +#: directorymergewindow.cpp:2257 directorymergewindow.cpp:2260 +msgid "Merge Complete" +msgstr "Сливането завърши" + +#: directorymergewindow.cpp:2269 +msgid "" +"Simulated merge complete: Check if you agree with the proposed operations." +msgstr "" +"СимулациÑта на Ñливане завърши: Проверете дали Ñте ÑъглаÑни Ñ Ð¿Ñ€ÐµÐ´Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ‚Ðµ " +"дейÑтвиÑ." + +#: directorymergewindow.cpp:2305 +msgid "" +"An error occurred. Press OK to see detailed information.\n" +msgstr "" +"Възникнала е грешка. ÐатиÑнете \"ОК\", за да видите подробна информациÑ.\n" + +#: directorymergewindow.cpp:2348 +msgid "Error: While deleting %1: Creating backup failed." +msgstr "" +"Грешка: По време на изтриването на %1: Създаването на резервно копие беше " +"неуÑпешно." + +#: directorymergewindow.cpp:2355 +msgid "delete directory recursively( %1 )" +msgstr "рекурÑивно изтриване на директориÑ( %1 )" + +#: directorymergewindow.cpp:2357 +msgid "delete( %1 )" +msgstr "изтриване( %1 )" + +#: directorymergewindow.cpp:2372 +msgid "Error: delete dir operation failed while trying to read the directory." +msgstr "" +"Грешка: операциÑта по изтриване беше неуÑпешна при опит за четене на " +"директориÑта." + +#: directorymergewindow.cpp:2391 +msgid "Error: rmdir( %1 ) operation failed." +msgstr "Грешка: операциÑта по изтриване на директориÑ( %1 ) беше неуÑпешна." + +#: directorymergewindow.cpp:2401 +msgid "Error: delete operation failed." +msgstr "Грешка: операциÑта по изтриване беше неуÑпешна." + +#: directorymergewindow.cpp:2427 +msgid "manual merge( %1, %2, %3 -> %4)" +msgstr "ръчно Ñливане( %1, %2, %3 -> %4)" + +#: directorymergewindow.cpp:2430 +msgid "" +" Note: After a manual merge the user should continue by pressing F7." +msgstr "" +" Забележка: След ръчно Ñливане, потребителÑÑ‚ Ñ‚Ñ€Ñбва да натиÑне клавиш F7, " +"за да продължи." + +#: directorymergewindow.cpp:2453 +msgid "Error: copy( %1 -> %2 ) failed.Deleting existing destination failed." +msgstr "" +"Грешка: копирането на ( %1 -> %2 ) беше неуÑпешно. Изтриването на " +"ÑъщеÑтвуващото меÑтоназначение е неуÑпешно." + +#: directorymergewindow.cpp:2463 +msgid "copyLink( %1 -> %2 )" +msgstr "копиране на препратка( %1 -> %2 )" + +#: directorymergewindow.cpp:2474 +msgid "Error: copyLink failed: Remote links are not yet supported." +msgstr "" +"Грешка: копирането на препратка беше неуÑпешно: Отдалечени препратки не Ñе " +"поддържат." + +#: directorymergewindow.cpp:2480 +msgid "Error: copyLink failed." +msgstr "Грешка: копирането на препратка беше неуÑпешно." + +#: directorymergewindow.cpp:2500 +msgid "copy( %1 -> %2 )" +msgstr "копиране( %1 -> %2 )" + +#: directorymergewindow.cpp:2526 +msgid "Error during rename( %1 -> %2 ): Cannot delete existing destination." +msgstr "" +"Грешка по време на преименуване( %1 -> %2 ): Изтриването на ÑъщеÑтвуващото " +"меÑтоназначение беше неуÑпешно." + +#: directorymergewindow.cpp:2532 +msgid "rename( %1 -> %2 )" +msgstr "преименуване( %1 -> %2 )" + +#: directorymergewindow.cpp:2541 +msgid "Error: Rename failed." +msgstr "Грешка: Преименуването беше неуÑпешно." + +#: directorymergewindow.cpp:2559 +msgid "Error during makeDir of %1. Cannot delete existing file." +msgstr "" +"Грешка по време на Ñъздаване на Ð´Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ %1. Ðе може да Ñе изтрие ÑъщеÑтвуващ " +"файл." + +#: directorymergewindow.cpp:2575 +msgid "makeDir( %1 )" +msgstr "Ñъздаване на директориÑ( %1 )" + +#: directorymergewindow.cpp:2585 +msgid "Error while creating directory." +msgstr "Грешка по време на Ñъздаване на директориÑ." + +#: directorymergewindow.cpp:2608 directorymergewindow.cpp:2725 +msgid "Dest" +msgstr "МеÑтоназначение" + +#: directorymergewindow.cpp:2612 directorymergewindow.cpp:2650 +msgid "Dir" +msgstr "ДиректориÑ" + +#: directorymergewindow.cpp:2613 +msgid "Type" +msgstr "Тип" + +#: directorymergewindow.cpp:2614 +msgid "Size" +msgstr "Размер" + +#: directorymergewindow.cpp:2615 +msgid "Attr" +msgstr "Ðтрибути" + +#: directorymergewindow.cpp:2616 +msgid "Last Modification" +msgstr "ПоÑледна промÑна" + +#: directorymergewindow.cpp:2617 +msgid "Link-Destination" +msgstr "МеÑтоназначение на препратката" + +#: directorymergewindow.cpp:2667 +msgid "not available" +msgstr "не е наличен" + +#: directorymergewindow.cpp:2687 +msgid "A (Dest): " +msgstr "Ð (меÑтоназначение): " + +#: directorymergewindow.cpp:2690 +msgid "A (Base): " +msgstr "Ð (база): " + +#: directorymergewindow.cpp:2696 +msgid "B (Dest): " +msgstr "Б (меÑтоназначение): " + +#: directorymergewindow.cpp:2704 +msgid "C (Dest): " +msgstr "Ð’ (меÑтоназначение): " + +#: directorymergewindow.cpp:2710 +msgid "Dest: " +msgstr "МеÑтоназначение: " + +#: directorymergewindow.cpp:2775 +msgid "Save Directory Merge State As..." +msgstr "Ð—Ð°Ð¿Ð¸Ñ ÑÑŠÑтоÑнието при Ñливане като..." + +#: directorymergewindow.cpp:2862 +msgid "Start/Continue Directory Merge" +msgstr "Стартиране/Продължение на Ñливането на директориÑ" + +#: directorymergewindow.cpp:2863 +msgid "Run Operation for Current Item" +msgstr "Стартиране на операциÑта за Ñ‚ÐµÐºÑƒÑ‰Ð¸Ñ ÐµÐ»ÐµÐ¼ÐµÐ½Ñ‚" + +#: directorymergewindow.cpp:2864 +msgid "Compare Selected File" +msgstr "СравнÑване на маркираните файлове" + +#: directorymergewindow.cpp:2865 +msgid "Merge Current File" +msgstr "Сливане на Ñ‚ÐµÐºÑƒÑ‰Ð¸Ñ Ñ„Ð°Ð¹Ð»" + +#: directorymergewindow.cpp:2866 +msgid "Fold All Subdirs" +msgstr "Скриване на вÑички поддиректории" + +#: directorymergewindow.cpp:2867 +msgid "Unfold All Subdirs" +msgstr "Показване на вÑички поддиректории" + +#: directorymergewindow.cpp:2871 +msgid "Choose A for All Items" +msgstr "Изберете Рза вÑички елементи" + +#: directorymergewindow.cpp:2872 +msgid "Choose B for All Items" +msgstr "Изберете Б за вÑички елементи" + +#: directorymergewindow.cpp:2873 +msgid "Choose C for All Items" +msgstr "Изберете Ð’ за вÑички елементи" + +#: directorymergewindow.cpp:2874 +msgid "Auto-Choose Operation for All Items" +msgstr "Ðвтоматично избиране на Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ñ Ð·Ð° вÑички елементи" + +#: directorymergewindow.cpp:2875 +msgid "No Operation for All Items" +msgstr "Без Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ñ Ð·Ð° вÑички елементи" + +#: directorymergewindow.cpp:2880 +msgid "Show Identical Files" +msgstr "Показване на идентични файлове" + +#: directorymergewindow.cpp:2881 +msgid "Show Different Files" +msgstr "Показване на различните файлове" + +#: directorymergewindow.cpp:2882 +msgid "Show Files only in A" +msgstr "Показване на файлове Ñамо в A" + +#: directorymergewindow.cpp:2883 +msgid "Show Files only in B" +msgstr "Показване на файлове Ñамо в B" + +#: directorymergewindow.cpp:2884 +msgid "Show Files only in C" +msgstr "Показване на файлове Ñамо в C" + +#: directorymergewindow.cpp:2888 +msgid "Compare Explicitly Selected Files" +msgstr "СравнÑване на маркираните файлове" + +#: directorymergewindow.cpp:2889 +msgid "Merge Explicitly Selected Files" +msgstr "Сливане на маркираните файлове" + +#: directorymergewindow.cpp:2891 directorymergewindow.cpp:2898 +msgid "Do Nothing" +msgstr "Да не Ñе прави нищо" + +#: directorymergewindow.cpp:2892 +msgid "A" +msgstr "Ð" + +#: directorymergewindow.cpp:2893 +msgid "B" +msgstr "Б" + +#: directorymergewindow.cpp:2894 +msgid "C" +msgstr "Ð’" + +#: directorymergewindow.cpp:2903 +msgid "Delete A && B" +msgstr "Изтриване на Ри Б" + +#: directorymergewindow.cpp:2906 +msgid "Merge to A && B" +msgstr "Сливане в Ри Б" + +#: fileaccess.cpp:595 +msgid "" +"While trying to make a backup, deleting an older backup failed. \n" +"Filename: " +msgstr "" +"Ð’ процеÑа на Ñъздаване на ново резервно копие, изтриването на по-Ñтарото беше " +"неуÑпешно.\n" +"Име на файл: " + +#: fileaccess.cpp:602 +msgid "" +"While trying to make a backup, renaming failed. \n" +"Filenames: " +msgstr "" +"Ð’ процеÑа на Ñъздаване на ново резервно копие, преименуването беше неуÑпешно.\n" +"Имена на файлове: " + +#: fileaccess.cpp:624 +#, c-format +msgid "Getting file status: %1" +msgstr "Вземане ÑтатуÑа на файл: %1" + +#: fileaccess.cpp:667 +#, c-format +msgid "Reading file: %1" +msgstr "Чете на файл: %1" + +#: fileaccess.cpp:703 +#, c-format +msgid "Writing file: %1" +msgstr "Ð—Ð°Ð¿Ð¸Ñ Ð½Ð° файл: %1" + +#: fileaccess.cpp:731 +msgid "Out of memory" +msgstr "ÐÑма памет" + +#: fileaccess.cpp:766 +#, c-format +msgid "Making directory: %1" +msgstr "Създаване на директориÑ: %1" + +#: fileaccess.cpp:786 +#, c-format +msgid "Removing directory: %1" +msgstr "Премахване на директориÑ: %1" + +#: fileaccess.cpp:801 +#, c-format +msgid "Removing file: %1" +msgstr "Премахване на файл: %1" + +#: fileaccess.cpp:817 +msgid "Creating symbolic link: %1 -> %2" +msgstr "Създаване на връзка към Ñимволи: %1 -> %2" + +#: fileaccess.cpp:843 +msgid "Renaming file: %1 -> %2" +msgstr "Преименуване на файл: %1 -> %2" + +#: fileaccess.cpp:879 +msgid "Copying file: %1 -> %2" +msgstr "Копиране на файл: %1 -> %2" + +#: fileaccess.cpp:893 +#, c-format +msgid "" +"Error during file copy operation: Opening file for reading failed. Filename: %1" +msgstr "" +"Грешка по време на копиране: ОтварÑнето на файл за четене беше неуÑпешно. Име " +"на файл: %1" + +#: fileaccess.cpp:899 +#, c-format +msgid "" +"Error during file copy operation: Opening file for writing failed. Filename: %1" +msgstr "" +"Грешка по време на копиране: ОтварÑнето на файл за Ð·Ð°Ð¿Ð¸Ñ Ð±ÐµÑˆÐµ неуÑпешно. Име на " +"файл: %1" + +#: fileaccess.cpp:914 +#, c-format +msgid "Error during file copy operation: Reading failed. Filename: %1" +msgstr "Грешка по време на копиране: Четенето беше неуÑпешно. Име на файл: %1" + +#: fileaccess.cpp:923 +#, c-format +msgid "Error during file copy operation: Writing failed. Filename: %1" +msgstr "Грешка по време на копиране: ЗапиÑÑŠÑ‚ беше неуÑпешен. Име на файл: %1" + +#: fileaccess.cpp:1219 +msgid "Reading directory: " +msgstr "Четене на директориÑ: " + +#: fileaccess.cpp:1348 +#, c-format +msgid "Listing directory: %1" +msgstr "СпиÑък на директориÑ: %1" + +#: kdiff3.cpp:142 +msgid "Current Configuration:" +msgstr "Текуща конфигурациÑ:" + +#: kdiff3.cpp:147 +msgid "Config Option Error:" +msgstr "Грешка на Ð¾Ð¿Ñ†Ð¸Ñ Ð·Ð° конфигурациÑ:" + +#: kdiff3.cpp:187 +msgid "Option --auto used, but no output file specified." +msgstr "Използвана е наÑтройка --auto, но не е указан изходен файл." + +#: kdiff3.cpp:323 +msgid "Option --auto ignored for directory comparison." +msgstr "Игнорирана е наÑтройка --auto за ÑравнÑване на директории." + +#: kdiff3.cpp:359 +msgid "Saving failed." +msgstr "ЗапиÑÑŠÑ‚ беше неуÑпешен." + +#: kdiff3.cpp:386 pdiff.cpp:1041 pdiff.cpp:1112 +msgid "Opening of these files failed:" +msgstr "ОтварÑнето на тези файлове беше неуÑпешно:" + +#: kdiff3.cpp:395 +msgid "File Open Error" +msgstr "Грешка при отварÑне на файл" + +#: kdiff3.cpp:418 +msgid "Opens documents for comparison..." +msgstr "ÐžÑ‚Ð²Ð°Ñ€Ñ Ð´Ð¾ÐºÑƒÐ¼ÐµÐ½Ñ‚ за ÑравнÑване..." + +#: kdiff3.cpp:423 +msgid "Saves the merge result. All conflicts must be solved!" +msgstr "" +"Ð—Ð°Ð¿Ð¸Ñ Ð½Ð° резултатът от Ñливането. Ð’Ñички конфликти Ñ‚Ñ€Ñбва да Ñа решени!" + +#: kdiff3.cpp:425 +msgid "Saves the current document as..." +msgstr "Ð—Ð°Ð¿Ð¸Ñ Ð½Ð° текущиÑÑ‚ документ като..." + +#: kdiff3.cpp:427 +msgid "Print the differences" +msgstr "Отпечатване на разликите" + +#: kdiff3.cpp:429 +msgid "Quits the application" +msgstr "Излиза от програмата" + +#: kdiff3.cpp:431 +msgid "Cuts the selected section and puts it to the clipboard" +msgstr "ИзрÑзва маркираната чаÑÑ‚ и Ñ Ñлага в ÑиÑÑ‚ÐµÐ¼Ð½Ð¸Ñ Ð±ÑƒÑ„ÐµÑ€" + +#: kdiff3.cpp:433 +msgid "Copies the selected section to the clipboard" +msgstr "Копира маркираната чаÑÑ‚ в ÑиÑÑ‚ÐµÐ¼Ð½Ð¸Ñ Ð±ÑƒÑ„ÐµÑ€" + +#: kdiff3.cpp:435 +msgid "Pastes the clipboard contents to actual position" +msgstr "Вмъква Ñъдържанието на ÑиÑÑ‚ÐµÐ¼Ð½Ð¸Ñ Ð±ÑƒÑ„ÐµÑ€ на поÑоченото мÑÑто" + +#: kdiff3.cpp:437 +msgid "Select everything in current window" +msgstr "Маркиране на вÑичко в Ñ‚ÐµÐºÑƒÑ‰Ð¸Ñ Ð¿Ñ€Ð¾Ð·Ð¾Ñ€ÐµÑ†" + +#: kdiff3.cpp:439 +msgid "Search for a string" +msgstr "ТърÑене на низ" + +#: kdiff3.cpp:441 +msgid "Search again for the string" +msgstr "Повторно Ñ‚ÑŠÑ€Ñене на низа" + +#: kdiff3.cpp:443 +msgid "Enables/disables the toolbar" +msgstr "Включва/Изключва лентата Ñ Ð¸Ð½Ñтрументи" + +#: kdiff3.cpp:445 +msgid "Enables/disables the statusbar" +msgstr "Включва/Изключва лентата за ÑÑŠÑтоÑнието" + +#: kdiff3.cpp:449 +msgid "Configure KDiff3..." +msgstr "Конфигуриране на KDiff3..." + +#: kdiff3.cpp:470 +msgid "Go to Current Delta" +msgstr "Отиване на текущата операциÑ" + +#: kdiff3.cpp:471 +msgid "Go to First Delta" +msgstr "Отиване на първата операциÑ" + +#: kdiff3.cpp:472 +msgid "Go to Last Delta" +msgstr "Отиване на поÑледната операциÑ" + +#: kdiff3.cpp:473 +msgid "(Skips white space differences when \"Show White Space\" is disabled.)" +msgstr "" +"(ПреÑкача разликата в интервалите, когато наÑтройката \"Показване на " +"интервалите\" е изключена.)" + +#: kdiff3.cpp:474 +msgid "" +"(Does not skip white space differences even when \"Show White Space\" is " +"disabled.)" +msgstr "" +"(ПреÑкача разликата в интервалите, дори когато наÑтройката \"Показване на " +"интервалите\" е изключена.)" + +#: kdiff3.cpp:475 +msgid "Go to Previous Delta" +msgstr "Отиване на предишната операциÑ" + +#: kdiff3.cpp:477 +msgid "Go to Next Delta" +msgstr "Отиване на Ñледващата операциÑ" + +#: kdiff3.cpp:479 +msgid "Go to Previous Conflict" +msgstr "Отиване на Ð¿Ñ€ÐµÐ´Ð¸ÑˆÐ½Ð¸Ñ ÐºÐ¾Ð½Ñ„Ð»Ð¸ÐºÑ‚" + +#: kdiff3.cpp:481 +msgid "Go to Next Conflict" +msgstr "Отиване на ÑÐ»ÐµÐ´Ð²Ð°Ñ‰Ð¸Ñ ÐºÐ¾Ð½Ñ„Ð»Ð¸ÐºÑ‚" + +#: kdiff3.cpp:483 +msgid "Go to Previous Unsolved Conflict" +msgstr "Отиване на Ð¿Ñ€ÐµÐ´Ð¸ÑˆÐ½Ð¸Ñ Ð½ÐµÑ€Ð°Ð·Ñ€ÐµÑˆÐµÐ½ конфликт" + +#: kdiff3.cpp:485 +msgid "Go to Next Unsolved Conflict" +msgstr "Отиване на ÑÐ»ÐµÐ´Ð²Ð°Ñ‰Ð¸Ñ Ð½ÐµÑ€Ð°Ð·Ñ€ÐµÑˆÐµÐ½ конфликт" + +#: kdiff3.cpp:487 +msgid "Select Line(s) From A" +msgstr "Маркирайте ред(ове) от Ð" + +#: kdiff3.cpp:488 +msgid "Select Line(s) From B" +msgstr "Маркирайте ред(ове) от Б" + +#: kdiff3.cpp:489 +msgid "Select Line(s) From C" +msgstr "Маркирайте ред(ове) от Ð’" + +#: kdiff3.cpp:490 +msgid "Automatically Go to Next Unsolved Conflict After Source Selection" +msgstr "" +"Ðвтоматично прехвърлÑне към ÑÐ»ÐµÐ´Ð²Ð°Ñ‰Ð¸Ñ Ð½ÐµÑ€ÐµÑˆÐµÐ½ конфликт, Ñлед избиране на " +"източник" + +#: kdiff3.cpp:492 +msgid "Show Space && Tabulator Characters for Differences" +msgstr "Показване на Ñимволите за интервал и Ñ‚Ð°Ð±ÑƒÐ»Ð°Ñ†Ð¸Ñ Ð·Ð° разлика" + +#: kdiff3.cpp:493 +msgid "Show White Space" +msgstr "Показване на интервалите" + +#: kdiff3.cpp:495 +msgid "Show Line Numbers" +msgstr "Показване на номерата на редовете" + +#: kdiff3.cpp:496 +msgid "Choose A Everywhere" +msgstr "Избиране на РнавÑÑкъде" + +#: kdiff3.cpp:497 +msgid "Choose B Everywhere" +msgstr "Избиране на Б навÑÑкъде" + +#: kdiff3.cpp:498 +msgid "Choose C Everywhere" +msgstr "Избиране на Ð’ навÑÑкъде" + +#: kdiff3.cpp:499 +msgid "Choose A for All Unsolved Conflicts" +msgstr "Избиране на Рза вÑички нерешени конфликти" + +#: kdiff3.cpp:500 +msgid "Choose B for All Unsolved Conflicts" +msgstr "Избиране на Б за вÑички нерешени конфликти" + +#: kdiff3.cpp:501 +msgid "Choose C for All Unsolved Conflicts" +msgstr "Избиране на Ð’ за вÑички нерешени конфликти" + +#: kdiff3.cpp:502 +msgid "Choose A for All Unsolved Whitespace Conflicts" +msgstr "Избиране на Рза вÑички нерешени конфликти, Ñвързани Ñ Ð¸Ð½Ñ‚ÐµÑ€Ð²Ð°Ð»Ð¸" + +#: kdiff3.cpp:503 +msgid "Choose B for All Unsolved Whitespace Conflicts" +msgstr "Избиране на Б за вÑички нерешени конфликти, Ñвързани Ñ Ð¸Ð½Ñ‚ÐµÑ€Ð²Ð°Ð»Ð¸" + +#: kdiff3.cpp:504 +msgid "Choose C for All Unsolved Whitespace Conflicts" +msgstr "Избиране на Ð’ за вÑички нерешени конфликти, Ñвързани Ñ Ð¸Ð½Ñ‚ÐµÑ€Ð²Ð°Ð»Ð¸" + +#: kdiff3.cpp:505 +msgid "Automatically Solve Simple Conflicts" +msgstr "Ðвтоматично разрешаване на проÑтите конфликти" + +#: kdiff3.cpp:506 +msgid "Set Deltas to Conflicts" +msgstr "Задаване на дейÑтвиÑта за конфликти" + +#: kdiff3.cpp:507 +msgid "Run Regular Expression Auto Merge" +msgstr "Изпълнение на автоÑливане на регулÑрни изрази" + +#: kdiff3.cpp:508 +msgid "Automatically Solve History Conflicts" +msgstr "Ðвтоматично разрешаване на конфликтите в иÑториÑта" + +#: kdiff3.cpp:509 +msgid "Split Diff At Selection" +msgstr "РазделÑне на разликата при маркираното" + +#: kdiff3.cpp:510 +msgid "Join Selected Diffs" +msgstr "Сливане на маркираните файлове" + +#: kdiff3.cpp:512 +msgid "Show Window A" +msgstr "Показване на прозорец Ð" + +#: kdiff3.cpp:513 +msgid "Show Window B" +msgstr "Показване на прозорец Б" + +#: kdiff3.cpp:514 +msgid "Show Window C" +msgstr "Показване на прозорец Ð’" + +#: kdiff3.cpp:515 kdiff3.cpp:526 +msgid "Focus Next Window" +msgstr "ФокуÑиране на ÑÐ»ÐµÐ´Ð²Ð°Ñ‰Ð¸Ñ Ð¿Ñ€Ð¾Ð·Ð¾Ñ€ÐµÑ†" + +#: kdiff3.cpp:517 +msgid "Normal Overview" +msgstr "Ðормален изглед" + +#: kdiff3.cpp:518 +msgid "A vs. B Overview" +msgstr "Изглед на Ð Ñрещу Б" + +#: kdiff3.cpp:519 +msgid "A vs. C Overview" +msgstr "Изглед на Ð Ñрещу Ð’" + +#: kdiff3.cpp:520 +msgid "B vs. C Overview" +msgstr "Изглед на Б Ñрещу Ð’" + +#: kdiff3.cpp:521 +msgid "Word Wrap Diff Windows" +msgstr "ПренаÑÑне на думите за различните прозорци" + +#: kdiff3.cpp:522 +msgid "Add Manual Diff Alignment" +msgstr "ДобавÑне на ръчно подравнÑване на разликите" + +#: kdiff3.cpp:523 +msgid "Clear All Manual Diff Alignments" +msgstr "ИзчиÑтване на на ръчно подравнÑване на разликите" + +#: kdiff3.cpp:528 +msgid "Focus Prev Window" +msgstr "ФокуÑиране върху Ð¿Ñ€ÐµÐ´Ð¸ÑˆÐ½Ð¸Ñ Ð¿Ñ€Ð¾Ð·Ð¾Ñ€ÐµÑ†" + +#: kdiff3.cpp:529 +msgid "Toggle Split Orientation" +msgstr "Превключване към разделена подредба" + +#: kdiff3.cpp:531 +msgid "Dir && Text Split Screen View" +msgstr "Разделен изглед на Ð´Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ Ð¸ текÑÑ‚" + +#: kdiff3.cpp:533 +msgid "Toggle Between Dir && Text View" +msgstr "Превключване между изглед на Ð´Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ Ð¸ текÑÑ‚" + +#: kdiff3.cpp:582 pdiff.cpp:1712 +msgid "The merge result hasn't been saved." +msgstr "Резултатът от Ñливането не е запиÑан." + +#: kdiff3.cpp:583 +msgid "Save && Quit" +msgstr "Ð—Ð°Ð¿Ð¸Ñ Ð¸ изход" + +#: kdiff3.cpp:583 +msgid "Quit Without Saving" +msgstr "Изход без запиÑ" + +#: kdiff3.cpp:591 pdiff.cpp:1721 +msgid "Saving the merge result failed." +msgstr "ЗапиÑÑŠÑ‚ на резултата от Ñливането беше неуÑпешен." + +#: kdiff3.cpp:602 pdiff.cpp:978 +msgid "" +"You are currently doing a directory merge. Are you sure, you want to abort?" +msgstr "" +"Ð’ момента извършвате Ñливане на директории. Сигурни ли Ñте, че иÑкате да го " +"прекъÑнете?" + +#: kdiff3.cpp:625 +msgid "Saving file..." +msgstr "Ð—Ð°Ð¿Ð¸Ñ Ð½Ð° файл..." + +#: kdiff3.cpp:642 +msgid "Saving file with a new filename..." +msgstr "Ð—Ð°Ð¿Ð¸Ñ Ð½Ð° файл Ñ Ð½Ð¾Ð²Ð¾ име..." + +#: kdiff3.cpp:732 +msgid "Printing..." +msgstr "Отпечатване..." + +#: kdiff3.cpp:738 kdiff3.cpp:900 +msgid "Printing aborted." +msgstr "Отпечатването е прекъÑнато." + +#: kdiff3.cpp:870 +msgid "Selection" +msgstr "Маркираното" + +#: kdiff3.cpp:896 +msgid "Printing completed." +msgstr "Отпечатването приключи." + +#: kdiff3.cpp:906 +msgid "Exiting..." +msgstr "Излизане..." + +#: kdiff3.cpp:918 +msgid "Toggling toolbar..." +msgstr "Превключване на лентата Ñ Ð¸Ð½Ñтрументи..." + +#: kdiff3.cpp:939 +msgid "Toggle the statusbar..." +msgstr "Превключване на лентата за ÑÑŠÑтоÑнието..." + +#: kdiff3_part.cpp:155 kdiff3_part.cpp:224 +msgid "Couldn't find files for comparison." +msgstr "Ðе Ñа открити файлове за ÑравнÑване." + +#: kdiff3_part.cpp:291 +msgid "KDiff3Part" +msgstr "KDiff3Part" + +#: kdiff3_shell.cpp:78 +msgid "" +"Could not find our part!\n" +"This usually happens due to an installation problem. Please read the " +"README-file in the source package for details." +msgstr "" +"ЧаÑÑ‚ от програмата не може да бъде намерена!\n" +"Това обикновено Ñе Ñлучва поради проблеми Ñ Ð¸Ð½ÑталациÑта. за повече информациÑ, " +"молÑ, прочетете README-файла в инÑÑ‚Ð°Ð»Ð°Ñ†Ð¸Ð¾Ð½Ð½Ð¸Ñ Ð¿Ð°ÐºÐµÑ‚." + +#: main.cpp:35 +msgid "Tool for Comparison and Merge of Files and Directories" +msgstr "ИнÑтрумент за ÑравнÑване и Ñливане на файлове и директории" + +#: main.cpp:40 +msgid "Merge the input." +msgstr "Сливане на входа." + +#: main.cpp:42 +msgid "Explicit base file. For compatibility with certain tools." +msgstr "ЕкÑплицитен базов файл. За ÑъвмеÑтимоÑÑ‚ Ñ Ð½Ñкои инÑтрументи." + +#: main.cpp:44 +msgid "Output file. Implies -m. E.g.: -o newfile.txt" +msgstr "Изходен файл. Съдържа -m Ðапример: -o newfile.txt" + +#: main.cpp:45 +msgid "Output file, again. (For compatibility with certain tools.)" +msgstr "Отново изходен файл. (За ÑъвмеÑтимоÑÑ‚ Ñ Ð½Ñкои инÑтрументи)" + +#: main.cpp:46 +msgid "No GUI if all conflicts are auto-solvable. (Needs -o file)" +msgstr "" +"Без ГПИ ако вÑички конфликти могат да бъдат разрешени автоматично. (Ðуждае Ñе " +"от -о файл)" + +#: main.cpp:47 +msgid "Don't solve conflicts automatically. (For compatibility...)" +msgstr "Без автоматично разрешаване на конфликтите. (За ÑъвмеÑтимоÑÑ‚...)" + +#: main.cpp:48 +msgid "Visible name replacement for input file 1 (base)." +msgstr "Видима размÑна на имената на файловете за входен файл 1 (базов)." + +#: main.cpp:49 +msgid "Visible name replacement for input file 2." +msgstr "Видима размÑна на имената на файловете за входен файл 2." + +#: main.cpp:50 +msgid "Visible name replacement for input file 3." +msgstr "Видима размÑна на имената на файловете за входен файл 3." + +#: main.cpp:52 +msgid "Alternative visible name replacement. Supply this once for every input." +msgstr "" +"Ðлтернативна размÑна на имената на файловете. Използвайте го веднъж за вÑеки " +"вход." + +#: main.cpp:53 +msgid "" +"Override a config setting. Use once for every setting. E.g.: --cs " +"\"AutoAdvance=1\"" +msgstr "" +"Пише върху конфигурационните наÑтройките. Използвайте веднъж за вÑÑка " +"наÑтройка. Ðапример: --cs \"AutoAdvance=1\"" + +#: main.cpp:54 +msgid "Show list of config settings and current values." +msgstr "Показване на ÑпиÑък Ñ ÐºÐ¾Ð½Ñ„Ð¸Ð³ÑƒÑ€Ð°Ñ†Ð¸Ð¾Ð½Ð½Ð¸ наÑтройки и текущи ÑтойноÑти." + +#: main.cpp:55 +msgid "Use a different config file." +msgstr "Използване на различни конфигурационни файлове." + +#: main.cpp:59 +msgid "file1 to open (base, if not specified via --base)" +msgstr "да Ñе отвори файл 1 (базов, ако не е указан --base)" + +#: main.cpp:60 +msgid "file2 to open" +msgstr "да Ñе отвори файл 2" + +#: main.cpp:61 +msgid "file3 to open" +msgstr "да Ñе отвори файл 3" + +#: main.cpp:93 +msgid "Ignored. (User defined.)" +msgstr "Игнорирано (дефинирано от потребителÑ.)" + +#. i18n: file kdiff3_part.rc line 16 +#: main.cpp:173 rc.cpp:9 +#, no-c-format +msgid "KDiff3" +msgstr "KDiff3" + +#: main.cpp:186 +msgid "+ Many thanks to those who reported bugs and contributed ideas!" +msgstr "" +"+ Много благодарноÑти за тези, които Ñе обадиха за грешките и имаха нови идеи!" + +#: mergeresultwindow.cpp:136 mergeresultwindow.cpp:939 +#: mergeresultwindow.cpp:953 mergeresultwindow.cpp:965 +#: mergeresultwindow.cpp:977 +msgid "Number of remaining unsolved conflicts: %1 (of which %2 are whitespace)" +msgstr "Брой оÑтаващи нерешени конфликти: %1 (от които %2 Ñа интервали)" + +#: mergeresultwindow.cpp:285 +msgid "" +"The output has been modified.\n" +"If you continue your changes will be lost." +msgstr "" +"Изходът е променен.\n" +"Ðко продължите промените ще бъдат загубени." + +#: mergeresultwindow.cpp:797 pdiff.cpp:511 +msgid "All input files are binary equal." +msgstr "Ð’Ñички входни файлове Ñа двоично еднакви." + +#: mergeresultwindow.cpp:799 +msgid "All input files contain the same text." +msgstr "Входните файлове Ñъдържат еднакъв текÑÑ‚." + +#: mergeresultwindow.cpp:801 +msgid "" +"Files A and B are binary equal.\n" +msgstr "" +"Файлове Ри Б Ñа двоично еднакви.\n" + +#: mergeresultwindow.cpp:802 +msgid "" +"Files A and B have equal text. \n" +msgstr "" +"Файлове Ри Б Ñъдържат еднакъв текÑÑ‚. \n" + +#: mergeresultwindow.cpp:803 +msgid "" +"Files A and C are binary equal.\n" +msgstr "" +"Файлове Ри Ð’ Ñа двоично еднакви.\n" + +#: mergeresultwindow.cpp:804 +msgid "" +"Files A and C have equal text. \n" +msgstr "" +"Файлове Ри Ð’ Ñъдържат еднакъв текÑÑ‚. \n" + +#: mergeresultwindow.cpp:805 +msgid "" +"Files B and C are binary equal.\n" +msgstr "" +"Файлове Б и Ð’ Ñа двоично еднакви.\n" + +#: mergeresultwindow.cpp:806 +msgid "" +"Files B and C have equal text. \n" +msgstr "" +"Файлове Б и Ð’ Ñъдържат еднакъв текÑÑ‚. \n" + +#: mergeresultwindow.cpp:812 +msgid "Total number of conflicts: " +msgstr "Общ брой конфликти: " + +#: mergeresultwindow.cpp:813 +msgid "" +"\n" +"Nr of automatically solved conflicts: " +msgstr "" +"\n" +"Брой автоматично решени конфликти: " + +#: mergeresultwindow.cpp:814 +msgid "" +"\n" +"Nr of unsolved conflicts: " +msgstr "" +"\n" +"Брой нерешени конфликти: " + +#: mergeresultwindow.cpp:816 +msgid "Conflicts" +msgstr "Конфликти" + +#: mergeresultwindow.cpp:1652 +msgid "" +msgstr "<ÐÑма входен ред>" + +#: mergeresultwindow.cpp:1660 +msgid "" +msgstr "<Сливане на конфликт (Само интервали)>" + +#: mergeresultwindow.cpp:1662 mergeresultwindow.cpp:2427 +msgid "" +msgstr "<Сливане на конфликт>" + +#: mergeresultwindow.cpp:2635 +msgid "" +"Not all conflicts are solved yet.\n" +"File not saved.\n" +msgstr "" +"Ð’Ñе още не вÑички конфликти Ñа решени.\n" +"Файлът не е запиÑан.\n" + +#: mergeresultwindow.cpp:2637 +msgid "Conflicts Left" +msgstr "ОÑтаващи конфликти" + +#: mergeresultwindow.cpp:2649 +msgid "" +"\n" +"\n" +"Creating backup failed. File not saved." +msgstr "" +"\n" +"\n" +"Създаването на резервно копие беше неуÑпешно. Файлът не е запиÑан." + +#: mergeresultwindow.cpp:2649 mergeresultwindow.cpp:2689 +msgid "File Save Error" +msgstr "Грешка при Ð·Ð°Ð¿Ð¸Ñ Ð½Ð° файл" + +#: mergeresultwindow.cpp:2689 +msgid "Error while writing." +msgstr "Грешка по време на запиÑ." + +#: mergeresultwindow.cpp:3020 +msgid "Output" +msgstr "Резултат" + +#: mergeresultwindow.cpp:3032 mergeresultwindow.cpp:3139 +msgid "[Modified]" +msgstr "[Променен]" + +#: mergeresultwindow.cpp:3039 +msgid "Encoding for saving" +msgstr "Кодова таблица" + +#: mergeresultwindow.cpp:3075 mergeresultwindow.cpp:3081 +#: mergeresultwindow.cpp:3087 +msgid "Codec from" +msgstr "Кодек от" + +#: optiondialog.cpp:362 +msgid "Unicode, 8 bit" +msgstr "Unicode, 8 бита" + +#: optiondialog.cpp:363 +msgid "Unicode" +msgstr "Unicode" + +#: optiondialog.cpp:364 +msgid "Latin1" +msgstr "Latin1" + +#: optiondialog.cpp:383 +msgid "Change this if non-ASCII characters are not displayed correctly." +msgstr "Променете това ако не-ASCII Ñимволите не Ñе изобразÑват правилно." + +#: optiondialog.cpp:510 +msgid "Editor & Diff Output Font" +msgstr "Изходен шрифт за редактора и разделителÑ" + +#: optiondialog.cpp:531 +msgid "Italic font for deltas" +msgstr "Ðаклонен шрифт за дейÑтвиÑта" + +#: optiondialog.cpp:534 +msgid "" +"Selects the italic version of the font for differences.\n" +"If the font doesn't support italic characters, then this does nothing." +msgstr "" +"Избира верÑиÑта Ñ Ð½Ð°ÐºÐ»Ð¾Ð½ÐµÐ½ шрифт за различаване.\n" +"Ðко шрифтът не поддържа наклонени Ñимволи, тогава не прави нищо." + +#: optiondialog.cpp:542 +msgid "Color" +msgstr "ЦвÑÑ‚" + +#: optiondialog.cpp:542 +msgid "Colors Settings" +msgstr "Цветови наÑтройки" + +#: optiondialog.cpp:556 +msgid "Editor and Diff Views:" +msgstr "Редактор за преглед на разлики:" + +#: optiondialog.cpp:564 +msgid "Foreground color:" +msgstr "ЦвÑÑ‚ на преден план:" + +#: optiondialog.cpp:570 +msgid "Background color:" +msgstr "ЦвÑÑ‚ за фон:" + +#: optiondialog.cpp:578 +msgid "Diff background color:" +msgstr "Различен цвÑÑ‚ за фон:" + +#: optiondialog.cpp:585 +msgid "Color A:" +msgstr "ЦвÑÑ‚ Ð:" + +#: optiondialog.cpp:592 +msgid "Color B:" +msgstr "ЦвÑÑ‚ Б:" + +#: optiondialog.cpp:599 +msgid "Color C:" +msgstr "ЦвÑÑ‚ Ð’:" + +#: optiondialog.cpp:605 +msgid "Conflict color:" +msgstr "ЦвÑÑ‚ за конфликт:" + +#: optiondialog.cpp:612 +msgid "Current range background color:" +msgstr "Текущ обхват за цвета на фон:" + +#: optiondialog.cpp:619 +msgid "Current range diff background color:" +msgstr "Текущ обхват за цвета на фон на разделител:" + +#: optiondialog.cpp:625 +msgid "Color for manually aligned difference ranges:" +msgstr "ЦвÑÑ‚ на обхват за ръчно избрани разлики:" + +#: optiondialog.cpp:630 +msgid "Directory Comparison View:" +msgstr "Преглед на ÑравнÑването на директории:" + +#: optiondialog.cpp:636 +msgid "Newest file color:" +msgstr "ЦвÑÑ‚ на най-Ð½Ð¾Ð²Ð¸Ñ Ñ„Ð°Ð¹Ð»:" + +#: optiondialog.cpp:639 +msgid "" +"Changing this color will only be effective when starting the next directory " +"comparison." +msgstr "" +"ПромÑната на този цвÑÑ‚ ще има ефект Ñамо при ÑравнÑване на Ñледващата " +"директориÑ." + +#: optiondialog.cpp:644 +msgid "Oldest file color:" +msgstr "ЦвÑÑ‚ на най-ÑÑ‚Ð°Ñ€Ð¸Ñ Ñ„Ð°Ð¹Ð»:" + +#: optiondialog.cpp:651 +msgid "Middle age file color:" +msgstr "ЦвÑÑ‚ на Ñредно Ñтар файл:" + +#: optiondialog.cpp:658 +msgid "Color for missing files:" +msgstr "ЦвÑÑ‚ на липÑващи файлове:" + +#: optiondialog.cpp:670 +msgid "Editor" +msgstr "Редактор" + +#: optiondialog.cpp:670 +msgid "Editor Behavior" +msgstr "Поведение на редактора" + +#: optiondialog.cpp:680 +msgid "Tab inserts spaces" +msgstr "Табулатора вмъква интервали" + +#: optiondialog.cpp:683 +msgid "" +"On: Pressing tab generates the appropriate number of spaces.\n" +"Off: A Tab-character will be inserted." +msgstr "" +"Включено: ÐатиÑкането на Ñ‚Ð°Ð±ÑƒÐ»Ð°Ñ†Ð¸Ñ Ð³ÐµÐ½ÐµÑ€Ð¸Ñ€Ð° подходÑщ брой интервали.\n" +"Изключено: Ще бъде вмъкнат един Ñимвол за табулациÑ." + +#: optiondialog.cpp:689 +msgid "Tab size:" +msgstr "Големина на табулациÑ:" + +#: optiondialog.cpp:694 +msgid "Auto indentation" +msgstr "Ðвтоматичен отÑтъп" + +#: optiondialog.cpp:697 +msgid "" +"On: The indentation of the previous line is used for a new line.\n" +msgstr "" +"Включено: ОтÑтъпа на Ð¿Ñ€ÐµÐ´Ð¸ÑˆÐ½Ð¸Ñ Ñ€ÐµÐ´ Ñе използва за вÑеки нов.\n" + +#: optiondialog.cpp:701 +msgid "Auto copy selection" +msgstr "Ðвтоматично копиране на маркираното" + +#: optiondialog.cpp:704 +msgid "" +"On: Any selection is immediately written to the clipboard.\n" +"Off: You must explicitely copy e.g. via Ctrl-C." +msgstr "" +"Включено: Ð’Ñичко маркирано Ñе запиÑва веднага в ÑиÑÑ‚ÐµÐ¼Ð½Ð¸Ñ Ð±ÑƒÑ„ÐµÑ€.\n" +"Изключено: ТрÑбва изрично да копирате, например Ñ Ctrl-C." + +#: optiondialog.cpp:709 +msgid "Line end style:" +msgstr "Стил за край на реда:" + +#: optiondialog.cpp:721 +msgid "" +"Sets the line endings for when an edited file is saved.\n" +"DOS/Windows: CR+LF; UNIX: LF; with CR=0D, LF=0A" +msgstr "" +"Задава ÐºÑ€Ð°Ñ Ð½Ð° реда, когато Ñ€ÐµÐ´Ð°ÐºÑ‚Ð¸Ñ€Ð°Ð½Ð¸Ñ Ñ„Ð°Ð¹Ð» бива запиÑан.\n" +"DOS/Windows: CR+LF; UNIX: LF; with CR=0D, LF=0A" + +#: optiondialog.cpp:732 +msgid "Diff" +msgstr "Разлика" + +#: optiondialog.cpp:732 +msgid "Diff Settings" +msgstr "ÐаÑтройки за разлика" + +#: optiondialog.cpp:743 +msgid "Preserve carriage return" +msgstr "Запазване на връщането на нов ред" + +#: optiondialog.cpp:746 +msgid "" +"Show carriage return characters '\\r' if they exist.\n" +"Helps to compare files that were modified under different operating systems." +msgstr "" +"Показване на Ñимвол за нов ред \"\\r\" ако ÑъщеÑтвуват.\n" +"Помага за ÑравнÑването на файлове, които Ñа променени под различни операционни " +"ÑиÑтеми." + +#: optiondialog.cpp:751 +msgid "Ignore numbers" +msgstr "Игнориране на чиÑлата" + +#: optiondialog.cpp:754 +msgid "" +"Ignore number characters during line matching phase. (Similar to Ignore white " +"space.)\n" +"Might help to compare files with numeric data." +msgstr "" +"Игнориране на чиÑлата по време на фазата за Ñъвпадение. (Подобно на " +"игнорирането на интервалите.)\n" +"Може да помогне да Ñе ÑравнÑÑ‚ файлове Ñ Ñ‡Ð¸Ñлова информациÑ." + +#: optiondialog.cpp:759 +msgid "Ignore C/C++ comments" +msgstr "Игнориране коментарите на С/С++" + +#: optiondialog.cpp:761 +msgid "Treat C/C++ comments like white space." +msgstr "Третиране на С/С++ коментарите като интервали." + +#: optiondialog.cpp:765 +msgid "Ignore case" +msgstr "Игнориране на големи и малки букви" + +#: optiondialog.cpp:768 +msgid "Treat case differences like white space changes. ('a'<=>'A')" +msgstr "" +"Третиране на разликата в региÑтъра като промÑна в интервалите. (\"a\"<=>\"A\")" + +#: optiondialog.cpp:772 +msgid "Preprocessor command:" +msgstr "Команда за предварителна обработка:" + +#: optiondialog.cpp:776 +msgid "User defined pre-processing. (See the docs for details.)" +msgstr "" +"Дефинирана от Ð¿Ð¾Ñ‚Ñ€ÐµÐ±Ð¸Ñ‚ÐµÐ»Ñ Ð¿Ñ€ÐµÐ´Ð²Ð°Ñ€Ð¸Ñ‚ÐµÐ»Ð½Ð° обработка. (Погледнете документациÑта " +"за подробноÑти.)" + +#: optiondialog.cpp:779 +msgid "Line-matching preprocessor command:" +msgstr "Команда за предварителна обработка на Ñъвпадение на редове:" + +#: optiondialog.cpp:783 +msgid "" +"This pre-processor is only used during line matching.\n" +"(See the docs for details.)" +msgstr "" +"Тази предварителна обработка Ñе използва Ñамо при ÑÑŠÐ²Ð¿Ð°Ð´ÐµÐ½Ð¸Ñ Ð½Ð° редове.\n" +"(Вижте документациÑта за допълнителна информациÑ.)" + +#: optiondialog.cpp:786 +msgid "Try hard (slower)" +msgstr "Опитайте по-уÑърдно (по-бавно)" + +#: optiondialog.cpp:789 +msgid "" +"Enables the --minimal option for the external diff.\n" +"The analysis of big files will be much slower." +msgstr "" +"Включва наÑтройка --minimal за външното разделÑне.\n" +"Ðнализирането на големи файлове ще е много по-бавно." + +#: optiondialog.cpp:794 +msgid "Auto advance delay (ms):" +msgstr "ЗабавÑне на автоматичното придвижване (милиÑекунди):" + +#: optiondialog.cpp:799 +msgid "" +"When in Auto-Advance mode the result of the current selection is shown \n" +"for the specified time, before jumping to the next conflict. Range: 0-2000 ms" +msgstr "" +"Когато Ñте в режим на автоматично придвижване, резултатът на маркираното Ñе " +"показва \n" +"за определен период от време преди да Ñе премине на Ñледващ конфликт. Обхват: " +"0-2000 мÑек" + +#: optiondialog.cpp:809 +msgid "Merge Settings" +msgstr "ÐаÑтройки за Ñливане" + +#: optiondialog.cpp:822 +msgid "White space 2-file merge default:" +msgstr "Интервал по подразбиране при Ñливане на 2 файла:" + +#: optiondialog.cpp:826 optiondialog.cpp:839 +msgid "Manual Choice" +msgstr "Ръчен избор" + +#: optiondialog.cpp:830 optiondialog.cpp:844 +msgid "" +"Allow the merge algorithm to automatically select an input for white-space-only " +"changes." +msgstr "" +"ПозволÑване на ÑÐ»Ð¸Ð²Ð°Ñ‰Ð¸Ñ Ð°Ð»Ð³Ð¾Ñ€Ð¸Ñ‚ÑŠÐ¼ автоматично да избира вход за промени от типа " +"интервали." + +#: optiondialog.cpp:835 +msgid "White space 3-file merge default:" +msgstr "Интервал по подразбиране при Ñливане на 3 файла:" + +#: optiondialog.cpp:849 +msgid "Automatic Merge Regular Expression" +msgstr "Ðвтоматично Ñливане на регулÑрни изрази" + +#: optiondialog.cpp:858 smalldialogs.cpp:397 +msgid "Auto merge regular expression:" +msgstr "ÐвтоÑливане на регулÑрни изрази:" + +#: optiondialog.cpp:862 +msgid "" +"Regular expression for lines where KDiff3 should automatically choose one " +"source.\n" +"When a line with a conflict matches the regular expression then\n" +"- if available - C, otherwise B will be chosen." +msgstr "" +"РегулÑрните изрази за редовете, където KDiff3 Ñ‚Ñ€Ñбва автоматично да избере " +"източник.\n" +"Когато нÑкой ред Ñ ÐºÐ¾Ð½Ñ„Ð»Ð¸ÐºÑ‚ Ñъвпадне Ñ Ñ€ÐµÐ³ÑƒÐ»ÑÑ€Ð½Ð¸Ñ Ð¸Ð·Ñ€Ð°Ð·,\n" +"тогава \"- if available - C\", иначе ще бъде избран B." + +#: optiondialog.cpp:868 +msgid "Run regular expression auto merge on merge start" +msgstr "Изпълнение на автоÑливане на регулÑрни изрази при начало на Ñливането" + +#: optiondialog.cpp:870 +msgid "" +"Run the merge for auto merge regular expressions\n" +"immediately when a merge starts.\n" +msgstr "" +"Изпълнение на Ñливане за автоÑливане на регулÑрни изрази\n" +"веднага Ñлед започване на Ñливане.\n" + +#: optiondialog.cpp:875 +msgid "Version Control History Merging" +msgstr "Сливане иÑториÑта на верÑиите" + +#: optiondialog.cpp:884 smalldialogs.cpp:424 +msgid "History start regular expression:" +msgstr "РегулÑрен израз за начало на иÑториÑ:" + +#: optiondialog.cpp:888 +msgid "" +"Regular expression for the start of the version control history entry.\n" +"Usually this line contains the \"$Log$\"-keyword.\n" +"Default value: \".*\\$Log.*\\$.*\"" +msgstr "" +"РегулÑрен израз за Ñтартиране Ñливане на иÑториÑта.\n" +"Обикновено това Ñъдържа ключова дума \"$Log$\".\n" +"СтойноÑÑ‚ по подразбиране: \".*\\$Log.*\\$.*\"" + +#: optiondialog.cpp:894 smalldialogs.cpp:453 +msgid "History entry start regular expression:" +msgstr "РегулÑрен израз за начало на иÑториÑта:" + +#: optiondialog.cpp:906 +msgid "" +"A version control history entry consists of several lines.\n" +"Specify the regular expression to detect the first line (without the leading " +"comment).\n" +"Use parentheses to group the keys you want to use for sorting.\n" +"If left empty, then KDiff3 assumes that empty lines separate history entries.\n" +"See the documentation for details." +msgstr "" +"Сливането на иÑториÑта Ñе ÑÑŠÑтои от нÑколко реда.\n" +"ПоÑочете регулÑÑ€Ð½Ð¸Ñ Ð¸Ð·Ñ€Ð°Ð· за определÑне на Ð¿ÑŠÑ€Ð²Ð¸Ñ Ñ€ÐµÐ´ (без коментара).\n" +"Използвайте дървовидно подреждане за да групирате ключовете за Ñортиране.\n" +"Ðко е празно, тогава KDiff3 ще Ñчита, че празните редове разделÑÑ‚ запиÑите.\n" +"За повече подробноÑти вижте документациÑта." + +#: optiondialog.cpp:914 +msgid "History merge sorting" +msgstr "Сортиране Ñливането на иÑториÑта" + +#: optiondialog.cpp:916 +msgid "Sort version control history by a key." +msgstr "Сортиране на иÑториÑта за верÑиÑта Ñ ÐºÐ»Ð°Ð²Ð¸Ñˆ." + +#: optiondialog.cpp:926 +msgid "History entry start sort key order:" +msgstr "Ред за Ñортиране на ключове за иÑториÑ:" + +#: optiondialog.cpp:930 +msgid "" +"Each parentheses used in the regular expression for the history start entry\n" +"groups a key that can be used for sorting.\n" +"Specify the list of keys (that are numbered in order of occurrence\n" +"starting with 1) using ',' as separator (e.g. \"4,5,6,1,2,3,7\").\n" +"If left empty, then no sorting will be done.\n" +"See the documentation for details." +msgstr "" +"Ð’ÑÑко използвано дърво в регулÑÑ€Ð½Ð¸Ñ Ð¸Ð·Ñ€Ð°Ð· за Ñтартиране на иÑториÑта\n" +"групира ключовете по начин, по който могат да Ñе използват за Ñортиране.\n" +"ПоÑочете ÑпиÑъка Ñ ÐºÐ»ÑŽÑ‡Ð¾Ð²Ðµ (подреждат Ñе по реда на поÑвÑване,\n" +"започвайки от 1), които поддържат \",\" като разделител (напр. " +"\"4,5,6,1,2,3,7\").\n" +"Ðко е празно, тогава нÑма да има Ñортиране.\n" +"За повече Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð²Ð¸Ð¶Ñ‚Ðµ документациÑта." + +#: optiondialog.cpp:941 +msgid "Merge version control history on merge start" +msgstr "Сливане на иÑториÑта за верÑиÑта при Ñтартиране" + +#: optiondialog.cpp:943 +msgid "Run version control history automerge on merge start." +msgstr "ÐвтоÑливане на иÑториÑта за верÑиÑта при Ñтартиране." + +#: optiondialog.cpp:947 +msgid "Test your regular expressions" +msgstr "ТеÑтване на регулÑрни изрази" + +#: optiondialog.cpp:952 +msgid "Irrelevant merge command:" +msgstr "ÐеподходÑща команда за Ñливане:" + +#: optiondialog.cpp:956 +msgid "" +"If specified this script is run after automerge\n" +"when no other relevant changes were detected.\n" +"Called with the parameters: filename1 filename2 filename3" +msgstr "" +"Ðко е зададен, този Ñкрипт ще бъде изпълнен Ñлед автоÑливане\n" +"при уÑловие ,че не Ñа открити други промени.\n" +"Извикани Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð¸: има на файл 1има на файл 2 име на файл 3" + +#: optiondialog.cpp:966 +msgid "Directory Merge" +msgstr "Сливане на директории" + +#: optiondialog.cpp:975 +msgid "Recursive directories" +msgstr "РекурÑивни директории" + +#: optiondialog.cpp:977 +msgid "Whether to analyze subdirectories or not." +msgstr "Дали да Ñе анализират или да не Ñе анализират поддиректориите." + +#: optiondialog.cpp:979 +msgid "File pattern(s):" +msgstr "Шаблон(и) за файл:" + +#: optiondialog.cpp:984 +msgid "" +"Pattern(s) of files to be analyzed. \n" +"Wildcards: '*' and '?'\n" +"Several Patterns can be specified by using the separator: ';'" +msgstr "" +"Шаблони за файлове, които да Ñе анализират. \n" +"Wildcards: \"*\" and \"?\"\n" +"Могат да Ñе определÑÑ‚ нÑколко шаблона чрез използване на разделителÑ: \";\"" + +#: optiondialog.cpp:990 +msgid "File-anti-pattern(s):" +msgstr "Ðнти шаблон(и) за файл:" + +#: optiondialog.cpp:995 +msgid "" +"Pattern(s) of files to be excluded from analysis. \n" +"Wildcards: '*' and '?'\n" +"Several Patterns can be specified by using the separator: ';'" +msgstr "" +"Шаблони на файлове, които да Ñе изпълнÑÑ‚ от анализа. \n" +"Wildcards: \"*\" and \"?\"\n" +"Могат да Ñе определÑÑ‚ нÑколко шаблона чрез използване на разделителÑ: \";\"" + +#: optiondialog.cpp:1001 +msgid "Dir-anti-pattern(s):" +msgstr "Ðнти шаблон(и) за директориÑ:" + +#: optiondialog.cpp:1006 +msgid "" +"Pattern(s) of directories to be excluded from analysis. \n" +"Wildcards: '*' and '?'\n" +"Several Patterns can be specified by using the separator: ';'" +msgstr "" +"Шаблони на директории, които да Ñе изпълнÑÑ‚ от анализа. \n" +"Wildcards: \"*\" and \"?\"\n" +"Могат да Ñе определÑÑ‚ нÑколко шаблона чрез използване на разделителÑ: \";\"" + +#: optiondialog.cpp:1012 +msgid "Use .cvsignore" +msgstr "Използване на .cvsignore" + +#: optiondialog.cpp:1015 +msgid "" +"Extends the antipattern to anything that would be ignored by CVS.\n" +"Via local \".cvsignore\"-files this can be directory specific." +msgstr "" +"РазширÑва антишаблона до нещо, което ще бъде игнорирано от CVS.\n" +"Чрез локалното \".cvsignore\"-files това може да бъде наÑтроено за директориÑ." + +#: optiondialog.cpp:1020 +msgid "Find hidden files and directories" +msgstr "Откриване на Ñкрити файлове и директории" + +#: optiondialog.cpp:1023 +msgid "Finds files and directories with the hidden attribute." +msgstr "Открива файлове и директории ÑÑŠÑ Ñкрит атрибут." + +#: optiondialog.cpp:1025 +msgid "Finds files and directories starting with '.'." +msgstr "Открива файлове и директории, започващи Ñ \".\"." + +#: optiondialog.cpp:1029 +msgid "Follow file links" +msgstr "ПроÑледÑване на файловите препратки" + +#: optiondialog.cpp:1032 +msgid "" +"On: Compare the file the link points to.\n" +"Off: Compare the links." +msgstr "" +"Включено: СравнÑва файла, към който Ñочи препратката.\n" +"Изключено: СравнÑва препратките." + +#: optiondialog.cpp:1037 +msgid "Follow directory links" +msgstr "ПроÑледÑване на препратките към директориÑ" + +#: optiondialog.cpp:1040 +msgid "" +"On: Compare the directory the link points to.\n" +"Off: Compare the links." +msgstr "" +"Включено: СравнÑва директориÑта, към коÑто Ñочи препратката.\n" +"Изключено: СравнÑва препратките." + +#: optiondialog.cpp:1056 +msgid "Case sensitive filename comparison" +msgstr "СравнÑване на имена, чувÑтвително към региÑÑ‚ÑŠÑ€" + +#: optiondialog.cpp:1059 +msgid "" +"The directory comparison will compare files or directories when their names " +"match.\n" +"Set this option if the case of the names must match. (Default for Windows is " +"off, otherwise on.)" +msgstr "" +"СравнÑването на директории ще Ñравни дали Ñъвпадат имената на файлове или " +"директории.\n" +"включете тази опциÑ, ако региÑтъра Ñ‚Ñ€Ñбва да Ñъвпада. (По подразбиране за " +"Windows е изключено, иначе - включено.)" + +#: optiondialog.cpp:1063 +msgid "File Comparison Mode" +msgstr "Режим \"ÑравнÑване на файлове\"" + +#: optiondialog.cpp:1067 +msgid "Binary comparison" +msgstr "Двоично Ñравнение" + +#: optiondialog.cpp:1068 +msgid "Binary comparison of each file. (Default)" +msgstr "Двоично Ñравнение за вÑеки файл. (По подразбиране)" + +#: optiondialog.cpp:1070 +msgid "Full analysis" +msgstr "Пълен анализ" + +#: optiondialog.cpp:1071 +msgid "" +"Do a full analysis and show statistics information in extra columns.\n" +"(Slower than a binary comparison, much slower for binary files.)" +msgstr "" +"Прави пълен анализ и показва ÑтатиÑтичеÑка Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð² допълнителни колони.\n" +"(По-бавно от двоичното Ñравнение, много по-бавно за двоични файлове.)" + +#: optiondialog.cpp:1074 +msgid "Trust the modification date (unsafe)" +msgstr "ДоверÑване на датата на промÑна (опаÑно)" + +#: optiondialog.cpp:1075 +msgid "" +"Assume that files are equal if the modification date and file length are " +"equal.\n" +"Useful for big directories or slow networks." +msgstr "" +"Приема Ñе, че файловете Ñа еднакви, ако датата на промÑна и големината Ñа " +"еднакви.\n" +"Може да Ñе използва за големи директории или бавни мрежи." + +#: optiondialog.cpp:1078 +msgid "Trust the size (unsafe)" +msgstr "ДоверÑване на големината (опаÑно)" + +#: optiondialog.cpp:1079 +msgid "" +"Assume that files are equal if their file lengths are equal.\n" +"Useful for big directories or slow networks when the date is modified during " +"download." +msgstr "" +"Приема Ñе, че файловете Ñа еднакви ако техните големини Ñа еднакви.\n" +"Може да Ñе използва за големи директории или бавни мрежи, когато датата Ñе " +"Ð¿Ñ€Ð¾Ð¼ÐµÐ½Ñ Ð¿Ð¾ време на ÑвалÑне." + +#: optiondialog.cpp:1083 +msgid "Synchronize directories" +msgstr "Синхронизиране на директории" + +#: optiondialog.cpp:1086 +msgid "" +"Offers to store files in both directories so that\n" +"both directories are the same afterwards.\n" +"Works only when comparing two directories without specifying a destination." +msgstr "" +"Предлага да запише файловете и в двете директории така, че\n" +"и двете директории Ñлед това да Ñа едни и Ñъщи.\n" +"Работи Ñамо, когато Ñе ÑравнÑват две директории без определено меÑтонахождение." + +#: optiondialog.cpp:1092 +msgid "White space differences considered equal" +msgstr "Разликите в интервалите да Ñе приемат за еднакви" + +#: optiondialog.cpp:1095 +msgid "" +"If files differ only by white space consider them equal.\n" +"This is only active when full analysis is chosen." +msgstr "" +"Файловете да Ñе Ñчитат за еднакви, ако Ñе различават Ñамо по интервалите.\n" +"Това работи Ñамо ако е избран пълен анализ." + +#: optiondialog.cpp:1101 +msgid "Copy newer instead of merging (unsafe)" +msgstr "Копиране на по-новите, вмеÑто Ñливане (не е безопаÑно)" + +#: optiondialog.cpp:1104 +msgid "" +"Don't look inside, just take the newer file.\n" +"(Use this only if you know what you are doing!)\n" +"Only effective when comparing two directories." +msgstr "" +"Да не Ñе гледа вътре, а да Ñе взима по-Ð½Ð¾Ð²Ð¸Ñ Ñ„Ð°Ð¹Ð».\n" +"(Използвайте го Ñамо ако знаете какво правите!)\n" +"Ефективно е Ñамо ако Ñе ÑравнÑват две директории." + +#: optiondialog.cpp:1109 +msgid "Backup files (.orig)" +msgstr "Резервни ÐºÐ¾Ð¿Ð¸Ñ Ð½Ð° файлове (.orig)" + +#: optiondialog.cpp:1112 +msgid "" +"When a file would be saved over an old file, then the old file\n" +"will be renamed with a '.orig'-extension instead of being deleted." +msgstr "" +"Когато файл ще Ñе запиÑва върху Ñтар файл, тогава ÑтариÑÑ‚ файл\n" +"ще бъде преименуван Ñ Ñ€Ð°Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð¸Ðµ \".orig\" или ще бъде изтрит." + +#: optiondialog.cpp:1176 +msgid "Regional Settings" +msgstr "Регионални наÑтройки" + +#: optiondialog.cpp:1272 +msgid "Language (restart required)" +msgstr "Език (нужно е реÑтартиране)" + +#: optiondialog.cpp:1304 +msgid "" +"Choose the language of the GUI-strings or \"Auto\".\n" +"For a change of language to take place, quit and restart KDiff3." +msgstr "" +"Изберете език за ГПИ-низовете или \"Ðвтоматично\".\n" +"За да Ñе Ñмени езика, излезте от KDiff3 и Ñ Ñ€ÐµÑтартирайте." + +#: optiondialog.cpp:1322 +msgid "Use the same encoding for everything:" +msgstr "Използване на еднаква кодова таблица за вÑичко:" + +#: optiondialog.cpp:1325 +msgid "" +"Enable this allows to change all encodings by changing the first only.\n" +"Disable this if different individual settings are needed." +msgstr "" +"Включвайки това, можете да промените вÑички кодировки Ñ Ð¿Ñ€Ð¾Ð¼Ñната Ñамо на " +"първата.\n" +"Изключете Ñа необходими различни индивидуални наÑтройки." + +#: optiondialog.cpp:1330 +msgid "Note: Local Encoding is " +msgstr "Забележка: Локалната кодова таблица е " + +#: optiondialog.cpp:1334 +msgid "File Encoding for A:" +msgstr "Файлова кодова таблица за Ð:" + +#: optiondialog.cpp:1340 +msgid "" +"If enabled then Unicode (UTF-16 or UTF-8) encoding will be detected.\n" +"If the file encoding is not detected then the selected encoding will be used as " +"fallback.\n" +"(Unicode detection depends on the first bytes of a file - the byte order mark " +"\"BOM\".)" +msgstr "" +"Ðко е включена тази отметка, тогава кодирането Уникод (UTF-16 или UTF-8) ще " +"бъде намерено.\n" +"Ðко кодирането на файла не бъде намерено, тогава това ще бъде използвано по " +"подразбиране.\n" +"(Ðамирането на Уникод завиÑи от първите байтове във файла - byte order mark " +"\"BOM\".)" + +#: optiondialog.cpp:1344 optiondialog.cpp:1353 optiondialog.cpp:1362 +msgid "Auto Detect Unicode" +msgstr "Ðвтонамиране на Уникод" + +#: optiondialog.cpp:1349 +msgid "File Encoding for B:" +msgstr "Файлова кодова таблица за Б:" + +#: optiondialog.cpp:1358 +msgid "File Encoding for C:" +msgstr "Файлова кодова таблица за Ð’:" + +#: optiondialog.cpp:1367 +msgid "File Encoding for Merge Output and Saving:" +msgstr "Кодова таблица на файла за резултата от Ñливането и запиÑване:" + +#: optiondialog.cpp:1371 +msgid "Auto Select" +msgstr "Ðвтоматично маркиране" + +#: optiondialog.cpp:1374 +msgid "" +"If enabled then the encoding from the input files is used.\n" +"In ambiguous cases a dialog will ask the user to choose the encoding for " +"saving." +msgstr "" +"Ðко е включена тази отметка, тогава ще Ñе използва кодирането на входÑщите " +"файлове.\n" +"Когато има нещо неÑÑно, ще Ñе поÑви прозорец , от където може да избере " +"кодиране." + +#: optiondialog.cpp:1378 +msgid "File Encoding for Preprocessor Files:" +msgstr "Кодова таблица на файл за файлове за предварителна обработка:" + +#: optiondialog.cpp:1389 +msgid "Right To Left Language" +msgstr "Езици тип \"отдÑÑно на лÑво\"" + +#: optiondialog.cpp:1392 +msgid "" +"Some languages are read from right to left.\n" +"This setting will change the viewer and editor accordingly." +msgstr "" +"ÐÑкои езици Ñе четат отдÑÑно налÑво.\n" +"Тази наÑтройка ще промени Ñъответно редактора и визуализатора." + +#: optiondialog.cpp:1402 +msgid "Integration" +msgstr "ИнтеграциÑ" + +#: optiondialog.cpp:1402 +msgid "Integration Settings" +msgstr "ÐаÑтройки на интеграциÑта" + +#: optiondialog.cpp:1412 +msgid "Command line options to ignore:" +msgstr "Опции за команден ред, които да бъдат игнорирани:" + +#: optiondialog.cpp:1417 +msgid "" +"List of command line options that should be ignored when KDiff3 is used by " +"other tools.\n" +"Several values can be specified if separated via ';'\n" +"This will suppress the \"Unknown option\"-error." +msgstr "" +"Показва опциите за команден ред, които Ñ‚Ñ€Ñбва да бъдат игнорирани, когато " +"KDiff3 Ñе използва Ñ Ð´Ñ€ÑƒÐ³Ð¸ инÑтрументи.\n" +"Могат да бъдат поÑочени нÑколко ÑтойноÑти, разделени Ñ \";\" \n" +"Това ще елиминира грешката \"ÐеизвеÑтна грешка\"." + +#: optiondialog.cpp:1480 +msgid "" +"You selected a variable width font.\n" +"\n" +"Because this program doesn't handle variable width fonts\n" +"correctly, you might experience problems while editing.\n" +"\n" +"Do you want to continue or do you want to select another font." +msgstr "" +"Избрали Ñте шрифт Ñ Ð¿Ñ€Ð¾Ð¼ÐµÐ½Ð»Ð¸Ð²Ð° дължина.\n" +"\n" +"Тъй като тази програма не може да обработва такива шрифтове\n" +"правилно, може да имате проблеми по време на редактиране.\n" +"\n" +"ИÑкате ли да продължите или ще изберете друг шрифт?" + +#: optiondialog.cpp:1484 +msgid "Incompatible Font" +msgstr "ÐеÑъвмеÑтими шрифтове" + +#: optiondialog.cpp:1485 +msgid "Continue at Own Risk" +msgstr "Продължете на ÑобÑтвена отговорноÑÑ‚" + +#: optiondialog.cpp:1485 +msgid "Select Another Font" +msgstr "Изберете друг шрифт" + +#: optiondialog.cpp:1521 +msgid "This resets all options. Not only those of the current topic." +msgstr "Това ще възÑтанови вÑички наÑтройки. Ðе Ñамо тези в текущата тема." + +#: pdiff.cpp:258 +msgid "PreprocessorCmd: " +msgstr "PreprocessorCmd: " + +#: pdiff.cpp:263 +msgid "" +"The following option(s) you selected might change data:\n" +msgstr "" +"Следните наÑтройки, които избрахте може да променÑÑ‚ информациÑ:\n" + +#: pdiff.cpp:264 +msgid "" +"\n" +"Most likely this is not wanted during a merge.\n" +"Do you want to disable these settings or continue with these settings active?" +msgstr "" +"\n" +"Ðай-вероÑтно това не е желателно по време на Ñливане.\n" +"ИÑкате ли да изключите тези наÑтройки или ще продължите Ñ Ñ‚ÑÑ…?" + +#: pdiff.cpp:266 +msgid "Option Unsafe for Merging" +msgstr "ОпциÑта не е безопаÑна при Ñливане" + +#: pdiff.cpp:267 +msgid "Use These Options During Merge" +msgstr "Използвайте тези опции при Ñливане" + +#: pdiff.cpp:267 +msgid "Disable Unsafe Options" +msgstr "Изключване на опаÑните опции" + +#: pdiff.cpp:297 +msgid "Loading A" +msgstr "Зареждане на Ð" + +#: pdiff.cpp:301 +msgid "Loading B" +msgstr "Зареждане на Б" + +#: pdiff.cpp:318 pdiff.cpp:344 +msgid "Diff: A <-> B" +msgstr "Разлика: A <-> Б" + +#: pdiff.cpp:324 pdiff.cpp:366 +msgid "Linediff: A <-> B" +msgstr "Разлика на линиÑ: A <-> Б" + +#: pdiff.cpp:335 +msgid "Loading C" +msgstr "Зареждане на Ð’" + +#: pdiff.cpp:347 +msgid "Diff: B <-> C" +msgstr "Разлика: Б <-> B" + +#: pdiff.cpp:350 +msgid "Diff: A <-> C" +msgstr "Разлика: Ð <-> B" + +#: pdiff.cpp:369 +msgid "Linediff: B <-> C" +msgstr "Разлика на ред: Б <-> B" + +#: pdiff.cpp:372 +msgid "Linediff: A <-> C" +msgstr "Разлика на ред: A <-> B" + +#: pdiff.cpp:513 +msgid "All input files contain the same text, but are not binary equal." +msgstr "Входните файлове Ñъдържат еднакъв текÑÑ‚, но не Ñа двоично еднакви." + +#: pdiff.cpp:515 pdiff.cpp:517 pdiff.cpp:519 +msgid "" +"Files %1 and %2 are binary equal.\n" +msgstr "" +"Файлове %1 и %2 Ñа двоично еднакви.\n" + +#: pdiff.cpp:516 pdiff.cpp:518 pdiff.cpp:520 +msgid "" +"Files %1 and %2 have equal text, but are not binary equal. \n" +msgstr "" +"Файлове %1 и %2 Ñа Ñ ÐµÐ´Ð½Ð°ÐºÑŠÐ² текÑÑ‚, но не Ñа двоично еднакви. \n" + +#: pdiff.cpp:530 +msgid "" +"Some inputfiles don't seem to be pure textfiles.\n" +"Note that the KDiff3-merge was not meant for binary data.\n" +"Continue at your own risk." +msgstr "" +"ÐÑкои входни файлове не Ñа чиÑти текÑтови файлове.\n" +"Имайте предвид, че Ñливането на KDiff3 не е предназначено за двоична " +"информациÑ.\n" +"Продължавате на ÑобÑтвена отговорноÑÑ‚." + +#: pdiff.cpp:979 +msgid "Abort" +msgstr "ПрекъÑване" + +#: pdiff.cpp:985 pdiff.cpp:1073 +msgid "Opening files..." +msgstr "ОтварÑне на файлове..." + +#: pdiff.cpp:1050 pdiff.cpp:1121 +msgid "File open error" +msgstr "Грешка при отварÑне на файл" + +#: pdiff.cpp:1153 +msgid "Cutting selection..." +msgstr "ИзрÑзване на маркираното..." + +#: pdiff.cpp:1174 +msgid "Copying selection to clipboard..." +msgstr "Копиране на маркираното в ÑиÑÑ‚ÐµÐ¼Ð½Ð¸Ñ Ð±ÑƒÑ„ÐµÑ€..." + +#: pdiff.cpp:1190 +msgid "Inserting clipboard contents..." +msgstr "Вмъкване Ñъдържанието на ÑиÑÑ‚ÐµÐ¼Ð½Ð¸Ñ Ð±ÑƒÑ„ÐµÑ€..." + +#: pdiff.cpp:1713 +msgid "Save && Continue" +msgstr "Ð—Ð°Ð¿Ð¸Ñ Ð¸ продължение" + +#: pdiff.cpp:1713 +msgid "Continue Without Saving" +msgstr "Продължение без запиÑ" + +#: pdiff.cpp:1920 +msgid "Search complete." +msgstr "ТърÑенето завърши." + +#: pdiff.cpp:1920 +msgid "Search Complete" +msgstr "ТърÑенето завърши" + +#: pdiff.cpp:2144 +msgid "Nothing is selected in either diff input window." +msgstr "Ðищо не е избрано в прозореца за разлики." + +#: pdiff.cpp:2144 +msgid "Error while adding manual diff range" +msgstr "Грешка при ръчно добавÑне на охват за разликите" + +#. i18n: file kdiff3_part.rc line 4 +#: rc.cpp:3 +#, no-c-format +msgid "&KDiff3" +msgstr "&KDiff3" + +#. i18n: file kdiff3_part.rc line 13 +#: rc.cpp:6 +#, no-c-format +msgid "Configure KDiff3" +msgstr "Конфигуриране на KDiff3" + +#. i18n: file kdiff3_shell.rc line 7 +#: rc.cpp:15 +#, no-c-format +msgid "&Directory" +msgstr "&ДиректориÑ" + +#. i18n: file kdiff3_shell.rc line 30 +#: rc.cpp:18 +#, no-c-format +msgid "Current Item Merge Operation" +msgstr "ÐžÐ¿ÐµÑ€Ð°Ñ†Ð¸Ñ Ð¿Ð¾ Ñливане на Ñ‚ÐµÐºÑƒÑ‰Ð¸Ñ ÐµÐ»ÐµÐ¼ÐµÐ½Ñ‚" + +#. i18n: file kdiff3_shell.rc line 38 +#: rc.cpp:21 +#, no-c-format +msgid "Current Item Sync Operation" +msgstr "ÐžÐ¿ÐµÑ€Ð°Ñ†Ð¸Ñ Ð¿Ð¾ ÑÐ¸Ð½Ñ…Ñ€Ð¾Ð½Ð¸Ð·Ð°Ñ†Ð¸Ñ Ð½Ð° Ñ‚ÐµÐºÑƒÑ‰Ð¸Ñ ÐµÐ»ÐµÐ¼ÐµÐ½Ñ‚" + +#. i18n: file kdiff3_shell.rc line 50 +#: rc.cpp:24 +#, no-c-format +msgid "&Movement" +msgstr "&Движение" + +#. i18n: file kdiff3_shell.rc line 61 +#: rc.cpp:27 +#, no-c-format +msgid "D&iffview" +msgstr "Изглед на раз&делител" + +#. i18n: file kdiff3_shell.rc line 73 +#: rc.cpp:30 +#, no-c-format +msgid "&Merge" +msgstr "&Сливане" + +#. i18n: file kdiff3_shell.rc line 95 +#: rc.cpp:33 +#, no-c-format +msgid "&Window" +msgstr "&Прозорец" + +#: smalldialogs.cpp:53 +msgid "A (Base):" +msgstr "Ð (базов):" + +#: smalldialogs.cpp:59 smalldialogs.cpp:75 smalldialogs.cpp:91 +#: smalldialogs.cpp:134 +msgid "File..." +msgstr "Файл..." + +#: smalldialogs.cpp:61 smalldialogs.cpp:77 smalldialogs.cpp:93 +#: smalldialogs.cpp:136 +msgid "Dir..." +msgstr "ДиректориÑ..." + +#: smalldialogs.cpp:86 +msgid "C (Optional):" +msgstr "Ð’ (по избор):" + +#: smalldialogs.cpp:108 +msgid "Swap/Copy Names ..." +msgstr "Суап/Копиране на имена ..." + +#: smalldialogs.cpp:114 smalldialogs.cpp:115 smalldialogs.cpp:116 +msgid "Swap %1<->%2" +msgstr "Суап %1<->%2" + +#: smalldialogs.cpp:117 smalldialogs.cpp:118 smalldialogs.cpp:119 +msgid "Copy %1->Output" +msgstr "Копиране %1-> Изходни данни" + +#: smalldialogs.cpp:120 smalldialogs.cpp:121 smalldialogs.cpp:122 +msgid "Swap %1<->Output" +msgstr "Суап %1 <-> Изходни данни" + +#: smalldialogs.cpp:129 +msgid "Output (optional):" +msgstr "Резултат (по избор):" + +#: smalldialogs.cpp:158 +msgid "Configure..." +msgstr "Конфигуриране..." + +#: smalldialogs.cpp:347 +msgid "Search text:" +msgstr "ТърÑене на текÑÑ‚:" + +#: smalldialogs.cpp:354 +msgid "Case sensitive" +msgstr "ЧувÑтвителен региÑÑ‚ÑŠÑ€" + +#: smalldialogs.cpp:357 +msgid "Search A" +msgstr "ТърÑене в Ð" + +#: smalldialogs.cpp:362 +msgid "Search B" +msgstr "ТърÑене в Б" + +#: smalldialogs.cpp:367 +msgid "Search C" +msgstr "ТърÑене във Ð’" + +#: smalldialogs.cpp:372 +msgid "Search output" +msgstr "Резултат от Ñ‚ÑŠÑ€Ñенето" + +#: smalldialogs.cpp:377 +msgid "&Search" +msgstr "&ТърÑене" + +#: smalldialogs.cpp:394 +msgid "Regular Expression Tester" +msgstr "ТеÑÑ‚ за регулÑрни изрази" + +#: smalldialogs.cpp:405 +msgid "Example auto merge line:" +msgstr "Примерен ред за начало на автоÑливане:" + +#: smalldialogs.cpp:407 +msgid "For auto merge test copy a line as used in your files." +msgstr "За теÑтване на автоÑливането копирайте ред от използваните файлове." + +#: smalldialogs.cpp:413 smalldialogs.cpp:442 smalldialogs.cpp:479 +msgid "Match result:" +msgstr "Съвпадащ резултат:" + +#: smalldialogs.cpp:432 +msgid "Example history start line (with leading comment):" +msgstr "Ред за примерно Ñтартиране на иÑÑ‚Ð¾Ñ€Ð¸Ñ (в водещ коментар):" + +#: smalldialogs.cpp:435 +msgid "" +"Copy a history start line as used in your files,\n" +"including the leading comment." +msgstr "" +"Копирайте ред на започване на иÑÑ‚Ð¾Ñ€Ð¸Ñ ÐºÐ°Ñ‚Ð¾ във файловете,\n" +"включително и Ð²Ð¾Ð´ÐµÑ‰Ð¸Ñ ÐºÐ¾Ð¼ÐµÐ½Ñ‚Ð°Ñ€." + +#: smalldialogs.cpp:461 +msgid "History sort key order:" +msgstr "Ред за Ñортиращ ключ:" + +#: smalldialogs.cpp:469 +msgid "Example history entry start line (without leading comment):" +msgstr "Примерен ред за Ñтартиране на иÑÑ‚Ð¾Ñ€Ð¸Ñ (без водещ коментар):" + +#: smalldialogs.cpp:471 +msgid "" +"Copy a history entry start line as used in your files,\n" +"but omit the leading comment." +msgstr "" +"Копирайте реда за начало на иÑÑ‚Ð¾Ñ€Ð¸Ñ ÐºÐ°Ñ‚Ð¾ във файловете,\n" +"но пропуÑнете Ð²Ð¾Ð´ÐµÑ‰Ð¸Ñ ÐºÐ¾Ð¼ÐµÐ½Ñ‚Ð°Ñ€." + +#: smalldialogs.cpp:486 +msgid "Sort key result:" +msgstr "Резултат от Ñортирането на ключове:" + +#: smalldialogs.cpp:537 smalldialogs.cpp:547 smalldialogs.cpp:568 +msgid "Match success." +msgstr "Съвпадението е уÑпешно." + +#: smalldialogs.cpp:541 smalldialogs.cpp:551 smalldialogs.cpp:574 +msgid "Match failed." +msgstr "Съвпадението беше неуÑпешен." + +#: smalldialogs.cpp:559 +msgid "Opening and closing parentheses don't match in regular expression." +msgstr "ОтварÑнето и затварÑнето на дървото не Ñъвпада Ñ Ñ€ÐµÐ³ÑƒÐ»ÑÑ€Ð½Ð¸Ñ Ð¸Ð·Ñ€Ð°Ð·." diff --git a/po/br.po b/po/br.po new file mode 100644 index 0000000..8590370 --- /dev/null +++ b/po/br.po @@ -0,0 +1,2329 @@ +# KDE breton translation +# Thierry Vignaud , 2004-2005 +msgid "" +msgstr "" +"Project-Id-Version: kdeextragear-1/kdiff3.po\n" +"POT-Creation-Date: 2006-11-05 08:45+0100\n" +"PO-Revision-Date: 2004-09-20 15:44+0200\n" +"Last-Translator: Thierry Vignaud \n" +"Language-Team: br \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: _translatorinfo.cpp:1 +msgid "" +"_: NAME OF TRANSLATORS\n" +"Your names" +msgstr "Thierry Vignaud, Jañ-Mai Drapier" + +#: _translatorinfo.cpp:3 +msgid "" +"_: EMAIL OF TRANSLATORS\n" +"Your emails" +msgstr "tvignaud@mandriva.com, jdrapier@club-internet.fr" + +#: diff.cpp:246 +msgid "Writing clipboard data to temp file failed." +msgstr "" + +#: diff.cpp:250 +msgid "From Clipboard" +msgstr "Eus ar golver" + +#: diff.cpp:491 +msgid "" +"Preprocessing possibly failed. Check this command:\n" +"\n" +" %1\n" +"\n" +"The preprocessing command will be disabled now." +msgstr "" + +#: diff.cpp:526 +msgid "" +"The line-matching-preprocessing possibly failed. Check this command:\n" +"\n" +" %1\n" +"\n" +"The line-matching-preprocessing command will be disabled now." +msgstr "" + +#: diff.cpp:1631 diff.cpp:1645 +msgid "" +"Data loss error:\n" +"If it is reproducable please contact the author.\n" +msgstr "" + +#: diff.cpp:1633 diff.cpp:1647 +msgid "Severe Internal Error" +msgstr "Fazi diabarzh grevus" + +#: difftextwindow.cpp:1643 kdiff3.cpp:753 +msgid "Top line" +msgstr "" + +#: difftextwindow.cpp:1653 +msgid "End" +msgstr "Dibenn" + +#: directorymergewindow.cpp:142 +msgid "Mix of links and normal files." +msgstr "" + +#: directorymergewindow.cpp:149 +msgid "Link: " +msgstr "Liamm : " + +#: directorymergewindow.cpp:157 +msgid "Size. " +msgstr "Ment. " + +#: directorymergewindow.cpp:170 +msgid "Date & Size: " +msgstr "Deiziad ha ment : " + +#: directorymergewindow.cpp:179 directorymergewindow.cpp:185 +msgid "Creating temp copy of %1 failed." +msgstr "" + +#: directorymergewindow.cpp:196 directorymergewindow.cpp:204 +msgid "Opening %1 failed." +msgstr "Sac'het eo digeiñ ar restr %1." + +#: directorymergewindow.cpp:208 +msgid "Comparing file..." +msgstr "" + +#: directorymergewindow.cpp:218 directorymergewindow.cpp:224 +#, c-format +msgid "Error reading from %1" +msgstr "Fazi en ur less eus %1." + +#: directorymergewindow.cpp:282 +msgid "Name" +msgstr "Anv" + +#: directorymergewindow.cpp:286 +msgid "Operation" +msgstr "Ober" + +#: directorymergewindow.cpp:287 +msgid "Status" +msgstr "Stad" + +#: directorymergewindow.cpp:288 +msgid "Unsolved" +msgstr "" + +#: directorymergewindow.cpp:289 +msgid "Solved" +msgstr "" + +#: directorymergewindow.cpp:290 +msgid "Nonwhite" +msgstr "" + +#: directorymergewindow.cpp:291 +msgid "White" +msgstr "Gwenn" + +#: directorymergewindow.cpp:319 +msgid "" +"You are currently doing a directory merge. Are you sure, you want to abort the " +"merge and rescan the directory?" +msgstr "" + +#: directorymergewindow.cpp:320 directorymergewindow.cpp:2868 +msgid "Rescan" +msgstr "" + +#: directorymergewindow.cpp:320 kdiff3.cpp:603 pdiff.cpp:979 +msgid "Continue Merging" +msgstr "" + +#: directorymergewindow.cpp:462 +msgid "Opening of directories failed:" +msgstr "Sac'het eo digeriñ ar renkelloù :" + +#: directorymergewindow.cpp:465 +msgid "" +"Dir A \"%1\" does not exist or is not a directory.\n" +msgstr "" + +#: directorymergewindow.cpp:468 +msgid "" +"Dir B \"%1\" does not exist or is not a directory.\n" +msgstr "" + +#: directorymergewindow.cpp:471 +msgid "" +"Dir C \"%1\" does not exist or is not a directory.\n" +msgstr "" + +#: directorymergewindow.cpp:473 +msgid "Directory Open Error" +msgstr "Fazi en ur zigeriñ ar renkell" + +#: directorymergewindow.cpp:481 +msgid "" +"The destination directory must not be the same as A or B when three directories " +"are merged.\n" +"Check again before continuing." +msgstr "" + +#: directorymergewindow.cpp:483 +msgid "Parameter Warning" +msgstr "" + +#: directorymergewindow.cpp:488 +msgid "Scanning directories..." +msgstr "Emaon o tielfennañ ar renkelloù ..." + +#: directorymergewindow.cpp:537 +msgid "Reading Directory A" +msgstr "Emaon o lenn ar renkell A" + +#: directorymergewindow.cpp:559 +msgid "Reading Directory B" +msgstr "Emaon o lenn ar renkell B" + +#: directorymergewindow.cpp:581 +msgid "Reading Directory C" +msgstr "Emaon o lenn ar renkell C" + +#: directorymergewindow.cpp:607 +msgid "Some subdirectories were not readable in" +msgstr "" + +#: directorymergewindow.cpp:612 +msgid "Check the permissions of the subdirectories." +msgstr "" + +#: directorymergewindow.cpp:646 kdiff3.cpp:552 kdiff3.cpp:636 kdiff3.cpp:661 +#: kdiff3.cpp:934 kdiff3.cpp:955 pdiff.cpp:1059 pdiff.cpp:1131 pdiff.cpp:1169 +#: pdiff.cpp:1185 pdiff.cpp:1215 pdiff.cpp:1226 +msgid "Ready." +msgstr "Prest." + +#: directorymergewindow.cpp:660 +msgid "Directory Comparison Status" +msgstr "" + +#: directorymergewindow.cpp:661 +msgid "Number of subdirectories:" +msgstr "Niver a is-renkelloù :" + +#: directorymergewindow.cpp:662 +msgid "Number of equal files:" +msgstr "" + +#: directorymergewindow.cpp:663 +msgid "Number of different files:" +msgstr "" + +#: directorymergewindow.cpp:666 +msgid "Number of manual merges:" +msgstr "" + +#: directorymergewindow.cpp:802 +msgid "This affects all merge operations." +msgstr "" + +#: directorymergewindow.cpp:803 +msgid "Changing All Merge Operations" +msgstr "" + +#: directorymergewindow.cpp:803 mergeresultwindow.cpp:287 +msgid "C&ontinue" +msgstr "&Kenderc'hel" + +#: directorymergewindow.cpp:1169 +msgid "Processing " +msgstr "O treterez " + +#: directorymergewindow.cpp:1647 directorymergewindow.cpp:1653 +msgid "To do." +msgstr "Traoù d'ober." + +#: directorymergewindow.cpp:1756 directorymergewindow.cpp:2899 +msgid "Copy A to B" +msgstr "Eilañ A da B" + +#: directorymergewindow.cpp:1757 directorymergewindow.cpp:2900 +msgid "Copy B to A" +msgstr "Eilañ B da A" + +#: directorymergewindow.cpp:1758 directorymergewindow.cpp:2901 +msgid "Delete A" +msgstr "Lemel A" + +#: directorymergewindow.cpp:1759 directorymergewindow.cpp:2902 +msgid "Delete B" +msgstr "Lemel B" + +#: directorymergewindow.cpp:1760 +msgid "Delete A & B" +msgstr "Lemel A & B" + +#: directorymergewindow.cpp:1761 directorymergewindow.cpp:2904 +msgid "Merge to A" +msgstr "" + +#: directorymergewindow.cpp:1762 directorymergewindow.cpp:2905 +msgid "Merge to B" +msgstr "" + +#: directorymergewindow.cpp:1763 +msgid "Merge to A & B" +msgstr "" + +#: directorymergewindow.cpp:1767 directorymergewindow.cpp:2896 +msgid "Delete (if exists)" +msgstr "" + +#: directorymergewindow.cpp:1768 directorymergewindow.cpp:1769 +#: directorymergewindow.cpp:2895 optiondialog.cpp:809 smalldialogs.cpp:102 +msgid "Merge" +msgstr "Dastum" + +#: directorymergewindow.cpp:1768 directorymergewindow.cpp:1769 +msgid "Merge (manual)" +msgstr "" + +#: directorymergewindow.cpp:1770 +msgid "Error: Conflicting File Types" +msgstr "" + +#: directorymergewindow.cpp:1771 +msgid "Error: Dates are equal but files are not." +msgstr "" + +#: directorymergewindow.cpp:1795 directorymergewindow.cpp:1824 +#: directorymergewindow.cpp:1849 +msgid "This operation is currently not possible." +msgstr "" + +#: directorymergewindow.cpp:1795 directorymergewindow.cpp:1824 +#: directorymergewindow.cpp:1849 directorymergewindow.cpp:2106 +msgid "Operation Not Possible" +msgstr "" + +#: directorymergewindow.cpp:1888 +msgid "" +"This should never happen: \n" +"\n" +"mergeResultSaved: m_pMFI=0\n" +"\n" +"If you know how to reproduce this, please contact the program author." +msgstr "" + +#: directorymergewindow.cpp:1888 +msgid "Program Error" +msgstr "Fazi gant ar meziant" + +#: directorymergewindow.cpp:1899 +msgid "" +"An error occurred while copying.\n" +msgstr "" +"Degouezhet ez eus ar fazi en ur eilañ.\n" + +#: directorymergewindow.cpp:1900 directorymergewindow.cpp:2306 +msgid "Merge Error" +msgstr "Fazi en ur dastum" + +#: directorymergewindow.cpp:1905 directorymergewindow.cpp:2311 +msgid "Error." +msgstr "Fazi." + +#: directorymergewindow.cpp:1910 directorymergewindow.cpp:2202 +#: directorymergewindow.cpp:2242 +msgid "Done." +msgstr "Graet." + +#: directorymergewindow.cpp:1933 +msgid "Not saved." +msgstr "N'eo ket enrollet." + +#: directorymergewindow.cpp:1968 +msgid "Unknown merge operation. (This must never happen!)" +msgstr "" + +#: directorymergewindow.cpp:2000 +msgid "Unknown merge operation." +msgstr "" + +#: directorymergewindow.cpp:2015 +msgid "" +"The merge is about to begin.\n" +"\n" +"Choose \"Do it\" if you have read the instructions and know what you are " +"doing.\n" +"Choosing \"Simulate it\" will tell you what would happen.\n" +"\n" +"Be aware that this program still has beta status and there is NO WARRANTY " +"whatsoever! Make backups of your vital data!" +msgstr "" + +#: directorymergewindow.cpp:2020 +msgid "Starting Merge" +msgstr "" + +#: directorymergewindow.cpp:2020 +msgid "Do It" +msgstr "" + +#: directorymergewindow.cpp:2020 +msgid "Simulate It" +msgstr "" + +#: directorymergewindow.cpp:2046 +msgid "" +"The highlighted item has a different type in the different directories. Select " +"what to do." +msgstr "" + +#: directorymergewindow.cpp:2055 +msgid "" +"The modification dates of the file are equal but the files are not. Select what " +"to do." +msgstr "" + +#: directorymergewindow.cpp:2106 +msgid "" +"This operation is currently not possible because directory merge is currently " +"running." +msgstr "" + +#: directorymergewindow.cpp:2166 +msgid "" +"There was an error in the last step.\n" +"Do you want to continue with the item that caused the error or do you want to " +"skip this item?" +msgstr "" + +#: directorymergewindow.cpp:2168 +msgid "Continue merge after an error" +msgstr "" + +#: directorymergewindow.cpp:2168 +msgid "Continue With Last Item" +msgstr "" + +#: directorymergewindow.cpp:2168 +msgid "Skip Item" +msgstr "Tremen an dra" + +#: directorymergewindow.cpp:2202 +msgid "Skipped." +msgstr "Tremenet." + +#: directorymergewindow.cpp:2209 directorymergewindow.cpp:2435 +msgid "In progress..." +msgstr "Ober a ran ..." + +#: directorymergewindow.cpp:2257 +msgid "Merge operation complete." +msgstr "" + +#: directorymergewindow.cpp:2257 directorymergewindow.cpp:2260 +msgid "Merge Complete" +msgstr "" + +#: directorymergewindow.cpp:2269 +msgid "" +"Simulated merge complete: Check if you agree with the proposed operations." +msgstr "" + +#: directorymergewindow.cpp:2305 +msgid "" +"An error occurred. Press OK to see detailed information.\n" +msgstr "" +"Degouezhet ez eus ar fazi. Gwaskit OK da welet an titouroù munut.\n" + +#: directorymergewindow.cpp:2348 +msgid "Error: While deleting %1: Creating backup failed." +msgstr "" + +#: directorymergewindow.cpp:2355 +msgid "delete directory recursively( %1 )" +msgstr "" + +#: directorymergewindow.cpp:2357 +msgid "delete( %1 )" +msgstr "dilemel( %1 )" + +#: directorymergewindow.cpp:2372 +msgid "Error: delete dir operation failed while trying to read the directory." +msgstr "" + +#: directorymergewindow.cpp:2391 +msgid "Error: rmdir( %1 ) operation failed." +msgstr "" + +#: directorymergewindow.cpp:2401 +msgid "Error: delete operation failed." +msgstr "Fazi : sac'het eo lemel." + +#: directorymergewindow.cpp:2427 +msgid "manual merge( %1, %2, %3 -> %4)" +msgstr "" + +#: directorymergewindow.cpp:2430 +msgid "" +" Note: After a manual merge the user should continue by pressing F7." +msgstr "" + +#: directorymergewindow.cpp:2453 +msgid "Error: copy( %1 -> %2 ) failed.Deleting existing destination failed." +msgstr "" + +#: directorymergewindow.cpp:2463 +msgid "copyLink( %1 -> %2 )" +msgstr "" + +#: directorymergewindow.cpp:2474 +msgid "Error: copyLink failed: Remote links are not yet supported." +msgstr "" + +#: directorymergewindow.cpp:2480 +msgid "Error: copyLink failed." +msgstr "" + +#: directorymergewindow.cpp:2500 +msgid "copy( %1 -> %2 )" +msgstr "eilañ( %1 -> %2 )" + +#: directorymergewindow.cpp:2526 +msgid "Error during rename( %1 -> %2 ): Cannot delete existing destination." +msgstr "" + +#: directorymergewindow.cpp:2532 +msgid "rename( %1 -> %2 )" +msgstr "adenvel( %1 -> %2 )" + +#: directorymergewindow.cpp:2541 +msgid "Error: Rename failed." +msgstr "" + +#: directorymergewindow.cpp:2559 +msgid "Error during makeDir of %1. Cannot delete existing file." +msgstr "" + +#: directorymergewindow.cpp:2575 +msgid "makeDir( %1 )" +msgstr "" + +#: directorymergewindow.cpp:2585 +msgid "Error while creating directory." +msgstr "Fazi en ur c'hrouiñ ur renkell." + +#: directorymergewindow.cpp:2608 directorymergewindow.cpp:2725 +msgid "Dest" +msgstr "Dehaez." + +#: directorymergewindow.cpp:2612 directorymergewindow.cpp:2650 +msgid "Dir" +msgstr "Renkell" + +#: directorymergewindow.cpp:2613 +msgid "Type" +msgstr "Seurt" + +#: directorymergewindow.cpp:2614 +msgid "Size" +msgstr "Ment" + +#: directorymergewindow.cpp:2615 +msgid "Attr" +msgstr "" + +#: directorymergewindow.cpp:2616 +msgid "Last Modification" +msgstr "Kemm diwezhañ" + +#: directorymergewindow.cpp:2617 +msgid "Link-Destination" +msgstr "Liamm dehaezadur" + +#: directorymergewindow.cpp:2667 +msgid "not available" +msgstr "n'eo ket da gaout" + +#: directorymergewindow.cpp:2687 +msgid "A (Dest): " +msgstr "" + +#: directorymergewindow.cpp:2690 +msgid "A (Base): " +msgstr "" + +#: directorymergewindow.cpp:2696 +msgid "B (Dest): " +msgstr "" + +#: directorymergewindow.cpp:2704 +msgid "C (Dest): " +msgstr "" + +#: directorymergewindow.cpp:2710 +msgid "Dest: " +msgstr "Dehaez. : " + +#: directorymergewindow.cpp:2775 +msgid "Save Directory Merge State As..." +msgstr "" + +#: directorymergewindow.cpp:2862 +msgid "Start/Continue Directory Merge" +msgstr "" + +#: directorymergewindow.cpp:2863 +msgid "Run Operation for Current Item" +msgstr "" + +#: directorymergewindow.cpp:2864 +msgid "Compare Selected File" +msgstr "" + +#: directorymergewindow.cpp:2865 +msgid "Merge Current File" +msgstr "" + +#: directorymergewindow.cpp:2866 +msgid "Fold All Subdirs" +msgstr "" + +#: directorymergewindow.cpp:2867 +msgid "Unfold All Subdirs" +msgstr "" + +#: directorymergewindow.cpp:2871 +msgid "Choose A for All Items" +msgstr "" + +#: directorymergewindow.cpp:2872 +msgid "Choose B for All Items" +msgstr "" + +#: directorymergewindow.cpp:2873 +msgid "Choose C for All Items" +msgstr "" + +#: directorymergewindow.cpp:2874 +msgid "Auto-Choose Operation for All Items" +msgstr "" + +#: directorymergewindow.cpp:2875 +msgid "No Operation for All Items" +msgstr "" + +#: directorymergewindow.cpp:2880 +msgid "Show Identical Files" +msgstr "" + +#: directorymergewindow.cpp:2881 +msgid "Show Different Files" +msgstr "" + +#: directorymergewindow.cpp:2882 +msgid "Show Files only in A" +msgstr "Diskouez restroù a zo e A hepken" + +#: directorymergewindow.cpp:2883 +msgid "Show Files only in B" +msgstr "Diskouez restroù a zo e B hepken" + +#: directorymergewindow.cpp:2884 +msgid "Show Files only in C" +msgstr "Diskouez restroù a zo e C hepken" + +#: directorymergewindow.cpp:2888 +msgid "Compare Explicitly Selected Files" +msgstr "" + +#: directorymergewindow.cpp:2889 +msgid "Merge Explicitly Selected Files" +msgstr "" + +#: directorymergewindow.cpp:2891 directorymergewindow.cpp:2898 +msgid "Do Nothing" +msgstr "Ober netra" + +#: directorymergewindow.cpp:2892 +msgid "A" +msgstr "A" + +#: directorymergewindow.cpp:2893 +msgid "B" +msgstr "G" + +#: directorymergewindow.cpp:2894 +msgid "C" +msgstr "C" + +#: directorymergewindow.cpp:2903 +msgid "Delete A && B" +msgstr "Lemel A && B" + +#: directorymergewindow.cpp:2906 +msgid "Merge to A && B" +msgstr "" + +#: fileaccess.cpp:595 +msgid "" +"While trying to make a backup, deleting an older backup failed. \n" +"Filename: " +msgstr "" + +#: fileaccess.cpp:602 +msgid "" +"While trying to make a backup, renaming failed. \n" +"Filenames: " +msgstr "" + +#: fileaccess.cpp:624 +#, c-format +msgid "Getting file status: %1" +msgstr "" + +#: fileaccess.cpp:667 +#, c-format +msgid "Reading file: %1" +msgstr "Emaon o lenn ar restr : %1" + +#: fileaccess.cpp:703 +#, c-format +msgid "Writing file: %1" +msgstr "Emaon o skrivañ ar restr : %1" + +#: fileaccess.cpp:731 +msgid "Out of memory" +msgstr "Memor ebet" + +#: fileaccess.cpp:766 +#, c-format +msgid "Making directory: %1" +msgstr "Oc'h oberiañ ar renkell : %1" + +#: fileaccess.cpp:786 +#, c-format +msgid "Removing directory: %1" +msgstr "Emaon o tilemel ar renkell : %1" + +#: fileaccess.cpp:801 +#, c-format +msgid "Removing file: %1" +msgstr "Emaon o tilemel ar restr : %1" + +#: fileaccess.cpp:817 +msgid "Creating symbolic link: %1 -> %2" +msgstr "" + +#: fileaccess.cpp:843 +msgid "Renaming file: %1 -> %2" +msgstr "Emaon oc'h adenvel ar restr : %1 -> %2" + +#: fileaccess.cpp:879 +msgid "Copying file: %1 -> %2" +msgstr "Emaon oc'h eilañ ar restr : %1 -> %2" + +#: fileaccess.cpp:893 +#, c-format +msgid "" +"Error during file copy operation: Opening file for reading failed. Filename: %1" +msgstr "" + +#: fileaccess.cpp:899 +#, c-format +msgid "" +"Error during file copy operation: Opening file for writing failed. Filename: %1" +msgstr "" + +#: fileaccess.cpp:914 +#, c-format +msgid "Error during file copy operation: Reading failed. Filename: %1" +msgstr "" + +#: fileaccess.cpp:923 +#, c-format +msgid "Error during file copy operation: Writing failed. Filename: %1" +msgstr "" + +#: fileaccess.cpp:1219 +msgid "Reading directory: " +msgstr "Emaon o lenn ar renkell :" + +#: fileaccess.cpp:1348 +#, c-format +msgid "Listing directory: %1" +msgstr "" + +#: kdiff3.cpp:142 +msgid "Current Configuration:" +msgstr "" + +#: kdiff3.cpp:147 +msgid "Config Option Error:" +msgstr "Fazi er dibarzh kefluniañ :" + +#: kdiff3.cpp:187 +msgid "Option --auto used, but no output file specified." +msgstr "" + +#: kdiff3.cpp:323 +msgid "Option --auto ignored for directory comparison." +msgstr "" + +#: kdiff3.cpp:359 +msgid "Saving failed." +msgstr "Fazi en ur enrollañ." + +#: kdiff3.cpp:386 pdiff.cpp:1041 pdiff.cpp:1112 +msgid "Opening of these files failed:" +msgstr "" + +#: kdiff3.cpp:395 +msgid "File Open Error" +msgstr "Fazi en ur zigeriñ ar restr" + +#: kdiff3.cpp:418 +msgid "Opens documents for comparison..." +msgstr "" + +#: kdiff3.cpp:423 +msgid "Saves the merge result. All conflicts must be solved!" +msgstr "" + +#: kdiff3.cpp:425 +msgid "Saves the current document as..." +msgstr "Enrollañ a ra an teul red e ..." + +#: kdiff3.cpp:427 +msgid "Print the differences" +msgstr "" + +#: kdiff3.cpp:429 +msgid "Quits the application" +msgstr "Kuitaat a ra ar meziant" + +#: kdiff3.cpp:431 +msgid "Cuts the selected section and puts it to the clipboard" +msgstr "" + +#: kdiff3.cpp:433 +msgid "Copies the selected section to the clipboard" +msgstr "Eilañ a ra an dachenn dibabet er golver" + +#: kdiff3.cpp:435 +msgid "Pastes the clipboard contents to actual position" +msgstr "" + +#: kdiff3.cpp:437 +msgid "Select everything in current window" +msgstr "" + +#: kdiff3.cpp:439 +msgid "Search for a string" +msgstr "" + +#: kdiff3.cpp:441 +msgid "Search again for the string" +msgstr "" + +#: kdiff3.cpp:443 +msgid "Enables/disables the toolbar" +msgstr "Diskouez/Kuzhat ar varrenn &ostilhoù" + +#: kdiff3.cpp:445 +msgid "Enables/disables the statusbar" +msgstr "Kuzhat/Diskouez ar varenn stad" + +#: kdiff3.cpp:449 +msgid "Configure KDiff3..." +msgstr "Kefluniañ KDiff3 ..." + +#: kdiff3.cpp:470 +msgid "Go to Current Delta" +msgstr "" + +#: kdiff3.cpp:471 +msgid "Go to First Delta" +msgstr "" + +#: kdiff3.cpp:472 +msgid "Go to Last Delta" +msgstr "" + +#: kdiff3.cpp:473 +msgid "(Skips white space differences when \"Show White Space\" is disabled.)" +msgstr "" + +#: kdiff3.cpp:474 +msgid "" +"(Does not skip white space differences even when \"Show White Space\" is " +"disabled.)" +msgstr "" + +#: kdiff3.cpp:475 +msgid "Go to Previous Delta" +msgstr "" + +#: kdiff3.cpp:477 +msgid "Go to Next Delta" +msgstr "" + +#: kdiff3.cpp:479 +msgid "Go to Previous Conflict" +msgstr "" + +#: kdiff3.cpp:481 +msgid "Go to Next Conflict" +msgstr "" + +#: kdiff3.cpp:483 +msgid "Go to Previous Unsolved Conflict" +msgstr "" + +#: kdiff3.cpp:485 +msgid "Go to Next Unsolved Conflict" +msgstr "" + +#: kdiff3.cpp:487 +msgid "Select Line(s) From A" +msgstr "" + +#: kdiff3.cpp:488 +msgid "Select Line(s) From B" +msgstr "" + +#: kdiff3.cpp:489 +msgid "Select Line(s) From C" +msgstr "" + +#: kdiff3.cpp:490 +msgid "Automatically Go to Next Unsolved Conflict After Source Selection" +msgstr "" + +#: kdiff3.cpp:492 +msgid "Show Space && Tabulator Characters for Differences" +msgstr "" + +#: kdiff3.cpp:493 +msgid "Show White Space" +msgstr "" + +#: kdiff3.cpp:495 +msgid "Show Line Numbers" +msgstr "Diskouez niverennoù linenn" + +#: kdiff3.cpp:496 +msgid "Choose A Everywhere" +msgstr "" + +#: kdiff3.cpp:497 +msgid "Choose B Everywhere" +msgstr "" + +#: kdiff3.cpp:498 +msgid "Choose C Everywhere" +msgstr "" + +#: kdiff3.cpp:499 +msgid "Choose A for All Unsolved Conflicts" +msgstr "" + +#: kdiff3.cpp:500 +msgid "Choose B for All Unsolved Conflicts" +msgstr "" + +#: kdiff3.cpp:501 +msgid "Choose C for All Unsolved Conflicts" +msgstr "" + +#: kdiff3.cpp:502 +msgid "Choose A for All Unsolved Whitespace Conflicts" +msgstr "" + +#: kdiff3.cpp:503 +msgid "Choose B for All Unsolved Whitespace Conflicts" +msgstr "" + +#: kdiff3.cpp:504 +msgid "Choose C for All Unsolved Whitespace Conflicts" +msgstr "" + +#: kdiff3.cpp:505 +msgid "Automatically Solve Simple Conflicts" +msgstr "" + +#: kdiff3.cpp:506 +msgid "Set Deltas to Conflicts" +msgstr "" + +#: kdiff3.cpp:507 +msgid "Run Regular Expression Auto Merge" +msgstr "" + +#: kdiff3.cpp:508 +msgid "Automatically Solve History Conflicts" +msgstr "" + +#: kdiff3.cpp:509 +msgid "Split Diff At Selection" +msgstr "" + +#: kdiff3.cpp:510 +msgid "Join Selected Diffs" +msgstr "" + +#: kdiff3.cpp:512 +msgid "Show Window A" +msgstr "Diskouez ar prenestr A" + +#: kdiff3.cpp:513 +msgid "Show Window B" +msgstr "Diskouez ar prenestr B" + +#: kdiff3.cpp:514 +msgid "Show Window C" +msgstr "Diskouez ar prenestr C" + +#: kdiff3.cpp:515 kdiff3.cpp:526 +msgid "Focus Next Window" +msgstr "Fokuz ouzh ar brenestr a-heul" + +#: kdiff3.cpp:517 +msgid "Normal Overview" +msgstr "" + +#: kdiff3.cpp:518 +msgid "A vs. B Overview" +msgstr "" + +#: kdiff3.cpp:519 +msgid "A vs. C Overview" +msgstr "" + +#: kdiff3.cpp:520 +msgid "B vs. C Overview" +msgstr "" + +#: kdiff3.cpp:521 +msgid "Word Wrap Diff Windows" +msgstr "" + +#: kdiff3.cpp:522 +msgid "Add Manual Diff Alignment" +msgstr "" + +#: kdiff3.cpp:523 +msgid "Clear All Manual Diff Alignments" +msgstr "" + +#: kdiff3.cpp:528 +msgid "Focus Prev Window" +msgstr "Fokuz ouzh ar brenestr diaraok" + +#: kdiff3.cpp:529 +msgid "Toggle Split Orientation" +msgstr "" + +#: kdiff3.cpp:531 +msgid "Dir && Text Split Screen View" +msgstr "" + +#: kdiff3.cpp:533 +msgid "Toggle Between Dir && Text View" +msgstr "" + +#: kdiff3.cpp:582 pdiff.cpp:1712 +msgid "The merge result hasn't been saved." +msgstr "" + +#: kdiff3.cpp:583 +msgid "Save && Quit" +msgstr "Enrollañ && kuitaat" + +#: kdiff3.cpp:583 +msgid "Quit Without Saving" +msgstr "Kuitaat hep enrollañ" + +#: kdiff3.cpp:591 pdiff.cpp:1721 +msgid "Saving the merge result failed." +msgstr "" + +#: kdiff3.cpp:602 pdiff.cpp:978 +msgid "" +"You are currently doing a directory merge. Are you sure, you want to abort?" +msgstr "" + +#: kdiff3.cpp:625 +msgid "Saving file..." +msgstr "Emaon oc'h enrollañ ar restr ..." + +#: kdiff3.cpp:642 +msgid "Saving file with a new filename..." +msgstr "Oc'h enrollañ ar restr gant un anv restr nevez ..." + +#: kdiff3.cpp:732 +msgid "Printing..." +msgstr "Emaon o voulañ ..." + +#: kdiff3.cpp:738 kdiff3.cpp:900 +msgid "Printing aborted." +msgstr "Nullet eo ar voulañ." + +#: kdiff3.cpp:870 +msgid "Selection" +msgstr "Diuzadenn" + +#: kdiff3.cpp:896 +msgid "Printing completed." +msgstr "Echu eo moulañ." + +#: kdiff3.cpp:906 +msgid "Exiting..." +msgstr "Emaon o kuitaat ..." + +#: kdiff3.cpp:918 +msgid "Toggling toolbar..." +msgstr "Emaon o kuzhat/diskouez ar varenn ostilh ..." + +#: kdiff3.cpp:939 +msgid "Toggle the statusbar..." +msgstr "Diskouez/Kuzhat ar varenn stad ..." + +#: kdiff3_part.cpp:155 kdiff3_part.cpp:224 +msgid "Couldn't find files for comparison." +msgstr "" + +#: kdiff3_part.cpp:291 +msgid "KDiff3Part" +msgstr "KDiff3Part" + +#: kdiff3_shell.cpp:78 +msgid "" +"Could not find our part!\n" +"This usually happens due to an installation problem. Please read the " +"README-file in the source package for details." +msgstr "" + +#: main.cpp:35 +msgid "Tool for Comparison and Merge of Files and Directories" +msgstr "" + +#: main.cpp:40 +msgid "Merge the input." +msgstr "" + +#: main.cpp:42 +msgid "Explicit base file. For compatibility with certain tools." +msgstr "" + +#: main.cpp:44 +msgid "Output file. Implies -m. E.g.: -o newfile.txt" +msgstr "" + +#: main.cpp:45 +msgid "Output file, again. (For compatibility with certain tools.)" +msgstr "" + +#: main.cpp:46 +msgid "No GUI if all conflicts are auto-solvable. (Needs -o file)" +msgstr "" + +#: main.cpp:47 +msgid "Don't solve conflicts automatically. (For compatibility...)" +msgstr "" + +#: main.cpp:48 +msgid "Visible name replacement for input file 1 (base)." +msgstr "" + +#: main.cpp:49 +msgid "Visible name replacement for input file 2." +msgstr "" + +#: main.cpp:50 +msgid "Visible name replacement for input file 3." +msgstr "" + +#: main.cpp:52 +msgid "Alternative visible name replacement. Supply this once for every input." +msgstr "" + +#: main.cpp:53 +msgid "" +"Override a config setting. Use once for every setting. E.g.: --cs " +"\"AutoAdvance=1\"" +msgstr "" + +#: main.cpp:54 +msgid "Show list of config settings and current values." +msgstr "" + +#: main.cpp:55 +msgid "Use a different config file." +msgstr "" + +#: main.cpp:59 +msgid "file1 to open (base, if not specified via --base)" +msgstr "" + +#: main.cpp:60 +msgid "file2 to open" +msgstr "restr2 da zigeriñ" + +#: main.cpp:61 +msgid "file3 to open" +msgstr "restr3 da zigeriñ" + +#: main.cpp:93 +msgid "Ignored. (User defined.)" +msgstr "" + +#. i18n: file kdiff3_part.rc line 16 +#: main.cpp:173 rc.cpp:9 +#, no-c-format +msgid "KDiff3" +msgstr "KDiff3" + +#: main.cpp:186 +msgid "+ Many thanks to those who reported bugs and contributed ideas!" +msgstr "" + +#: mergeresultwindow.cpp:136 mergeresultwindow.cpp:939 +#: mergeresultwindow.cpp:953 mergeresultwindow.cpp:965 +#: mergeresultwindow.cpp:977 +msgid "Number of remaining unsolved conflicts: %1 (of which %2 are whitespace)" +msgstr "" + +#: mergeresultwindow.cpp:285 +msgid "" +"The output has been modified.\n" +"If you continue your changes will be lost." +msgstr "" + +#: mergeresultwindow.cpp:797 pdiff.cpp:511 +msgid "All input files are binary equal." +msgstr "" + +#: mergeresultwindow.cpp:799 +msgid "All input files contain the same text." +msgstr "" + +#: mergeresultwindow.cpp:801 +msgid "" +"Files A and B are binary equal.\n" +msgstr "" + +#: mergeresultwindow.cpp:802 +msgid "" +"Files A and B have equal text. \n" +msgstr "" + +#: mergeresultwindow.cpp:803 +msgid "" +"Files A and C are binary equal.\n" +msgstr "" + +#: mergeresultwindow.cpp:804 +msgid "" +"Files A and C have equal text. \n" +msgstr "" + +#: mergeresultwindow.cpp:805 +msgid "" +"Files B and C are binary equal.\n" +msgstr "" + +#: mergeresultwindow.cpp:806 +msgid "" +"Files B and C have equal text. \n" +msgstr "" + +#: mergeresultwindow.cpp:812 +msgid "Total number of conflicts: " +msgstr "" + +#: mergeresultwindow.cpp:813 +msgid "" +"\n" +"Nr of automatically solved conflicts: " +msgstr "" + +#: mergeresultwindow.cpp:814 +msgid "" +"\n" +"Nr of unsolved conflicts: " +msgstr "" + +#: mergeresultwindow.cpp:816 +msgid "Conflicts" +msgstr "" + +#: mergeresultwindow.cpp:1652 +msgid "" +msgstr "" + +#: mergeresultwindow.cpp:1660 +msgid "" +msgstr "" + +#: mergeresultwindow.cpp:1662 mergeresultwindow.cpp:2427 +msgid "" +msgstr "" + +#: mergeresultwindow.cpp:2635 +msgid "" +"Not all conflicts are solved yet.\n" +"File not saved.\n" +msgstr "" + +#: mergeresultwindow.cpp:2637 +msgid "Conflicts Left" +msgstr "" + +#: mergeresultwindow.cpp:2649 +msgid "" +"\n" +"\n" +"Creating backup failed. File not saved." +msgstr "" + +#: mergeresultwindow.cpp:2649 mergeresultwindow.cpp:2689 +msgid "File Save Error" +msgstr "" + +#: mergeresultwindow.cpp:2689 +msgid "Error while writing." +msgstr "Fazi en ur skrivañ." + +#: mergeresultwindow.cpp:3020 +msgid "Output" +msgstr "Ezkas" + +#: mergeresultwindow.cpp:3032 mergeresultwindow.cpp:3139 +msgid "[Modified]" +msgstr "[Kemmet]" + +#: mergeresultwindow.cpp:3039 +msgid "Encoding for saving" +msgstr "" + +#: mergeresultwindow.cpp:3075 mergeresultwindow.cpp:3081 +#: mergeresultwindow.cpp:3087 +msgid "Codec from" +msgstr "" + +#: optiondialog.cpp:362 +msgid "Unicode, 8 bit" +msgstr "Unicode, 8 bit" + +#: optiondialog.cpp:363 +msgid "Unicode" +msgstr "Unicode" + +#: optiondialog.cpp:364 +msgid "Latin1" +msgstr "Latin1" + +#: optiondialog.cpp:383 +msgid "Change this if non-ASCII characters are not displayed correctly." +msgstr "" + +#: optiondialog.cpp:510 +msgid "Editor & Diff Output Font" +msgstr "" + +#: optiondialog.cpp:531 +msgid "Italic font for deltas" +msgstr "" + +#: optiondialog.cpp:534 +msgid "" +"Selects the italic version of the font for differences.\n" +"If the font doesn't support italic characters, then this does nothing." +msgstr "" + +#: optiondialog.cpp:542 +msgid "Color" +msgstr "Liv" + +#: optiondialog.cpp:542 +msgid "Colors Settings" +msgstr "Kefluniadur al livioù" + +#: optiondialog.cpp:556 +msgid "Editor and Diff Views:" +msgstr "" + +#: optiondialog.cpp:564 +msgid "Foreground color:" +msgstr "Liv war-c'horre :" + +#: optiondialog.cpp:570 +msgid "Background color:" +msgstr "Liv an drekleur :" + +#: optiondialog.cpp:578 +msgid "Diff background color:" +msgstr "" + +#: optiondialog.cpp:585 +msgid "Color A:" +msgstr "Liv A :" + +#: optiondialog.cpp:592 +msgid "Color B:" +msgstr "Liv B :" + +#: optiondialog.cpp:599 +msgid "Color C:" +msgstr "Liv C :" + +#: optiondialog.cpp:605 +msgid "Conflict color:" +msgstr "" + +#: optiondialog.cpp:612 +msgid "Current range background color:" +msgstr "" + +#: optiondialog.cpp:619 +msgid "Current range diff background color:" +msgstr "" + +#: optiondialog.cpp:625 +msgid "Color for manually aligned difference ranges:" +msgstr "" + +#: optiondialog.cpp:630 +msgid "Directory Comparison View:" +msgstr "" + +#: optiondialog.cpp:636 +msgid "Newest file color:" +msgstr "" + +#: optiondialog.cpp:639 +msgid "" +"Changing this color will only be effective when starting the next directory " +"comparison." +msgstr "" + +#: optiondialog.cpp:644 +msgid "Oldest file color:" +msgstr "" + +#: optiondialog.cpp:651 +msgid "Middle age file color:" +msgstr "" + +#: optiondialog.cpp:658 +msgid "Color for missing files:" +msgstr "" + +#: optiondialog.cpp:670 +msgid "Editor" +msgstr "Aozer" + +#: optiondialog.cpp:670 +msgid "Editor Behavior" +msgstr "Emzalc'h an aozer" + +#: optiondialog.cpp:680 +msgid "Tab inserts spaces" +msgstr "" + +#: optiondialog.cpp:683 +msgid "" +"On: Pressing tab generates the appropriate number of spaces.\n" +"Off: A Tab-character will be inserted." +msgstr "" + +#: optiondialog.cpp:689 +msgid "Tab size:" +msgstr "Ment ar bevennig :" + +#: optiondialog.cpp:694 +msgid "Auto indentation" +msgstr "Emgeflosk" + +#: optiondialog.cpp:697 +msgid "" +"On: The indentation of the previous line is used for a new line.\n" +msgstr "" + +#: optiondialog.cpp:701 +msgid "Auto copy selection" +msgstr "" + +#: optiondialog.cpp:704 +msgid "" +"On: Any selection is immediately written to the clipboard.\n" +"Off: You must explicitely copy e.g. via Ctrl-C." +msgstr "" + +#: optiondialog.cpp:709 +msgid "Line end style:" +msgstr "" + +#: optiondialog.cpp:721 +msgid "" +"Sets the line endings for when an edited file is saved.\n" +"DOS/Windows: CR+LF; UNIX: LF; with CR=0D, LF=0A" +msgstr "" + +#: optiondialog.cpp:732 +#, fuzzy +msgid "Diff" +msgstr "KDiff3" + +#: optiondialog.cpp:732 +#, fuzzy +msgid "Diff Settings" +msgstr "Kefluniadur rann-vro" + +#: optiondialog.cpp:743 +msgid "Preserve carriage return" +msgstr "" + +#: optiondialog.cpp:746 +msgid "" +"Show carriage return characters '\\r' if they exist.\n" +"Helps to compare files that were modified under different operating systems." +msgstr "" + +#: optiondialog.cpp:751 +msgid "Ignore numbers" +msgstr "" + +#: optiondialog.cpp:754 +msgid "" +"Ignore number characters during line matching phase. (Similar to Ignore white " +"space.)\n" +"Might help to compare files with numeric data." +msgstr "" + +#: optiondialog.cpp:759 +msgid "Ignore C/C++ comments" +msgstr "" + +#: optiondialog.cpp:761 +msgid "Treat C/C++ comments like white space." +msgstr "" + +#: optiondialog.cpp:765 +msgid "Ignore case" +msgstr "" + +#: optiondialog.cpp:768 +msgid "Treat case differences like white space changes. ('a'<=>'A')" +msgstr "" + +#: optiondialog.cpp:772 +msgid "Preprocessor command:" +msgstr "" + +#: optiondialog.cpp:776 +msgid "User defined pre-processing. (See the docs for details.)" +msgstr "" + +#: optiondialog.cpp:779 +msgid "Line-matching preprocessor command:" +msgstr "" + +#: optiondialog.cpp:783 +msgid "" +"This pre-processor is only used during line matching.\n" +"(See the docs for details.)" +msgstr "" + +#: optiondialog.cpp:786 +msgid "Try hard (slower)" +msgstr "" + +#: optiondialog.cpp:789 +msgid "" +"Enables the --minimal option for the external diff.\n" +"The analysis of big files will be much slower." +msgstr "" + +#: optiondialog.cpp:794 +msgid "Auto advance delay (ms):" +msgstr "" + +#: optiondialog.cpp:799 +msgid "" +"When in Auto-Advance mode the result of the current selection is shown \n" +"for the specified time, before jumping to the next conflict. Range: 0-2000 ms" +msgstr "" + +#: optiondialog.cpp:809 +#, fuzzy +msgid "Merge Settings" +msgstr "Kefluniadur rann-vro" + +#: optiondialog.cpp:822 +msgid "White space 2-file merge default:" +msgstr "" + +#: optiondialog.cpp:826 optiondialog.cpp:839 +msgid "Manual Choice" +msgstr "Choazh diwar zorn" + +#: optiondialog.cpp:830 optiondialog.cpp:844 +msgid "" +"Allow the merge algorithm to automatically select an input for white-space-only " +"changes." +msgstr "" + +#: optiondialog.cpp:835 +msgid "White space 3-file merge default:" +msgstr "" + +#: optiondialog.cpp:849 +msgid "Automatic Merge Regular Expression" +msgstr "" + +#: optiondialog.cpp:858 smalldialogs.cpp:397 +msgid "Auto merge regular expression:" +msgstr "" + +#: optiondialog.cpp:862 +msgid "" +"Regular expression for lines where KDiff3 should automatically choose one " +"source.\n" +"When a line with a conflict matches the regular expression then\n" +"- if available - C, otherwise B will be chosen." +msgstr "" + +#: optiondialog.cpp:868 +msgid "Run regular expression auto merge on merge start" +msgstr "" + +#: optiondialog.cpp:870 +msgid "" +"Run the merge for auto merge regular expressions\n" +"immediately when a merge starts.\n" +msgstr "" + +#: optiondialog.cpp:875 +msgid "Version Control History Merging" +msgstr "" + +#: optiondialog.cpp:884 smalldialogs.cpp:424 +msgid "History start regular expression:" +msgstr "" + +#: optiondialog.cpp:888 +msgid "" +"Regular expression for the start of the version control history entry.\n" +"Usually this line contains the \"$Log$\"-keyword.\n" +"Default value: \".*\\$Log.*\\$.*\"" +msgstr "" + +#: optiondialog.cpp:894 smalldialogs.cpp:453 +msgid "History entry start regular expression:" +msgstr "" + +#: optiondialog.cpp:906 +msgid "" +"A version control history entry consists of several lines.\n" +"Specify the regular expression to detect the first line (without the leading " +"comment).\n" +"Use parentheses to group the keys you want to use for sorting.\n" +"If left empty, then KDiff3 assumes that empty lines separate history entries.\n" +"See the documentation for details." +msgstr "" + +#: optiondialog.cpp:914 +msgid "History merge sorting" +msgstr "" + +#: optiondialog.cpp:916 +msgid "Sort version control history by a key." +msgstr "" + +#: optiondialog.cpp:926 +msgid "History entry start sort key order:" +msgstr "" + +#: optiondialog.cpp:930 +msgid "" +"Each parentheses used in the regular expression for the history start entry\n" +"groups a key that can be used for sorting.\n" +"Specify the list of keys (that are numbered in order of occurrence\n" +"starting with 1) using ',' as separator (e.g. \"4,5,6,1,2,3,7\").\n" +"If left empty, then no sorting will be done.\n" +"See the documentation for details." +msgstr "" + +#: optiondialog.cpp:941 +msgid "Merge version control history on merge start" +msgstr "" + +#: optiondialog.cpp:943 +msgid "Run version control history automerge on merge start." +msgstr "" + +#: optiondialog.cpp:947 +msgid "Test your regular expressions" +msgstr "" + +#: optiondialog.cpp:952 +msgid "Irrelevant merge command:" +msgstr "" + +#: optiondialog.cpp:956 +msgid "" +"If specified this script is run after automerge\n" +"when no other relevant changes were detected.\n" +"Called with the parameters: filename1 filename2 filename3" +msgstr "" + +#: optiondialog.cpp:966 +msgid "Directory Merge" +msgstr "" + +#: optiondialog.cpp:975 +msgid "Recursive directories" +msgstr "" + +#: optiondialog.cpp:977 +msgid "Whether to analyze subdirectories or not." +msgstr "" + +#: optiondialog.cpp:979 +msgid "File pattern(s):" +msgstr "Sil(où) restr :" + +#: optiondialog.cpp:984 +msgid "" +"Pattern(s) of files to be analyzed. \n" +"Wildcards: '*' and '?'\n" +"Several Patterns can be specified by using the separator: ';'" +msgstr "" + +#: optiondialog.cpp:990 +msgid "File-anti-pattern(s):" +msgstr "" + +#: optiondialog.cpp:995 +msgid "" +"Pattern(s) of files to be excluded from analysis. \n" +"Wildcards: '*' and '?'\n" +"Several Patterns can be specified by using the separator: ';'" +msgstr "" + +#: optiondialog.cpp:1001 +msgid "Dir-anti-pattern(s):" +msgstr "" + +#: optiondialog.cpp:1006 +msgid "" +"Pattern(s) of directories to be excluded from analysis. \n" +"Wildcards: '*' and '?'\n" +"Several Patterns can be specified by using the separator: ';'" +msgstr "" + +#: optiondialog.cpp:1012 +msgid "Use .cvsignore" +msgstr "Implijit .cvsignore" + +#: optiondialog.cpp:1015 +msgid "" +"Extends the antipattern to anything that would be ignored by CVS.\n" +"Via local \".cvsignore\"-files this can be directory specific." +msgstr "" + +#: optiondialog.cpp:1020 +msgid "Find hidden files and directories" +msgstr "" + +#: optiondialog.cpp:1023 +msgid "Finds files and directories with the hidden attribute." +msgstr "" + +#: optiondialog.cpp:1025 +msgid "Finds files and directories starting with '.'." +msgstr "" + +#: optiondialog.cpp:1029 +msgid "Follow file links" +msgstr "Heuliañ liammoù ar retroù" + +#: optiondialog.cpp:1032 +msgid "" +"On: Compare the file the link points to.\n" +"Off: Compare the links." +msgstr "" + +#: optiondialog.cpp:1037 +msgid "Follow directory links" +msgstr "Heuliañ liammoù ar renkelloù" + +#: optiondialog.cpp:1040 +msgid "" +"On: Compare the directory the link points to.\n" +"Off: Compare the links." +msgstr "" + +#: optiondialog.cpp:1056 +msgid "Case sensitive filename comparison" +msgstr "" + +#: optiondialog.cpp:1059 +msgid "" +"The directory comparison will compare files or directories when their names " +"match.\n" +"Set this option if the case of the names must match. (Default for Windows is " +"off, otherwise on.)" +msgstr "" + +#: optiondialog.cpp:1063 +msgid "File Comparison Mode" +msgstr "" + +#: optiondialog.cpp:1067 +msgid "Binary comparison" +msgstr "" + +#: optiondialog.cpp:1068 +msgid "Binary comparison of each file. (Default)" +msgstr "" + +#: optiondialog.cpp:1070 +msgid "Full analysis" +msgstr "" + +#: optiondialog.cpp:1071 +msgid "" +"Do a full analysis and show statistics information in extra columns.\n" +"(Slower than a binary comparison, much slower for binary files.)" +msgstr "" + +#: optiondialog.cpp:1074 +msgid "Trust the modification date (unsafe)" +msgstr "" + +#: optiondialog.cpp:1075 +msgid "" +"Assume that files are equal if the modification date and file length are " +"equal.\n" +"Useful for big directories or slow networks." +msgstr "" + +#: optiondialog.cpp:1078 +msgid "Trust the size (unsafe)" +msgstr "" + +#: optiondialog.cpp:1079 +msgid "" +"Assume that files are equal if their file lengths are equal.\n" +"Useful for big directories or slow networks when the date is modified during " +"download." +msgstr "" + +#: optiondialog.cpp:1083 +msgid "Synchronize directories" +msgstr "" + +#: optiondialog.cpp:1086 +msgid "" +"Offers to store files in both directories so that\n" +"both directories are the same afterwards.\n" +"Works only when comparing two directories without specifying a destination." +msgstr "" + +#: optiondialog.cpp:1092 +msgid "White space differences considered equal" +msgstr "" + +#: optiondialog.cpp:1095 +msgid "" +"If files differ only by white space consider them equal.\n" +"This is only active when full analysis is chosen." +msgstr "" + +#: optiondialog.cpp:1101 +msgid "Copy newer instead of merging (unsafe)" +msgstr "" + +#: optiondialog.cpp:1104 +msgid "" +"Don't look inside, just take the newer file.\n" +"(Use this only if you know what you are doing!)\n" +"Only effective when comparing two directories." +msgstr "" + +#: optiondialog.cpp:1109 +msgid "Backup files (.orig)" +msgstr "" + +#: optiondialog.cpp:1112 +msgid "" +"When a file would be saved over an old file, then the old file\n" +"will be renamed with a '.orig'-extension instead of being deleted." +msgstr "" + +#: optiondialog.cpp:1176 +msgid "Regional Settings" +msgstr "Kefluniadur rann-vro" + +#: optiondialog.cpp:1272 +msgid "Language (restart required)" +msgstr "" + +#: optiondialog.cpp:1304 +msgid "" +"Choose the language of the GUI-strings or \"Auto\".\n" +"For a change of language to take place, quit and restart KDiff3." +msgstr "" + +#: optiondialog.cpp:1322 +msgid "Use the same encoding for everything:" +msgstr "" + +#: optiondialog.cpp:1325 +msgid "" +"Enable this allows to change all encodings by changing the first only.\n" +"Disable this if different individual settings are needed." +msgstr "" + +#: optiondialog.cpp:1330 +msgid "Note: Local Encoding is " +msgstr "" + +#: optiondialog.cpp:1334 +msgid "File Encoding for A:" +msgstr "" + +#: optiondialog.cpp:1340 +msgid "" +"If enabled then Unicode (UTF-16 or UTF-8) encoding will be detected.\n" +"If the file encoding is not detected then the selected encoding will be used as " +"fallback.\n" +"(Unicode detection depends on the first bytes of a file - the byte order mark " +"\"BOM\".)" +msgstr "" + +#: optiondialog.cpp:1344 optiondialog.cpp:1353 optiondialog.cpp:1362 +msgid "Auto Detect Unicode" +msgstr "" + +#: optiondialog.cpp:1349 +msgid "File Encoding for B:" +msgstr "" + +#: optiondialog.cpp:1358 +msgid "File Encoding for C:" +msgstr "" + +#: optiondialog.cpp:1367 +msgid "File Encoding for Merge Output and Saving:" +msgstr "" + +#: optiondialog.cpp:1371 +msgid "Auto Select" +msgstr "Dibab ent emgefreek" + +#: optiondialog.cpp:1374 +msgid "" +"If enabled then the encoding from the input files is used.\n" +"In ambiguous cases a dialog will ask the user to choose the encoding for " +"saving." +msgstr "" + +#: optiondialog.cpp:1378 +msgid "File Encoding for Preprocessor Files:" +msgstr "" + +#: optiondialog.cpp:1389 +msgid "Right To Left Language" +msgstr "" + +#: optiondialog.cpp:1392 +msgid "" +"Some languages are read from right to left.\n" +"This setting will change the viewer and editor accordingly." +msgstr "" + +#: optiondialog.cpp:1402 +msgid "Integration" +msgstr "" + +#: optiondialog.cpp:1402 +msgid "Integration Settings" +msgstr "" + +#: optiondialog.cpp:1412 +msgid "Command line options to ignore:" +msgstr "" + +#: optiondialog.cpp:1417 +msgid "" +"List of command line options that should be ignored when KDiff3 is used by " +"other tools.\n" +"Several values can be specified if separated via ';'\n" +"This will suppress the \"Unknown option\"-error." +msgstr "" + +#: optiondialog.cpp:1480 +msgid "" +"You selected a variable width font.\n" +"\n" +"Because this program doesn't handle variable width fonts\n" +"correctly, you might experience problems while editing.\n" +"\n" +"Do you want to continue or do you want to select another font." +msgstr "" + +#: optiondialog.cpp:1484 +msgid "Incompatible Font" +msgstr "" + +#: optiondialog.cpp:1485 +msgid "Continue at Own Risk" +msgstr "" + +#: optiondialog.cpp:1485 +msgid "Select Another Font" +msgstr "Dibab un nodrezh all" + +#: optiondialog.cpp:1521 +msgid "This resets all options. Not only those of the current topic." +msgstr "" + +#: pdiff.cpp:258 +msgid "PreprocessorCmd: " +msgstr "" + +#: pdiff.cpp:263 +msgid "" +"The following option(s) you selected might change data:\n" +msgstr "" + +#: pdiff.cpp:264 +msgid "" +"\n" +"Most likely this is not wanted during a merge.\n" +"Do you want to disable these settings or continue with these settings active?" +msgstr "" + +#: pdiff.cpp:266 +msgid "Option Unsafe for Merging" +msgstr "" + +#: pdiff.cpp:267 +msgid "Use These Options During Merge" +msgstr "" + +#: pdiff.cpp:267 +msgid "Disable Unsafe Options" +msgstr "" + +#: pdiff.cpp:297 +msgid "Loading A" +msgstr "Emaon o kargañ A" + +#: pdiff.cpp:301 +msgid "Loading B" +msgstr "Emaon o kargañ B" + +#: pdiff.cpp:318 pdiff.cpp:344 +msgid "Diff: A <-> B" +msgstr "" + +#: pdiff.cpp:324 pdiff.cpp:366 +msgid "Linediff: A <-> B" +msgstr "" + +#: pdiff.cpp:335 +msgid "Loading C" +msgstr "Emaon o kargañ C" + +#: pdiff.cpp:347 +msgid "Diff: B <-> C" +msgstr "" + +#: pdiff.cpp:350 +msgid "Diff: A <-> C" +msgstr "" + +#: pdiff.cpp:369 +msgid "Linediff: B <-> C" +msgstr "" + +#: pdiff.cpp:372 +msgid "Linediff: A <-> C" +msgstr "" + +#: pdiff.cpp:513 +msgid "All input files contain the same text, but are not binary equal." +msgstr "" + +#: pdiff.cpp:515 pdiff.cpp:517 pdiff.cpp:519 +msgid "" +"Files %1 and %2 are binary equal.\n" +msgstr "" + +#: pdiff.cpp:516 pdiff.cpp:518 pdiff.cpp:520 +msgid "" +"Files %1 and %2 have equal text, but are not binary equal. \n" +msgstr "" + +#: pdiff.cpp:530 +msgid "" +"Some inputfiles don't seem to be pure textfiles.\n" +"Note that the KDiff3-merge was not meant for binary data.\n" +"Continue at your own risk." +msgstr "" + +#: pdiff.cpp:979 +msgid "Abort" +msgstr "Paouez" + +#: pdiff.cpp:985 pdiff.cpp:1073 +msgid "Opening files..." +msgstr "Emaon o tigeriñ ar restroù ..." + +#: pdiff.cpp:1050 pdiff.cpp:1121 +msgid "File open error" +msgstr "Fazi en ur zigeriñ ar restr" + +#: pdiff.cpp:1153 +msgid "Cutting selection..." +msgstr "O troc'hañ an dibab ..." + +#: pdiff.cpp:1174 +msgid "Copying selection to clipboard..." +msgstr "Oc'h eilañ an dibab d'ar golver ..." + +#: pdiff.cpp:1190 +msgid "Inserting clipboard contents..." +msgstr "" + +#: pdiff.cpp:1713 +msgid "Save && Continue" +msgstr "Enrollañ && Kenderc'hel" + +#: pdiff.cpp:1713 +msgid "Continue Without Saving" +msgstr "" + +#: pdiff.cpp:1920 +msgid "Search complete." +msgstr "Echu eo ar glask." + +#: pdiff.cpp:1920 +msgid "Search Complete" +msgstr "" + +#: pdiff.cpp:2144 +msgid "Nothing is selected in either diff input window." +msgstr "" + +#: pdiff.cpp:2144 +msgid "Error while adding manual diff range" +msgstr "" + +#. i18n: file kdiff3_part.rc line 4 +#: rc.cpp:3 +#, no-c-format +msgid "&KDiff3" +msgstr "&KDiff3" + +#. i18n: file kdiff3_part.rc line 13 +#: rc.cpp:6 +#, no-c-format +msgid "Configure KDiff3" +msgstr "Kefluniañ KDiff3" + +#. i18n: file kdiff3_shell.rc line 7 +#: rc.cpp:15 +#, no-c-format +msgid "&Directory" +msgstr "&Renkell" + +#. i18n: file kdiff3_shell.rc line 30 +#: rc.cpp:18 +#, no-c-format +msgid "Current Item Merge Operation" +msgstr "" + +#. i18n: file kdiff3_shell.rc line 38 +#: rc.cpp:21 +#, no-c-format +msgid "Current Item Sync Operation" +msgstr "" + +#. i18n: file kdiff3_shell.rc line 50 +#: rc.cpp:24 +#, no-c-format +msgid "&Movement" +msgstr "" + +#. i18n: file kdiff3_shell.rc line 61 +#: rc.cpp:27 +#, no-c-format +msgid "D&iffview" +msgstr "" + +#. i18n: file kdiff3_shell.rc line 73 +#: rc.cpp:30 +#, no-c-format +msgid "&Merge" +msgstr "&Dastum" + +#. i18n: file kdiff3_shell.rc line 95 +#: rc.cpp:33 +#, no-c-format +msgid "&Window" +msgstr "&Prenestr" + +#: smalldialogs.cpp:53 +msgid "A (Base):" +msgstr "" + +#: smalldialogs.cpp:59 smalldialogs.cpp:75 smalldialogs.cpp:91 +#: smalldialogs.cpp:134 +msgid "File..." +msgstr "Restr ..." + +#: smalldialogs.cpp:61 smalldialogs.cpp:77 smalldialogs.cpp:93 +#: smalldialogs.cpp:136 +msgid "Dir..." +msgstr "Renkell ..." + +#: smalldialogs.cpp:86 +msgid "C (Optional):" +msgstr "" + +#: smalldialogs.cpp:108 +msgid "Swap/Copy Names ..." +msgstr "" + +#: smalldialogs.cpp:114 smalldialogs.cpp:115 smalldialogs.cpp:116 +msgid "Swap %1<->%2" +msgstr "" + +#: smalldialogs.cpp:117 smalldialogs.cpp:118 smalldialogs.cpp:119 +msgid "Copy %1->Output" +msgstr "" + +#: smalldialogs.cpp:120 smalldialogs.cpp:121 smalldialogs.cpp:122 +msgid "Swap %1<->Output" +msgstr "" + +#: smalldialogs.cpp:129 +msgid "Output (optional):" +msgstr "" + +#: smalldialogs.cpp:158 +msgid "Configure..." +msgstr "Kefluniañ ..." + +#: smalldialogs.cpp:347 +msgid "Search text:" +msgstr "Skrid klasket :" + +#: smalldialogs.cpp:354 +msgid "Case sensitive" +msgstr "Evezhiek ouzh ar c'hef" + +#: smalldialogs.cpp:357 +msgid "Search A" +msgstr "Klask A" + +#: smalldialogs.cpp:362 +msgid "Search B" +msgstr "Klask B" + +#: smalldialogs.cpp:367 +msgid "Search C" +msgstr "Klask C" + +#: smalldialogs.cpp:372 +msgid "Search output" +msgstr "" + +#: smalldialogs.cpp:377 +msgid "&Search" +msgstr "&Klask" + +#: smalldialogs.cpp:394 +msgid "Regular Expression Tester" +msgstr "" + +#: smalldialogs.cpp:405 +msgid "Example auto merge line:" +msgstr "" + +#: smalldialogs.cpp:407 +msgid "For auto merge test copy a line as used in your files." +msgstr "" + +#: smalldialogs.cpp:413 smalldialogs.cpp:442 smalldialogs.cpp:479 +msgid "Match result:" +msgstr "" + +#: smalldialogs.cpp:432 +msgid "Example history start line (with leading comment):" +msgstr "" + +#: smalldialogs.cpp:435 +msgid "" +"Copy a history start line as used in your files,\n" +"including the leading comment." +msgstr "" + +#: smalldialogs.cpp:461 +msgid "History sort key order:" +msgstr "" + +#: smalldialogs.cpp:469 +msgid "Example history entry start line (without leading comment):" +msgstr "" + +#: smalldialogs.cpp:471 +msgid "" +"Copy a history entry start line as used in your files,\n" +"but omit the leading comment." +msgstr "" + +#: smalldialogs.cpp:486 +msgid "Sort key result:" +msgstr "" + +#: smalldialogs.cpp:537 smalldialogs.cpp:547 smalldialogs.cpp:568 +msgid "Match success." +msgstr "" + +#: smalldialogs.cpp:541 smalldialogs.cpp:551 smalldialogs.cpp:574 +msgid "Match failed." +msgstr "" + +#: smalldialogs.cpp:559 +msgid "Opening and closing parentheses don't match in regular expression." +msgstr "" + +#~ msgid "Swap" +#~ msgstr "Disloañ" + +#~ msgid "Ok" +#~ msgstr "Mat eo" + +#~ msgid "" +#~ "\n" +#~ "\n" +#~ "File not saved." +#~ msgstr "" +#~ "\n" +#~ "\n" +#~ "N'eo ket enrollet ar restr." + +#~ msgid "Delete A and B" +#~ msgstr "Lemel A ha B" diff --git a/po/ca.po b/po/ca.po new file mode 100644 index 0000000..03a165c --- /dev/null +++ b/po/ca.po @@ -0,0 +1,2304 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"POT-Creation-Date: 2006-11-05 08:45+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: ENCODING\n" + +#: _translatorinfo.cpp:1 +msgid "" +"_: NAME OF TRANSLATORS\n" +"Your names" +msgstr "" + +#: _translatorinfo.cpp:3 +msgid "" +"_: EMAIL OF TRANSLATORS\n" +"Your emails" +msgstr "" + +#: diff.cpp:246 +msgid "Writing clipboard data to temp file failed." +msgstr "" + +#: diff.cpp:250 +msgid "From Clipboard" +msgstr "" + +#: diff.cpp:491 +msgid "" +"Preprocessing possibly failed. Check this command:\n" +"\n" +" %1\n" +"\n" +"The preprocessing command will be disabled now." +msgstr "" + +#: diff.cpp:526 +msgid "" +"The line-matching-preprocessing possibly failed. Check this command:\n" +"\n" +" %1\n" +"\n" +"The line-matching-preprocessing command will be disabled now." +msgstr "" + +#: diff.cpp:1631 diff.cpp:1645 +msgid "" +"Data loss error:\n" +"If it is reproducable please contact the author.\n" +msgstr "" + +#: diff.cpp:1633 diff.cpp:1647 +msgid "Severe Internal Error" +msgstr "" + +#: difftextwindow.cpp:1643 kdiff3.cpp:753 +msgid "Top line" +msgstr "" + +#: difftextwindow.cpp:1653 +msgid "End" +msgstr "" + +#: directorymergewindow.cpp:142 +msgid "Mix of links and normal files." +msgstr "" + +#: directorymergewindow.cpp:149 +msgid "Link: " +msgstr "" + +#: directorymergewindow.cpp:157 +msgid "Size. " +msgstr "" + +#: directorymergewindow.cpp:170 +msgid "Date & Size: " +msgstr "" + +#: directorymergewindow.cpp:179 directorymergewindow.cpp:185 +msgid "Creating temp copy of %1 failed." +msgstr "" + +#: directorymergewindow.cpp:196 directorymergewindow.cpp:204 +msgid "Opening %1 failed." +msgstr "" + +#: directorymergewindow.cpp:208 +msgid "Comparing file..." +msgstr "" + +#: directorymergewindow.cpp:218 directorymergewindow.cpp:224 +#, c-format +msgid "Error reading from %1" +msgstr "" + +#: directorymergewindow.cpp:282 +msgid "Name" +msgstr "" + +#: directorymergewindow.cpp:286 +msgid "Operation" +msgstr "" + +#: directorymergewindow.cpp:287 +msgid "Status" +msgstr "" + +#: directorymergewindow.cpp:288 +msgid "Unsolved" +msgstr "" + +#: directorymergewindow.cpp:289 +msgid "Solved" +msgstr "" + +#: directorymergewindow.cpp:290 +msgid "Nonwhite" +msgstr "" + +#: directorymergewindow.cpp:291 +msgid "White" +msgstr "" + +#: directorymergewindow.cpp:319 +msgid "" +"You are currently doing a directory merge. Are you sure, you want to abort the " +"merge and rescan the directory?" +msgstr "" + +#: directorymergewindow.cpp:320 directorymergewindow.cpp:2868 +msgid "Rescan" +msgstr "" + +#: directorymergewindow.cpp:320 kdiff3.cpp:603 pdiff.cpp:979 +msgid "Continue Merging" +msgstr "" + +#: directorymergewindow.cpp:462 +msgid "Opening of directories failed:" +msgstr "" + +#: directorymergewindow.cpp:465 +msgid "" +"Dir A \"%1\" does not exist or is not a directory.\n" +msgstr "" + +#: directorymergewindow.cpp:468 +msgid "" +"Dir B \"%1\" does not exist or is not a directory.\n" +msgstr "" + +#: directorymergewindow.cpp:471 +msgid "" +"Dir C \"%1\" does not exist or is not a directory.\n" +msgstr "" + +#: directorymergewindow.cpp:473 +msgid "Directory Open Error" +msgstr "" + +#: directorymergewindow.cpp:481 +msgid "" +"The destination directory must not be the same as A or B when three directories " +"are merged.\n" +"Check again before continuing." +msgstr "" + +#: directorymergewindow.cpp:483 +msgid "Parameter Warning" +msgstr "" + +#: directorymergewindow.cpp:488 +msgid "Scanning directories..." +msgstr "" + +#: directorymergewindow.cpp:537 +msgid "Reading Directory A" +msgstr "" + +#: directorymergewindow.cpp:559 +msgid "Reading Directory B" +msgstr "" + +#: directorymergewindow.cpp:581 +msgid "Reading Directory C" +msgstr "" + +#: directorymergewindow.cpp:607 +msgid "Some subdirectories were not readable in" +msgstr "" + +#: directorymergewindow.cpp:612 +msgid "Check the permissions of the subdirectories." +msgstr "" + +#: directorymergewindow.cpp:646 kdiff3.cpp:552 kdiff3.cpp:636 kdiff3.cpp:661 +#: kdiff3.cpp:934 kdiff3.cpp:955 pdiff.cpp:1059 pdiff.cpp:1131 pdiff.cpp:1169 +#: pdiff.cpp:1185 pdiff.cpp:1215 pdiff.cpp:1226 +msgid "Ready." +msgstr "" + +#: directorymergewindow.cpp:660 +msgid "Directory Comparison Status" +msgstr "" + +#: directorymergewindow.cpp:661 +msgid "Number of subdirectories:" +msgstr "" + +#: directorymergewindow.cpp:662 +msgid "Number of equal files:" +msgstr "" + +#: directorymergewindow.cpp:663 +msgid "Number of different files:" +msgstr "" + +#: directorymergewindow.cpp:666 +msgid "Number of manual merges:" +msgstr "" + +#: directorymergewindow.cpp:802 +msgid "This affects all merge operations." +msgstr "" + +#: directorymergewindow.cpp:803 +msgid "Changing All Merge Operations" +msgstr "" + +#: directorymergewindow.cpp:803 mergeresultwindow.cpp:287 +msgid "C&ontinue" +msgstr "" + +#: directorymergewindow.cpp:1169 +msgid "Processing " +msgstr "" + +#: directorymergewindow.cpp:1647 directorymergewindow.cpp:1653 +msgid "To do." +msgstr "" + +#: directorymergewindow.cpp:1756 directorymergewindow.cpp:2899 +msgid "Copy A to B" +msgstr "" + +#: directorymergewindow.cpp:1757 directorymergewindow.cpp:2900 +msgid "Copy B to A" +msgstr "" + +#: directorymergewindow.cpp:1758 directorymergewindow.cpp:2901 +msgid "Delete A" +msgstr "" + +#: directorymergewindow.cpp:1759 directorymergewindow.cpp:2902 +msgid "Delete B" +msgstr "" + +#: directorymergewindow.cpp:1760 +msgid "Delete A & B" +msgstr "" + +#: directorymergewindow.cpp:1761 directorymergewindow.cpp:2904 +msgid "Merge to A" +msgstr "" + +#: directorymergewindow.cpp:1762 directorymergewindow.cpp:2905 +msgid "Merge to B" +msgstr "" + +#: directorymergewindow.cpp:1763 +msgid "Merge to A & B" +msgstr "" + +#: directorymergewindow.cpp:1767 directorymergewindow.cpp:2896 +msgid "Delete (if exists)" +msgstr "" + +#: directorymergewindow.cpp:1768 directorymergewindow.cpp:1769 +#: directorymergewindow.cpp:2895 optiondialog.cpp:809 smalldialogs.cpp:102 +msgid "Merge" +msgstr "" + +#: directorymergewindow.cpp:1768 directorymergewindow.cpp:1769 +msgid "Merge (manual)" +msgstr "" + +#: directorymergewindow.cpp:1770 +msgid "Error: Conflicting File Types" +msgstr "" + +#: directorymergewindow.cpp:1771 +msgid "Error: Dates are equal but files are not." +msgstr "" + +#: directorymergewindow.cpp:1795 directorymergewindow.cpp:1824 +#: directorymergewindow.cpp:1849 +msgid "This operation is currently not possible." +msgstr "" + +#: directorymergewindow.cpp:1795 directorymergewindow.cpp:1824 +#: directorymergewindow.cpp:1849 directorymergewindow.cpp:2106 +msgid "Operation Not Possible" +msgstr "" + +#: directorymergewindow.cpp:1888 +msgid "" +"This should never happen: \n" +"\n" +"mergeResultSaved: m_pMFI=0\n" +"\n" +"If you know how to reproduce this, please contact the program author." +msgstr "" + +#: directorymergewindow.cpp:1888 +msgid "Program Error" +msgstr "" + +#: directorymergewindow.cpp:1899 +msgid "" +"An error occurred while copying.\n" +msgstr "" + +#: directorymergewindow.cpp:1900 directorymergewindow.cpp:2306 +msgid "Merge Error" +msgstr "" + +#: directorymergewindow.cpp:1905 directorymergewindow.cpp:2311 +msgid "Error." +msgstr "" + +#: directorymergewindow.cpp:1910 directorymergewindow.cpp:2202 +#: directorymergewindow.cpp:2242 +msgid "Done." +msgstr "" + +#: directorymergewindow.cpp:1933 +msgid "Not saved." +msgstr "" + +#: directorymergewindow.cpp:1968 +msgid "Unknown merge operation. (This must never happen!)" +msgstr "" + +#: directorymergewindow.cpp:2000 +msgid "Unknown merge operation." +msgstr "" + +#: directorymergewindow.cpp:2015 +msgid "" +"The merge is about to begin.\n" +"\n" +"Choose \"Do it\" if you have read the instructions and know what you are " +"doing.\n" +"Choosing \"Simulate it\" will tell you what would happen.\n" +"\n" +"Be aware that this program still has beta status and there is NO WARRANTY " +"whatsoever! Make backups of your vital data!" +msgstr "" + +#: directorymergewindow.cpp:2020 +msgid "Starting Merge" +msgstr "" + +#: directorymergewindow.cpp:2020 +msgid "Do It" +msgstr "" + +#: directorymergewindow.cpp:2020 +msgid "Simulate It" +msgstr "" + +#: directorymergewindow.cpp:2046 +msgid "" +"The highlighted item has a different type in the different directories. Select " +"what to do." +msgstr "" + +#: directorymergewindow.cpp:2055 +msgid "" +"The modification dates of the file are equal but the files are not. Select what " +"to do." +msgstr "" + +#: directorymergewindow.cpp:2106 +msgid "" +"This operation is currently not possible because directory merge is currently " +"running." +msgstr "" + +#: directorymergewindow.cpp:2166 +msgid "" +"There was an error in the last step.\n" +"Do you want to continue with the item that caused the error or do you want to " +"skip this item?" +msgstr "" + +#: directorymergewindow.cpp:2168 +msgid "Continue merge after an error" +msgstr "" + +#: directorymergewindow.cpp:2168 +msgid "Continue With Last Item" +msgstr "" + +#: directorymergewindow.cpp:2168 +msgid "Skip Item" +msgstr "" + +#: directorymergewindow.cpp:2202 +msgid "Skipped." +msgstr "" + +#: directorymergewindow.cpp:2209 directorymergewindow.cpp:2435 +msgid "In progress..." +msgstr "" + +#: directorymergewindow.cpp:2257 +msgid "Merge operation complete." +msgstr "" + +#: directorymergewindow.cpp:2257 directorymergewindow.cpp:2260 +msgid "Merge Complete" +msgstr "" + +#: directorymergewindow.cpp:2269 +msgid "" +"Simulated merge complete: Check if you agree with the proposed operations." +msgstr "" + +#: directorymergewindow.cpp:2305 +msgid "" +"An error occurred. Press OK to see detailed information.\n" +msgstr "" + +#: directorymergewindow.cpp:2348 +msgid "Error: While deleting %1: Creating backup failed." +msgstr "" + +#: directorymergewindow.cpp:2355 +msgid "delete directory recursively( %1 )" +msgstr "" + +#: directorymergewindow.cpp:2357 +msgid "delete( %1 )" +msgstr "" + +#: directorymergewindow.cpp:2372 +msgid "Error: delete dir operation failed while trying to read the directory." +msgstr "" + +#: directorymergewindow.cpp:2391 +msgid "Error: rmdir( %1 ) operation failed." +msgstr "" + +#: directorymergewindow.cpp:2401 +msgid "Error: delete operation failed." +msgstr "" + +#: directorymergewindow.cpp:2427 +msgid "manual merge( %1, %2, %3 -> %4)" +msgstr "" + +#: directorymergewindow.cpp:2430 +msgid "" +" Note: After a manual merge the user should continue by pressing F7." +msgstr "" + +#: directorymergewindow.cpp:2453 +msgid "Error: copy( %1 -> %2 ) failed.Deleting existing destination failed." +msgstr "" + +#: directorymergewindow.cpp:2463 +msgid "copyLink( %1 -> %2 )" +msgstr "" + +#: directorymergewindow.cpp:2474 +msgid "Error: copyLink failed: Remote links are not yet supported." +msgstr "" + +#: directorymergewindow.cpp:2480 +msgid "Error: copyLink failed." +msgstr "" + +#: directorymergewindow.cpp:2500 +msgid "copy( %1 -> %2 )" +msgstr "" + +#: directorymergewindow.cpp:2526 +msgid "Error during rename( %1 -> %2 ): Cannot delete existing destination." +msgstr "" + +#: directorymergewindow.cpp:2532 +msgid "rename( %1 -> %2 )" +msgstr "" + +#: directorymergewindow.cpp:2541 +msgid "Error: Rename failed." +msgstr "" + +#: directorymergewindow.cpp:2559 +msgid "Error during makeDir of %1. Cannot delete existing file." +msgstr "" + +#: directorymergewindow.cpp:2575 +msgid "makeDir( %1 )" +msgstr "" + +#: directorymergewindow.cpp:2585 +msgid "Error while creating directory." +msgstr "" + +#: directorymergewindow.cpp:2608 directorymergewindow.cpp:2725 +msgid "Dest" +msgstr "" + +#: directorymergewindow.cpp:2612 directorymergewindow.cpp:2650 +msgid "Dir" +msgstr "" + +#: directorymergewindow.cpp:2613 +msgid "Type" +msgstr "" + +#: directorymergewindow.cpp:2614 +msgid "Size" +msgstr "" + +#: directorymergewindow.cpp:2615 +msgid "Attr" +msgstr "" + +#: directorymergewindow.cpp:2616 +msgid "Last Modification" +msgstr "" + +#: directorymergewindow.cpp:2617 +msgid "Link-Destination" +msgstr "" + +#: directorymergewindow.cpp:2667 +msgid "not available" +msgstr "" + +#: directorymergewindow.cpp:2687 +msgid "A (Dest): " +msgstr "" + +#: directorymergewindow.cpp:2690 +msgid "A (Base): " +msgstr "" + +#: directorymergewindow.cpp:2696 +msgid "B (Dest): " +msgstr "" + +#: directorymergewindow.cpp:2704 +msgid "C (Dest): " +msgstr "" + +#: directorymergewindow.cpp:2710 +msgid "Dest: " +msgstr "" + +#: directorymergewindow.cpp:2775 +msgid "Save Directory Merge State As..." +msgstr "" + +#: directorymergewindow.cpp:2862 +msgid "Start/Continue Directory Merge" +msgstr "" + +#: directorymergewindow.cpp:2863 +msgid "Run Operation for Current Item" +msgstr "" + +#: directorymergewindow.cpp:2864 +msgid "Compare Selected File" +msgstr "" + +#: directorymergewindow.cpp:2865 +msgid "Merge Current File" +msgstr "" + +#: directorymergewindow.cpp:2866 +msgid "Fold All Subdirs" +msgstr "" + +#: directorymergewindow.cpp:2867 +msgid "Unfold All Subdirs" +msgstr "" + +#: directorymergewindow.cpp:2871 +msgid "Choose A for All Items" +msgstr "" + +#: directorymergewindow.cpp:2872 +msgid "Choose B for All Items" +msgstr "" + +#: directorymergewindow.cpp:2873 +msgid "Choose C for All Items" +msgstr "" + +#: directorymergewindow.cpp:2874 +msgid "Auto-Choose Operation for All Items" +msgstr "" + +#: directorymergewindow.cpp:2875 +msgid "No Operation for All Items" +msgstr "" + +#: directorymergewindow.cpp:2880 +msgid "Show Identical Files" +msgstr "" + +#: directorymergewindow.cpp:2881 +msgid "Show Different Files" +msgstr "" + +#: directorymergewindow.cpp:2882 +msgid "Show Files only in A" +msgstr "" + +#: directorymergewindow.cpp:2883 +msgid "Show Files only in B" +msgstr "" + +#: directorymergewindow.cpp:2884 +msgid "Show Files only in C" +msgstr "" + +#: directorymergewindow.cpp:2888 +msgid "Compare Explicitly Selected Files" +msgstr "" + +#: directorymergewindow.cpp:2889 +msgid "Merge Explicitly Selected Files" +msgstr "" + +#: directorymergewindow.cpp:2891 directorymergewindow.cpp:2898 +msgid "Do Nothing" +msgstr "" + +#: directorymergewindow.cpp:2892 +msgid "A" +msgstr "" + +#: directorymergewindow.cpp:2893 +msgid "B" +msgstr "" + +#: directorymergewindow.cpp:2894 +msgid "C" +msgstr "" + +#: directorymergewindow.cpp:2903 +msgid "Delete A && B" +msgstr "" + +#: directorymergewindow.cpp:2906 +msgid "Merge to A && B" +msgstr "" + +#: fileaccess.cpp:595 +msgid "" +"While trying to make a backup, deleting an older backup failed. \n" +"Filename: " +msgstr "" + +#: fileaccess.cpp:602 +msgid "" +"While trying to make a backup, renaming failed. \n" +"Filenames: " +msgstr "" + +#: fileaccess.cpp:624 +#, c-format +msgid "Getting file status: %1" +msgstr "" + +#: fileaccess.cpp:667 +#, c-format +msgid "Reading file: %1" +msgstr "" + +#: fileaccess.cpp:703 +#, c-format +msgid "Writing file: %1" +msgstr "" + +#: fileaccess.cpp:731 +msgid "Out of memory" +msgstr "" + +#: fileaccess.cpp:766 +#, c-format +msgid "Making directory: %1" +msgstr "" + +#: fileaccess.cpp:786 +#, c-format +msgid "Removing directory: %1" +msgstr "" + +#: fileaccess.cpp:801 +#, c-format +msgid "Removing file: %1" +msgstr "" + +#: fileaccess.cpp:817 +msgid "Creating symbolic link: %1 -> %2" +msgstr "" + +#: fileaccess.cpp:843 +msgid "Renaming file: %1 -> %2" +msgstr "" + +#: fileaccess.cpp:879 +msgid "Copying file: %1 -> %2" +msgstr "" + +#: fileaccess.cpp:893 +#, c-format +msgid "" +"Error during file copy operation: Opening file for reading failed. Filename: %1" +msgstr "" + +#: fileaccess.cpp:899 +#, c-format +msgid "" +"Error during file copy operation: Opening file for writing failed. Filename: %1" +msgstr "" + +#: fileaccess.cpp:914 +#, c-format +msgid "Error during file copy operation: Reading failed. Filename: %1" +msgstr "" + +#: fileaccess.cpp:923 +#, c-format +msgid "Error during file copy operation: Writing failed. Filename: %1" +msgstr "" + +#: fileaccess.cpp:1219 +msgid "Reading directory: " +msgstr "" + +#: fileaccess.cpp:1348 +#, c-format +msgid "Listing directory: %1" +msgstr "" + +#: kdiff3.cpp:142 +msgid "Current Configuration:" +msgstr "" + +#: kdiff3.cpp:147 +msgid "Config Option Error:" +msgstr "" + +#: kdiff3.cpp:187 +msgid "Option --auto used, but no output file specified." +msgstr "" + +#: kdiff3.cpp:323 +msgid "Option --auto ignored for directory comparison." +msgstr "" + +#: kdiff3.cpp:359 +msgid "Saving failed." +msgstr "" + +#: kdiff3.cpp:386 pdiff.cpp:1041 pdiff.cpp:1112 +msgid "Opening of these files failed:" +msgstr "" + +#: kdiff3.cpp:395 +msgid "File Open Error" +msgstr "" + +#: kdiff3.cpp:418 +msgid "Opens documents for comparison..." +msgstr "" + +#: kdiff3.cpp:423 +msgid "Saves the merge result. All conflicts must be solved!" +msgstr "" + +#: kdiff3.cpp:425 +msgid "Saves the current document as..." +msgstr "" + +#: kdiff3.cpp:427 +msgid "Print the differences" +msgstr "" + +#: kdiff3.cpp:429 +msgid "Quits the application" +msgstr "" + +#: kdiff3.cpp:431 +msgid "Cuts the selected section and puts it to the clipboard" +msgstr "" + +#: kdiff3.cpp:433 +msgid "Copies the selected section to the clipboard" +msgstr "" + +#: kdiff3.cpp:435 +msgid "Pastes the clipboard contents to actual position" +msgstr "" + +#: kdiff3.cpp:437 +msgid "Select everything in current window" +msgstr "" + +#: kdiff3.cpp:439 +msgid "Search for a string" +msgstr "" + +#: kdiff3.cpp:441 +msgid "Search again for the string" +msgstr "" + +#: kdiff3.cpp:443 +msgid "Enables/disables the toolbar" +msgstr "" + +#: kdiff3.cpp:445 +msgid "Enables/disables the statusbar" +msgstr "" + +#: kdiff3.cpp:449 +msgid "Configure KDiff3..." +msgstr "" + +#: kdiff3.cpp:470 +msgid "Go to Current Delta" +msgstr "" + +#: kdiff3.cpp:471 +msgid "Go to First Delta" +msgstr "" + +#: kdiff3.cpp:472 +msgid "Go to Last Delta" +msgstr "" + +#: kdiff3.cpp:473 +msgid "(Skips white space differences when \"Show White Space\" is disabled.)" +msgstr "" + +#: kdiff3.cpp:474 +msgid "" +"(Does not skip white space differences even when \"Show White Space\" is " +"disabled.)" +msgstr "" + +#: kdiff3.cpp:475 +msgid "Go to Previous Delta" +msgstr "" + +#: kdiff3.cpp:477 +msgid "Go to Next Delta" +msgstr "" + +#: kdiff3.cpp:479 +msgid "Go to Previous Conflict" +msgstr "" + +#: kdiff3.cpp:481 +msgid "Go to Next Conflict" +msgstr "" + +#: kdiff3.cpp:483 +msgid "Go to Previous Unsolved Conflict" +msgstr "" + +#: kdiff3.cpp:485 +msgid "Go to Next Unsolved Conflict" +msgstr "" + +#: kdiff3.cpp:487 +msgid "Select Line(s) From A" +msgstr "" + +#: kdiff3.cpp:488 +msgid "Select Line(s) From B" +msgstr "" + +#: kdiff3.cpp:489 +msgid "Select Line(s) From C" +msgstr "" + +#: kdiff3.cpp:490 +msgid "Automatically Go to Next Unsolved Conflict After Source Selection" +msgstr "" + +#: kdiff3.cpp:492 +msgid "Show Space && Tabulator Characters for Differences" +msgstr "" + +#: kdiff3.cpp:493 +msgid "Show White Space" +msgstr "" + +#: kdiff3.cpp:495 +msgid "Show Line Numbers" +msgstr "" + +#: kdiff3.cpp:496 +msgid "Choose A Everywhere" +msgstr "" + +#: kdiff3.cpp:497 +msgid "Choose B Everywhere" +msgstr "" + +#: kdiff3.cpp:498 +msgid "Choose C Everywhere" +msgstr "" + +#: kdiff3.cpp:499 +msgid "Choose A for All Unsolved Conflicts" +msgstr "" + +#: kdiff3.cpp:500 +msgid "Choose B for All Unsolved Conflicts" +msgstr "" + +#: kdiff3.cpp:501 +msgid "Choose C for All Unsolved Conflicts" +msgstr "" + +#: kdiff3.cpp:502 +msgid "Choose A for All Unsolved Whitespace Conflicts" +msgstr "" + +#: kdiff3.cpp:503 +msgid "Choose B for All Unsolved Whitespace Conflicts" +msgstr "" + +#: kdiff3.cpp:504 +msgid "Choose C for All Unsolved Whitespace Conflicts" +msgstr "" + +#: kdiff3.cpp:505 +msgid "Automatically Solve Simple Conflicts" +msgstr "" + +#: kdiff3.cpp:506 +msgid "Set Deltas to Conflicts" +msgstr "" + +#: kdiff3.cpp:507 +msgid "Run Regular Expression Auto Merge" +msgstr "" + +#: kdiff3.cpp:508 +msgid "Automatically Solve History Conflicts" +msgstr "" + +#: kdiff3.cpp:509 +msgid "Split Diff At Selection" +msgstr "" + +#: kdiff3.cpp:510 +msgid "Join Selected Diffs" +msgstr "" + +#: kdiff3.cpp:512 +msgid "Show Window A" +msgstr "" + +#: kdiff3.cpp:513 +msgid "Show Window B" +msgstr "" + +#: kdiff3.cpp:514 +msgid "Show Window C" +msgstr "" + +#: kdiff3.cpp:515 kdiff3.cpp:526 +msgid "Focus Next Window" +msgstr "" + +#: kdiff3.cpp:517 +msgid "Normal Overview" +msgstr "" + +#: kdiff3.cpp:518 +msgid "A vs. B Overview" +msgstr "" + +#: kdiff3.cpp:519 +msgid "A vs. C Overview" +msgstr "" + +#: kdiff3.cpp:520 +msgid "B vs. C Overview" +msgstr "" + +#: kdiff3.cpp:521 +msgid "Word Wrap Diff Windows" +msgstr "" + +#: kdiff3.cpp:522 +msgid "Add Manual Diff Alignment" +msgstr "" + +#: kdiff3.cpp:523 +msgid "Clear All Manual Diff Alignments" +msgstr "" + +#: kdiff3.cpp:528 +msgid "Focus Prev Window" +msgstr "" + +#: kdiff3.cpp:529 +msgid "Toggle Split Orientation" +msgstr "" + +#: kdiff3.cpp:531 +msgid "Dir && Text Split Screen View" +msgstr "" + +#: kdiff3.cpp:533 +msgid "Toggle Between Dir && Text View" +msgstr "" + +#: kdiff3.cpp:582 pdiff.cpp:1712 +msgid "The merge result hasn't been saved." +msgstr "" + +#: kdiff3.cpp:583 +msgid "Save && Quit" +msgstr "" + +#: kdiff3.cpp:583 +msgid "Quit Without Saving" +msgstr "" + +#: kdiff3.cpp:591 pdiff.cpp:1721 +msgid "Saving the merge result failed." +msgstr "" + +#: kdiff3.cpp:602 pdiff.cpp:978 +msgid "" +"You are currently doing a directory merge. Are you sure, you want to abort?" +msgstr "" + +#: kdiff3.cpp:625 +msgid "Saving file..." +msgstr "" + +#: kdiff3.cpp:642 +msgid "Saving file with a new filename..." +msgstr "" + +#: kdiff3.cpp:732 +msgid "Printing..." +msgstr "" + +#: kdiff3.cpp:738 kdiff3.cpp:900 +msgid "Printing aborted." +msgstr "" + +#: kdiff3.cpp:870 +msgid "Selection" +msgstr "" + +#: kdiff3.cpp:896 +msgid "Printing completed." +msgstr "" + +#: kdiff3.cpp:906 +msgid "Exiting..." +msgstr "" + +#: kdiff3.cpp:918 +msgid "Toggling toolbar..." +msgstr "" + +#: kdiff3.cpp:939 +msgid "Toggle the statusbar..." +msgstr "" + +#: kdiff3_part.cpp:155 kdiff3_part.cpp:224 +msgid "Couldn't find files for comparison." +msgstr "" + +#: kdiff3_part.cpp:291 +msgid "KDiff3Part" +msgstr "" + +#: kdiff3_shell.cpp:78 +msgid "" +"Could not find our part!\n" +"This usually happens due to an installation problem. Please read the " +"README-file in the source package for details." +msgstr "" + +#: main.cpp:35 +msgid "Tool for Comparison and Merge of Files and Directories" +msgstr "" + +#: main.cpp:40 +msgid "Merge the input." +msgstr "" + +#: main.cpp:42 +msgid "Explicit base file. For compatibility with certain tools." +msgstr "" + +#: main.cpp:44 +msgid "Output file. Implies -m. E.g.: -o newfile.txt" +msgstr "" + +#: main.cpp:45 +msgid "Output file, again. (For compatibility with certain tools.)" +msgstr "" + +#: main.cpp:46 +msgid "No GUI if all conflicts are auto-solvable. (Needs -o file)" +msgstr "" + +#: main.cpp:47 +msgid "Don't solve conflicts automatically. (For compatibility...)" +msgstr "" + +#: main.cpp:48 +msgid "Visible name replacement for input file 1 (base)." +msgstr "" + +#: main.cpp:49 +msgid "Visible name replacement for input file 2." +msgstr "" + +#: main.cpp:50 +msgid "Visible name replacement for input file 3." +msgstr "" + +#: main.cpp:52 +msgid "Alternative visible name replacement. Supply this once for every input." +msgstr "" + +#: main.cpp:53 +msgid "" +"Override a config setting. Use once for every setting. E.g.: --cs " +"\"AutoAdvance=1\"" +msgstr "" + +#: main.cpp:54 +msgid "Show list of config settings and current values." +msgstr "" + +#: main.cpp:55 +msgid "Use a different config file." +msgstr "" + +#: main.cpp:59 +msgid "file1 to open (base, if not specified via --base)" +msgstr "" + +#: main.cpp:60 +msgid "file2 to open" +msgstr "" + +#: main.cpp:61 +msgid "file3 to open" +msgstr "" + +#: main.cpp:93 +msgid "Ignored. (User defined.)" +msgstr "" + +#. i18n: file kdiff3_part.rc line 16 +#: main.cpp:173 rc.cpp:9 +#, no-c-format +msgid "KDiff3" +msgstr "" + +#: main.cpp:186 +msgid "+ Many thanks to those who reported bugs and contributed ideas!" +msgstr "" + +#: mergeresultwindow.cpp:136 mergeresultwindow.cpp:939 +#: mergeresultwindow.cpp:953 mergeresultwindow.cpp:965 +#: mergeresultwindow.cpp:977 +msgid "Number of remaining unsolved conflicts: %1 (of which %2 are whitespace)" +msgstr "" + +#: mergeresultwindow.cpp:285 +msgid "" +"The output has been modified.\n" +"If you continue your changes will be lost." +msgstr "" + +#: mergeresultwindow.cpp:797 pdiff.cpp:511 +msgid "All input files are binary equal." +msgstr "" + +#: mergeresultwindow.cpp:799 +msgid "All input files contain the same text." +msgstr "" + +#: mergeresultwindow.cpp:801 +msgid "" +"Files A and B are binary equal.\n" +msgstr "" + +#: mergeresultwindow.cpp:802 +msgid "" +"Files A and B have equal text. \n" +msgstr "" + +#: mergeresultwindow.cpp:803 +msgid "" +"Files A and C are binary equal.\n" +msgstr "" + +#: mergeresultwindow.cpp:804 +msgid "" +"Files A and C have equal text. \n" +msgstr "" + +#: mergeresultwindow.cpp:805 +msgid "" +"Files B and C are binary equal.\n" +msgstr "" + +#: mergeresultwindow.cpp:806 +msgid "" +"Files B and C have equal text. \n" +msgstr "" + +#: mergeresultwindow.cpp:812 +msgid "Total number of conflicts: " +msgstr "" + +#: mergeresultwindow.cpp:813 +msgid "" +"\n" +"Nr of automatically solved conflicts: " +msgstr "" + +#: mergeresultwindow.cpp:814 +msgid "" +"\n" +"Nr of unsolved conflicts: " +msgstr "" + +#: mergeresultwindow.cpp:816 +msgid "Conflicts" +msgstr "" + +#: mergeresultwindow.cpp:1652 +msgid "" +msgstr "" + +#: mergeresultwindow.cpp:1660 +msgid "" +msgstr "" + +#: mergeresultwindow.cpp:1662 mergeresultwindow.cpp:2427 +msgid "" +msgstr "" + +#: mergeresultwindow.cpp:2635 +msgid "" +"Not all conflicts are solved yet.\n" +"File not saved.\n" +msgstr "" + +#: mergeresultwindow.cpp:2637 +msgid "Conflicts Left" +msgstr "" + +#: mergeresultwindow.cpp:2649 +msgid "" +"\n" +"\n" +"Creating backup failed. File not saved." +msgstr "" + +#: mergeresultwindow.cpp:2649 mergeresultwindow.cpp:2689 +msgid "File Save Error" +msgstr "" + +#: mergeresultwindow.cpp:2689 +msgid "Error while writing." +msgstr "" + +#: mergeresultwindow.cpp:3020 +msgid "Output" +msgstr "" + +#: mergeresultwindow.cpp:3032 mergeresultwindow.cpp:3139 +msgid "[Modified]" +msgstr "" + +#: mergeresultwindow.cpp:3039 +msgid "Encoding for saving" +msgstr "" + +#: mergeresultwindow.cpp:3075 mergeresultwindow.cpp:3081 +#: mergeresultwindow.cpp:3087 +msgid "Codec from" +msgstr "" + +#: optiondialog.cpp:362 +msgid "Unicode, 8 bit" +msgstr "" + +#: optiondialog.cpp:363 +msgid "Unicode" +msgstr "" + +#: optiondialog.cpp:364 +msgid "Latin1" +msgstr "" + +#: optiondialog.cpp:383 +msgid "Change this if non-ASCII characters are not displayed correctly." +msgstr "" + +#: optiondialog.cpp:510 +msgid "Editor & Diff Output Font" +msgstr "" + +#: optiondialog.cpp:531 +msgid "Italic font for deltas" +msgstr "" + +#: optiondialog.cpp:534 +msgid "" +"Selects the italic version of the font for differences.\n" +"If the font doesn't support italic characters, then this does nothing." +msgstr "" + +#: optiondialog.cpp:542 +msgid "Color" +msgstr "" + +#: optiondialog.cpp:542 +msgid "Colors Settings" +msgstr "" + +#: optiondialog.cpp:556 +msgid "Editor and Diff Views:" +msgstr "" + +#: optiondialog.cpp:564 +msgid "Foreground color:" +msgstr "" + +#: optiondialog.cpp:570 +msgid "Background color:" +msgstr "" + +#: optiondialog.cpp:578 +msgid "Diff background color:" +msgstr "" + +#: optiondialog.cpp:585 +msgid "Color A:" +msgstr "" + +#: optiondialog.cpp:592 +msgid "Color B:" +msgstr "" + +#: optiondialog.cpp:599 +msgid "Color C:" +msgstr "" + +#: optiondialog.cpp:605 +msgid "Conflict color:" +msgstr "" + +#: optiondialog.cpp:612 +msgid "Current range background color:" +msgstr "" + +#: optiondialog.cpp:619 +msgid "Current range diff background color:" +msgstr "" + +#: optiondialog.cpp:625 +msgid "Color for manually aligned difference ranges:" +msgstr "" + +#: optiondialog.cpp:630 +msgid "Directory Comparison View:" +msgstr "" + +#: optiondialog.cpp:636 +msgid "Newest file color:" +msgstr "" + +#: optiondialog.cpp:639 +msgid "" +"Changing this color will only be effective when starting the next directory " +"comparison." +msgstr "" + +#: optiondialog.cpp:644 +msgid "Oldest file color:" +msgstr "" + +#: optiondialog.cpp:651 +msgid "Middle age file color:" +msgstr "" + +#: optiondialog.cpp:658 +msgid "Color for missing files:" +msgstr "" + +#: optiondialog.cpp:670 +msgid "Editor" +msgstr "" + +#: optiondialog.cpp:670 +msgid "Editor Behavior" +msgstr "" + +#: optiondialog.cpp:680 +msgid "Tab inserts spaces" +msgstr "" + +#: optiondialog.cpp:683 +msgid "" +"On: Pressing tab generates the appropriate number of spaces.\n" +"Off: A Tab-character will be inserted." +msgstr "" + +#: optiondialog.cpp:689 +msgid "Tab size:" +msgstr "" + +#: optiondialog.cpp:694 +msgid "Auto indentation" +msgstr "" + +#: optiondialog.cpp:697 +msgid "" +"On: The indentation of the previous line is used for a new line.\n" +msgstr "" + +#: optiondialog.cpp:701 +msgid "Auto copy selection" +msgstr "" + +#: optiondialog.cpp:704 +msgid "" +"On: Any selection is immediately written to the clipboard.\n" +"Off: You must explicitely copy e.g. via Ctrl-C." +msgstr "" + +#: optiondialog.cpp:709 +msgid "Line end style:" +msgstr "" + +#: optiondialog.cpp:721 +msgid "" +"Sets the line endings for when an edited file is saved.\n" +"DOS/Windows: CR+LF; UNIX: LF; with CR=0D, LF=0A" +msgstr "" + +#: optiondialog.cpp:732 +msgid "Diff" +msgstr "" + +#: optiondialog.cpp:732 +msgid "Diff Settings" +msgstr "" + +#: optiondialog.cpp:743 +msgid "Preserve carriage return" +msgstr "" + +#: optiondialog.cpp:746 +msgid "" +"Show carriage return characters '\\r' if they exist.\n" +"Helps to compare files that were modified under different operating systems." +msgstr "" + +#: optiondialog.cpp:751 +msgid "Ignore numbers" +msgstr "" + +#: optiondialog.cpp:754 +msgid "" +"Ignore number characters during line matching phase. (Similar to Ignore white " +"space.)\n" +"Might help to compare files with numeric data." +msgstr "" + +#: optiondialog.cpp:759 +msgid "Ignore C/C++ comments" +msgstr "" + +#: optiondialog.cpp:761 +msgid "Treat C/C++ comments like white space." +msgstr "" + +#: optiondialog.cpp:765 +msgid "Ignore case" +msgstr "" + +#: optiondialog.cpp:768 +msgid "Treat case differences like white space changes. ('a'<=>'A')" +msgstr "" + +#: optiondialog.cpp:772 +msgid "Preprocessor command:" +msgstr "" + +#: optiondialog.cpp:776 +msgid "User defined pre-processing. (See the docs for details.)" +msgstr "" + +#: optiondialog.cpp:779 +msgid "Line-matching preprocessor command:" +msgstr "" + +#: optiondialog.cpp:783 +msgid "" +"This pre-processor is only used during line matching.\n" +"(See the docs for details.)" +msgstr "" + +#: optiondialog.cpp:786 +msgid "Try hard (slower)" +msgstr "" + +#: optiondialog.cpp:789 +msgid "" +"Enables the --minimal option for the external diff.\n" +"The analysis of big files will be much slower." +msgstr "" + +#: optiondialog.cpp:794 +msgid "Auto advance delay (ms):" +msgstr "" + +#: optiondialog.cpp:799 +msgid "" +"When in Auto-Advance mode the result of the current selection is shown \n" +"for the specified time, before jumping to the next conflict. Range: 0-2000 ms" +msgstr "" + +#: optiondialog.cpp:809 +msgid "Merge Settings" +msgstr "" + +#: optiondialog.cpp:822 +msgid "White space 2-file merge default:" +msgstr "" + +#: optiondialog.cpp:826 optiondialog.cpp:839 +msgid "Manual Choice" +msgstr "" + +#: optiondialog.cpp:830 optiondialog.cpp:844 +msgid "" +"Allow the merge algorithm to automatically select an input for white-space-only " +"changes." +msgstr "" + +#: optiondialog.cpp:835 +msgid "White space 3-file merge default:" +msgstr "" + +#: optiondialog.cpp:849 +msgid "Automatic Merge Regular Expression" +msgstr "" + +#: optiondialog.cpp:858 smalldialogs.cpp:397 +msgid "Auto merge regular expression:" +msgstr "" + +#: optiondialog.cpp:862 +msgid "" +"Regular expression for lines where KDiff3 should automatically choose one " +"source.\n" +"When a line with a conflict matches the regular expression then\n" +"- if available - C, otherwise B will be chosen." +msgstr "" + +#: optiondialog.cpp:868 +msgid "Run regular expression auto merge on merge start" +msgstr "" + +#: optiondialog.cpp:870 +msgid "" +"Run the merge for auto merge regular expressions\n" +"immediately when a merge starts.\n" +msgstr "" + +#: optiondialog.cpp:875 +msgid "Version Control History Merging" +msgstr "" + +#: optiondialog.cpp:884 smalldialogs.cpp:424 +msgid "History start regular expression:" +msgstr "" + +#: optiondialog.cpp:888 +msgid "" +"Regular expression for the start of the version control history entry.\n" +"Usually this line contains the \"$Log$\"-keyword.\n" +"Default value: \".*\\$Log.*\\$.*\"" +msgstr "" + +#: optiondialog.cpp:894 smalldialogs.cpp:453 +msgid "History entry start regular expression:" +msgstr "" + +#: optiondialog.cpp:906 +msgid "" +"A version control history entry consists of several lines.\n" +"Specify the regular expression to detect the first line (without the leading " +"comment).\n" +"Use parentheses to group the keys you want to use for sorting.\n" +"If left empty, then KDiff3 assumes that empty lines separate history entries.\n" +"See the documentation for details." +msgstr "" + +#: optiondialog.cpp:914 +msgid "History merge sorting" +msgstr "" + +#: optiondialog.cpp:916 +msgid "Sort version control history by a key." +msgstr "" + +#: optiondialog.cpp:926 +msgid "History entry start sort key order:" +msgstr "" + +#: optiondialog.cpp:930 +msgid "" +"Each parentheses used in the regular expression for the history start entry\n" +"groups a key that can be used for sorting.\n" +"Specify the list of keys (that are numbered in order of occurrence\n" +"starting with 1) using ',' as separator (e.g. \"4,5,6,1,2,3,7\").\n" +"If left empty, then no sorting will be done.\n" +"See the documentation for details." +msgstr "" + +#: optiondialog.cpp:941 +msgid "Merge version control history on merge start" +msgstr "" + +#: optiondialog.cpp:943 +msgid "Run version control history automerge on merge start." +msgstr "" + +#: optiondialog.cpp:947 +msgid "Test your regular expressions" +msgstr "" + +#: optiondialog.cpp:952 +msgid "Irrelevant merge command:" +msgstr "" + +#: optiondialog.cpp:956 +msgid "" +"If specified this script is run after automerge\n" +"when no other relevant changes were detected.\n" +"Called with the parameters: filename1 filename2 filename3" +msgstr "" + +#: optiondialog.cpp:966 +msgid "Directory Merge" +msgstr "" + +#: optiondialog.cpp:975 +msgid "Recursive directories" +msgstr "" + +#: optiondialog.cpp:977 +msgid "Whether to analyze subdirectories or not." +msgstr "" + +#: optiondialog.cpp:979 +msgid "File pattern(s):" +msgstr "" + +#: optiondialog.cpp:984 +msgid "" +"Pattern(s) of files to be analyzed. \n" +"Wildcards: '*' and '?'\n" +"Several Patterns can be specified by using the separator: ';'" +msgstr "" + +#: optiondialog.cpp:990 +msgid "File-anti-pattern(s):" +msgstr "" + +#: optiondialog.cpp:995 +msgid "" +"Pattern(s) of files to be excluded from analysis. \n" +"Wildcards: '*' and '?'\n" +"Several Patterns can be specified by using the separator: ';'" +msgstr "" + +#: optiondialog.cpp:1001 +msgid "Dir-anti-pattern(s):" +msgstr "" + +#: optiondialog.cpp:1006 +msgid "" +"Pattern(s) of directories to be excluded from analysis. \n" +"Wildcards: '*' and '?'\n" +"Several Patterns can be specified by using the separator: ';'" +msgstr "" + +#: optiondialog.cpp:1012 +msgid "Use .cvsignore" +msgstr "" + +#: optiondialog.cpp:1015 +msgid "" +"Extends the antipattern to anything that would be ignored by CVS.\n" +"Via local \".cvsignore\"-files this can be directory specific." +msgstr "" + +#: optiondialog.cpp:1020 +msgid "Find hidden files and directories" +msgstr "" + +#: optiondialog.cpp:1023 +msgid "Finds files and directories with the hidden attribute." +msgstr "" + +#: optiondialog.cpp:1025 +msgid "Finds files and directories starting with '.'." +msgstr "" + +#: optiondialog.cpp:1029 +msgid "Follow file links" +msgstr "" + +#: optiondialog.cpp:1032 +msgid "" +"On: Compare the file the link points to.\n" +"Off: Compare the links." +msgstr "" + +#: optiondialog.cpp:1037 +msgid "Follow directory links" +msgstr "" + +#: optiondialog.cpp:1040 +msgid "" +"On: Compare the directory the link points to.\n" +"Off: Compare the links." +msgstr "" + +#: optiondialog.cpp:1056 +msgid "Case sensitive filename comparison" +msgstr "" + +#: optiondialog.cpp:1059 +msgid "" +"The directory comparison will compare files or directories when their names " +"match.\n" +"Set this option if the case of the names must match. (Default for Windows is " +"off, otherwise on.)" +msgstr "" + +#: optiondialog.cpp:1063 +msgid "File Comparison Mode" +msgstr "" + +#: optiondialog.cpp:1067 +msgid "Binary comparison" +msgstr "" + +#: optiondialog.cpp:1068 +msgid "Binary comparison of each file. (Default)" +msgstr "" + +#: optiondialog.cpp:1070 +msgid "Full analysis" +msgstr "" + +#: optiondialog.cpp:1071 +msgid "" +"Do a full analysis and show statistics information in extra columns.\n" +"(Slower than a binary comparison, much slower for binary files.)" +msgstr "" + +#: optiondialog.cpp:1074 +msgid "Trust the modification date (unsafe)" +msgstr "" + +#: optiondialog.cpp:1075 +msgid "" +"Assume that files are equal if the modification date and file length are " +"equal.\n" +"Useful for big directories or slow networks." +msgstr "" + +#: optiondialog.cpp:1078 +msgid "Trust the size (unsafe)" +msgstr "" + +#: optiondialog.cpp:1079 +msgid "" +"Assume that files are equal if their file lengths are equal.\n" +"Useful for big directories or slow networks when the date is modified during " +"download." +msgstr "" + +#: optiondialog.cpp:1083 +msgid "Synchronize directories" +msgstr "" + +#: optiondialog.cpp:1086 +msgid "" +"Offers to store files in both directories so that\n" +"both directories are the same afterwards.\n" +"Works only when comparing two directories without specifying a destination." +msgstr "" + +#: optiondialog.cpp:1092 +msgid "White space differences considered equal" +msgstr "" + +#: optiondialog.cpp:1095 +msgid "" +"If files differ only by white space consider them equal.\n" +"This is only active when full analysis is chosen." +msgstr "" + +#: optiondialog.cpp:1101 +msgid "Copy newer instead of merging (unsafe)" +msgstr "" + +#: optiondialog.cpp:1104 +msgid "" +"Don't look inside, just take the newer file.\n" +"(Use this only if you know what you are doing!)\n" +"Only effective when comparing two directories." +msgstr "" + +#: optiondialog.cpp:1109 +msgid "Backup files (.orig)" +msgstr "" + +#: optiondialog.cpp:1112 +msgid "" +"When a file would be saved over an old file, then the old file\n" +"will be renamed with a '.orig'-extension instead of being deleted." +msgstr "" + +#: optiondialog.cpp:1176 +msgid "Regional Settings" +msgstr "" + +#: optiondialog.cpp:1272 +msgid "Language (restart required)" +msgstr "" + +#: optiondialog.cpp:1304 +msgid "" +"Choose the language of the GUI-strings or \"Auto\".\n" +"For a change of language to take place, quit and restart KDiff3." +msgstr "" + +#: optiondialog.cpp:1322 +msgid "Use the same encoding for everything:" +msgstr "" + +#: optiondialog.cpp:1325 +msgid "" +"Enable this allows to change all encodings by changing the first only.\n" +"Disable this if different individual settings are needed." +msgstr "" + +#: optiondialog.cpp:1330 +msgid "Note: Local Encoding is " +msgstr "" + +#: optiondialog.cpp:1334 +msgid "File Encoding for A:" +msgstr "" + +#: optiondialog.cpp:1340 +msgid "" +"If enabled then Unicode (UTF-16 or UTF-8) encoding will be detected.\n" +"If the file encoding is not detected then the selected encoding will be used as " +"fallback.\n" +"(Unicode detection depends on the first bytes of a file - the byte order mark " +"\"BOM\".)" +msgstr "" + +#: optiondialog.cpp:1344 optiondialog.cpp:1353 optiondialog.cpp:1362 +msgid "Auto Detect Unicode" +msgstr "" + +#: optiondialog.cpp:1349 +msgid "File Encoding for B:" +msgstr "" + +#: optiondialog.cpp:1358 +msgid "File Encoding for C:" +msgstr "" + +#: optiondialog.cpp:1367 +msgid "File Encoding for Merge Output and Saving:" +msgstr "" + +#: optiondialog.cpp:1371 +msgid "Auto Select" +msgstr "" + +#: optiondialog.cpp:1374 +msgid "" +"If enabled then the encoding from the input files is used.\n" +"In ambiguous cases a dialog will ask the user to choose the encoding for " +"saving." +msgstr "" + +#: optiondialog.cpp:1378 +msgid "File Encoding for Preprocessor Files:" +msgstr "" + +#: optiondialog.cpp:1389 +msgid "Right To Left Language" +msgstr "" + +#: optiondialog.cpp:1392 +msgid "" +"Some languages are read from right to left.\n" +"This setting will change the viewer and editor accordingly." +msgstr "" + +#: optiondialog.cpp:1402 +msgid "Integration" +msgstr "" + +#: optiondialog.cpp:1402 +msgid "Integration Settings" +msgstr "" + +#: optiondialog.cpp:1412 +msgid "Command line options to ignore:" +msgstr "" + +#: optiondialog.cpp:1417 +msgid "" +"List of command line options that should be ignored when KDiff3 is used by " +"other tools.\n" +"Several values can be specified if separated via ';'\n" +"This will suppress the \"Unknown option\"-error." +msgstr "" + +#: optiondialog.cpp:1480 +msgid "" +"You selected a variable width font.\n" +"\n" +"Because this program doesn't handle variable width fonts\n" +"correctly, you might experience problems while editing.\n" +"\n" +"Do you want to continue or do you want to select another font." +msgstr "" + +#: optiondialog.cpp:1484 +msgid "Incompatible Font" +msgstr "" + +#: optiondialog.cpp:1485 +msgid "Continue at Own Risk" +msgstr "" + +#: optiondialog.cpp:1485 +msgid "Select Another Font" +msgstr "" + +#: optiondialog.cpp:1521 +msgid "This resets all options. Not only those of the current topic." +msgstr "" + +#: pdiff.cpp:258 +msgid "PreprocessorCmd: " +msgstr "" + +#: pdiff.cpp:263 +msgid "" +"The following option(s) you selected might change data:\n" +msgstr "" + +#: pdiff.cpp:264 +msgid "" +"\n" +"Most likely this is not wanted during a merge.\n" +"Do you want to disable these settings or continue with these settings active?" +msgstr "" + +#: pdiff.cpp:266 +msgid "Option Unsafe for Merging" +msgstr "" + +#: pdiff.cpp:267 +msgid "Use These Options During Merge" +msgstr "" + +#: pdiff.cpp:267 +msgid "Disable Unsafe Options" +msgstr "" + +#: pdiff.cpp:297 +msgid "Loading A" +msgstr "" + +#: pdiff.cpp:301 +msgid "Loading B" +msgstr "" + +#: pdiff.cpp:318 pdiff.cpp:344 +msgid "Diff: A <-> B" +msgstr "" + +#: pdiff.cpp:324 pdiff.cpp:366 +msgid "Linediff: A <-> B" +msgstr "" + +#: pdiff.cpp:335 +msgid "Loading C" +msgstr "" + +#: pdiff.cpp:347 +msgid "Diff: B <-> C" +msgstr "" + +#: pdiff.cpp:350 +msgid "Diff: A <-> C" +msgstr "" + +#: pdiff.cpp:369 +msgid "Linediff: B <-> C" +msgstr "" + +#: pdiff.cpp:372 +msgid "Linediff: A <-> C" +msgstr "" + +#: pdiff.cpp:513 +msgid "All input files contain the same text, but are not binary equal." +msgstr "" + +#: pdiff.cpp:515 pdiff.cpp:517 pdiff.cpp:519 +msgid "" +"Files %1 and %2 are binary equal.\n" +msgstr "" + +#: pdiff.cpp:516 pdiff.cpp:518 pdiff.cpp:520 +msgid "" +"Files %1 and %2 have equal text, but are not binary equal. \n" +msgstr "" + +#: pdiff.cpp:530 +msgid "" +"Some inputfiles don't seem to be pure textfiles.\n" +"Note that the KDiff3-merge was not meant for binary data.\n" +"Continue at your own risk." +msgstr "" + +#: pdiff.cpp:979 +msgid "Abort" +msgstr "" + +#: pdiff.cpp:985 pdiff.cpp:1073 +msgid "Opening files..." +msgstr "" + +#: pdiff.cpp:1050 pdiff.cpp:1121 +msgid "File open error" +msgstr "" + +#: pdiff.cpp:1153 +msgid "Cutting selection..." +msgstr "" + +#: pdiff.cpp:1174 +msgid "Copying selection to clipboard..." +msgstr "" + +#: pdiff.cpp:1190 +msgid "Inserting clipboard contents..." +msgstr "" + +#: pdiff.cpp:1713 +msgid "Save && Continue" +msgstr "" + +#: pdiff.cpp:1713 +msgid "Continue Without Saving" +msgstr "" + +#: pdiff.cpp:1920 +msgid "Search complete." +msgstr "" + +#: pdiff.cpp:1920 +msgid "Search Complete" +msgstr "" + +#: pdiff.cpp:2144 +msgid "Nothing is selected in either diff input window." +msgstr "" + +#: pdiff.cpp:2144 +msgid "Error while adding manual diff range" +msgstr "" + +#. i18n: file kdiff3_part.rc line 4 +#: rc.cpp:3 +#, no-c-format +msgid "&KDiff3" +msgstr "" + +#. i18n: file kdiff3_part.rc line 13 +#: rc.cpp:6 +#, no-c-format +msgid "Configure KDiff3" +msgstr "" + +#. i18n: file kdiff3_shell.rc line 7 +#: rc.cpp:15 +#, no-c-format +msgid "&Directory" +msgstr "" + +#. i18n: file kdiff3_shell.rc line 30 +#: rc.cpp:18 +#, no-c-format +msgid "Current Item Merge Operation" +msgstr "" + +#. i18n: file kdiff3_shell.rc line 38 +#: rc.cpp:21 +#, no-c-format +msgid "Current Item Sync Operation" +msgstr "" + +#. i18n: file kdiff3_shell.rc line 50 +#: rc.cpp:24 +#, no-c-format +msgid "&Movement" +msgstr "" + +#. i18n: file kdiff3_shell.rc line 61 +#: rc.cpp:27 +#, no-c-format +msgid "D&iffview" +msgstr "" + +#. i18n: file kdiff3_shell.rc line 73 +#: rc.cpp:30 +#, no-c-format +msgid "&Merge" +msgstr "" + +#. i18n: file kdiff3_shell.rc line 95 +#: rc.cpp:33 +#, no-c-format +msgid "&Window" +msgstr "" + +#: smalldialogs.cpp:53 +msgid "A (Base):" +msgstr "" + +#: smalldialogs.cpp:59 smalldialogs.cpp:75 smalldialogs.cpp:91 +#: smalldialogs.cpp:134 +msgid "File..." +msgstr "" + +#: smalldialogs.cpp:61 smalldialogs.cpp:77 smalldialogs.cpp:93 +#: smalldialogs.cpp:136 +msgid "Dir..." +msgstr "" + +#: smalldialogs.cpp:86 +msgid "C (Optional):" +msgstr "" + +#: smalldialogs.cpp:108 +msgid "Swap/Copy Names ..." +msgstr "" + +#: smalldialogs.cpp:114 smalldialogs.cpp:115 smalldialogs.cpp:116 +msgid "Swap %1<->%2" +msgstr "" + +#: smalldialogs.cpp:117 smalldialogs.cpp:118 smalldialogs.cpp:119 +msgid "Copy %1->Output" +msgstr "" + +#: smalldialogs.cpp:120 smalldialogs.cpp:121 smalldialogs.cpp:122 +msgid "Swap %1<->Output" +msgstr "" + +#: smalldialogs.cpp:129 +msgid "Output (optional):" +msgstr "" + +#: smalldialogs.cpp:158 +msgid "Configure..." +msgstr "" + +#: smalldialogs.cpp:347 +msgid "Search text:" +msgstr "" + +#: smalldialogs.cpp:354 +msgid "Case sensitive" +msgstr "" + +#: smalldialogs.cpp:357 +msgid "Search A" +msgstr "" + +#: smalldialogs.cpp:362 +msgid "Search B" +msgstr "" + +#: smalldialogs.cpp:367 +msgid "Search C" +msgstr "" + +#: smalldialogs.cpp:372 +msgid "Search output" +msgstr "" + +#: smalldialogs.cpp:377 +msgid "&Search" +msgstr "" + +#: smalldialogs.cpp:394 +msgid "Regular Expression Tester" +msgstr "" + +#: smalldialogs.cpp:405 +msgid "Example auto merge line:" +msgstr "" + +#: smalldialogs.cpp:407 +msgid "For auto merge test copy a line as used in your files." +msgstr "" + +#: smalldialogs.cpp:413 smalldialogs.cpp:442 smalldialogs.cpp:479 +msgid "Match result:" +msgstr "" + +#: smalldialogs.cpp:432 +msgid "Example history start line (with leading comment):" +msgstr "" + +#: smalldialogs.cpp:435 +msgid "" +"Copy a history start line as used in your files,\n" +"including the leading comment." +msgstr "" + +#: smalldialogs.cpp:461 +msgid "History sort key order:" +msgstr "" + +#: smalldialogs.cpp:469 +msgid "Example history entry start line (without leading comment):" +msgstr "" + +#: smalldialogs.cpp:471 +msgid "" +"Copy a history entry start line as used in your files,\n" +"but omit the leading comment." +msgstr "" + +#: smalldialogs.cpp:486 +msgid "Sort key result:" +msgstr "" + +#: smalldialogs.cpp:537 smalldialogs.cpp:547 smalldialogs.cpp:568 +msgid "Match success." +msgstr "" + +#: smalldialogs.cpp:541 smalldialogs.cpp:551 smalldialogs.cpp:574 +msgid "Match failed." +msgstr "" + +#: smalldialogs.cpp:559 +msgid "Opening and closing parentheses don't match in regular expression." +msgstr "" diff --git a/po/createqm b/po/createqm new file mode 100644 index 0000000..1b2dac9 --- /dev/null +++ b/po/createqm @@ -0,0 +1,9 @@ +for i in `cat subdirs` ; do + if [ -a $i.po ]; then + echo $i + msgmerge --no-fuzzy-matching kdelibspo/kdelibs_$i.po kreplacements.pot >kreplacements_$i.po + msgcat --use-first $i.po kreplacements_$i.po >kdiff3_$i.po + /usr/lib/qt3/bin/msg2qm kdiff3_$i.po kdiff3_$i.qm + rm kdiff3_$i.po kreplacements_$i.po + fi +done diff --git a/po/cs.po b/po/cs.po new file mode 100644 index 0000000..444f9b2 --- /dev/null +++ b/po/cs.po @@ -0,0 +1,2324 @@ +# translation of kdiff3.po to Czech +# +# Klara Cihlarova , 2005, 2006. +# Jakub Friedl , 2005. +# Klára Cihlářová , 2007. +msgid "" +msgstr "" +"Project-Id-Version: kdiff3\n" +"POT-Creation-Date: 2006-11-05 08:45+0100\n" +"PO-Revision-Date: 2007-01-25 19:58+0100\n" +"Last-Translator: Klára Cihlářová \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: KBabel 1.11.4\n" +"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" + +#: _translatorinfo.cpp:1 +msgid "" +"_: NAME OF TRANSLATORS\n" +"Your names" +msgstr "Klára Cihlářová,Jakub Friedl" + +#: _translatorinfo.cpp:3 +msgid "" +"_: EMAIL OF TRANSLATORS\n" +"Your emails" +msgstr "koty@seznam.cz,jfriedl@suse.cz" + +#: diff.cpp:246 +msgid "Writing clipboard data to temp file failed." +msgstr "Zápis dat schránky do doÄasného souboru selhal." + +#: diff.cpp:250 +msgid "From Clipboard" +msgstr "Ze schránky" + +#: diff.cpp:491 +msgid "" +"Preprocessing possibly failed. Check this command:\n" +"\n" +" %1\n" +"\n" +"The preprocessing command will be disabled now." +msgstr "" + +#: diff.cpp:526 +msgid "" +"The line-matching-preprocessing possibly failed. Check this command:\n" +"\n" +" %1\n" +"\n" +"The line-matching-preprocessing command will be disabled now." +msgstr "" + +#: diff.cpp:1631 diff.cpp:1645 +msgid "" +"Data loss error:\n" +"If it is reproducable please contact the author.\n" +msgstr "" +"Chyba, ztracená data:\n" +"Pokud lze chybu reprodukovat, kontaktujte autora.\n" + +#: diff.cpp:1633 diff.cpp:1647 +msgid "Severe Internal Error" +msgstr "Závažná interní chyba" + +#: difftextwindow.cpp:1643 kdiff3.cpp:753 +msgid "Top line" +msgstr "" + +#: difftextwindow.cpp:1653 +msgid "End" +msgstr "Konec" + +#: directorymergewindow.cpp:142 +msgid "Mix of links and normal files." +msgstr "SmÄ›s odkazů a běžných souborů." + +#: directorymergewindow.cpp:149 +msgid "Link: " +msgstr "Odkaz: " + +#: directorymergewindow.cpp:157 +msgid "Size. " +msgstr "Velikost" + +#: directorymergewindow.cpp:170 +msgid "Date & Size: " +msgstr "Datum a velikost: " + +#: directorymergewindow.cpp:179 directorymergewindow.cpp:185 +msgid "Creating temp copy of %1 failed." +msgstr "Vytváření doÄasné kopie %1 selhalo." + +#: directorymergewindow.cpp:196 directorymergewindow.cpp:204 +msgid "Opening %1 failed." +msgstr "OtevÅ™ení %1 selhalo." + +#: directorymergewindow.cpp:208 +msgid "Comparing file..." +msgstr "Porovnání souborů..." + +#: directorymergewindow.cpp:218 directorymergewindow.cpp:224 +#, c-format +msgid "Error reading from %1" +msgstr "Chyba Ätení z %1" + +#: directorymergewindow.cpp:282 +msgid "Name" +msgstr "Jméno" + +#: directorymergewindow.cpp:286 +msgid "Operation" +msgstr "Operace" + +#: directorymergewindow.cpp:287 +msgid "Status" +msgstr "Stav" + +#: directorymergewindow.cpp:288 +msgid "Unsolved" +msgstr "NevyÅ™eÅ¡eno" + +#: directorymergewindow.cpp:289 +msgid "Solved" +msgstr "VyÅ™eÅ¡eno" + +#: directorymergewindow.cpp:290 +msgid "Nonwhite" +msgstr "Nebílý" + +#: directorymergewindow.cpp:291 +msgid "White" +msgstr "Bílá" + +#: directorymergewindow.cpp:319 +msgid "" +"You are currently doing a directory merge. Are you sure, you want to abort the " +"merge and rescan the directory?" +msgstr "" + +#: directorymergewindow.cpp:320 directorymergewindow.cpp:2868 +msgid "Rescan" +msgstr "Znovu prohledat" + +#: directorymergewindow.cpp:320 kdiff3.cpp:603 pdiff.cpp:979 +msgid "Continue Merging" +msgstr "PokraÄovat se sluÄováním" + +#: directorymergewindow.cpp:462 +msgid "Opening of directories failed:" +msgstr "Otvírání adresářů selhalo:" + +#: directorymergewindow.cpp:465 +msgid "" +"Dir A \"%1\" does not exist or is not a directory.\n" +msgstr "" +"Adresář A \"%1\" neexistuje nebo není adresářem.\n" + +#: directorymergewindow.cpp:468 +msgid "" +"Dir B \"%1\" does not exist or is not a directory.\n" +msgstr "" +"Adresář B \"%1\" neexistuje nebo není adresářem.\n" + +#: directorymergewindow.cpp:471 +msgid "" +"Dir C \"%1\" does not exist or is not a directory.\n" +msgstr "" +"Adresář C \"%1\" neexistuje nebo není adresářem.\n" + +#: directorymergewindow.cpp:473 +msgid "Directory Open Error" +msgstr "Chyba otvírání adresáře" + +#: directorymergewindow.cpp:481 +msgid "" +"The destination directory must not be the same as A or B when three directories " +"are merged.\n" +"Check again before continuing." +msgstr "" +"Cílový adresář nesmí být pÅ™i sluÄování tří adresářů shodný s A nebo B.\n" +"PÅ™ed pokraÄováním proveÄte kontrolu." + +#: directorymergewindow.cpp:483 +msgid "Parameter Warning" +msgstr "" + +#: directorymergewindow.cpp:488 +msgid "Scanning directories..." +msgstr "Prohledávání adresářů..." + +#: directorymergewindow.cpp:537 +msgid "Reading Directory A" +msgstr "ÄŒtení adresáře A" + +#: directorymergewindow.cpp:559 +msgid "Reading Directory B" +msgstr "ÄŒtení adresáře B" + +#: directorymergewindow.cpp:581 +msgid "Reading Directory C" +msgstr "ÄŒtení adresáře C" + +#: directorymergewindow.cpp:607 +msgid "Some subdirectories were not readable in" +msgstr "NÄ›které podadresáře byly neÄitelné v" + +#: directorymergewindow.cpp:612 +msgid "Check the permissions of the subdirectories." +msgstr "Zkontrolujte oprávnÄ›ní podadresářů." + +#: directorymergewindow.cpp:646 kdiff3.cpp:552 kdiff3.cpp:636 kdiff3.cpp:661 +#: kdiff3.cpp:934 kdiff3.cpp:955 pdiff.cpp:1059 pdiff.cpp:1131 pdiff.cpp:1169 +#: pdiff.cpp:1185 pdiff.cpp:1215 pdiff.cpp:1226 +msgid "Ready." +msgstr "PÅ™ipraven." + +#: directorymergewindow.cpp:660 +msgid "Directory Comparison Status" +msgstr "Stav porovnání adresářů" + +#: directorymergewindow.cpp:661 +msgid "Number of subdirectories:" +msgstr "PoÄet podadresářů:" + +#: directorymergewindow.cpp:662 +msgid "Number of equal files:" +msgstr "PoÄet shodných souborů:" + +#: directorymergewindow.cpp:663 +msgid "Number of different files:" +msgstr "PoÄet rozdílných souborů:" + +#: directorymergewindow.cpp:666 +msgid "Number of manual merges:" +msgstr "PoÄet ruÄních slouÄení:" + +#: directorymergewindow.cpp:802 +msgid "This affects all merge operations." +msgstr "Toto ovlivňuje vÅ¡echna sluÄování." + +#: directorymergewindow.cpp:803 +msgid "Changing All Merge Operations" +msgstr "" + +#: directorymergewindow.cpp:803 mergeresultwindow.cpp:287 +msgid "C&ontinue" +msgstr "P&okraÄovat" + +#: directorymergewindow.cpp:1169 +msgid "Processing " +msgstr "Zpracovávání " + +#: directorymergewindow.cpp:1647 directorymergewindow.cpp:1653 +msgid "To do." +msgstr "UdÄ›lat." + +#: directorymergewindow.cpp:1756 directorymergewindow.cpp:2899 +msgid "Copy A to B" +msgstr "Zkopírovat A do B" + +#: directorymergewindow.cpp:1757 directorymergewindow.cpp:2900 +msgid "Copy B to A" +msgstr "Zkopírovat B do A" + +#: directorymergewindow.cpp:1758 directorymergewindow.cpp:2901 +msgid "Delete A" +msgstr "Smazat A" + +#: directorymergewindow.cpp:1759 directorymergewindow.cpp:2902 +msgid "Delete B" +msgstr "Smazat B" + +#: directorymergewindow.cpp:1760 +msgid "Delete A & B" +msgstr "Smazat A a B" + +#: directorymergewindow.cpp:1761 directorymergewindow.cpp:2904 +msgid "Merge to A" +msgstr "SlouÄit do A" + +#: directorymergewindow.cpp:1762 directorymergewindow.cpp:2905 +msgid "Merge to B" +msgstr "SlouÄit do B" + +#: directorymergewindow.cpp:1763 +msgid "Merge to A & B" +msgstr "SlouÄit do A a B" + +#: directorymergewindow.cpp:1767 directorymergewindow.cpp:2896 +msgid "Delete (if exists)" +msgstr "Smazat (pokud existuje)" + +#: directorymergewindow.cpp:1768 directorymergewindow.cpp:1769 +#: directorymergewindow.cpp:2895 optiondialog.cpp:809 smalldialogs.cpp:102 +msgid "Merge" +msgstr "SlouÄit" + +#: directorymergewindow.cpp:1768 directorymergewindow.cpp:1769 +msgid "Merge (manual)" +msgstr "SlouÄit (ruÄnÄ›)" + +#: directorymergewindow.cpp:1770 +msgid "Error: Conflicting File Types" +msgstr "Chyba: Konflikt typů souborů" + +#: directorymergewindow.cpp:1771 +msgid "Error: Dates are equal but files are not." +msgstr "Chyba: Data jsou shodná ale soubory nikoliv." + +#: directorymergewindow.cpp:1795 directorymergewindow.cpp:1824 +#: directorymergewindow.cpp:1849 +msgid "This operation is currently not possible." +msgstr "Tato operace není nyní možná." + +#: directorymergewindow.cpp:1795 directorymergewindow.cpp:1824 +#: directorymergewindow.cpp:1849 directorymergewindow.cpp:2106 +msgid "Operation Not Possible" +msgstr "Operace není možná" + +#: directorymergewindow.cpp:1888 +msgid "" +"This should never happen: \n" +"\n" +"mergeResultSaved: m_pMFI=0\n" +"\n" +"If you know how to reproduce this, please contact the program author." +msgstr "" +"Toto by se nemÄ›lo nikdy stát:\n" +"\n" +"mergeResultSaved: m_pMFI=0\n" +"\n" +"Pokud tuto situaci umíte reprodukovat, kontaktujte prosím autora programu." + +#: directorymergewindow.cpp:1888 +msgid "Program Error" +msgstr "Chyba programu" + +#: directorymergewindow.cpp:1899 +msgid "" +"An error occurred while copying.\n" +msgstr "" +"BÄ›hem kopírování se stala chyba.\n" + +#: directorymergewindow.cpp:1900 directorymergewindow.cpp:2306 +msgid "Merge Error" +msgstr "Chyba sluÄování" + +#: directorymergewindow.cpp:1905 directorymergewindow.cpp:2311 +msgid "Error." +msgstr "Chyba." + +#: directorymergewindow.cpp:1910 directorymergewindow.cpp:2202 +#: directorymergewindow.cpp:2242 +msgid "Done." +msgstr "Hotovo." + +#: directorymergewindow.cpp:1933 +msgid "Not saved." +msgstr "Neuloženo." + +#: directorymergewindow.cpp:1968 +msgid "Unknown merge operation. (This must never happen!)" +msgstr "Neznámá sluÄovací operace. (Toto se nesmí nikdy stát!)" + +#: directorymergewindow.cpp:2000 +msgid "Unknown merge operation." +msgstr "Neznámá sluÄovací operace." + +#: directorymergewindow.cpp:2015 +msgid "" +"The merge is about to begin.\n" +"\n" +"Choose \"Do it\" if you have read the instructions and know what you are " +"doing.\n" +"Choosing \"Simulate it\" will tell you what would happen.\n" +"\n" +"Be aware that this program still has beta status and there is NO WARRANTY " +"whatsoever! Make backups of your vital data!" +msgstr "" + +#: directorymergewindow.cpp:2020 +msgid "Starting Merge" +msgstr "" + +#: directorymergewindow.cpp:2020 +msgid "Do It" +msgstr "" + +#: directorymergewindow.cpp:2020 +msgid "Simulate It" +msgstr "" + +#: directorymergewindow.cpp:2046 +msgid "" +"The highlighted item has a different type in the different directories. Select " +"what to do." +msgstr "" + +#: directorymergewindow.cpp:2055 +msgid "" +"The modification dates of the file are equal but the files are not. Select what " +"to do." +msgstr "" + +#: directorymergewindow.cpp:2106 +msgid "" +"This operation is currently not possible because directory merge is currently " +"running." +msgstr "" + +#: directorymergewindow.cpp:2166 +msgid "" +"There was an error in the last step.\n" +"Do you want to continue with the item that caused the error or do you want to " +"skip this item?" +msgstr "" + +#: directorymergewindow.cpp:2168 +msgid "Continue merge after an error" +msgstr "PokraÄovat se sluÄováním po chybÄ›" + +#: directorymergewindow.cpp:2168 +msgid "Continue With Last Item" +msgstr "" + +#: directorymergewindow.cpp:2168 +msgid "Skip Item" +msgstr "PÅ™eskoÄit položku" + +#: directorymergewindow.cpp:2202 +msgid "Skipped." +msgstr "PÅ™eskoÄeno." + +#: directorymergewindow.cpp:2209 directorymergewindow.cpp:2435 +msgid "In progress..." +msgstr "" + +#: directorymergewindow.cpp:2257 +msgid "Merge operation complete." +msgstr "" + +#: directorymergewindow.cpp:2257 directorymergewindow.cpp:2260 +msgid "Merge Complete" +msgstr "SluÄování dokonÄeno" + +#: directorymergewindow.cpp:2269 +msgid "" +"Simulated merge complete: Check if you agree with the proposed operations." +msgstr "" + +#: directorymergewindow.cpp:2305 +msgid "" +"An error occurred. Press OK to see detailed information.\n" +msgstr "" + +#: directorymergewindow.cpp:2348 +msgid "Error: While deleting %1: Creating backup failed." +msgstr "" + +#: directorymergewindow.cpp:2355 +msgid "delete directory recursively( %1 )" +msgstr "" + +#: directorymergewindow.cpp:2357 +msgid "delete( %1 )" +msgstr "" + +#: directorymergewindow.cpp:2372 +msgid "Error: delete dir operation failed while trying to read the directory." +msgstr "" + +#: directorymergewindow.cpp:2391 +msgid "Error: rmdir( %1 ) operation failed." +msgstr "" + +#: directorymergewindow.cpp:2401 +msgid "Error: delete operation failed." +msgstr "" + +#: directorymergewindow.cpp:2427 +msgid "manual merge( %1, %2, %3 -> %4)" +msgstr "" + +#: directorymergewindow.cpp:2430 +msgid "" +" Note: After a manual merge the user should continue by pressing F7." +msgstr "" + +#: directorymergewindow.cpp:2453 +msgid "Error: copy( %1 -> %2 ) failed.Deleting existing destination failed." +msgstr "" + +#: directorymergewindow.cpp:2463 +msgid "copyLink( %1 -> %2 )" +msgstr "" + +#: directorymergewindow.cpp:2474 +msgid "Error: copyLink failed: Remote links are not yet supported." +msgstr "" + +#: directorymergewindow.cpp:2480 +msgid "Error: copyLink failed." +msgstr "" + +#: directorymergewindow.cpp:2500 +msgid "copy( %1 -> %2 )" +msgstr "" + +#: directorymergewindow.cpp:2526 +msgid "Error during rename( %1 -> %2 ): Cannot delete existing destination." +msgstr "" + +#: directorymergewindow.cpp:2532 +msgid "rename( %1 -> %2 )" +msgstr "" + +#: directorymergewindow.cpp:2541 +msgid "Error: Rename failed." +msgstr "" + +#: directorymergewindow.cpp:2559 +msgid "Error during makeDir of %1. Cannot delete existing file." +msgstr "" + +#: directorymergewindow.cpp:2575 +msgid "makeDir( %1 )" +msgstr "" + +#: directorymergewindow.cpp:2585 +msgid "Error while creating directory." +msgstr "" + +#: directorymergewindow.cpp:2608 directorymergewindow.cpp:2725 +msgid "Dest" +msgstr "" + +#: directorymergewindow.cpp:2612 directorymergewindow.cpp:2650 +msgid "Dir" +msgstr "" + +#: directorymergewindow.cpp:2613 +msgid "Type" +msgstr "Typ" + +#: directorymergewindow.cpp:2614 +msgid "Size" +msgstr "Velikost" + +#: directorymergewindow.cpp:2615 +msgid "Attr" +msgstr "" + +#: directorymergewindow.cpp:2616 +msgid "Last Modification" +msgstr "" + +#: directorymergewindow.cpp:2617 +msgid "Link-Destination" +msgstr "" + +#: directorymergewindow.cpp:2667 +msgid "not available" +msgstr "nedostupný" + +#: directorymergewindow.cpp:2687 +msgid "A (Dest): " +msgstr "" + +#: directorymergewindow.cpp:2690 +msgid "A (Base): " +msgstr "" + +#: directorymergewindow.cpp:2696 +msgid "B (Dest): " +msgstr "" + +#: directorymergewindow.cpp:2704 +msgid "C (Dest): " +msgstr "" + +#: directorymergewindow.cpp:2710 +msgid "Dest: " +msgstr "" + +#: directorymergewindow.cpp:2775 +msgid "Save Directory Merge State As..." +msgstr "" + +#: directorymergewindow.cpp:2862 +msgid "Start/Continue Directory Merge" +msgstr "" + +#: directorymergewindow.cpp:2863 +msgid "Run Operation for Current Item" +msgstr "" + +#: directorymergewindow.cpp:2864 +msgid "Compare Selected File" +msgstr "" + +#: directorymergewindow.cpp:2865 +msgid "Merge Current File" +msgstr "" + +#: directorymergewindow.cpp:2866 +msgid "Fold All Subdirs" +msgstr "" + +#: directorymergewindow.cpp:2867 +msgid "Unfold All Subdirs" +msgstr "" + +#: directorymergewindow.cpp:2871 +msgid "Choose A for All Items" +msgstr "" + +#: directorymergewindow.cpp:2872 +msgid "Choose B for All Items" +msgstr "" + +#: directorymergewindow.cpp:2873 +msgid "Choose C for All Items" +msgstr "" + +#: directorymergewindow.cpp:2874 +msgid "Auto-Choose Operation for All Items" +msgstr "" + +#: directorymergewindow.cpp:2875 +msgid "No Operation for All Items" +msgstr "" + +#: directorymergewindow.cpp:2880 +msgid "Show Identical Files" +msgstr "" + +#: directorymergewindow.cpp:2881 +msgid "Show Different Files" +msgstr "Zobrazit rozdílné soubory" + +#: directorymergewindow.cpp:2882 +msgid "Show Files only in A" +msgstr "" + +#: directorymergewindow.cpp:2883 +msgid "Show Files only in B" +msgstr "" + +#: directorymergewindow.cpp:2884 +msgid "Show Files only in C" +msgstr "" + +#: directorymergewindow.cpp:2888 +msgid "Compare Explicitly Selected Files" +msgstr "" + +#: directorymergewindow.cpp:2889 +msgid "Merge Explicitly Selected Files" +msgstr "" + +#: directorymergewindow.cpp:2891 directorymergewindow.cpp:2898 +msgid "Do Nothing" +msgstr "NedÄ›lat nic" + +#: directorymergewindow.cpp:2892 +msgid "A" +msgstr "A" + +#: directorymergewindow.cpp:2893 +msgid "B" +msgstr "B" + +#: directorymergewindow.cpp:2894 +msgid "C" +msgstr "C" + +#: directorymergewindow.cpp:2903 +msgid "Delete A && B" +msgstr "" + +#: directorymergewindow.cpp:2906 +msgid "Merge to A && B" +msgstr "" + +#: fileaccess.cpp:595 +msgid "" +"While trying to make a backup, deleting an older backup failed. \n" +"Filename: " +msgstr "" + +#: fileaccess.cpp:602 +msgid "" +"While trying to make a backup, renaming failed. \n" +"Filenames: " +msgstr "" + +#: fileaccess.cpp:624 +#, c-format +msgid "Getting file status: %1" +msgstr "" + +#: fileaccess.cpp:667 +#, c-format +msgid "Reading file: %1" +msgstr "" + +#: fileaccess.cpp:703 +#, c-format +msgid "Writing file: %1" +msgstr "" + +#: fileaccess.cpp:731 +msgid "Out of memory" +msgstr "Nedostatek pamÄ›ti" + +#: fileaccess.cpp:766 +#, c-format +msgid "Making directory: %1" +msgstr "" + +#: fileaccess.cpp:786 +#, c-format +msgid "Removing directory: %1" +msgstr "" + +#: fileaccess.cpp:801 +#, c-format +msgid "Removing file: %1" +msgstr "" + +#: fileaccess.cpp:817 +msgid "Creating symbolic link: %1 -> %2" +msgstr "" + +#: fileaccess.cpp:843 +msgid "Renaming file: %1 -> %2" +msgstr "" + +#: fileaccess.cpp:879 +msgid "Copying file: %1 -> %2" +msgstr "" + +#: fileaccess.cpp:893 +#, c-format +msgid "" +"Error during file copy operation: Opening file for reading failed. Filename: %1" +msgstr "" + +#: fileaccess.cpp:899 +#, c-format +msgid "" +"Error during file copy operation: Opening file for writing failed. Filename: %1" +msgstr "" + +#: fileaccess.cpp:914 +#, c-format +msgid "Error during file copy operation: Reading failed. Filename: %1" +msgstr "" + +#: fileaccess.cpp:923 +#, c-format +msgid "Error during file copy operation: Writing failed. Filename: %1" +msgstr "" + +#: fileaccess.cpp:1219 +msgid "Reading directory: " +msgstr "" + +#: fileaccess.cpp:1348 +#, c-format +msgid "Listing directory: %1" +msgstr "" + +#: kdiff3.cpp:142 +msgid "Current Configuration:" +msgstr "" + +#: kdiff3.cpp:147 +msgid "Config Option Error:" +msgstr "" + +#: kdiff3.cpp:187 +msgid "Option --auto used, but no output file specified." +msgstr "" + +#: kdiff3.cpp:323 +msgid "Option --auto ignored for directory comparison." +msgstr "" + +#: kdiff3.cpp:359 +msgid "Saving failed." +msgstr "" + +#: kdiff3.cpp:386 pdiff.cpp:1041 pdiff.cpp:1112 +msgid "Opening of these files failed:" +msgstr "" + +#: kdiff3.cpp:395 +msgid "File Open Error" +msgstr "Chyba otvírání souboru" + +#: kdiff3.cpp:418 +msgid "Opens documents for comparison..." +msgstr "OtevÅ™e dokumenty pro porovnání..." + +#: kdiff3.cpp:423 +msgid "Saves the merge result. All conflicts must be solved!" +msgstr "Uloží výsledek spojení. Musí být vyÅ™eÅ¡eny vÅ¡echny konflikty!" + +#: kdiff3.cpp:425 +msgid "Saves the current document as..." +msgstr "Uloží aktuální dokument jako..." + +#: kdiff3.cpp:427 +msgid "Print the differences" +msgstr "" + +#: kdiff3.cpp:429 +msgid "Quits the application" +msgstr "UkonÄí aplikaci" + +#: kdiff3.cpp:431 +msgid "Cuts the selected section and puts it to the clipboard" +msgstr "Vyjme souÄasný výbÄ›r a umístí jej do schránky" + +#: kdiff3.cpp:433 +msgid "Copies the selected section to the clipboard" +msgstr "Zkopíruje vybranou sekci do schránky" + +#: kdiff3.cpp:435 +msgid "Pastes the clipboard contents to actual position" +msgstr "Vloží souÄasný obsah schránky na aktuální pozici" + +#: kdiff3.cpp:437 +msgid "Select everything in current window" +msgstr "" + +#: kdiff3.cpp:439 +msgid "Search for a string" +msgstr "Hledání Å™etÄ›zce" + +#: kdiff3.cpp:441 +msgid "Search again for the string" +msgstr "Další hledání Å™etÄ›zce" + +#: kdiff3.cpp:443 +msgid "Enables/disables the toolbar" +msgstr "Povolí/zakáže nástrojovou liÅ¡tu" + +#: kdiff3.cpp:445 +msgid "Enables/disables the statusbar" +msgstr "Povolí/zakáže stavovou liÅ¡tu" + +#: kdiff3.cpp:449 +msgid "Configure KDiff3..." +msgstr "Nastavit: KDiff3..." + +#: kdiff3.cpp:470 +msgid "Go to Current Delta" +msgstr "" + +#: kdiff3.cpp:471 +msgid "Go to First Delta" +msgstr "" + +#: kdiff3.cpp:472 +msgid "Go to Last Delta" +msgstr "" + +#: kdiff3.cpp:473 +msgid "(Skips white space differences when \"Show White Space\" is disabled.)" +msgstr "" + +#: kdiff3.cpp:474 +msgid "" +"(Does not skip white space differences even when \"Show White Space\" is " +"disabled.)" +msgstr "" + +#: kdiff3.cpp:475 +msgid "Go to Previous Delta" +msgstr "" + +#: kdiff3.cpp:477 +msgid "Go to Next Delta" +msgstr "" + +#: kdiff3.cpp:479 +msgid "Go to Previous Conflict" +msgstr "" + +#: kdiff3.cpp:481 +msgid "Go to Next Conflict" +msgstr "" + +#: kdiff3.cpp:483 +msgid "Go to Previous Unsolved Conflict" +msgstr "" + +#: kdiff3.cpp:485 +msgid "Go to Next Unsolved Conflict" +msgstr "" + +#: kdiff3.cpp:487 +msgid "Select Line(s) From A" +msgstr "" + +#: kdiff3.cpp:488 +msgid "Select Line(s) From B" +msgstr "" + +#: kdiff3.cpp:489 +msgid "Select Line(s) From C" +msgstr "" + +#: kdiff3.cpp:490 +msgid "Automatically Go to Next Unsolved Conflict After Source Selection" +msgstr "" + +#: kdiff3.cpp:492 +msgid "Show Space && Tabulator Characters for Differences" +msgstr "" + +#: kdiff3.cpp:493 +msgid "Show White Space" +msgstr "" + +#: kdiff3.cpp:495 +msgid "Show Line Numbers" +msgstr "" + +#: kdiff3.cpp:496 +msgid "Choose A Everywhere" +msgstr "" + +#: kdiff3.cpp:497 +msgid "Choose B Everywhere" +msgstr "" + +#: kdiff3.cpp:498 +msgid "Choose C Everywhere" +msgstr "" + +#: kdiff3.cpp:499 +msgid "Choose A for All Unsolved Conflicts" +msgstr "" + +#: kdiff3.cpp:500 +msgid "Choose B for All Unsolved Conflicts" +msgstr "" + +#: kdiff3.cpp:501 +msgid "Choose C for All Unsolved Conflicts" +msgstr "" + +#: kdiff3.cpp:502 +msgid "Choose A for All Unsolved Whitespace Conflicts" +msgstr "" + +#: kdiff3.cpp:503 +msgid "Choose B for All Unsolved Whitespace Conflicts" +msgstr "" + +#: kdiff3.cpp:504 +msgid "Choose C for All Unsolved Whitespace Conflicts" +msgstr "" + +#: kdiff3.cpp:505 +msgid "Automatically Solve Simple Conflicts" +msgstr "" + +#: kdiff3.cpp:506 +msgid "Set Deltas to Conflicts" +msgstr "" + +#: kdiff3.cpp:507 +msgid "Run Regular Expression Auto Merge" +msgstr "" + +#: kdiff3.cpp:508 +msgid "Automatically Solve History Conflicts" +msgstr "" + +#: kdiff3.cpp:509 +msgid "Split Diff At Selection" +msgstr "" + +#: kdiff3.cpp:510 +msgid "Join Selected Diffs" +msgstr "" + +#: kdiff3.cpp:512 +msgid "Show Window A" +msgstr "" + +#: kdiff3.cpp:513 +msgid "Show Window B" +msgstr "" + +#: kdiff3.cpp:514 +msgid "Show Window C" +msgstr "" + +#: kdiff3.cpp:515 kdiff3.cpp:526 +msgid "Focus Next Window" +msgstr "" + +#: kdiff3.cpp:517 +msgid "Normal Overview" +msgstr "" + +#: kdiff3.cpp:518 +msgid "A vs. B Overview" +msgstr "" + +#: kdiff3.cpp:519 +msgid "A vs. C Overview" +msgstr "" + +#: kdiff3.cpp:520 +msgid "B vs. C Overview" +msgstr "" + +#: kdiff3.cpp:521 +msgid "Word Wrap Diff Windows" +msgstr "" + +#: kdiff3.cpp:522 +msgid "Add Manual Diff Alignment" +msgstr "" + +#: kdiff3.cpp:523 +msgid "Clear All Manual Diff Alignments" +msgstr "" + +#: kdiff3.cpp:528 +msgid "Focus Prev Window" +msgstr "" + +#: kdiff3.cpp:529 +msgid "Toggle Split Orientation" +msgstr "" + +#: kdiff3.cpp:531 +msgid "Dir && Text Split Screen View" +msgstr "" + +#: kdiff3.cpp:533 +msgid "Toggle Between Dir && Text View" +msgstr "" + +#: kdiff3.cpp:582 pdiff.cpp:1712 +msgid "The merge result hasn't been saved." +msgstr "" + +#: kdiff3.cpp:583 +msgid "Save && Quit" +msgstr "" + +#: kdiff3.cpp:583 +msgid "Quit Without Saving" +msgstr "" + +#: kdiff3.cpp:591 pdiff.cpp:1721 +msgid "Saving the merge result failed." +msgstr "" + +#: kdiff3.cpp:602 pdiff.cpp:978 +msgid "" +"You are currently doing a directory merge. Are you sure, you want to abort?" +msgstr "" + +#: kdiff3.cpp:625 +msgid "Saving file..." +msgstr "Ukládám soubor..." + +#: kdiff3.cpp:642 +msgid "Saving file with a new filename..." +msgstr "Ukládám soubor pod jiným názvem..." + +#: kdiff3.cpp:732 +msgid "Printing..." +msgstr "Tisknu..." + +#: kdiff3.cpp:738 kdiff3.cpp:900 +msgid "Printing aborted." +msgstr "Tisk zruÅ¡en." + +#: kdiff3.cpp:870 +msgid "Selection" +msgstr "VýbÄ›r" + +#: kdiff3.cpp:896 +msgid "Printing completed." +msgstr "Tisk dokonÄen." + +#: kdiff3.cpp:906 +msgid "Exiting..." +msgstr "UkonÄuji..." + +#: kdiff3.cpp:918 +msgid "Toggling toolbar..." +msgstr "PÅ™epínání panelu nástrojů..." + +#: kdiff3.cpp:939 +msgid "Toggle the statusbar..." +msgstr "PÅ™epnout stavovou liÅ¡tu..." + +#: kdiff3_part.cpp:155 kdiff3_part.cpp:224 +msgid "Couldn't find files for comparison." +msgstr "" + +#: kdiff3_part.cpp:291 +msgid "KDiff3Part" +msgstr "" + +#: kdiff3_shell.cpp:78 +msgid "" +"Could not find our part!\n" +"This usually happens due to an installation problem. Please read the " +"README-file in the source package for details." +msgstr "" + +#: main.cpp:35 +msgid "Tool for Comparison and Merge of Files and Directories" +msgstr "" + +#: main.cpp:40 +msgid "Merge the input." +msgstr "" + +#: main.cpp:42 +msgid "Explicit base file. For compatibility with certain tools." +msgstr "" + +#: main.cpp:44 +msgid "Output file. Implies -m. E.g.: -o newfile.txt" +msgstr "" + +#: main.cpp:45 +msgid "Output file, again. (For compatibility with certain tools.)" +msgstr "" + +#: main.cpp:46 +msgid "No GUI if all conflicts are auto-solvable. (Needs -o file)" +msgstr "" + +#: main.cpp:47 +msgid "Don't solve conflicts automatically. (For compatibility...)" +msgstr "" + +#: main.cpp:48 +msgid "Visible name replacement for input file 1 (base)." +msgstr "" + +#: main.cpp:49 +msgid "Visible name replacement for input file 2." +msgstr "" + +#: main.cpp:50 +msgid "Visible name replacement for input file 3." +msgstr "" + +#: main.cpp:52 +msgid "Alternative visible name replacement. Supply this once for every input." +msgstr "" + +#: main.cpp:53 +msgid "" +"Override a config setting. Use once for every setting. E.g.: --cs " +"\"AutoAdvance=1\"" +msgstr "" + +#: main.cpp:54 +msgid "Show list of config settings and current values." +msgstr "" + +#: main.cpp:55 +msgid "Use a different config file." +msgstr "Použít rozdílný konfiguraÄní soubor." + +#: main.cpp:59 +msgid "file1 to open (base, if not specified via --base)" +msgstr "" + +#: main.cpp:60 +msgid "file2 to open" +msgstr "" + +#: main.cpp:61 +msgid "file3 to open" +msgstr "" + +#: main.cpp:93 +msgid "Ignored. (User defined.)" +msgstr "" + +#. i18n: file kdiff3_part.rc line 16 +#: main.cpp:173 rc.cpp:9 +#, no-c-format +msgid "KDiff3" +msgstr "KDiff3" + +#: main.cpp:186 +msgid "+ Many thanks to those who reported bugs and contributed ideas!" +msgstr "" + +#: mergeresultwindow.cpp:136 mergeresultwindow.cpp:939 +#: mergeresultwindow.cpp:953 mergeresultwindow.cpp:965 +#: mergeresultwindow.cpp:977 +msgid "Number of remaining unsolved conflicts: %1 (of which %2 are whitespace)" +msgstr "" + +#: mergeresultwindow.cpp:285 +msgid "" +"The output has been modified.\n" +"If you continue your changes will be lost." +msgstr "" + +#: mergeresultwindow.cpp:797 pdiff.cpp:511 +msgid "All input files are binary equal." +msgstr "" + +#: mergeresultwindow.cpp:799 +msgid "All input files contain the same text." +msgstr "" + +#: mergeresultwindow.cpp:801 +msgid "" +"Files A and B are binary equal.\n" +msgstr "" + +#: mergeresultwindow.cpp:802 +msgid "" +"Files A and B have equal text. \n" +msgstr "" + +#: mergeresultwindow.cpp:803 +msgid "" +"Files A and C are binary equal.\n" +msgstr "" + +#: mergeresultwindow.cpp:804 +msgid "" +"Files A and C have equal text. \n" +msgstr "" + +#: mergeresultwindow.cpp:805 +msgid "" +"Files B and C are binary equal.\n" +msgstr "" + +#: mergeresultwindow.cpp:806 +msgid "" +"Files B and C have equal text. \n" +msgstr "" + +#: mergeresultwindow.cpp:812 +msgid "Total number of conflicts: " +msgstr "" + +#: mergeresultwindow.cpp:813 +msgid "" +"\n" +"Nr of automatically solved conflicts: " +msgstr "" + +#: mergeresultwindow.cpp:814 +msgid "" +"\n" +"Nr of unsolved conflicts: " +msgstr "" + +#: mergeresultwindow.cpp:816 +msgid "Conflicts" +msgstr "Konfilkty" + +#: mergeresultwindow.cpp:1652 +msgid "" +msgstr "" + +#: mergeresultwindow.cpp:1660 +msgid "" +msgstr "" + +#: mergeresultwindow.cpp:1662 mergeresultwindow.cpp:2427 +msgid "" +msgstr "" + +#: mergeresultwindow.cpp:2635 +msgid "" +"Not all conflicts are solved yet.\n" +"File not saved.\n" +msgstr "" + +#: mergeresultwindow.cpp:2637 +msgid "Conflicts Left" +msgstr "" + +#: mergeresultwindow.cpp:2649 +msgid "" +"\n" +"\n" +"Creating backup failed. File not saved." +msgstr "" + +#: mergeresultwindow.cpp:2649 mergeresultwindow.cpp:2689 +msgid "File Save Error" +msgstr "" + +#: mergeresultwindow.cpp:2689 +msgid "Error while writing." +msgstr "" + +#: mergeresultwindow.cpp:3020 +msgid "Output" +msgstr "Výstup" + +#: mergeresultwindow.cpp:3032 mergeresultwindow.cpp:3139 +msgid "[Modified]" +msgstr "" + +#: mergeresultwindow.cpp:3039 +msgid "Encoding for saving" +msgstr "" + +#: mergeresultwindow.cpp:3075 mergeresultwindow.cpp:3081 +#: mergeresultwindow.cpp:3087 +msgid "Codec from" +msgstr "" + +#: optiondialog.cpp:362 +msgid "Unicode, 8 bit" +msgstr "" + +#: optiondialog.cpp:363 +msgid "Unicode" +msgstr "Unicode" + +#: optiondialog.cpp:364 +msgid "Latin1" +msgstr "Latin1" + +#: optiondialog.cpp:383 +msgid "Change this if non-ASCII characters are not displayed correctly." +msgstr "" + +#: optiondialog.cpp:510 +msgid "Editor & Diff Output Font" +msgstr "" + +#: optiondialog.cpp:531 +msgid "Italic font for deltas" +msgstr "" + +#: optiondialog.cpp:534 +msgid "" +"Selects the italic version of the font for differences.\n" +"If the font doesn't support italic characters, then this does nothing." +msgstr "" + +#: optiondialog.cpp:542 +msgid "Color" +msgstr "Barva" + +#: optiondialog.cpp:542 +msgid "Colors Settings" +msgstr "" + +#: optiondialog.cpp:556 +msgid "Editor and Diff Views:" +msgstr "" + +#: optiondialog.cpp:564 +msgid "Foreground color:" +msgstr "Barva popÅ™edí:" + +#: optiondialog.cpp:570 +msgid "Background color:" +msgstr "Barva pozadí:" + +#: optiondialog.cpp:578 +msgid "Diff background color:" +msgstr "" + +#: optiondialog.cpp:585 +msgid "Color A:" +msgstr "" + +#: optiondialog.cpp:592 +msgid "Color B:" +msgstr "" + +#: optiondialog.cpp:599 +msgid "Color C:" +msgstr "" + +#: optiondialog.cpp:605 +msgid "Conflict color:" +msgstr "" + +#: optiondialog.cpp:612 +msgid "Current range background color:" +msgstr "" + +#: optiondialog.cpp:619 +msgid "Current range diff background color:" +msgstr "" + +#: optiondialog.cpp:625 +msgid "Color for manually aligned difference ranges:" +msgstr "" + +#: optiondialog.cpp:630 +msgid "Directory Comparison View:" +msgstr "Pohled porovnání adresářů:" + +#: optiondialog.cpp:636 +msgid "Newest file color:" +msgstr "" + +#: optiondialog.cpp:639 +msgid "" +"Changing this color will only be effective when starting the next directory " +"comparison." +msgstr "" + +#: optiondialog.cpp:644 +msgid "Oldest file color:" +msgstr "" + +#: optiondialog.cpp:651 +msgid "Middle age file color:" +msgstr "" + +#: optiondialog.cpp:658 +msgid "Color for missing files:" +msgstr "" + +#: optiondialog.cpp:670 +msgid "Editor" +msgstr "Editor" + +#: optiondialog.cpp:670 +msgid "Editor Behavior" +msgstr "" + +#: optiondialog.cpp:680 +msgid "Tab inserts spaces" +msgstr "" + +#: optiondialog.cpp:683 +msgid "" +"On: Pressing tab generates the appropriate number of spaces.\n" +"Off: A Tab-character will be inserted." +msgstr "" + +#: optiondialog.cpp:689 +msgid "Tab size:" +msgstr "Velikost tabulátoru:" + +#: optiondialog.cpp:694 +msgid "Auto indentation" +msgstr "" + +#: optiondialog.cpp:697 +msgid "" +"On: The indentation of the previous line is used for a new line.\n" +msgstr "" + +#: optiondialog.cpp:701 +msgid "Auto copy selection" +msgstr "" + +#: optiondialog.cpp:704 +msgid "" +"On: Any selection is immediately written to the clipboard.\n" +"Off: You must explicitely copy e.g. via Ctrl-C." +msgstr "" + +#: optiondialog.cpp:709 +msgid "Line end style:" +msgstr "" + +#: optiondialog.cpp:721 +msgid "" +"Sets the line endings for when an edited file is saved.\n" +"DOS/Windows: CR+LF; UNIX: LF; with CR=0D, LF=0A" +msgstr "" + +#: optiondialog.cpp:732 +msgid "Diff" +msgstr "Diff" + +#: optiondialog.cpp:732 +msgid "Diff Settings" +msgstr "Nastavení Diff" + +#: optiondialog.cpp:743 +msgid "Preserve carriage return" +msgstr "" + +#: optiondialog.cpp:746 +msgid "" +"Show carriage return characters '\\r' if they exist.\n" +"Helps to compare files that were modified under different operating systems." +msgstr "" + +#: optiondialog.cpp:751 +msgid "Ignore numbers" +msgstr "" + +#: optiondialog.cpp:754 +msgid "" +"Ignore number characters during line matching phase. (Similar to Ignore white " +"space.)\n" +"Might help to compare files with numeric data." +msgstr "" + +#: optiondialog.cpp:759 +msgid "Ignore C/C++ comments" +msgstr "" + +#: optiondialog.cpp:761 +msgid "Treat C/C++ comments like white space." +msgstr "" + +#: optiondialog.cpp:765 +msgid "Ignore case" +msgstr "Ignorovat velikost písmen" + +#: optiondialog.cpp:768 +msgid "Treat case differences like white space changes. ('a'<=>'A')" +msgstr "" + +#: optiondialog.cpp:772 +msgid "Preprocessor command:" +msgstr "" + +#: optiondialog.cpp:776 +msgid "User defined pre-processing. (See the docs for details.)" +msgstr "" + +#: optiondialog.cpp:779 +msgid "Line-matching preprocessor command:" +msgstr "" + +#: optiondialog.cpp:783 +msgid "" +"This pre-processor is only used during line matching.\n" +"(See the docs for details.)" +msgstr "" + +#: optiondialog.cpp:786 +msgid "Try hard (slower)" +msgstr "" + +#: optiondialog.cpp:789 +msgid "" +"Enables the --minimal option for the external diff.\n" +"The analysis of big files will be much slower." +msgstr "" + +#: optiondialog.cpp:794 +msgid "Auto advance delay (ms):" +msgstr "" + +#: optiondialog.cpp:799 +msgid "" +"When in Auto-Advance mode the result of the current selection is shown \n" +"for the specified time, before jumping to the next conflict. Range: 0-2000 ms" +msgstr "" + +#: optiondialog.cpp:809 +msgid "Merge Settings" +msgstr "" + +#: optiondialog.cpp:822 +msgid "White space 2-file merge default:" +msgstr "" + +#: optiondialog.cpp:826 optiondialog.cpp:839 +msgid "Manual Choice" +msgstr "" + +#: optiondialog.cpp:830 optiondialog.cpp:844 +msgid "" +"Allow the merge algorithm to automatically select an input for white-space-only " +"changes." +msgstr "" + +#: optiondialog.cpp:835 +msgid "White space 3-file merge default:" +msgstr "" + +#: optiondialog.cpp:849 +msgid "Automatic Merge Regular Expression" +msgstr "" + +#: optiondialog.cpp:858 smalldialogs.cpp:397 +msgid "Auto merge regular expression:" +msgstr "" + +#: optiondialog.cpp:862 +msgid "" +"Regular expression for lines where KDiff3 should automatically choose one " +"source.\n" +"When a line with a conflict matches the regular expression then\n" +"- if available - C, otherwise B will be chosen." +msgstr "" + +#: optiondialog.cpp:868 +msgid "Run regular expression auto merge on merge start" +msgstr "" + +#: optiondialog.cpp:870 +msgid "" +"Run the merge for auto merge regular expressions\n" +"immediately when a merge starts.\n" +msgstr "" + +#: optiondialog.cpp:875 +msgid "Version Control History Merging" +msgstr "" + +#: optiondialog.cpp:884 smalldialogs.cpp:424 +msgid "History start regular expression:" +msgstr "" + +#: optiondialog.cpp:888 +msgid "" +"Regular expression for the start of the version control history entry.\n" +"Usually this line contains the \"$Log$\"-keyword.\n" +"Default value: \".*\\$Log.*\\$.*\"" +msgstr "" + +#: optiondialog.cpp:894 smalldialogs.cpp:453 +msgid "History entry start regular expression:" +msgstr "" + +#: optiondialog.cpp:906 +msgid "" +"A version control history entry consists of several lines.\n" +"Specify the regular expression to detect the first line (without the leading " +"comment).\n" +"Use parentheses to group the keys you want to use for sorting.\n" +"If left empty, then KDiff3 assumes that empty lines separate history entries.\n" +"See the documentation for details." +msgstr "" + +#: optiondialog.cpp:914 +msgid "History merge sorting" +msgstr "" + +#: optiondialog.cpp:916 +msgid "Sort version control history by a key." +msgstr "" + +#: optiondialog.cpp:926 +msgid "History entry start sort key order:" +msgstr "" + +#: optiondialog.cpp:930 +msgid "" +"Each parentheses used in the regular expression for the history start entry\n" +"groups a key that can be used for sorting.\n" +"Specify the list of keys (that are numbered in order of occurrence\n" +"starting with 1) using ',' as separator (e.g. \"4,5,6,1,2,3,7\").\n" +"If left empty, then no sorting will be done.\n" +"See the documentation for details." +msgstr "" + +#: optiondialog.cpp:941 +msgid "Merge version control history on merge start" +msgstr "" + +#: optiondialog.cpp:943 +msgid "Run version control history automerge on merge start." +msgstr "" + +#: optiondialog.cpp:947 +msgid "Test your regular expressions" +msgstr "" + +#: optiondialog.cpp:952 +msgid "Irrelevant merge command:" +msgstr "" + +#: optiondialog.cpp:956 +msgid "" +"If specified this script is run after automerge\n" +"when no other relevant changes were detected.\n" +"Called with the parameters: filename1 filename2 filename3" +msgstr "" + +#: optiondialog.cpp:966 +msgid "Directory Merge" +msgstr "" + +#: optiondialog.cpp:975 +msgid "Recursive directories" +msgstr "" + +#: optiondialog.cpp:977 +msgid "Whether to analyze subdirectories or not." +msgstr "" + +#: optiondialog.cpp:979 +msgid "File pattern(s):" +msgstr "" + +#: optiondialog.cpp:984 +msgid "" +"Pattern(s) of files to be analyzed. \n" +"Wildcards: '*' and '?'\n" +"Several Patterns can be specified by using the separator: ';'" +msgstr "" + +#: optiondialog.cpp:990 +msgid "File-anti-pattern(s):" +msgstr "" + +#: optiondialog.cpp:995 +msgid "" +"Pattern(s) of files to be excluded from analysis. \n" +"Wildcards: '*' and '?'\n" +"Several Patterns can be specified by using the separator: ';'" +msgstr "" + +#: optiondialog.cpp:1001 +msgid "Dir-anti-pattern(s):" +msgstr "" + +#: optiondialog.cpp:1006 +msgid "" +"Pattern(s) of directories to be excluded from analysis. \n" +"Wildcards: '*' and '?'\n" +"Several Patterns can be specified by using the separator: ';'" +msgstr "" + +#: optiondialog.cpp:1012 +msgid "Use .cvsignore" +msgstr "" + +#: optiondialog.cpp:1015 +msgid "" +"Extends the antipattern to anything that would be ignored by CVS.\n" +"Via local \".cvsignore\"-files this can be directory specific." +msgstr "" + +#: optiondialog.cpp:1020 +msgid "Find hidden files and directories" +msgstr "" + +#: optiondialog.cpp:1023 +msgid "Finds files and directories with the hidden attribute." +msgstr "" + +#: optiondialog.cpp:1025 +msgid "Finds files and directories starting with '.'." +msgstr "" + +#: optiondialog.cpp:1029 +msgid "Follow file links" +msgstr "" + +#: optiondialog.cpp:1032 +msgid "" +"On: Compare the file the link points to.\n" +"Off: Compare the links." +msgstr "" + +#: optiondialog.cpp:1037 +msgid "Follow directory links" +msgstr "" + +#: optiondialog.cpp:1040 +msgid "" +"On: Compare the directory the link points to.\n" +"Off: Compare the links." +msgstr "" + +#: optiondialog.cpp:1056 +msgid "Case sensitive filename comparison" +msgstr "" + +#: optiondialog.cpp:1059 +msgid "" +"The directory comparison will compare files or directories when their names " +"match.\n" +"Set this option if the case of the names must match. (Default for Windows is " +"off, otherwise on.)" +msgstr "" + +#: optiondialog.cpp:1063 +msgid "File Comparison Mode" +msgstr "" + +#: optiondialog.cpp:1067 +msgid "Binary comparison" +msgstr "" + +#: optiondialog.cpp:1068 +msgid "Binary comparison of each file. (Default)" +msgstr "" + +#: optiondialog.cpp:1070 +msgid "Full analysis" +msgstr "" + +#: optiondialog.cpp:1071 +msgid "" +"Do a full analysis and show statistics information in extra columns.\n" +"(Slower than a binary comparison, much slower for binary files.)" +msgstr "" + +#: optiondialog.cpp:1074 +msgid "Trust the modification date (unsafe)" +msgstr "" + +#: optiondialog.cpp:1075 +msgid "" +"Assume that files are equal if the modification date and file length are " +"equal.\n" +"Useful for big directories or slow networks." +msgstr "" + +#: optiondialog.cpp:1078 +msgid "Trust the size (unsafe)" +msgstr "" + +#: optiondialog.cpp:1079 +msgid "" +"Assume that files are equal if their file lengths are equal.\n" +"Useful for big directories or slow networks when the date is modified during " +"download." +msgstr "" + +#: optiondialog.cpp:1083 +msgid "Synchronize directories" +msgstr "" + +#: optiondialog.cpp:1086 +msgid "" +"Offers to store files in both directories so that\n" +"both directories are the same afterwards.\n" +"Works only when comparing two directories without specifying a destination." +msgstr "" + +#: optiondialog.cpp:1092 +msgid "White space differences considered equal" +msgstr "" + +#: optiondialog.cpp:1095 +msgid "" +"If files differ only by white space consider them equal.\n" +"This is only active when full analysis is chosen." +msgstr "" + +#: optiondialog.cpp:1101 +msgid "Copy newer instead of merging (unsafe)" +msgstr "" + +#: optiondialog.cpp:1104 +msgid "" +"Don't look inside, just take the newer file.\n" +"(Use this only if you know what you are doing!)\n" +"Only effective when comparing two directories." +msgstr "" + +#: optiondialog.cpp:1109 +msgid "Backup files (.orig)" +msgstr "" + +#: optiondialog.cpp:1112 +msgid "" +"When a file would be saved over an old file, then the old file\n" +"will be renamed with a '.orig'-extension instead of being deleted." +msgstr "" + +#: optiondialog.cpp:1176 +msgid "Regional Settings" +msgstr "" + +#: optiondialog.cpp:1272 +msgid "Language (restart required)" +msgstr "" + +#: optiondialog.cpp:1304 +msgid "" +"Choose the language of the GUI-strings or \"Auto\".\n" +"For a change of language to take place, quit and restart KDiff3." +msgstr "" + +#: optiondialog.cpp:1322 +msgid "Use the same encoding for everything:" +msgstr "" + +#: optiondialog.cpp:1325 +msgid "" +"Enable this allows to change all encodings by changing the first only.\n" +"Disable this if different individual settings are needed." +msgstr "" + +#: optiondialog.cpp:1330 +msgid "Note: Local Encoding is " +msgstr "" + +#: optiondialog.cpp:1334 +msgid "File Encoding for A:" +msgstr "" + +#: optiondialog.cpp:1340 +msgid "" +"If enabled then Unicode (UTF-16 or UTF-8) encoding will be detected.\n" +"If the file encoding is not detected then the selected encoding will be used as " +"fallback.\n" +"(Unicode detection depends on the first bytes of a file - the byte order mark " +"\"BOM\".)" +msgstr "" + +#: optiondialog.cpp:1344 optiondialog.cpp:1353 optiondialog.cpp:1362 +msgid "Auto Detect Unicode" +msgstr "" + +#: optiondialog.cpp:1349 +msgid "File Encoding for B:" +msgstr "" + +#: optiondialog.cpp:1358 +msgid "File Encoding for C:" +msgstr "" + +#: optiondialog.cpp:1367 +msgid "File Encoding for Merge Output and Saving:" +msgstr "" + +#: optiondialog.cpp:1371 +msgid "Auto Select" +msgstr "Automatický výbÄ›r" + +#: optiondialog.cpp:1374 +msgid "" +"If enabled then the encoding from the input files is used.\n" +"In ambiguous cases a dialog will ask the user to choose the encoding for " +"saving." +msgstr "" + +#: optiondialog.cpp:1378 +msgid "File Encoding for Preprocessor Files:" +msgstr "" + +#: optiondialog.cpp:1389 +msgid "Right To Left Language" +msgstr "" + +#: optiondialog.cpp:1392 +msgid "" +"Some languages are read from right to left.\n" +"This setting will change the viewer and editor accordingly." +msgstr "" + +#: optiondialog.cpp:1402 +msgid "Integration" +msgstr "Integrace" + +#: optiondialog.cpp:1402 +msgid "Integration Settings" +msgstr "" + +#: optiondialog.cpp:1412 +msgid "Command line options to ignore:" +msgstr "" + +#: optiondialog.cpp:1417 +msgid "" +"List of command line options that should be ignored when KDiff3 is used by " +"other tools.\n" +"Several values can be specified if separated via ';'\n" +"This will suppress the \"Unknown option\"-error." +msgstr "" + +#: optiondialog.cpp:1480 +msgid "" +"You selected a variable width font.\n" +"\n" +"Because this program doesn't handle variable width fonts\n" +"correctly, you might experience problems while editing.\n" +"\n" +"Do you want to continue or do you want to select another font." +msgstr "" + +#: optiondialog.cpp:1484 +msgid "Incompatible Font" +msgstr "" + +#: optiondialog.cpp:1485 +msgid "Continue at Own Risk" +msgstr "" + +#: optiondialog.cpp:1485 +msgid "Select Another Font" +msgstr "" + +#: optiondialog.cpp:1521 +msgid "This resets all options. Not only those of the current topic." +msgstr "" + +#: pdiff.cpp:258 +msgid "PreprocessorCmd: " +msgstr "" + +#: pdiff.cpp:263 +msgid "" +"The following option(s) you selected might change data:\n" +msgstr "" + +#: pdiff.cpp:264 +msgid "" +"\n" +"Most likely this is not wanted during a merge.\n" +"Do you want to disable these settings or continue with these settings active?" +msgstr "" + +#: pdiff.cpp:266 +msgid "Option Unsafe for Merging" +msgstr "" + +#: pdiff.cpp:267 +msgid "Use These Options During Merge" +msgstr "" + +#: pdiff.cpp:267 +msgid "Disable Unsafe Options" +msgstr "" + +#: pdiff.cpp:297 +msgid "Loading A" +msgstr "" + +#: pdiff.cpp:301 +msgid "Loading B" +msgstr "" + +#: pdiff.cpp:318 pdiff.cpp:344 +msgid "Diff: A <-> B" +msgstr "" + +#: pdiff.cpp:324 pdiff.cpp:366 +msgid "Linediff: A <-> B" +msgstr "" + +#: pdiff.cpp:335 +msgid "Loading C" +msgstr "" + +#: pdiff.cpp:347 +msgid "Diff: B <-> C" +msgstr "" + +#: pdiff.cpp:350 +msgid "Diff: A <-> C" +msgstr "" + +#: pdiff.cpp:369 +msgid "Linediff: B <-> C" +msgstr "" + +#: pdiff.cpp:372 +msgid "Linediff: A <-> C" +msgstr "" + +#: pdiff.cpp:513 +msgid "All input files contain the same text, but are not binary equal." +msgstr "" + +#: pdiff.cpp:515 pdiff.cpp:517 pdiff.cpp:519 +msgid "" +"Files %1 and %2 are binary equal.\n" +msgstr "" + +#: pdiff.cpp:516 pdiff.cpp:518 pdiff.cpp:520 +msgid "" +"Files %1 and %2 have equal text, but are not binary equal. \n" +msgstr "" + +#: pdiff.cpp:530 +msgid "" +"Some inputfiles don't seem to be pure textfiles.\n" +"Note that the KDiff3-merge was not meant for binary data.\n" +"Continue at your own risk." +msgstr "" + +#: pdiff.cpp:979 +msgid "Abort" +msgstr "PÅ™eruÅ¡it" + +#: pdiff.cpp:985 pdiff.cpp:1073 +msgid "Opening files..." +msgstr "" + +#: pdiff.cpp:1050 pdiff.cpp:1121 +msgid "File open error" +msgstr "" + +#: pdiff.cpp:1153 +msgid "Cutting selection..." +msgstr "Vyjímám výbÄ›r..." + +#: pdiff.cpp:1174 +msgid "Copying selection to clipboard..." +msgstr "Kopíruji výbÄ›r do schránky..." + +#: pdiff.cpp:1190 +msgid "Inserting clipboard contents..." +msgstr "Vkládám obsah schránky..." + +#: pdiff.cpp:1713 +msgid "Save && Continue" +msgstr "" + +#: pdiff.cpp:1713 +msgid "Continue Without Saving" +msgstr "" + +#: pdiff.cpp:1920 +msgid "Search complete." +msgstr "" + +#: pdiff.cpp:1920 +msgid "Search Complete" +msgstr "" + +#: pdiff.cpp:2144 +msgid "Nothing is selected in either diff input window." +msgstr "" + +#: pdiff.cpp:2144 +msgid "Error while adding manual diff range" +msgstr "" + +#. i18n: file kdiff3_part.rc line 4 +#: rc.cpp:3 +#, no-c-format +msgid "&KDiff3" +msgstr "" + +#. i18n: file kdiff3_part.rc line 13 +#: rc.cpp:6 +#, no-c-format +msgid "Configure KDiff3" +msgstr "" + +#. i18n: file kdiff3_shell.rc line 7 +#: rc.cpp:15 +#, no-c-format +msgid "&Directory" +msgstr "" + +#. i18n: file kdiff3_shell.rc line 30 +#: rc.cpp:18 +#, no-c-format +msgid "Current Item Merge Operation" +msgstr "" + +#. i18n: file kdiff3_shell.rc line 38 +#: rc.cpp:21 +#, no-c-format +msgid "Current Item Sync Operation" +msgstr "" + +#. i18n: file kdiff3_shell.rc line 50 +#: rc.cpp:24 +#, no-c-format +msgid "&Movement" +msgstr "" + +#. i18n: file kdiff3_shell.rc line 61 +#: rc.cpp:27 +#, no-c-format +msgid "D&iffview" +msgstr "" + +#. i18n: file kdiff3_shell.rc line 73 +#: rc.cpp:30 +#, no-c-format +msgid "&Merge" +msgstr "" + +#. i18n: file kdiff3_shell.rc line 95 +#: rc.cpp:33 +#, no-c-format +msgid "&Window" +msgstr "O&kno" + +#: smalldialogs.cpp:53 +msgid "A (Base):" +msgstr "" + +#: smalldialogs.cpp:59 smalldialogs.cpp:75 smalldialogs.cpp:91 +#: smalldialogs.cpp:134 +msgid "File..." +msgstr "Soubor..." + +#: smalldialogs.cpp:61 smalldialogs.cpp:77 smalldialogs.cpp:93 +#: smalldialogs.cpp:136 +msgid "Dir..." +msgstr "" + +#: smalldialogs.cpp:86 +msgid "C (Optional):" +msgstr "" + +#: smalldialogs.cpp:108 +msgid "Swap/Copy Names ..." +msgstr "" + +#: smalldialogs.cpp:114 smalldialogs.cpp:115 smalldialogs.cpp:116 +msgid "Swap %1<->%2" +msgstr "" + +#: smalldialogs.cpp:117 smalldialogs.cpp:118 smalldialogs.cpp:119 +msgid "Copy %1->Output" +msgstr "" + +#: smalldialogs.cpp:120 smalldialogs.cpp:121 smalldialogs.cpp:122 +msgid "Swap %1<->Output" +msgstr "" + +#: smalldialogs.cpp:129 +msgid "Output (optional):" +msgstr "" + +#: smalldialogs.cpp:158 +msgid "Configure..." +msgstr "Nastavit..." + +#: smalldialogs.cpp:347 +msgid "Search text:" +msgstr "" + +#: smalldialogs.cpp:354 +msgid "Case sensitive" +msgstr "RozliÅ¡ovat velká/malá" + +#: smalldialogs.cpp:357 +msgid "Search A" +msgstr "" + +#: smalldialogs.cpp:362 +msgid "Search B" +msgstr "" + +#: smalldialogs.cpp:367 +msgid "Search C" +msgstr "" + +#: smalldialogs.cpp:372 +msgid "Search output" +msgstr "" + +#: smalldialogs.cpp:377 +msgid "&Search" +msgstr "&Hledat" + +#: smalldialogs.cpp:394 +msgid "Regular Expression Tester" +msgstr "" + +#: smalldialogs.cpp:405 +msgid "Example auto merge line:" +msgstr "" + +#: smalldialogs.cpp:407 +msgid "For auto merge test copy a line as used in your files." +msgstr "" + +#: smalldialogs.cpp:413 smalldialogs.cpp:442 smalldialogs.cpp:479 +msgid "Match result:" +msgstr "" + +#: smalldialogs.cpp:432 +msgid "Example history start line (with leading comment):" +msgstr "" + +#: smalldialogs.cpp:435 +msgid "" +"Copy a history start line as used in your files,\n" +"including the leading comment." +msgstr "" + +#: smalldialogs.cpp:461 +msgid "History sort key order:" +msgstr "" + +#: smalldialogs.cpp:469 +msgid "Example history entry start line (without leading comment):" +msgstr "" + +#: smalldialogs.cpp:471 +msgid "" +"Copy a history entry start line as used in your files,\n" +"but omit the leading comment." +msgstr "" + +#: smalldialogs.cpp:486 +msgid "Sort key result:" +msgstr "" + +#: smalldialogs.cpp:537 smalldialogs.cpp:547 smalldialogs.cpp:568 +msgid "Match success." +msgstr "" + +#: smalldialogs.cpp:541 smalldialogs.cpp:551 smalldialogs.cpp:574 +msgid "Match failed." +msgstr "" + +#: smalldialogs.cpp:559 +msgid "Opening and closing parentheses don't match in regular expression." +msgstr "" diff --git a/po/cvsgetpo b/po/cvsgetpo new file mode 100644 index 0000000..0967a4e --- /dev/null +++ b/po/cvsgetpo @@ -0,0 +1,3 @@ +cvs co kde-i18n/subdirs +for i in `cat kde-i18n/subdirs`; do cvs co kde-i18n/$i/messages/kdeextragear-1/kdiff3.po; done +for i in `cat kde-i18n/subdirs`; do cp -p kde-i18n/$i/messages/kdeextragear-1/kdiff3.po $i.po; done diff --git a/po/cy.po b/po/cy.po new file mode 100644 index 0000000..0941504 --- /dev/null +++ b/po/cy.po @@ -0,0 +1,2320 @@ +msgid "" +msgstr "" +"Project-Id-Version: ../cy/messages//kdeextragear-1/kdiff3.po\n" +"POT-Creation-Date: 2006-11-05 08:45+0100\n" +"PO-Revision-Date: 2004-09-20 15:44+0200\n" +"Last-Translator: Thierry Vignaud \n" +"Language-Team: cy \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: _translatorinfo.cpp:1 +msgid "" +"_: NAME OF TRANSLATORS\n" +"Your names" +msgstr "KD wrth KGyfieithu" + +#: _translatorinfo.cpp:3 +msgid "" +"_: EMAIL OF TRANSLATORS\n" +"Your emails" +msgstr "kyfieithu@dotmon.com" + +#: diff.cpp:246 +msgid "Writing clipboard data to temp file failed." +msgstr "" + +#: diff.cpp:250 +msgid "From Clipboard" +msgstr "" + +#: diff.cpp:491 +msgid "" +"Preprocessing possibly failed. Check this command:\n" +"\n" +" %1\n" +"\n" +"The preprocessing command will be disabled now." +msgstr "" + +#: diff.cpp:526 +msgid "" +"The line-matching-preprocessing possibly failed. Check this command:\n" +"\n" +" %1\n" +"\n" +"The line-matching-preprocessing command will be disabled now." +msgstr "" + +#: diff.cpp:1631 diff.cpp:1645 +msgid "" +"Data loss error:\n" +"If it is reproducable please contact the author.\n" +msgstr "" + +#: diff.cpp:1633 diff.cpp:1647 +msgid "Severe Internal Error" +msgstr "" + +#: difftextwindow.cpp:1643 kdiff3.cpp:753 +msgid "Top line" +msgstr "" + +#: difftextwindow.cpp:1653 +msgid "End" +msgstr "Diwedd" + +#: directorymergewindow.cpp:142 +msgid "Mix of links and normal files." +msgstr "" + +#: directorymergewindow.cpp:149 +msgid "Link: " +msgstr "Cyswllt : " + +#: directorymergewindow.cpp:157 +msgid "Size. " +msgstr "" + +#: directorymergewindow.cpp:170 +msgid "Date & Size: " +msgstr "" + +#: directorymergewindow.cpp:179 directorymergewindow.cpp:185 +msgid "Creating temp copy of %1 failed." +msgstr "" + +#: directorymergewindow.cpp:196 directorymergewindow.cpp:204 +msgid "Opening %1 failed." +msgstr "" + +#: directorymergewindow.cpp:208 +#, fuzzy +msgid "Comparing file..." +msgstr "Yn cadw ffeil..." + +#: directorymergewindow.cpp:218 directorymergewindow.cpp:224 +#, c-format +msgid "Error reading from %1" +msgstr "" + +#: directorymergewindow.cpp:282 +msgid "Name" +msgstr "Enw" + +#: directorymergewindow.cpp:286 +msgid "Operation" +msgstr "Gweithrediad" + +#: directorymergewindow.cpp:287 +msgid "Status" +msgstr "Cyflwr" + +#: directorymergewindow.cpp:288 +msgid "Unsolved" +msgstr "" + +#: directorymergewindow.cpp:289 +msgid "Solved" +msgstr "" + +#: directorymergewindow.cpp:290 +msgid "Nonwhite" +msgstr "" + +#: directorymergewindow.cpp:291 +msgid "White" +msgstr "Gwyn" + +#: directorymergewindow.cpp:319 +msgid "" +"You are currently doing a directory merge. Are you sure, you want to abort the " +"merge and rescan the directory?" +msgstr "" + +#: directorymergewindow.cpp:320 directorymergewindow.cpp:2868 +msgid "Rescan" +msgstr "Ailsyllu" + +#: directorymergewindow.cpp:320 kdiff3.cpp:603 pdiff.cpp:979 +msgid "Continue Merging" +msgstr "" + +#: directorymergewindow.cpp:462 +msgid "Opening of directories failed:" +msgstr "" + +#: directorymergewindow.cpp:465 +msgid "" +"Dir A \"%1\" does not exist or is not a directory.\n" +msgstr "" + +#: directorymergewindow.cpp:468 +msgid "" +"Dir B \"%1\" does not exist or is not a directory.\n" +msgstr "" + +#: directorymergewindow.cpp:471 +msgid "" +"Dir C \"%1\" does not exist or is not a directory.\n" +msgstr "" + +#: directorymergewindow.cpp:473 +msgid "Directory Open Error" +msgstr "" + +#: directorymergewindow.cpp:481 +msgid "" +"The destination directory must not be the same as A or B when three directories " +"are merged.\n" +"Check again before continuing." +msgstr "" + +#: directorymergewindow.cpp:483 +msgid "Parameter Warning" +msgstr "" + +#: directorymergewindow.cpp:488 +msgid "Scanning directories..." +msgstr "" + +#: directorymergewindow.cpp:537 +msgid "Reading Directory A" +msgstr "" + +#: directorymergewindow.cpp:559 +msgid "Reading Directory B" +msgstr "" + +#: directorymergewindow.cpp:581 +msgid "Reading Directory C" +msgstr "" + +#: directorymergewindow.cpp:607 +msgid "Some subdirectories were not readable in" +msgstr "" + +#: directorymergewindow.cpp:612 +msgid "Check the permissions of the subdirectories." +msgstr "" + +#: directorymergewindow.cpp:646 kdiff3.cpp:552 kdiff3.cpp:636 kdiff3.cpp:661 +#: kdiff3.cpp:934 kdiff3.cpp:955 pdiff.cpp:1059 pdiff.cpp:1131 pdiff.cpp:1169 +#: pdiff.cpp:1185 pdiff.cpp:1215 pdiff.cpp:1226 +msgid "Ready." +msgstr "Parod." + +#: directorymergewindow.cpp:660 +msgid "Directory Comparison Status" +msgstr "" + +#: directorymergewindow.cpp:661 +msgid "Number of subdirectories:" +msgstr "" + +#: directorymergewindow.cpp:662 +msgid "Number of equal files:" +msgstr "" + +#: directorymergewindow.cpp:663 +msgid "Number of different files:" +msgstr "" + +#: directorymergewindow.cpp:666 +msgid "Number of manual merges:" +msgstr "" + +#: directorymergewindow.cpp:802 +msgid "This affects all merge operations." +msgstr "" + +#: directorymergewindow.cpp:803 +msgid "Changing All Merge Operations" +msgstr "" + +#: directorymergewindow.cpp:803 mergeresultwindow.cpp:287 +msgid "C&ontinue" +msgstr "&Mynd ymlaen" + +#: directorymergewindow.cpp:1169 +msgid "Processing " +msgstr "" + +#: directorymergewindow.cpp:1647 directorymergewindow.cpp:1653 +msgid "To do." +msgstr "" + +#: directorymergewindow.cpp:1756 directorymergewindow.cpp:2899 +msgid "Copy A to B" +msgstr "" + +#: directorymergewindow.cpp:1757 directorymergewindow.cpp:2900 +msgid "Copy B to A" +msgstr "" + +#: directorymergewindow.cpp:1758 directorymergewindow.cpp:2901 +msgid "Delete A" +msgstr "" + +#: directorymergewindow.cpp:1759 directorymergewindow.cpp:2902 +msgid "Delete B" +msgstr "" + +#: directorymergewindow.cpp:1760 +msgid "Delete A & B" +msgstr "" + +#: directorymergewindow.cpp:1761 directorymergewindow.cpp:2904 +msgid "Merge to A" +msgstr "" + +#: directorymergewindow.cpp:1762 directorymergewindow.cpp:2905 +msgid "Merge to B" +msgstr "" + +#: directorymergewindow.cpp:1763 +msgid "Merge to A & B" +msgstr "" + +#: directorymergewindow.cpp:1767 directorymergewindow.cpp:2896 +msgid "Delete (if exists)" +msgstr "" + +#: directorymergewindow.cpp:1768 directorymergewindow.cpp:1769 +#: directorymergewindow.cpp:2895 optiondialog.cpp:809 smalldialogs.cpp:102 +msgid "Merge" +msgstr "Cyfuno" + +#: directorymergewindow.cpp:1768 directorymergewindow.cpp:1769 +msgid "Merge (manual)" +msgstr "" + +#: directorymergewindow.cpp:1770 +msgid "Error: Conflicting File Types" +msgstr "" + +#: directorymergewindow.cpp:1771 +msgid "Error: Dates are equal but files are not." +msgstr "" + +#: directorymergewindow.cpp:1795 directorymergewindow.cpp:1824 +#: directorymergewindow.cpp:1849 +msgid "This operation is currently not possible." +msgstr "" + +#: directorymergewindow.cpp:1795 directorymergewindow.cpp:1824 +#: directorymergewindow.cpp:1849 directorymergewindow.cpp:2106 +msgid "Operation Not Possible" +msgstr "" + +#: directorymergewindow.cpp:1888 +msgid "" +"This should never happen: \n" +"\n" +"mergeResultSaved: m_pMFI=0\n" +"\n" +"If you know how to reproduce this, please contact the program author." +msgstr "" + +#: directorymergewindow.cpp:1888 +msgid "Program Error" +msgstr "" + +#: directorymergewindow.cpp:1899 +msgid "" +"An error occurred while copying.\n" +msgstr "" + +#: directorymergewindow.cpp:1900 directorymergewindow.cpp:2306 +msgid "Merge Error" +msgstr "" + +#: directorymergewindow.cpp:1905 directorymergewindow.cpp:2311 +msgid "Error." +msgstr "Gwall." + +#: directorymergewindow.cpp:1910 directorymergewindow.cpp:2202 +#: directorymergewindow.cpp:2242 +msgid "Done." +msgstr "Wedi'i wneud." + +#: directorymergewindow.cpp:1933 +msgid "Not saved." +msgstr "" + +#: directorymergewindow.cpp:1968 +msgid "Unknown merge operation. (This must never happen!)" +msgstr "" + +#: directorymergewindow.cpp:2000 +msgid "Unknown merge operation." +msgstr "" + +#: directorymergewindow.cpp:2015 +msgid "" +"The merge is about to begin.\n" +"\n" +"Choose \"Do it\" if you have read the instructions and know what you are " +"doing.\n" +"Choosing \"Simulate it\" will tell you what would happen.\n" +"\n" +"Be aware that this program still has beta status and there is NO WARRANTY " +"whatsoever! Make backups of your vital data!" +msgstr "" + +#: directorymergewindow.cpp:2020 +msgid "Starting Merge" +msgstr "" + +#: directorymergewindow.cpp:2020 +msgid "Do It" +msgstr "" + +#: directorymergewindow.cpp:2020 +msgid "Simulate It" +msgstr "" + +#: directorymergewindow.cpp:2046 +msgid "" +"The highlighted item has a different type in the different directories. Select " +"what to do." +msgstr "" + +#: directorymergewindow.cpp:2055 +msgid "" +"The modification dates of the file are equal but the files are not. Select what " +"to do." +msgstr "" + +#: directorymergewindow.cpp:2106 +msgid "" +"This operation is currently not possible because directory merge is currently " +"running." +msgstr "" + +#: directorymergewindow.cpp:2166 +msgid "" +"There was an error in the last step.\n" +"Do you want to continue with the item that caused the error or do you want to " +"skip this item?" +msgstr "" + +#: directorymergewindow.cpp:2168 +msgid "Continue merge after an error" +msgstr "" + +#: directorymergewindow.cpp:2168 +msgid "Continue With Last Item" +msgstr "" + +#: directorymergewindow.cpp:2168 +msgid "Skip Item" +msgstr "" + +#: directorymergewindow.cpp:2202 +msgid "Skipped." +msgstr "" + +#: directorymergewindow.cpp:2209 directorymergewindow.cpp:2435 +msgid "In progress..." +msgstr "" + +#: directorymergewindow.cpp:2257 +msgid "Merge operation complete." +msgstr "" + +#: directorymergewindow.cpp:2257 directorymergewindow.cpp:2260 +msgid "Merge Complete" +msgstr "" + +#: directorymergewindow.cpp:2269 +msgid "" +"Simulated merge complete: Check if you agree with the proposed operations." +msgstr "" + +#: directorymergewindow.cpp:2305 +msgid "" +"An error occurred. Press OK to see detailed information.\n" +msgstr "" + +#: directorymergewindow.cpp:2348 +msgid "Error: While deleting %1: Creating backup failed." +msgstr "" + +#: directorymergewindow.cpp:2355 +msgid "delete directory recursively( %1 )" +msgstr "" + +#: directorymergewindow.cpp:2357 +msgid "delete( %1 )" +msgstr "" + +#: directorymergewindow.cpp:2372 +msgid "Error: delete dir operation failed while trying to read the directory." +msgstr "" + +#: directorymergewindow.cpp:2391 +msgid "Error: rmdir( %1 ) operation failed." +msgstr "" + +#: directorymergewindow.cpp:2401 +msgid "Error: delete operation failed." +msgstr "" + +#: directorymergewindow.cpp:2427 +msgid "manual merge( %1, %2, %3 -> %4)" +msgstr "" + +#: directorymergewindow.cpp:2430 +msgid "" +" Note: After a manual merge the user should continue by pressing F7." +msgstr "" + +#: directorymergewindow.cpp:2453 +msgid "Error: copy( %1 -> %2 ) failed.Deleting existing destination failed." +msgstr "" + +#: directorymergewindow.cpp:2463 +msgid "copyLink( %1 -> %2 )" +msgstr "" + +#: directorymergewindow.cpp:2474 +msgid "Error: copyLink failed: Remote links are not yet supported." +msgstr "" + +#: directorymergewindow.cpp:2480 +msgid "Error: copyLink failed." +msgstr "" + +#: directorymergewindow.cpp:2500 +msgid "copy( %1 -> %2 )" +msgstr "" + +#: directorymergewindow.cpp:2526 +msgid "Error during rename( %1 -> %2 ): Cannot delete existing destination." +msgstr "" + +#: directorymergewindow.cpp:2532 +msgid "rename( %1 -> %2 )" +msgstr "" + +#: directorymergewindow.cpp:2541 +msgid "Error: Rename failed." +msgstr "" + +#: directorymergewindow.cpp:2559 +msgid "Error during makeDir of %1. Cannot delete existing file." +msgstr "" + +#: directorymergewindow.cpp:2575 +msgid "makeDir( %1 )" +msgstr "" + +#: directorymergewindow.cpp:2585 +msgid "Error while creating directory." +msgstr "" + +#: directorymergewindow.cpp:2608 directorymergewindow.cpp:2725 +msgid "Dest" +msgstr "" + +#: directorymergewindow.cpp:2612 directorymergewindow.cpp:2650 +msgid "Dir" +msgstr "" + +#: directorymergewindow.cpp:2613 +msgid "Type" +msgstr "Math" + +#: directorymergewindow.cpp:2614 +msgid "Size" +msgstr "Maint" + +#: directorymergewindow.cpp:2615 +msgid "Attr" +msgstr "" + +#: directorymergewindow.cpp:2616 +msgid "Last Modification" +msgstr "" + +#: directorymergewindow.cpp:2617 +msgid "Link-Destination" +msgstr "" + +#: directorymergewindow.cpp:2667 +msgid "not available" +msgstr "dim ar gael" + +#: directorymergewindow.cpp:2687 +msgid "A (Dest): " +msgstr "" + +#: directorymergewindow.cpp:2690 +msgid "A (Base): " +msgstr "" + +#: directorymergewindow.cpp:2696 +msgid "B (Dest): " +msgstr "" + +#: directorymergewindow.cpp:2704 +msgid "C (Dest): " +msgstr "" + +#: directorymergewindow.cpp:2710 +msgid "Dest: " +msgstr "" + +#: directorymergewindow.cpp:2775 +msgid "Save Directory Merge State As..." +msgstr "" + +#: directorymergewindow.cpp:2862 +msgid "Start/Continue Directory Merge" +msgstr "" + +#: directorymergewindow.cpp:2863 +msgid "Run Operation for Current Item" +msgstr "" + +#: directorymergewindow.cpp:2864 +msgid "Compare Selected File" +msgstr "" + +#: directorymergewindow.cpp:2865 +msgid "Merge Current File" +msgstr "" + +#: directorymergewindow.cpp:2866 +msgid "Fold All Subdirs" +msgstr "" + +#: directorymergewindow.cpp:2867 +msgid "Unfold All Subdirs" +msgstr "" + +#: directorymergewindow.cpp:2871 +msgid "Choose A for All Items" +msgstr "" + +#: directorymergewindow.cpp:2872 +msgid "Choose B for All Items" +msgstr "" + +#: directorymergewindow.cpp:2873 +msgid "Choose C for All Items" +msgstr "" + +#: directorymergewindow.cpp:2874 +msgid "Auto-Choose Operation for All Items" +msgstr "" + +#: directorymergewindow.cpp:2875 +msgid "No Operation for All Items" +msgstr "" + +#: directorymergewindow.cpp:2880 +msgid "Show Identical Files" +msgstr "" + +#: directorymergewindow.cpp:2881 +msgid "Show Different Files" +msgstr "" + +#: directorymergewindow.cpp:2882 +msgid "Show Files only in A" +msgstr "" + +#: directorymergewindow.cpp:2883 +msgid "Show Files only in B" +msgstr "" + +#: directorymergewindow.cpp:2884 +msgid "Show Files only in C" +msgstr "" + +#: directorymergewindow.cpp:2888 +msgid "Compare Explicitly Selected Files" +msgstr "" + +#: directorymergewindow.cpp:2889 +msgid "Merge Explicitly Selected Files" +msgstr "" + +#: directorymergewindow.cpp:2891 directorymergewindow.cpp:2898 +msgid "Do Nothing" +msgstr "" + +#: directorymergewindow.cpp:2892 +msgid "A" +msgstr "A" + +#: directorymergewindow.cpp:2893 +msgid "B" +msgstr "B" + +#: directorymergewindow.cpp:2894 +msgid "C" +msgstr "C" + +#: directorymergewindow.cpp:2903 +msgid "Delete A && B" +msgstr "" + +#: directorymergewindow.cpp:2906 +msgid "Merge to A && B" +msgstr "" + +#: fileaccess.cpp:595 +msgid "" +"While trying to make a backup, deleting an older backup failed. \n" +"Filename: " +msgstr "" + +#: fileaccess.cpp:602 +msgid "" +"While trying to make a backup, renaming failed. \n" +"Filenames: " +msgstr "" + +#: fileaccess.cpp:624 +#, c-format +msgid "Getting file status: %1" +msgstr "" + +#: fileaccess.cpp:667 +#, c-format +msgid "Reading file: %1" +msgstr "" + +#: fileaccess.cpp:703 +#, c-format +msgid "Writing file: %1" +msgstr "" + +#: fileaccess.cpp:731 +msgid "Out of memory" +msgstr "Allan o Gof." + +#: fileaccess.cpp:766 +#, c-format +msgid "Making directory: %1" +msgstr "" + +#: fileaccess.cpp:786 +#, c-format +msgid "Removing directory: %1" +msgstr "" + +#: fileaccess.cpp:801 +#, c-format +msgid "Removing file: %1" +msgstr "" + +#: fileaccess.cpp:817 +msgid "Creating symbolic link: %1 -> %2" +msgstr "" + +#: fileaccess.cpp:843 +msgid "Renaming file: %1 -> %2" +msgstr "" + +#: fileaccess.cpp:879 +msgid "Copying file: %1 -> %2" +msgstr "" + +#: fileaccess.cpp:893 +#, c-format +msgid "" +"Error during file copy operation: Opening file for reading failed. Filename: %1" +msgstr "" + +#: fileaccess.cpp:899 +#, c-format +msgid "" +"Error during file copy operation: Opening file for writing failed. Filename: %1" +msgstr "" + +#: fileaccess.cpp:914 +#, c-format +msgid "Error during file copy operation: Reading failed. Filename: %1" +msgstr "" + +#: fileaccess.cpp:923 +#, c-format +msgid "Error during file copy operation: Writing failed. Filename: %1" +msgstr "" + +#: fileaccess.cpp:1219 +msgid "Reading directory: " +msgstr "" + +#: fileaccess.cpp:1348 +#, c-format +msgid "Listing directory: %1" +msgstr "" + +#: kdiff3.cpp:142 +msgid "Current Configuration:" +msgstr "" + +#: kdiff3.cpp:147 +#, fuzzy +msgid "Config Option Error:" +msgstr "Gwall agor ffeil" + +#: kdiff3.cpp:187 +msgid "Option --auto used, but no output file specified." +msgstr "" + +#: kdiff3.cpp:323 +msgid "Option --auto ignored for directory comparison." +msgstr "" + +#: kdiff3.cpp:359 +msgid "Saving failed." +msgstr "" + +#: kdiff3.cpp:386 pdiff.cpp:1041 pdiff.cpp:1112 +msgid "Opening of these files failed:" +msgstr "" + +#: kdiff3.cpp:395 +msgid "File Open Error" +msgstr "Gwall agor ffeil" + +#: kdiff3.cpp:418 +msgid "Opens documents for comparison..." +msgstr "" + +#: kdiff3.cpp:423 +msgid "Saves the merge result. All conflicts must be solved!" +msgstr "" + +#: kdiff3.cpp:425 +msgid "Saves the current document as..." +msgstr "" + +#: kdiff3.cpp:427 +msgid "Print the differences" +msgstr "" + +#: kdiff3.cpp:429 +msgid "Quits the application" +msgstr "Terfynu'r cymhwysiad" + +#: kdiff3.cpp:431 +msgid "Cuts the selected section and puts it to the clipboard" +msgstr "Torri'r adran dewisiedig a'i roi ar y gludfwrdd" + +#: kdiff3.cpp:433 +msgid "Copies the selected section to the clipboard" +msgstr "Copïo'r adran dewisiedig i'r gludfwrdd" + +#: kdiff3.cpp:435 +msgid "Pastes the clipboard contents to actual position" +msgstr "Gludo cynnwys y gludfwrdd i'r fan wirioneddol" + +#: kdiff3.cpp:437 +msgid "Select everything in current window" +msgstr "" + +#: kdiff3.cpp:439 +msgid "Search for a string" +msgstr "" + +#: kdiff3.cpp:441 +msgid "Search again for the string" +msgstr "" + +#: kdiff3.cpp:443 +msgid "Enables/disables the toolbar" +msgstr "Galluogi/analluogi'r bar offer" + +#: kdiff3.cpp:445 +msgid "Enables/disables the statusbar" +msgstr "Galluogi/analluogi'r bar cyflwr" + +#: kdiff3.cpp:449 +msgid "Configure KDiff3..." +msgstr "" + +#: kdiff3.cpp:470 +msgid "Go to Current Delta" +msgstr "" + +#: kdiff3.cpp:471 +msgid "Go to First Delta" +msgstr "" + +#: kdiff3.cpp:472 +msgid "Go to Last Delta" +msgstr "" + +#: kdiff3.cpp:473 +msgid "(Skips white space differences when \"Show White Space\" is disabled.)" +msgstr "" + +#: kdiff3.cpp:474 +msgid "" +"(Does not skip white space differences even when \"Show White Space\" is " +"disabled.)" +msgstr "" + +#: kdiff3.cpp:475 +msgid "Go to Previous Delta" +msgstr "" + +#: kdiff3.cpp:477 +msgid "Go to Next Delta" +msgstr "" + +#: kdiff3.cpp:479 +msgid "Go to Previous Conflict" +msgstr "" + +#: kdiff3.cpp:481 +msgid "Go to Next Conflict" +msgstr "" + +#: kdiff3.cpp:483 +msgid "Go to Previous Unsolved Conflict" +msgstr "" + +#: kdiff3.cpp:485 +msgid "Go to Next Unsolved Conflict" +msgstr "" + +#: kdiff3.cpp:487 +msgid "Select Line(s) From A" +msgstr "" + +#: kdiff3.cpp:488 +msgid "Select Line(s) From B" +msgstr "" + +#: kdiff3.cpp:489 +msgid "Select Line(s) From C" +msgstr "" + +#: kdiff3.cpp:490 +msgid "Automatically Go to Next Unsolved Conflict After Source Selection" +msgstr "" + +#: kdiff3.cpp:492 +msgid "Show Space && Tabulator Characters for Differences" +msgstr "" + +#: kdiff3.cpp:493 +msgid "Show White Space" +msgstr "" + +#: kdiff3.cpp:495 +msgid "Show Line Numbers" +msgstr "" + +#: kdiff3.cpp:496 +msgid "Choose A Everywhere" +msgstr "" + +#: kdiff3.cpp:497 +msgid "Choose B Everywhere" +msgstr "" + +#: kdiff3.cpp:498 +msgid "Choose C Everywhere" +msgstr "" + +#: kdiff3.cpp:499 +msgid "Choose A for All Unsolved Conflicts" +msgstr "" + +#: kdiff3.cpp:500 +msgid "Choose B for All Unsolved Conflicts" +msgstr "" + +#: kdiff3.cpp:501 +msgid "Choose C for All Unsolved Conflicts" +msgstr "" + +#: kdiff3.cpp:502 +msgid "Choose A for All Unsolved Whitespace Conflicts" +msgstr "" + +#: kdiff3.cpp:503 +msgid "Choose B for All Unsolved Whitespace Conflicts" +msgstr "" + +#: kdiff3.cpp:504 +msgid "Choose C for All Unsolved Whitespace Conflicts" +msgstr "" + +#: kdiff3.cpp:505 +msgid "Automatically Solve Simple Conflicts" +msgstr "" + +#: kdiff3.cpp:506 +msgid "Set Deltas to Conflicts" +msgstr "" + +#: kdiff3.cpp:507 +msgid "Run Regular Expression Auto Merge" +msgstr "" + +#: kdiff3.cpp:508 +msgid "Automatically Solve History Conflicts" +msgstr "" + +#: kdiff3.cpp:509 +msgid "Split Diff At Selection" +msgstr "" + +#: kdiff3.cpp:510 +msgid "Join Selected Diffs" +msgstr "" + +#: kdiff3.cpp:512 +msgid "Show Window A" +msgstr "" + +#: kdiff3.cpp:513 +msgid "Show Window B" +msgstr "" + +#: kdiff3.cpp:514 +msgid "Show Window C" +msgstr "" + +#: kdiff3.cpp:515 kdiff3.cpp:526 +msgid "Focus Next Window" +msgstr "" + +#: kdiff3.cpp:517 +msgid "Normal Overview" +msgstr "" + +#: kdiff3.cpp:518 +msgid "A vs. B Overview" +msgstr "" + +#: kdiff3.cpp:519 +msgid "A vs. C Overview" +msgstr "" + +#: kdiff3.cpp:520 +msgid "B vs. C Overview" +msgstr "" + +#: kdiff3.cpp:521 +msgid "Word Wrap Diff Windows" +msgstr "" + +#: kdiff3.cpp:522 +msgid "Add Manual Diff Alignment" +msgstr "" + +#: kdiff3.cpp:523 +msgid "Clear All Manual Diff Alignments" +msgstr "" + +#: kdiff3.cpp:528 +msgid "Focus Prev Window" +msgstr "" + +#: kdiff3.cpp:529 +msgid "Toggle Split Orientation" +msgstr "" + +#: kdiff3.cpp:531 +msgid "Dir && Text Split Screen View" +msgstr "" + +#: kdiff3.cpp:533 +msgid "Toggle Between Dir && Text View" +msgstr "" + +#: kdiff3.cpp:582 pdiff.cpp:1712 +msgid "The merge result hasn't been saved." +msgstr "" + +#: kdiff3.cpp:583 +msgid "Save && Quit" +msgstr "" + +#: kdiff3.cpp:583 +msgid "Quit Without Saving" +msgstr "Gorffen heb gadw" + +#: kdiff3.cpp:591 pdiff.cpp:1721 +msgid "Saving the merge result failed." +msgstr "" + +#: kdiff3.cpp:602 pdiff.cpp:978 +msgid "" +"You are currently doing a directory merge. Are you sure, you want to abort?" +msgstr "" + +#: kdiff3.cpp:625 +msgid "Saving file..." +msgstr "Yn cadw ffeil..." + +#: kdiff3.cpp:642 +msgid "Saving file with a new filename..." +msgstr "" + +#: kdiff3.cpp:732 +msgid "Printing..." +msgstr "Argraffu..." + +#: kdiff3.cpp:738 kdiff3.cpp:900 +msgid "Printing aborted." +msgstr "" + +#: kdiff3.cpp:870 +msgid "Selection" +msgstr "Dewisiad" + +#: kdiff3.cpp:896 +msgid "Printing completed." +msgstr "" + +#: kdiff3.cpp:906 +msgid "Exiting..." +msgstr "Terfynu..." + +#: kdiff3.cpp:918 +msgid "Toggling toolbar..." +msgstr "Dangos/cuddio'r bar offer..." + +#: kdiff3.cpp:939 +msgid "Toggle the statusbar..." +msgstr "Dangos/cuddio'r bar cyflwr..." + +#: kdiff3_part.cpp:155 kdiff3_part.cpp:224 +msgid "Couldn't find files for comparison." +msgstr "" + +#: kdiff3_part.cpp:291 +msgid "KDiff3Part" +msgstr "" + +#: kdiff3_shell.cpp:78 +msgid "" +"Could not find our part!\n" +"This usually happens due to an installation problem. Please read the " +"README-file in the source package for details." +msgstr "" + +#: main.cpp:35 +msgid "Tool for Comparison and Merge of Files and Directories" +msgstr "" + +#: main.cpp:40 +msgid "Merge the input." +msgstr "" + +#: main.cpp:42 +msgid "Explicit base file. For compatibility with certain tools." +msgstr "" + +#: main.cpp:44 +msgid "Output file. Implies -m. E.g.: -o newfile.txt" +msgstr "" + +#: main.cpp:45 +msgid "Output file, again. (For compatibility with certain tools.)" +msgstr "" + +#: main.cpp:46 +msgid "No GUI if all conflicts are auto-solvable. (Needs -o file)" +msgstr "" + +#: main.cpp:47 +msgid "Don't solve conflicts automatically. (For compatibility...)" +msgstr "" + +#: main.cpp:48 +msgid "Visible name replacement for input file 1 (base)." +msgstr "" + +#: main.cpp:49 +msgid "Visible name replacement for input file 2." +msgstr "" + +#: main.cpp:50 +msgid "Visible name replacement for input file 3." +msgstr "" + +#: main.cpp:52 +msgid "Alternative visible name replacement. Supply this once for every input." +msgstr "" + +#: main.cpp:53 +msgid "" +"Override a config setting. Use once for every setting. E.g.: --cs " +"\"AutoAdvance=1\"" +msgstr "" + +#: main.cpp:54 +msgid "Show list of config settings and current values." +msgstr "" + +#: main.cpp:55 +msgid "Use a different config file." +msgstr "" + +#: main.cpp:59 +msgid "file1 to open (base, if not specified via --base)" +msgstr "" + +#: main.cpp:60 +msgid "file2 to open" +msgstr "" + +#: main.cpp:61 +msgid "file3 to open" +msgstr "" + +#: main.cpp:93 +msgid "Ignored. (User defined.)" +msgstr "" + +#. i18n: file kdiff3_part.rc line 16 +#: main.cpp:173 rc.cpp:9 +#, no-c-format +msgid "KDiff3" +msgstr "" + +#: main.cpp:186 +msgid "+ Many thanks to those who reported bugs and contributed ideas!" +msgstr "" + +#: mergeresultwindow.cpp:136 mergeresultwindow.cpp:939 +#: mergeresultwindow.cpp:953 mergeresultwindow.cpp:965 +#: mergeresultwindow.cpp:977 +msgid "Number of remaining unsolved conflicts: %1 (of which %2 are whitespace)" +msgstr "" + +#: mergeresultwindow.cpp:285 +msgid "" +"The output has been modified.\n" +"If you continue your changes will be lost." +msgstr "" + +#: mergeresultwindow.cpp:797 pdiff.cpp:511 +msgid "All input files are binary equal." +msgstr "" + +#: mergeresultwindow.cpp:799 +msgid "All input files contain the same text." +msgstr "" + +#: mergeresultwindow.cpp:801 +msgid "" +"Files A and B are binary equal.\n" +msgstr "" + +#: mergeresultwindow.cpp:802 +msgid "" +"Files A and B have equal text. \n" +msgstr "" + +#: mergeresultwindow.cpp:803 +msgid "" +"Files A and C are binary equal.\n" +msgstr "" + +#: mergeresultwindow.cpp:804 +msgid "" +"Files A and C have equal text. \n" +msgstr "" + +#: mergeresultwindow.cpp:805 +msgid "" +"Files B and C are binary equal.\n" +msgstr "" + +#: mergeresultwindow.cpp:806 +msgid "" +"Files B and C have equal text. \n" +msgstr "" + +#: mergeresultwindow.cpp:812 +msgid "Total number of conflicts: " +msgstr "" + +#: mergeresultwindow.cpp:813 +msgid "" +"\n" +"Nr of automatically solved conflicts: " +msgstr "" + +#: mergeresultwindow.cpp:814 +msgid "" +"\n" +"Nr of unsolved conflicts: " +msgstr "" + +#: mergeresultwindow.cpp:816 +msgid "Conflicts" +msgstr "Gwrthdrawiadau" + +#: mergeresultwindow.cpp:1652 +msgid "" +msgstr "" + +#: mergeresultwindow.cpp:1660 +msgid "" +msgstr "" + +#: mergeresultwindow.cpp:1662 mergeresultwindow.cpp:2427 +msgid "" +msgstr "" + +#: mergeresultwindow.cpp:2635 +msgid "" +"Not all conflicts are solved yet.\n" +"File not saved.\n" +msgstr "" + +#: mergeresultwindow.cpp:2637 +msgid "Conflicts Left" +msgstr "" + +#: mergeresultwindow.cpp:2649 +msgid "" +"\n" +"\n" +"Creating backup failed. File not saved." +msgstr "" + +#: mergeresultwindow.cpp:2649 mergeresultwindow.cpp:2689 +msgid "File Save Error" +msgstr "" + +#: mergeresultwindow.cpp:2689 +msgid "Error while writing." +msgstr "" + +#: mergeresultwindow.cpp:3020 +msgid "Output" +msgstr "Allbwn" + +#: mergeresultwindow.cpp:3032 mergeresultwindow.cpp:3139 +msgid "[Modified]" +msgstr "" + +#: mergeresultwindow.cpp:3039 +msgid "Encoding for saving" +msgstr "" + +#: mergeresultwindow.cpp:3075 mergeresultwindow.cpp:3081 +#: mergeresultwindow.cpp:3087 +msgid "Codec from" +msgstr "" + +#: optiondialog.cpp:362 +msgid "Unicode, 8 bit" +msgstr "" + +#: optiondialog.cpp:363 +msgid "Unicode" +msgstr "Ungôd" + +#: optiondialog.cpp:364 +msgid "Latin1" +msgstr "Lladin1" + +#: optiondialog.cpp:383 +msgid "Change this if non-ASCII characters are not displayed correctly." +msgstr "" + +#: optiondialog.cpp:510 +msgid "Editor & Diff Output Font" +msgstr "" + +#: optiondialog.cpp:531 +msgid "Italic font for deltas" +msgstr "" + +#: optiondialog.cpp:534 +msgid "" +"Selects the italic version of the font for differences.\n" +"If the font doesn't support italic characters, then this does nothing." +msgstr "" + +#: optiondialog.cpp:542 +msgid "Color" +msgstr "Lliw" + +#: optiondialog.cpp:542 +#, fuzzy +msgid "Colors Settings" +msgstr "Gosodiadau Rhanbarthol" + +#: optiondialog.cpp:556 +msgid "Editor and Diff Views:" +msgstr "" + +#: optiondialog.cpp:564 +msgid "Foreground color:" +msgstr "Lliw blaendir:" + +#: optiondialog.cpp:570 +msgid "Background color:" +msgstr "Lliw'r cefndir:" + +#: optiondialog.cpp:578 +msgid "Diff background color:" +msgstr "" + +#: optiondialog.cpp:585 +msgid "Color A:" +msgstr "" + +#: optiondialog.cpp:592 +msgid "Color B:" +msgstr "" + +#: optiondialog.cpp:599 +msgid "Color C:" +msgstr "" + +#: optiondialog.cpp:605 +msgid "Conflict color:" +msgstr "" + +#: optiondialog.cpp:612 +msgid "Current range background color:" +msgstr "" + +#: optiondialog.cpp:619 +msgid "Current range diff background color:" +msgstr "" + +#: optiondialog.cpp:625 +msgid "Color for manually aligned difference ranges:" +msgstr "" + +#: optiondialog.cpp:630 +msgid "Directory Comparison View:" +msgstr "" + +#: optiondialog.cpp:636 +msgid "Newest file color:" +msgstr "" + +#: optiondialog.cpp:639 +msgid "" +"Changing this color will only be effective when starting the next directory " +"comparison." +msgstr "" + +#: optiondialog.cpp:644 +msgid "Oldest file color:" +msgstr "" + +#: optiondialog.cpp:651 +msgid "Middle age file color:" +msgstr "" + +#: optiondialog.cpp:658 +msgid "Color for missing files:" +msgstr "" + +#: optiondialog.cpp:670 +msgid "Editor" +msgstr "Golygydd" + +#: optiondialog.cpp:670 +msgid "Editor Behavior" +msgstr "" + +#: optiondialog.cpp:680 +msgid "Tab inserts spaces" +msgstr "" + +#: optiondialog.cpp:683 +msgid "" +"On: Pressing tab generates the appropriate number of spaces.\n" +"Off: A Tab-character will be inserted." +msgstr "" + +#: optiondialog.cpp:689 +msgid "Tab size:" +msgstr "Maint tab:" + +#: optiondialog.cpp:694 +msgid "Auto indentation" +msgstr "" + +#: optiondialog.cpp:697 +msgid "" +"On: The indentation of the previous line is used for a new line.\n" +msgstr "" + +#: optiondialog.cpp:701 +msgid "Auto copy selection" +msgstr "" + +#: optiondialog.cpp:704 +msgid "" +"On: Any selection is immediately written to the clipboard.\n" +"Off: You must explicitely copy e.g. via Ctrl-C." +msgstr "" + +#: optiondialog.cpp:709 +msgid "Line end style:" +msgstr "Arddull pen y llinell:" + +#: optiondialog.cpp:721 +msgid "" +"Sets the line endings for when an edited file is saved.\n" +"DOS/Windows: CR+LF; UNIX: LF; with CR=0D, LF=0A" +msgstr "" + +#: optiondialog.cpp:732 +msgid "Diff" +msgstr "" + +#: optiondialog.cpp:732 +#, fuzzy +msgid "Diff Settings" +msgstr "Gosodiadau Rhanbarthol" + +#: optiondialog.cpp:743 +msgid "Preserve carriage return" +msgstr "" + +#: optiondialog.cpp:746 +msgid "" +"Show carriage return characters '\\r' if they exist.\n" +"Helps to compare files that were modified under different operating systems." +msgstr "" + +#: optiondialog.cpp:751 +msgid "Ignore numbers" +msgstr "" + +#: optiondialog.cpp:754 +msgid "" +"Ignore number characters during line matching phase. (Similar to Ignore white " +"space.)\n" +"Might help to compare files with numeric data." +msgstr "" + +#: optiondialog.cpp:759 +msgid "Ignore C/C++ comments" +msgstr "" + +#: optiondialog.cpp:761 +msgid "Treat C/C++ comments like white space." +msgstr "" + +#: optiondialog.cpp:765 +msgid "Ignore case" +msgstr "" + +#: optiondialog.cpp:768 +msgid "Treat case differences like white space changes. ('a'<=>'A')" +msgstr "" + +#: optiondialog.cpp:772 +msgid "Preprocessor command:" +msgstr "" + +#: optiondialog.cpp:776 +msgid "User defined pre-processing. (See the docs for details.)" +msgstr "" + +#: optiondialog.cpp:779 +msgid "Line-matching preprocessor command:" +msgstr "" + +#: optiondialog.cpp:783 +msgid "" +"This pre-processor is only used during line matching.\n" +"(See the docs for details.)" +msgstr "" + +#: optiondialog.cpp:786 +msgid "Try hard (slower)" +msgstr "" + +#: optiondialog.cpp:789 +msgid "" +"Enables the --minimal option for the external diff.\n" +"The analysis of big files will be much slower." +msgstr "" + +#: optiondialog.cpp:794 +msgid "Auto advance delay (ms):" +msgstr "" + +#: optiondialog.cpp:799 +msgid "" +"When in Auto-Advance mode the result of the current selection is shown \n" +"for the specified time, before jumping to the next conflict. Range: 0-2000 ms" +msgstr "" + +#: optiondialog.cpp:809 +#, fuzzy +msgid "Merge Settings" +msgstr "Gosodiadau Rhanbarthol" + +#: optiondialog.cpp:822 +msgid "White space 2-file merge default:" +msgstr "" + +#: optiondialog.cpp:826 optiondialog.cpp:839 +msgid "Manual Choice" +msgstr "Dewis gyda llaw" + +#: optiondialog.cpp:830 optiondialog.cpp:844 +msgid "" +"Allow the merge algorithm to automatically select an input for white-space-only " +"changes." +msgstr "" + +#: optiondialog.cpp:835 +msgid "White space 3-file merge default:" +msgstr "" + +#: optiondialog.cpp:849 +msgid "Automatic Merge Regular Expression" +msgstr "" + +#: optiondialog.cpp:858 smalldialogs.cpp:397 +msgid "Auto merge regular expression:" +msgstr "" + +#: optiondialog.cpp:862 +msgid "" +"Regular expression for lines where KDiff3 should automatically choose one " +"source.\n" +"When a line with a conflict matches the regular expression then\n" +"- if available - C, otherwise B will be chosen." +msgstr "" + +#: optiondialog.cpp:868 +msgid "Run regular expression auto merge on merge start" +msgstr "" + +#: optiondialog.cpp:870 +msgid "" +"Run the merge for auto merge regular expressions\n" +"immediately when a merge starts.\n" +msgstr "" + +#: optiondialog.cpp:875 +msgid "Version Control History Merging" +msgstr "" + +#: optiondialog.cpp:884 smalldialogs.cpp:424 +msgid "History start regular expression:" +msgstr "" + +#: optiondialog.cpp:888 +msgid "" +"Regular expression for the start of the version control history entry.\n" +"Usually this line contains the \"$Log$\"-keyword.\n" +"Default value: \".*\\$Log.*\\$.*\"" +msgstr "" + +#: optiondialog.cpp:894 smalldialogs.cpp:453 +msgid "History entry start regular expression:" +msgstr "" + +#: optiondialog.cpp:906 +msgid "" +"A version control history entry consists of several lines.\n" +"Specify the regular expression to detect the first line (without the leading " +"comment).\n" +"Use parentheses to group the keys you want to use for sorting.\n" +"If left empty, then KDiff3 assumes that empty lines separate history entries.\n" +"See the documentation for details." +msgstr "" + +#: optiondialog.cpp:914 +msgid "History merge sorting" +msgstr "" + +#: optiondialog.cpp:916 +msgid "Sort version control history by a key." +msgstr "" + +#: optiondialog.cpp:926 +msgid "History entry start sort key order:" +msgstr "" + +#: optiondialog.cpp:930 +msgid "" +"Each parentheses used in the regular expression for the history start entry\n" +"groups a key that can be used for sorting.\n" +"Specify the list of keys (that are numbered in order of occurrence\n" +"starting with 1) using ',' as separator (e.g. \"4,5,6,1,2,3,7\").\n" +"If left empty, then no sorting will be done.\n" +"See the documentation for details." +msgstr "" + +#: optiondialog.cpp:941 +msgid "Merge version control history on merge start" +msgstr "" + +#: optiondialog.cpp:943 +msgid "Run version control history automerge on merge start." +msgstr "" + +#: optiondialog.cpp:947 +msgid "Test your regular expressions" +msgstr "" + +#: optiondialog.cpp:952 +msgid "Irrelevant merge command:" +msgstr "" + +#: optiondialog.cpp:956 +msgid "" +"If specified this script is run after automerge\n" +"when no other relevant changes were detected.\n" +"Called with the parameters: filename1 filename2 filename3" +msgstr "" + +#: optiondialog.cpp:966 +msgid "Directory Merge" +msgstr "" + +#: optiondialog.cpp:975 +msgid "Recursive directories" +msgstr "" + +#: optiondialog.cpp:977 +msgid "Whether to analyze subdirectories or not." +msgstr "" + +#: optiondialog.cpp:979 +msgid "File pattern(s):" +msgstr "" + +#: optiondialog.cpp:984 +msgid "" +"Pattern(s) of files to be analyzed. \n" +"Wildcards: '*' and '?'\n" +"Several Patterns can be specified by using the separator: ';'" +msgstr "" + +#: optiondialog.cpp:990 +msgid "File-anti-pattern(s):" +msgstr "" + +#: optiondialog.cpp:995 +msgid "" +"Pattern(s) of files to be excluded from analysis. \n" +"Wildcards: '*' and '?'\n" +"Several Patterns can be specified by using the separator: ';'" +msgstr "" + +#: optiondialog.cpp:1001 +msgid "Dir-anti-pattern(s):" +msgstr "" + +#: optiondialog.cpp:1006 +msgid "" +"Pattern(s) of directories to be excluded from analysis. \n" +"Wildcards: '*' and '?'\n" +"Several Patterns can be specified by using the separator: ';'" +msgstr "" + +#: optiondialog.cpp:1012 +msgid "Use .cvsignore" +msgstr "" + +#: optiondialog.cpp:1015 +msgid "" +"Extends the antipattern to anything that would be ignored by CVS.\n" +"Via local \".cvsignore\"-files this can be directory specific." +msgstr "" + +#: optiondialog.cpp:1020 +msgid "Find hidden files and directories" +msgstr "" + +#: optiondialog.cpp:1023 +msgid "Finds files and directories with the hidden attribute." +msgstr "" + +#: optiondialog.cpp:1025 +msgid "Finds files and directories starting with '.'." +msgstr "" + +#: optiondialog.cpp:1029 +msgid "Follow file links" +msgstr "" + +#: optiondialog.cpp:1032 +msgid "" +"On: Compare the file the link points to.\n" +"Off: Compare the links." +msgstr "" + +#: optiondialog.cpp:1037 +msgid "Follow directory links" +msgstr "" + +#: optiondialog.cpp:1040 +msgid "" +"On: Compare the directory the link points to.\n" +"Off: Compare the links." +msgstr "" + +#: optiondialog.cpp:1056 +msgid "Case sensitive filename comparison" +msgstr "" + +#: optiondialog.cpp:1059 +msgid "" +"The directory comparison will compare files or directories when their names " +"match.\n" +"Set this option if the case of the names must match. (Default for Windows is " +"off, otherwise on.)" +msgstr "" + +#: optiondialog.cpp:1063 +msgid "File Comparison Mode" +msgstr "" + +#: optiondialog.cpp:1067 +msgid "Binary comparison" +msgstr "" + +#: optiondialog.cpp:1068 +msgid "Binary comparison of each file. (Default)" +msgstr "" + +#: optiondialog.cpp:1070 +msgid "Full analysis" +msgstr "" + +#: optiondialog.cpp:1071 +msgid "" +"Do a full analysis and show statistics information in extra columns.\n" +"(Slower than a binary comparison, much slower for binary files.)" +msgstr "" + +#: optiondialog.cpp:1074 +msgid "Trust the modification date (unsafe)" +msgstr "" + +#: optiondialog.cpp:1075 +msgid "" +"Assume that files are equal if the modification date and file length are " +"equal.\n" +"Useful for big directories or slow networks." +msgstr "" + +#: optiondialog.cpp:1078 +msgid "Trust the size (unsafe)" +msgstr "" + +#: optiondialog.cpp:1079 +msgid "" +"Assume that files are equal if their file lengths are equal.\n" +"Useful for big directories or slow networks when the date is modified during " +"download." +msgstr "" + +#: optiondialog.cpp:1083 +msgid "Synchronize directories" +msgstr "" + +#: optiondialog.cpp:1086 +msgid "" +"Offers to store files in both directories so that\n" +"both directories are the same afterwards.\n" +"Works only when comparing two directories without specifying a destination." +msgstr "" + +#: optiondialog.cpp:1092 +msgid "White space differences considered equal" +msgstr "" + +#: optiondialog.cpp:1095 +msgid "" +"If files differ only by white space consider them equal.\n" +"This is only active when full analysis is chosen." +msgstr "" + +#: optiondialog.cpp:1101 +msgid "Copy newer instead of merging (unsafe)" +msgstr "" + +#: optiondialog.cpp:1104 +msgid "" +"Don't look inside, just take the newer file.\n" +"(Use this only if you know what you are doing!)\n" +"Only effective when comparing two directories." +msgstr "" + +#: optiondialog.cpp:1109 +msgid "Backup files (.orig)" +msgstr "" + +#: optiondialog.cpp:1112 +msgid "" +"When a file would be saved over an old file, then the old file\n" +"will be renamed with a '.orig'-extension instead of being deleted." +msgstr "" + +#: optiondialog.cpp:1176 +msgid "Regional Settings" +msgstr "Gosodiadau Rhanbarthol" + +#: optiondialog.cpp:1272 +msgid "Language (restart required)" +msgstr "" + +#: optiondialog.cpp:1304 +msgid "" +"Choose the language of the GUI-strings or \"Auto\".\n" +"For a change of language to take place, quit and restart KDiff3." +msgstr "" + +#: optiondialog.cpp:1322 +msgid "Use the same encoding for everything:" +msgstr "" + +#: optiondialog.cpp:1325 +msgid "" +"Enable this allows to change all encodings by changing the first only.\n" +"Disable this if different individual settings are needed." +msgstr "" + +#: optiondialog.cpp:1330 +msgid "Note: Local Encoding is " +msgstr "" + +#: optiondialog.cpp:1334 +msgid "File Encoding for A:" +msgstr "" + +#: optiondialog.cpp:1340 +msgid "" +"If enabled then Unicode (UTF-16 or UTF-8) encoding will be detected.\n" +"If the file encoding is not detected then the selected encoding will be used as " +"fallback.\n" +"(Unicode detection depends on the first bytes of a file - the byte order mark " +"\"BOM\".)" +msgstr "" + +#: optiondialog.cpp:1344 optiondialog.cpp:1353 optiondialog.cpp:1362 +msgid "Auto Detect Unicode" +msgstr "" + +#: optiondialog.cpp:1349 +msgid "File Encoding for B:" +msgstr "" + +#: optiondialog.cpp:1358 +msgid "File Encoding for C:" +msgstr "" + +#: optiondialog.cpp:1367 +msgid "File Encoding for Merge Output and Saving:" +msgstr "" + +#: optiondialog.cpp:1371 +#, fuzzy +msgid "Auto Select" +msgstr "dim detholiad" + +#: optiondialog.cpp:1374 +msgid "" +"If enabled then the encoding from the input files is used.\n" +"In ambiguous cases a dialog will ask the user to choose the encoding for " +"saving." +msgstr "" + +#: optiondialog.cpp:1378 +msgid "File Encoding for Preprocessor Files:" +msgstr "" + +#: optiondialog.cpp:1389 +msgid "Right To Left Language" +msgstr "" + +#: optiondialog.cpp:1392 +msgid "" +"Some languages are read from right to left.\n" +"This setting will change the viewer and editor accordingly." +msgstr "" + +#: optiondialog.cpp:1402 +#, fuzzy +msgid "Integration" +msgstr "Gweithrediad" + +#: optiondialog.cpp:1402 +#, fuzzy +msgid "Integration Settings" +msgstr "Gosodiadau Rhanbarthol" + +#: optiondialog.cpp:1412 +msgid "Command line options to ignore:" +msgstr "" + +#: optiondialog.cpp:1417 +msgid "" +"List of command line options that should be ignored when KDiff3 is used by " +"other tools.\n" +"Several values can be specified if separated via ';'\n" +"This will suppress the \"Unknown option\"-error." +msgstr "" + +#: optiondialog.cpp:1480 +msgid "" +"You selected a variable width font.\n" +"\n" +"Because this program doesn't handle variable width fonts\n" +"correctly, you might experience problems while editing.\n" +"\n" +"Do you want to continue or do you want to select another font." +msgstr "" + +#: optiondialog.cpp:1484 +msgid "Incompatible Font" +msgstr "" + +#: optiondialog.cpp:1485 +msgid "Continue at Own Risk" +msgstr "" + +#: optiondialog.cpp:1485 +msgid "Select Another Font" +msgstr "" + +#: optiondialog.cpp:1521 +msgid "This resets all options. Not only those of the current topic." +msgstr "" + +#: pdiff.cpp:258 +msgid "PreprocessorCmd: " +msgstr "" + +#: pdiff.cpp:263 +msgid "" +"The following option(s) you selected might change data:\n" +msgstr "" + +#: pdiff.cpp:264 +msgid "" +"\n" +"Most likely this is not wanted during a merge.\n" +"Do you want to disable these settings or continue with these settings active?" +msgstr "" + +#: pdiff.cpp:266 +msgid "Option Unsafe for Merging" +msgstr "" + +#: pdiff.cpp:267 +msgid "Use These Options During Merge" +msgstr "" + +#: pdiff.cpp:267 +msgid "Disable Unsafe Options" +msgstr "" + +#: pdiff.cpp:297 +msgid "Loading A" +msgstr "" + +#: pdiff.cpp:301 +msgid "Loading B" +msgstr "" + +#: pdiff.cpp:318 pdiff.cpp:344 +msgid "Diff: A <-> B" +msgstr "" + +#: pdiff.cpp:324 pdiff.cpp:366 +msgid "Linediff: A <-> B" +msgstr "" + +#: pdiff.cpp:335 +msgid "Loading C" +msgstr "" + +#: pdiff.cpp:347 +msgid "Diff: B <-> C" +msgstr "" + +#: pdiff.cpp:350 +msgid "Diff: A <-> C" +msgstr "" + +#: pdiff.cpp:369 +msgid "Linediff: B <-> C" +msgstr "" + +#: pdiff.cpp:372 +msgid "Linediff: A <-> C" +msgstr "" + +#: pdiff.cpp:513 +msgid "All input files contain the same text, but are not binary equal." +msgstr "" + +#: pdiff.cpp:515 pdiff.cpp:517 pdiff.cpp:519 +msgid "" +"Files %1 and %2 are binary equal.\n" +msgstr "" + +#: pdiff.cpp:516 pdiff.cpp:518 pdiff.cpp:520 +msgid "" +"Files %1 and %2 have equal text, but are not binary equal. \n" +msgstr "" + +#: pdiff.cpp:530 +msgid "" +"Some inputfiles don't seem to be pure textfiles.\n" +"Note that the KDiff3-merge was not meant for binary data.\n" +"Continue at your own risk." +msgstr "" + +#: pdiff.cpp:979 +msgid "Abort" +msgstr "Erthylu" + +#: pdiff.cpp:985 pdiff.cpp:1073 +msgid "Opening files..." +msgstr "" + +#: pdiff.cpp:1050 pdiff.cpp:1121 +msgid "File open error" +msgstr "Gwall agor ffeil" + +#: pdiff.cpp:1153 +msgid "Cutting selection..." +msgstr "Yn torri'r dewisiad..." + +#: pdiff.cpp:1174 +msgid "Copying selection to clipboard..." +msgstr "Yn copïo'r dewisiad i'r clipfwrdd..." + +#: pdiff.cpp:1190 +msgid "Inserting clipboard contents..." +msgstr "Yn mewnosod cynnwys y clipfwrdd..." + +#: pdiff.cpp:1713 +msgid "Save && Continue" +msgstr "" + +#: pdiff.cpp:1713 +msgid "Continue Without Saving" +msgstr "" + +#: pdiff.cpp:1920 +msgid "Search complete." +msgstr "" + +#: pdiff.cpp:1920 +msgid "Search Complete" +msgstr "" + +#: pdiff.cpp:2144 +msgid "Nothing is selected in either diff input window." +msgstr "" + +#: pdiff.cpp:2144 +msgid "Error while adding manual diff range" +msgstr "" + +#. i18n: file kdiff3_part.rc line 4 +#: rc.cpp:3 +#, no-c-format +msgid "&KDiff3" +msgstr "" + +#. i18n: file kdiff3_part.rc line 13 +#: rc.cpp:6 +#, no-c-format +msgid "Configure KDiff3" +msgstr "" + +#. i18n: file kdiff3_shell.rc line 7 +#: rc.cpp:15 +#, no-c-format +msgid "&Directory" +msgstr "&Cyfeiriadur" + +#. i18n: file kdiff3_shell.rc line 30 +#: rc.cpp:18 +#, no-c-format +msgid "Current Item Merge Operation" +msgstr "" + +#. i18n: file kdiff3_shell.rc line 38 +#: rc.cpp:21 +#, no-c-format +msgid "Current Item Sync Operation" +msgstr "" + +#. i18n: file kdiff3_shell.rc line 50 +#: rc.cpp:24 +#, no-c-format +msgid "&Movement" +msgstr "" + +#. i18n: file kdiff3_shell.rc line 61 +#: rc.cpp:27 +#, no-c-format +msgid "D&iffview" +msgstr "" + +#. i18n: file kdiff3_shell.rc line 73 +#: rc.cpp:30 +#, no-c-format +msgid "&Merge" +msgstr "&Cyfuno" + +#. i18n: file kdiff3_shell.rc line 95 +#: rc.cpp:33 +#, no-c-format +msgid "&Window" +msgstr "&Ffenestr" + +#: smalldialogs.cpp:53 +msgid "A (Base):" +msgstr "" + +#: smalldialogs.cpp:59 smalldialogs.cpp:75 smalldialogs.cpp:91 +#: smalldialogs.cpp:134 +msgid "File..." +msgstr "Ffeil..." + +#: smalldialogs.cpp:61 smalldialogs.cpp:77 smalldialogs.cpp:93 +#: smalldialogs.cpp:136 +msgid "Dir..." +msgstr "" + +#: smalldialogs.cpp:86 +msgid "C (Optional):" +msgstr "" + +#: smalldialogs.cpp:108 +msgid "Swap/Copy Names ..." +msgstr "" + +#: smalldialogs.cpp:114 smalldialogs.cpp:115 smalldialogs.cpp:116 +msgid "Swap %1<->%2" +msgstr "" + +#: smalldialogs.cpp:117 smalldialogs.cpp:118 smalldialogs.cpp:119 +msgid "Copy %1->Output" +msgstr "" + +#: smalldialogs.cpp:120 smalldialogs.cpp:121 smalldialogs.cpp:122 +msgid "Swap %1<->Output" +msgstr "" + +#: smalldialogs.cpp:129 +msgid "Output (optional):" +msgstr "" + +#: smalldialogs.cpp:158 +msgid "Configure..." +msgstr "Ffurfweddu..." + +#: smalldialogs.cpp:347 +#, fuzzy +msgid "Search text:" +msgstr " &Chwilio" + +#: smalldialogs.cpp:354 +msgid "Case sensitive" +msgstr "Llythrennau mawr/bach o bwys" + +#: smalldialogs.cpp:357 +msgid "Search A" +msgstr "" + +#: smalldialogs.cpp:362 +msgid "Search B" +msgstr "" + +#: smalldialogs.cpp:367 +msgid "Search C" +msgstr "" + +#: smalldialogs.cpp:372 +msgid "Search output" +msgstr "" + +#: smalldialogs.cpp:377 +msgid "&Search" +msgstr " &Chwilio" + +#: smalldialogs.cpp:394 +msgid "Regular Expression Tester" +msgstr "" + +#: smalldialogs.cpp:405 +msgid "Example auto merge line:" +msgstr "" + +#: smalldialogs.cpp:407 +msgid "For auto merge test copy a line as used in your files." +msgstr "" + +#: smalldialogs.cpp:413 smalldialogs.cpp:442 smalldialogs.cpp:479 +msgid "Match result:" +msgstr "" + +#: smalldialogs.cpp:432 +msgid "Example history start line (with leading comment):" +msgstr "" + +#: smalldialogs.cpp:435 +msgid "" +"Copy a history start line as used in your files,\n" +"including the leading comment." +msgstr "" + +#: smalldialogs.cpp:461 +msgid "History sort key order:" +msgstr "" + +#: smalldialogs.cpp:469 +msgid "Example history entry start line (without leading comment):" +msgstr "" + +#: smalldialogs.cpp:471 +msgid "" +"Copy a history entry start line as used in your files,\n" +"but omit the leading comment." +msgstr "" + +#: smalldialogs.cpp:486 +msgid "Sort key result:" +msgstr "" + +#: smalldialogs.cpp:537 smalldialogs.cpp:547 smalldialogs.cpp:568 +msgid "Match success." +msgstr "" + +#: smalldialogs.cpp:541 smalldialogs.cpp:551 smalldialogs.cpp:574 +msgid "Match failed." +msgstr "" + +#: smalldialogs.cpp:559 +msgid "Opening and closing parentheses don't match in regular expression." +msgstr "" + +#, fuzzy +#~ msgid "Manually match lines" +#~ msgstr "Dewis gyda llaw" + +#~ msgid "Ok" +#~ msgstr "Iawn" diff --git a/po/da.po b/po/da.po new file mode 100644 index 0000000..4422bcc --- /dev/null +++ b/po/da.po @@ -0,0 +1,2572 @@ +# Danish translation of kdiff3 +# Copyright (C). +# +# Erik Kjær Pedersen , 2003, 2004, 2005, 2006. +msgid "" +msgstr "" +"Project-Id-Version: kdiff3\n" +"POT-Creation-Date: 2006-11-05 08:45+0100\n" +"PO-Revision-Date: 2006-11-16 08:18-0500\n" +"Last-Translator: Erik Kjær Pedersen \n" +"Language-Team: Danish \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: KBabel 1.11.4\n" +"Plural-Forms: \n" + +#: _translatorinfo.cpp:1 +msgid "" +"_: NAME OF TRANSLATORS\n" +"Your names" +msgstr "Erik Kjær Pedersen" + +#: _translatorinfo.cpp:3 +msgid "" +"_: EMAIL OF TRANSLATORS\n" +"Your emails" +msgstr "erik@binghamton.edu" + +#: diff.cpp:246 +msgid "Writing clipboard data to temp file failed." +msgstr "Skrivning af klippebordsdata til midlertidig fil mislykkedes." + +#: diff.cpp:250 +msgid "From Clipboard" +msgstr "Fra klippebord" + +#: diff.cpp:491 +msgid "" +"Preprocessing possibly failed. Check this command:\n" +"\n" +" %1\n" +"\n" +"The preprocessing command will be disabled now." +msgstr "" +"Forbehandling mislykkedes muligvis. Tjek denne kommando:\n" +"\n" +" %1\n" +"\n" +"Forbehandlingskommandoen vil blive deaktiveret nu." + +#: diff.cpp:526 +msgid "" +"The line-matching-preprocessing possibly failed. Check this command:\n" +"\n" +" %1\n" +"\n" +"The line-matching-preprocessing command will be disabled now." +msgstr "" +"Forbehandlingen af linje-matchning mislykkedes muligvis. Tjek denne kommando:\n" +"\n" +" %1\n" +"\n" +"Forbehandlingskommandoen til linje-matchning vil blibe deaktiveret nu." + +#: diff.cpp:1631 diff.cpp:1645 +msgid "" +"Data loss error:\n" +"If it is reproducable please contact the author.\n" +msgstr "" +"Fejl med datatab:\n" +"Hvis dette kan gentages so kontakt venligst forfatteren.\n" + +#: diff.cpp:1633 diff.cpp:1647 +msgid "Severe Internal Error" +msgstr "Alvorlig intern fejl" + +#: difftextwindow.cpp:1643 kdiff3.cpp:753 +msgid "Top line" +msgstr "Toplinje" + +#: difftextwindow.cpp:1653 +msgid "End" +msgstr "Slut" + +#: directorymergewindow.cpp:142 +msgid "Mix of links and normal files." +msgstr "Blanding af link og normale filer." + +#: directorymergewindow.cpp:149 +msgid "Link: " +msgstr "Link: " + +#: directorymergewindow.cpp:157 +msgid "Size. " +msgstr "Størrelse. " + +#: directorymergewindow.cpp:170 +msgid "Date & Size: " +msgstr "Dato & Størrelse: " + +#: directorymergewindow.cpp:179 directorymergewindow.cpp:185 +msgid "Creating temp copy of %1 failed." +msgstr "Oprettelse af midlertidig kopi af %1 mislykkedes." + +#: directorymergewindow.cpp:196 directorymergewindow.cpp:204 +msgid "Opening %1 failed." +msgstr "Ã…bning af %1 mislykkedes." + +#: directorymergewindow.cpp:208 +msgid "Comparing file..." +msgstr "Sammenligner fil..." + +#: directorymergewindow.cpp:218 directorymergewindow.cpp:224 +#, c-format +msgid "Error reading from %1" +msgstr "Fejl ved læsning fra %1" + +#: directorymergewindow.cpp:282 +msgid "Name" +msgstr "Navn" + +#: directorymergewindow.cpp:286 +msgid "Operation" +msgstr "Operation" + +#: directorymergewindow.cpp:287 +msgid "Status" +msgstr "Status" + +#: directorymergewindow.cpp:288 +msgid "Unsolved" +msgstr "Uløst" + +#: directorymergewindow.cpp:289 +msgid "Solved" +msgstr "Løst" + +#: directorymergewindow.cpp:290 +msgid "Nonwhite" +msgstr "Ikke-hvid" + +#: directorymergewindow.cpp:291 +msgid "White" +msgstr "Hvid" + +#: directorymergewindow.cpp:319 +msgid "" +"You are currently doing a directory merge. Are you sure, you want to abort the " +"merge and rescan the directory?" +msgstr "" +"Du er ved at udføre en mappeindfletning. Er du sikker pÃ¥ at du ønsker at " +"afbryde indfletningen og skanne mappen igen?" + +#: directorymergewindow.cpp:320 directorymergewindow.cpp:2868 +msgid "Rescan" +msgstr "Genskan" + +#: directorymergewindow.cpp:320 kdiff3.cpp:603 pdiff.cpp:979 +msgid "Continue Merging" +msgstr "Fortsæt med indfletning" + +#: directorymergewindow.cpp:462 +msgid "Opening of directories failed:" +msgstr "Det mislykkedes at Ã¥bne mapper:" + +#: directorymergewindow.cpp:465 +msgid "" +"Dir A \"%1\" does not exist or is not a directory.\n" +msgstr "" +"Mappen A \"%1\" eksisterer ikke eller er ikke en mappe.\n" + +#: directorymergewindow.cpp:468 +msgid "" +"Dir B \"%1\" does not exist or is not a directory.\n" +msgstr "" +"Mappen B \"%1\" eksisterer ikke eller er ikke en mappe.\n" + +#: directorymergewindow.cpp:471 +msgid "" +"Dir C \"%1\" does not exist or is not a directory.\n" +msgstr "" +"Mappen C \"%1\" eksisterer ikke eller er ikke en mappe.\n" + +#: directorymergewindow.cpp:473 +msgid "Directory Open Error" +msgstr "Fejl ved Ã¥bning af mappe" + +#: directorymergewindow.cpp:481 +msgid "" +"The destination directory must not be the same as A or B when three directories " +"are merged.\n" +"Check again before continuing." +msgstr "" +"MÃ¥lmappen kan ikke være den samme som A eller B nÃ¥r tre mapper flettes sammen.\n" +"Tjek igen før du fortsætter." + +#: directorymergewindow.cpp:483 +msgid "Parameter Warning" +msgstr "Parameteradvarsel" + +#: directorymergewindow.cpp:488 +msgid "Scanning directories..." +msgstr "Skanner mapper..." + +#: directorymergewindow.cpp:537 +msgid "Reading Directory A" +msgstr "Læser mappen A" + +#: directorymergewindow.cpp:559 +msgid "Reading Directory B" +msgstr "Læser mappen B" + +#: directorymergewindow.cpp:581 +msgid "Reading Directory C" +msgstr "Læser mappen C" + +#: directorymergewindow.cpp:607 +msgid "Some subdirectories were not readable in" +msgstr "Nogle undermapper kunne ikke læses i" + +#: directorymergewindow.cpp:612 +msgid "Check the permissions of the subdirectories." +msgstr "Tjek tilladelser for undermapperne." + +#: directorymergewindow.cpp:646 kdiff3.cpp:552 kdiff3.cpp:636 kdiff3.cpp:661 +#: kdiff3.cpp:934 kdiff3.cpp:955 pdiff.cpp:1059 pdiff.cpp:1131 pdiff.cpp:1169 +#: pdiff.cpp:1185 pdiff.cpp:1215 pdiff.cpp:1226 +msgid "Ready." +msgstr "Klar." + +#: directorymergewindow.cpp:660 +msgid "Directory Comparison Status" +msgstr "Status for mappesammenligning" + +#: directorymergewindow.cpp:661 +msgid "Number of subdirectories:" +msgstr "Antal undermapper:" + +#: directorymergewindow.cpp:662 +msgid "Number of equal files:" +msgstr "Antal ens filer:" + +#: directorymergewindow.cpp:663 +msgid "Number of different files:" +msgstr "Antal forskellige filer:" + +#: directorymergewindow.cpp:666 +msgid "Number of manual merges:" +msgstr "Antal manuelle indfletninger:" + +#: directorymergewindow.cpp:802 +msgid "This affects all merge operations." +msgstr "Dette pÃ¥virker alle indfletningsoperationer." + +#: directorymergewindow.cpp:803 +msgid "Changing All Merge Operations" +msgstr "Ændrer alle indfletningsoperationer" + +#: directorymergewindow.cpp:803 mergeresultwindow.cpp:287 +msgid "C&ontinue" +msgstr "&Fortsæt" + +#: directorymergewindow.cpp:1169 +msgid "Processing " +msgstr "Behandler" + +#: directorymergewindow.cpp:1647 directorymergewindow.cpp:1653 +msgid "To do." +msgstr "At gøre." + +#: directorymergewindow.cpp:1756 directorymergewindow.cpp:2899 +msgid "Copy A to B" +msgstr "Kopiér A til B" + +#: directorymergewindow.cpp:1757 directorymergewindow.cpp:2900 +msgid "Copy B to A" +msgstr "Kopiér B til A" + +#: directorymergewindow.cpp:1758 directorymergewindow.cpp:2901 +msgid "Delete A" +msgstr "Slet A" + +#: directorymergewindow.cpp:1759 directorymergewindow.cpp:2902 +msgid "Delete B" +msgstr "Slet B" + +#: directorymergewindow.cpp:1760 +msgid "Delete A & B" +msgstr "Slet A & B" + +#: directorymergewindow.cpp:1761 directorymergewindow.cpp:2904 +msgid "Merge to A" +msgstr "Indflet til A" + +#: directorymergewindow.cpp:1762 directorymergewindow.cpp:2905 +msgid "Merge to B" +msgstr "Indflet til B" + +#: directorymergewindow.cpp:1763 +msgid "Merge to A & B" +msgstr "Indflet til A & B" + +#: directorymergewindow.cpp:1767 directorymergewindow.cpp:2896 +msgid "Delete (if exists)" +msgstr "Slet (hvis det eksisterer)" + +#: directorymergewindow.cpp:1768 directorymergewindow.cpp:1769 +#: directorymergewindow.cpp:2895 optiondialog.cpp:809 smalldialogs.cpp:102 +msgid "Merge" +msgstr "Indflet" + +#: directorymergewindow.cpp:1768 directorymergewindow.cpp:1769 +msgid "Merge (manual)" +msgstr "Indflet (manuelt)" + +#: directorymergewindow.cpp:1770 +msgid "Error: Conflicting File Types" +msgstr "Fejl: Filtyper i konflikt" + +#: directorymergewindow.cpp:1771 +msgid "Error: Dates are equal but files are not." +msgstr "Fejl: Datoer er ens men filer er ikke." + +#: directorymergewindow.cpp:1795 directorymergewindow.cpp:1824 +#: directorymergewindow.cpp:1849 +msgid "This operation is currently not possible." +msgstr "Denne operation er ikke mulig for øjeblikket." + +#: directorymergewindow.cpp:1795 directorymergewindow.cpp:1824 +#: directorymergewindow.cpp:1849 directorymergewindow.cpp:2106 +msgid "Operation Not Possible" +msgstr "Operation ikke mulig" + +#: directorymergewindow.cpp:1888 +msgid "" +"This should never happen: \n" +"\n" +"mergeResultSaved: m_pMFI=0\n" +"\n" +"If you know how to reproduce this, please contact the program author." +msgstr "" +"Dette burde aldrig ske: \n" +"\n" +"mergeResultSaved: m_pMFI=0\n" +"\n" +"Hvis du ved hvordan dette kan reproduceres, sÃ¥ kontakt programmets forfatter." + +#: directorymergewindow.cpp:1888 +msgid "Program Error" +msgstr "Programfejl" + +#: directorymergewindow.cpp:1899 +msgid "" +"An error occurred while copying.\n" +msgstr "" +"Der opstod en fejl mens der kopieredes.\n" + +#: directorymergewindow.cpp:1900 directorymergewindow.cpp:2306 +msgid "Merge Error" +msgstr "Indfletningsfejl" + +#: directorymergewindow.cpp:1905 directorymergewindow.cpp:2311 +msgid "Error." +msgstr "Fejl." + +#: directorymergewindow.cpp:1910 directorymergewindow.cpp:2202 +#: directorymergewindow.cpp:2242 +msgid "Done." +msgstr "Færdig." + +#: directorymergewindow.cpp:1933 +msgid "Not saved." +msgstr "Ikke gemt." + +#: directorymergewindow.cpp:1968 +msgid "Unknown merge operation. (This must never happen!)" +msgstr "Ukendt indfletningsoperation. (Dette skulle ikke kunne ske!)" + +#: directorymergewindow.cpp:2000 +msgid "Unknown merge operation." +msgstr "Ukendt indfletningsoperation." + +#: directorymergewindow.cpp:2015 +msgid "" +"The merge is about to begin.\n" +"\n" +"Choose \"Do it\" if you have read the instructions and know what you are " +"doing.\n" +"Choosing \"Simulate it\" will tell you what would happen.\n" +"\n" +"Be aware that this program still has beta status and there is NO WARRANTY " +"whatsoever! Make backups of your vital data!" +msgstr "" +"Indfletningen er ved at begynde.\n" +"\n" +"Vælg \"Gør det\" hvis du har læst instruktionerne og ved hvad du gør.\n" +"Valg af \"Simulér det\" vil fortælle dig hvad der ville ske.\n" +"\n" +"Vær klar over at dette program stadig har beta-status og der er INGEN GARANTI " +"overhovedet! Lav sikkerhedskopier af dine vitale data!" + +#: directorymergewindow.cpp:2020 +msgid "Starting Merge" +msgstr "Starter indfletning" + +#: directorymergewindow.cpp:2020 +msgid "Do It" +msgstr "Gør det" + +#: directorymergewindow.cpp:2020 +msgid "Simulate It" +msgstr "Simulér det" + +#: directorymergewindow.cpp:2046 +msgid "" +"The highlighted item has a different type in the different directories. Select " +"what to do." +msgstr "" +"Det frem,hævede punkt har forskellig type i de forskellige mapper. Vælg hvad " +"der skal gøres." + +#: directorymergewindow.cpp:2055 +msgid "" +"The modification dates of the file are equal but the files are not. Select what " +"to do." +msgstr "" +"Ændringsdatoerne for filerne er ens, men filerne er ikke ens. Vælg hvad der " +"skal gøres." + +#: directorymergewindow.cpp:2106 +msgid "" +"This operation is currently not possible because directory merge is currently " +"running." +msgstr "" +"Denne operation er ikke mulig lige nu da mappe-indfletningen kører for " +"øjeblikket." + +#: directorymergewindow.cpp:2166 +msgid "" +"There was an error in the last step.\n" +"Do you want to continue with the item that caused the error or do you want to " +"skip this item?" +msgstr "" +"Der opstod en fejl i det sidste skridt.\n" +"Ønsker du at fortsætte punktet der forÃ¥rsagede fejlen eller ønsker du at " +"springe over dette punkt?" + +#: directorymergewindow.cpp:2168 +msgid "Continue merge after an error" +msgstr "Fortsæt med indfletning efter en fejl" + +#: directorymergewindow.cpp:2168 +msgid "Continue With Last Item" +msgstr "Fortsæt med det sidste punkt" + +#: directorymergewindow.cpp:2168 +msgid "Skip Item" +msgstr "Spring over punkt" + +#: directorymergewindow.cpp:2202 +msgid "Skipped." +msgstr "Sprunget over." + +#: directorymergewindow.cpp:2209 directorymergewindow.cpp:2435 +msgid "In progress..." +msgstr "I fremgang..." + +#: directorymergewindow.cpp:2257 +msgid "Merge operation complete." +msgstr "Indfletningsoperation færdig." + +#: directorymergewindow.cpp:2257 directorymergewindow.cpp:2260 +msgid "Merge Complete" +msgstr "Indfletning færdig" + +#: directorymergewindow.cpp:2269 +msgid "" +"Simulated merge complete: Check if you agree with the proposed operations." +msgstr "" +"Simuleret indfletning færdig: Tjek om du er enig i de foreslÃ¥ede operationer." + +#: directorymergewindow.cpp:2305 +msgid "" +"An error occurred. Press OK to see detailed information.\n" +msgstr "" +"Der opstod en fejl. Tryk pÃ¥ o.k. for at se detaljeret information.\n" + +#: directorymergewindow.cpp:2348 +msgid "Error: While deleting %1: Creating backup failed." +msgstr "Fejl: Under sletning af %1: Det mislykkedes at lave sikkerhedskopi." + +#: directorymergewindow.cpp:2355 +msgid "delete directory recursively( %1 )" +msgstr "slet mappe rekursivt( %1 )" + +#: directorymergewindow.cpp:2357 +msgid "delete( %1 )" +msgstr "slet( %1 )" + +#: directorymergewindow.cpp:2372 +msgid "Error: delete dir operation failed while trying to read the directory." +msgstr "" +"Fejl: 'slet mappe'-operation mislykkedes under forsøget pÃ¥ at læse mappen." + +#: directorymergewindow.cpp:2391 +msgid "Error: rmdir( %1 ) operation failed." +msgstr "Fejl: rmdir( %1 ) operation mislykkedes." + +#: directorymergewindow.cpp:2401 +msgid "Error: delete operation failed." +msgstr "Fejl: slet-operation mislykkedes." + +#: directorymergewindow.cpp:2427 +msgid "manual merge( %1, %2, %3 -> %4)" +msgstr "manuel indfletning( %1, %2, %3 -> %4)" + +#: directorymergewindow.cpp:2430 +msgid "" +" Note: After a manual merge the user should continue by pressing F7." +msgstr "" +" Bemærk: Efter en manuel indfletning skal brugeren fortsætte ved at trykke " +"pÃ¥ F7." + +#: directorymergewindow.cpp:2453 +msgid "Error: copy( %1 -> %2 ) failed.Deleting existing destination failed." +msgstr "" +"Fejl: copy( %1 -> %2 ) mislykkedes. Sletning af eksisterende mÃ¥l mislykkedes." + +#: directorymergewindow.cpp:2463 +msgid "copyLink( %1 -> %2 )" +msgstr "copyLink( %1 -> %2 )" + +#: directorymergewindow.cpp:2474 +msgid "Error: copyLink failed: Remote links are not yet supported." +msgstr "Fejl: copyLink mislykkedes: Eksterne link er endnu ikke understøttede." + +#: directorymergewindow.cpp:2480 +msgid "Error: copyLink failed." +msgstr "Fejl: copyLink mislykkedes." + +#: directorymergewindow.cpp:2500 +msgid "copy( %1 -> %2 )" +msgstr "copy( %1 -> %2 )" + +#: directorymergewindow.cpp:2526 +msgid "Error during rename( %1 -> %2 ): Cannot delete existing destination." +msgstr "Fejl under rename( %1 -> %2 ): Kan ikke slette eksisterende mÃ¥l." + +#: directorymergewindow.cpp:2532 +msgid "rename( %1 -> %2 )" +msgstr "rename( %1 -> %2 )" + +#: directorymergewindow.cpp:2541 +msgid "Error: Rename failed." +msgstr "Fejl: Omdøbning mislykkedes." + +#: directorymergewindow.cpp:2559 +msgid "Error during makeDir of %1. Cannot delete existing file." +msgstr "Fejl ved makeDir af %1. Kan ikke slette eksisterende fil." + +#: directorymergewindow.cpp:2575 +msgid "makeDir( %1 )" +msgstr "makeDir( %1 )" + +#: directorymergewindow.cpp:2585 +msgid "Error while creating directory." +msgstr "Fejl ved oprettelse af mappe." + +#: directorymergewindow.cpp:2608 directorymergewindow.cpp:2725 +msgid "Dest" +msgstr "MÃ¥l" + +#: directorymergewindow.cpp:2612 directorymergewindow.cpp:2650 +msgid "Dir" +msgstr "Mappe" + +#: directorymergewindow.cpp:2613 +msgid "Type" +msgstr "Type" + +#: directorymergewindow.cpp:2614 +msgid "Size" +msgstr "Størrelse" + +#: directorymergewindow.cpp:2615 +msgid "Attr" +msgstr "Attr" + +#: directorymergewindow.cpp:2616 +msgid "Last Modification" +msgstr "Sidste ændring" + +#: directorymergewindow.cpp:2617 +msgid "Link-Destination" +msgstr "Link-destination" + +#: directorymergewindow.cpp:2667 +msgid "not available" +msgstr "ikke tilgængelig" + +#: directorymergewindow.cpp:2687 +msgid "A (Dest): " +msgstr "A (Dest): " + +#: directorymergewindow.cpp:2690 +msgid "A (Base): " +msgstr "A (Basis): " + +#: directorymergewindow.cpp:2696 +msgid "B (Dest): " +msgstr "B (Dest): " + +#: directorymergewindow.cpp:2704 +msgid "C (Dest): " +msgstr "C (Dest): " + +#: directorymergewindow.cpp:2710 +msgid "Dest: " +msgstr "Dest: " + +#: directorymergewindow.cpp:2775 +msgid "Save Directory Merge State As..." +msgstr "Gem tilstand for mappesammenfletning som..." + +#: directorymergewindow.cpp:2862 +msgid "Start/Continue Directory Merge" +msgstr "Start/Fortsæt mappeindfletning" + +#: directorymergewindow.cpp:2863 +msgid "Run Operation for Current Item" +msgstr "Kør operation for dette punkt" + +#: directorymergewindow.cpp:2864 +msgid "Compare Selected File" +msgstr "Sammenlign udvalgt fil" + +#: directorymergewindow.cpp:2865 +msgid "Merge Current File" +msgstr "Indflet udvalgt fil" + +#: directorymergewindow.cpp:2866 +msgid "Fold All Subdirs" +msgstr "Fold alle undermapper sammen" + +#: directorymergewindow.cpp:2867 +msgid "Unfold All Subdirs" +msgstr "Fold alle undermapper ud" + +#: directorymergewindow.cpp:2871 +msgid "Choose A for All Items" +msgstr "Vælg A for alle punkter" + +#: directorymergewindow.cpp:2872 +msgid "Choose B for All Items" +msgstr "Vælg B for alle punkter" + +#: directorymergewindow.cpp:2873 +msgid "Choose C for All Items" +msgstr "Vælg C for alle punkter" + +#: directorymergewindow.cpp:2874 +msgid "Auto-Choose Operation for All Items" +msgstr "Auto-vælg operation for alle punkter" + +#: directorymergewindow.cpp:2875 +msgid "No Operation for All Items" +msgstr "Ingen operation for alle punkter" + +#: directorymergewindow.cpp:2880 +msgid "Show Identical Files" +msgstr "Vis identiske filer" + +#: directorymergewindow.cpp:2881 +msgid "Show Different Files" +msgstr "Vis forskellige filer" + +#: directorymergewindow.cpp:2882 +msgid "Show Files only in A" +msgstr "Vis kun filer i A" + +#: directorymergewindow.cpp:2883 +msgid "Show Files only in B" +msgstr "Vis kun filer i B" + +#: directorymergewindow.cpp:2884 +msgid "Show Files only in C" +msgstr "Vis kun filer i C" + +#: directorymergewindow.cpp:2888 +msgid "Compare Explicitly Selected Files" +msgstr "Sammenlign eksplicit markerede filer" + +#: directorymergewindow.cpp:2889 +msgid "Merge Explicitly Selected Files" +msgstr "Sammenflet eksplicit markerede filer" + +#: directorymergewindow.cpp:2891 directorymergewindow.cpp:2898 +msgid "Do Nothing" +msgstr "Gør intet" + +#: directorymergewindow.cpp:2892 +msgid "A" +msgstr "A" + +#: directorymergewindow.cpp:2893 +msgid "B" +msgstr "B" + +#: directorymergewindow.cpp:2894 +msgid "C" +msgstr "C" + +#: directorymergewindow.cpp:2903 +msgid "Delete A && B" +msgstr "Slet A && B" + +#: directorymergewindow.cpp:2906 +msgid "Merge to A && B" +msgstr "Indflet til A && B" + +#: fileaccess.cpp:595 +msgid "" +"While trying to make a backup, deleting an older backup failed. \n" +"Filename: " +msgstr "" +"Det mislykkedes at slette en ældre sikkerhedskopi under sikkerhedskopieringen.\n" +"Filnavn: " + +#: fileaccess.cpp:602 +msgid "" +"While trying to make a backup, renaming failed. \n" +"Filenames: " +msgstr "" +"Det mislykkedes at ændre navnet under sikkerhedskopieringen\n" +"Filnavne:" + +#: fileaccess.cpp:624 +#, c-format +msgid "Getting file status: %1" +msgstr "Henter filstatus: %1" + +#: fileaccess.cpp:667 +#, c-format +msgid "Reading file: %1" +msgstr "Læser fil: %1" + +#: fileaccess.cpp:703 +#, c-format +msgid "Writing file: %1" +msgstr "Skriver fil: %1" + +#: fileaccess.cpp:731 +msgid "Out of memory" +msgstr "Ude af hukommelse" + +#: fileaccess.cpp:766 +#, c-format +msgid "Making directory: %1" +msgstr "Opretter mappe: %1" + +#: fileaccess.cpp:786 +#, c-format +msgid "Removing directory: %1" +msgstr "Fjerner mappe: %1" + +#: fileaccess.cpp:801 +#, c-format +msgid "Removing file: %1" +msgstr "Fjerner fil: %1" + +#: fileaccess.cpp:817 +msgid "Creating symbolic link: %1 -> %2" +msgstr "Laver symbolsk link: %1 -> %2" + +#: fileaccess.cpp:843 +msgid "Renaming file: %1 -> %2" +msgstr "Omdøber fil: %1 -> %2" + +#: fileaccess.cpp:879 +msgid "Copying file: %1 -> %2" +msgstr "Kopierer fil: %1 -> %2" + +#: fileaccess.cpp:893 +#, c-format +msgid "" +"Error during file copy operation: Opening file for reading failed. Filename: %1" +msgstr "" +"Fejl under kopieringsoperationen: Ã…bning af fil til læsning mislykkedes. " +"Filnavn: %1" + +#: fileaccess.cpp:899 +#, c-format +msgid "" +"Error during file copy operation: Opening file for writing failed. Filename: %1" +msgstr "" +"Fejl under kopieringsoperationen: Ã…bning af fil til skrivning mislykkedes. " +"Filnavn: %1" + +#: fileaccess.cpp:914 +#, c-format +msgid "Error during file copy operation: Reading failed. Filename: %1" +msgstr "Fejl under kopieringsoperationen: Læsning mislykkedes. Filnavn: %1" + +#: fileaccess.cpp:923 +#, c-format +msgid "Error during file copy operation: Writing failed. Filename: %1" +msgstr "Fejl under kopieringsoperationen: Skrivning mislykkedes. Filnavn: %1" + +#: fileaccess.cpp:1219 +msgid "Reading directory: " +msgstr "Læser mappe:" + +#: fileaccess.cpp:1348 +#, c-format +msgid "Listing directory: %1" +msgstr "Giver en liste af mappe: %1" + +#: kdiff3.cpp:142 +msgid "Current Configuration:" +msgstr "Nuværende indstilling:" + +#: kdiff3.cpp:147 +msgid "Config Option Error:" +msgstr "Fejl i indstillingstilvalg:" + +#: kdiff3.cpp:187 +msgid "Option --auto used, but no output file specified." +msgstr "Tilvalg --auto brugt, men ingen uddatafil angivet." + +#: kdiff3.cpp:323 +msgid "Option --auto ignored for directory comparison." +msgstr "Tilvalg --auto ignoreret for mappesammenligning." + +#: kdiff3.cpp:359 +msgid "Saving failed." +msgstr "Det mislykkedes at gemme." + +#: kdiff3.cpp:386 pdiff.cpp:1041 pdiff.cpp:1112 +msgid "Opening of these files failed:" +msgstr "Det mislykkedes at Ã¥bne disse filer:" + +#: kdiff3.cpp:395 +msgid "File Open Error" +msgstr "Fejl ved Ã¥bning af fil" + +#: kdiff3.cpp:418 +msgid "Opens documents for comparison..." +msgstr "Ã…bner dokumenter til sammenligning..." + +#: kdiff3.cpp:423 +msgid "Saves the merge result. All conflicts must be solved!" +msgstr "gemmer indfletningsresultatet. Alle konflikter skal løses!" + +#: kdiff3.cpp:425 +msgid "Saves the current document as..." +msgstr "Gemmer dette dokument som..." + +#: kdiff3.cpp:427 +msgid "Print the differences" +msgstr "Udskriv forskellene" + +#: kdiff3.cpp:429 +msgid "Quits the application" +msgstr "Afslutter programmet" + +#: kdiff3.cpp:431 +msgid "Cuts the selected section and puts it to the clipboard" +msgstr "Udklipper det markerede udvalg og lægger det pÃ¥ klippebordet" + +#: kdiff3.cpp:433 +msgid "Copies the selected section to the clipboard" +msgstr "Kopierer det valgte udsnit til klippebordet" + +#: kdiff3.cpp:435 +msgid "Pastes the clipboard contents to actual position" +msgstr "Indsætter klippebordets indhold pÃ¥ den aktuelle position" + +#: kdiff3.cpp:437 +msgid "Select everything in current window" +msgstr "Markér alting i nuværende vindue" + +#: kdiff3.cpp:439 +msgid "Search for a string" +msgstr "Søg efter en streng" + +#: kdiff3.cpp:441 +msgid "Search again for the string" +msgstr "Søg efter strengen igen" + +#: kdiff3.cpp:443 +msgid "Enables/disables the toolbar" +msgstr "SlÃ¥ værktøjslinjen til/fra" + +#: kdiff3.cpp:445 +msgid "Enables/disables the statusbar" +msgstr "SlÃ¥r statuslinjen til/fra" + +#: kdiff3.cpp:449 +msgid "Configure KDiff3..." +msgstr "Indstil KDiff3..." + +#: kdiff3.cpp:470 +msgid "Go to Current Delta" +msgstr "GÃ¥ til den aktuelle delta" + +#: kdiff3.cpp:471 +msgid "Go to First Delta" +msgstr "GÃ¥ til første delta" + +#: kdiff3.cpp:472 +msgid "Go to Last Delta" +msgstr "GÃ¥ til sidste delta" + +#: kdiff3.cpp:473 +msgid "(Skips white space differences when \"Show White Space\" is disabled.)" +msgstr "" +"(Springer over forskelle i blanke tegn nÃ¥r \"Vis blanke tegn\" er deaktiveret.)" + +#: kdiff3.cpp:474 +msgid "" +"(Does not skip white space differences even when \"Show White Space\" is " +"disabled.)" +msgstr "" +"(Springer ikke over forskelle i blanke tegn ogsÃ¥ selvom \"Vis blanke tegn\" er " +"deaktiveret.)" + +#: kdiff3.cpp:475 +msgid "Go to Previous Delta" +msgstr "GÃ¥ til forrige delta" + +#: kdiff3.cpp:477 +msgid "Go to Next Delta" +msgstr "GÃ¥ til næste delta" + +#: kdiff3.cpp:479 +msgid "Go to Previous Conflict" +msgstr "GÃ¥ til forrige konflikt" + +#: kdiff3.cpp:481 +msgid "Go to Next Conflict" +msgstr "GÃ¥ til næste konflikt" + +#: kdiff3.cpp:483 +msgid "Go to Previous Unsolved Conflict" +msgstr "GÃ¥ til forrige uløste konflikt" + +#: kdiff3.cpp:485 +msgid "Go to Next Unsolved Conflict" +msgstr "GÃ¥ til næste uløste konflikt" + +#: kdiff3.cpp:487 +msgid "Select Line(s) From A" +msgstr "Vælg linjer fra A" + +#: kdiff3.cpp:488 +msgid "Select Line(s) From B" +msgstr "Vælg linjer fra B" + +#: kdiff3.cpp:489 +msgid "Select Line(s) From C" +msgstr "Vælg linjer fra C" + +#: kdiff3.cpp:490 +msgid "Automatically Go to Next Unsolved Conflict After Source Selection" +msgstr "GÃ¥ til næste uløste konflikt automatisk efter kildevalg" + +#: kdiff3.cpp:492 +msgid "Show Space && Tabulator Characters for Differences" +msgstr "Vis mellemrums && tabulator-tegn for forskelle" + +#: kdiff3.cpp:493 +msgid "Show White Space" +msgstr "Vis blanke tegn" + +#: kdiff3.cpp:495 +msgid "Show Line Numbers" +msgstr "Vis linjenumre" + +#: kdiff3.cpp:496 +msgid "Choose A Everywhere" +msgstr "Vælg A overalt" + +#: kdiff3.cpp:497 +msgid "Choose B Everywhere" +msgstr "Vælg B overalt" + +#: kdiff3.cpp:498 +msgid "Choose C Everywhere" +msgstr "Vælg C overalt" + +#: kdiff3.cpp:499 +msgid "Choose A for All Unsolved Conflicts" +msgstr "Vælg A for alle uløste konflikter" + +#: kdiff3.cpp:500 +msgid "Choose B for All Unsolved Conflicts" +msgstr "Vælg B for alle uløste konflikter" + +#: kdiff3.cpp:501 +msgid "Choose C for All Unsolved Conflicts" +msgstr "Vælg C for alle uløste konflikter" + +#: kdiff3.cpp:502 +msgid "Choose A for All Unsolved Whitespace Conflicts" +msgstr "Vælg A for alle uløste konflikter med blanke tegn" + +#: kdiff3.cpp:503 +msgid "Choose B for All Unsolved Whitespace Conflicts" +msgstr "Vælg B for alle uløste konflikter med blanke tegn" + +#: kdiff3.cpp:504 +msgid "Choose C for All Unsolved Whitespace Conflicts" +msgstr "Vælg C for alle uløste konflikter med blanke tegn" + +#: kdiff3.cpp:505 +msgid "Automatically Solve Simple Conflicts" +msgstr "Løs simple konflikter automatisk" + +#: kdiff3.cpp:506 +msgid "Set Deltas to Conflicts" +msgstr "Sæt deltaer til konflikter" + +#: kdiff3.cpp:507 +msgid "Run Regular Expression Auto Merge" +msgstr "Kør automatisk sammenfletning med regulært udtryk" + +#: kdiff3.cpp:508 +msgid "Automatically Solve History Conflicts" +msgstr "Løs historikkonflikter automatisk" + +#: kdiff3.cpp:509 +msgid "Split Diff At Selection" +msgstr "Opdel sammenligning ved markering" + +#: kdiff3.cpp:510 +msgid "Join Selected Diffs" +msgstr "Føj markerede sammenligninger sammen" + +#: kdiff3.cpp:512 +msgid "Show Window A" +msgstr "Vis vindue A" + +#: kdiff3.cpp:513 +msgid "Show Window B" +msgstr "Vis vindue B" + +#: kdiff3.cpp:514 +msgid "Show Window C" +msgstr "Vis vindue V" + +#: kdiff3.cpp:515 kdiff3.cpp:526 +msgid "Focus Next Window" +msgstr "Fokus pÃ¥ næste vindue" + +#: kdiff3.cpp:517 +msgid "Normal Overview" +msgstr "Normalt overblik" + +#: kdiff3.cpp:518 +msgid "A vs. B Overview" +msgstr "A vs. B overblik" + +#: kdiff3.cpp:519 +msgid "A vs. C Overview" +msgstr "A vs. C overblik" + +#: kdiff3.cpp:520 +msgid "B vs. C Overview" +msgstr "B vs. C overblik" + +#: kdiff3.cpp:521 +msgid "Word Wrap Diff Windows" +msgstr "Tekstombrydning i diff-vinduer" + +#: kdiff3.cpp:522 +msgid "Add Manual Diff Alignment" +msgstr "Tilføj manuel justering af sammenligning" + +#: kdiff3.cpp:523 +msgid "Clear All Manual Diff Alignments" +msgstr "Ryd alle manuelle justeringer af sammenligning" + +#: kdiff3.cpp:528 +msgid "Focus Prev Window" +msgstr "Fokus pÃ¥ forrige vindue" + +#: kdiff3.cpp:529 +msgid "Toggle Split Orientation" +msgstr "SlÃ¥ opdelt orientering til og fra" + +#: kdiff3.cpp:531 +msgid "Dir && Text Split Screen View" +msgstr "Mappe && tekst opdelt skærmvisning" + +#: kdiff3.cpp:533 +msgid "Toggle Between Dir && Text View" +msgstr "Skift mellem Mappe && tekstvisning" + +#: kdiff3.cpp:582 pdiff.cpp:1712 +msgid "The merge result hasn't been saved." +msgstr "Indfletningsresultatet er ikke blevet gemt." + +#: kdiff3.cpp:583 +msgid "Save && Quit" +msgstr "Gem && afslut" + +#: kdiff3.cpp:583 +msgid "Quit Without Saving" +msgstr "Afslut uden at gemme" + +#: kdiff3.cpp:591 pdiff.cpp:1721 +msgid "Saving the merge result failed." +msgstr "Det mislykkedes at gemme indfletningsresultatet." + +#: kdiff3.cpp:602 pdiff.cpp:978 +msgid "" +"You are currently doing a directory merge. Are you sure, you want to abort?" +msgstr "" +"Du er ved at udføre en mappeindfletning. Er du sikker pÃ¥ du ønskler at afbryde?" + +#: kdiff3.cpp:625 +msgid "Saving file..." +msgstr "Gemmer fil..." + +#: kdiff3.cpp:642 +msgid "Saving file with a new filename..." +msgstr "Gemmer fil med nyt filnavn..." + +#: kdiff3.cpp:732 +msgid "Printing..." +msgstr "Udskriver..." + +#: kdiff3.cpp:738 kdiff3.cpp:900 +msgid "Printing aborted." +msgstr "Udskrift afbrudt." + +#: kdiff3.cpp:870 +msgid "Selection" +msgstr "Markering" + +#: kdiff3.cpp:896 +msgid "Printing completed." +msgstr "Udskrift færdig." + +#: kdiff3.cpp:906 +msgid "Exiting..." +msgstr "GÃ¥r ud..." + +#: kdiff3.cpp:918 +msgid "Toggling toolbar..." +msgstr "SlÃ¥r værktøjslinje til/fra" + +#: kdiff3.cpp:939 +msgid "Toggle the statusbar..." +msgstr "SlÃ¥ statuslinje til/fra..." + +#: kdiff3_part.cpp:155 kdiff3_part.cpp:224 +msgid "Couldn't find files for comparison." +msgstr "Kunne ikke finde filer til sammenligning." + +#: kdiff3_part.cpp:291 +msgid "KDiff3Part" +msgstr "KDiff3Part" + +#: kdiff3_shell.cpp:78 +msgid "" +"Could not find our part!\n" +"This usually happens due to an installation problem. Please read the " +"README-file in the source package for details." +msgstr "" +"Kunne ikke finde vores part!\n" +"Dette sker sædvanligvis pÃ¥ grund af et installationsproblem. Læs venligst " +"README-filen i kildepakken for detaljer." + +#: main.cpp:35 +msgid "Tool for Comparison and Merge of Files and Directories" +msgstr "Værktøj til sammenligning og sammenfletning af filer og mapper" + +#: main.cpp:40 +msgid "Merge the input." +msgstr "Indflet inddata." + +#: main.cpp:42 +msgid "Explicit base file. For compatibility with certain tools." +msgstr "Eksplicit basisfil. For kompatibilitet med visse værktøjer." + +#: main.cpp:44 +msgid "Output file. Implies -m. E.g.: -o newfile.txt" +msgstr "Uddatafil. Implicerer -m. F.eks.: -o nyfil.txt" + +#: main.cpp:45 +msgid "Output file, again. (For compatibility with certain tools.)" +msgstr "Uddatafil, igen. (For kompatibilitet med visse værktøjer.)" + +#: main.cpp:46 +msgid "No GUI if all conflicts are auto-solvable. (Needs -o file)" +msgstr "" +"Ingen GUI hvis alle konflikter er løsbare af sig selv. (Behøver -o fil)" + +#: main.cpp:47 +msgid "Don't solve conflicts automatically. (For compatibility...)" +msgstr "Løs ikke konflikter automatisk. (For kompatibilitet...)" + +#: main.cpp:48 +msgid "Visible name replacement for input file 1 (base)." +msgstr "Synlig navneerstatning for inddatafil 1 (basis)." + +#: main.cpp:49 +msgid "Visible name replacement for input file 2." +msgstr "Synlig navneerstatning for inddatafil 2." + +#: main.cpp:50 +msgid "Visible name replacement for input file 3." +msgstr "Synlig navneerstatning for inddatafil 3." + +#: main.cpp:52 +msgid "Alternative visible name replacement. Supply this once for every input." +msgstr "" +"Alternativ synlig navneerstatning. Angiv dette en gang for hver inddata." + +#: main.cpp:53 +msgid "" +"Override a config setting. Use once for every setting. E.g.: --cs " +"\"AutoAdvance=1\"" +msgstr "" +"Sæt en indstilling ud af kraft. Brug en gang for hver indstilling, f.eks. --cs " +"\"AutoAdvance=1\"" + +#: main.cpp:54 +msgid "Show list of config settings and current values." +msgstr "Vis liste med indstillinger og nuværende værdier." + +#: main.cpp:55 +msgid "Use a different config file." +msgstr "Brug en anden indstillingsfil." + +#: main.cpp:59 +msgid "file1 to open (base, if not specified via --base)" +msgstr "fil1 der skal Ã¥bnes (basis, hvis ikke angivet via --base)" + +#: main.cpp:60 +msgid "file2 to open" +msgstr "fil2 der skal Ã¥bnes" + +#: main.cpp:61 +msgid "file3 to open" +msgstr "fil3 der skal Ã¥bnes" + +#: main.cpp:93 +msgid "Ignored. (User defined.)" +msgstr "Ignoreres. (brugerdefineret)" + +#. i18n: file kdiff3_part.rc line 16 +#: main.cpp:173 rc.cpp:9 +#, no-c-format +msgid "KDiff3" +msgstr "KDiff3" + +#: main.cpp:186 +msgid "+ Many thanks to those who reported bugs and contributed ideas!" +msgstr "+ Mange tak til dem der rapporterede fejl og bidrog med ideer." + +#: mergeresultwindow.cpp:136 mergeresultwindow.cpp:939 +#: mergeresultwindow.cpp:953 mergeresultwindow.cpp:965 +#: mergeresultwindow.cpp:977 +msgid "Number of remaining unsolved conflicts: %1 (of which %2 are whitespace)" +msgstr "" +"Antal tilbageværende uløste konflikter: %1 (af hvilke %2 er blanke tegn)" + +#: mergeresultwindow.cpp:285 +msgid "" +"The output has been modified.\n" +"If you continue your changes will be lost." +msgstr "" +"Uddata er blevet ændret.\n" +"Hvis du fortsætter vil dine ændringer gÃ¥ tabt." + +#: mergeresultwindow.cpp:797 pdiff.cpp:511 +msgid "All input files are binary equal." +msgstr "Alle inddata-filer er binært ens." + +#: mergeresultwindow.cpp:799 +msgid "All input files contain the same text." +msgstr "Alle inddata-filer indeholder den samme tekst." + +#: mergeresultwindow.cpp:801 +msgid "" +"Files A and B are binary equal.\n" +msgstr "" +"Filerne A og B er binært ens.\n" + +#: mergeresultwindow.cpp:802 +msgid "" +"Files A and B have equal text. \n" +msgstr "" +"Filerne A og B har samme tekst.\n" + +#: mergeresultwindow.cpp:803 +msgid "" +"Files A and C are binary equal.\n" +msgstr "" +"Filerne A og C er binært ens.\n" + +#: mergeresultwindow.cpp:804 +msgid "" +"Files A and C have equal text. \n" +msgstr "" +"Filerne A og C har samme tekst.\n" + +#: mergeresultwindow.cpp:805 +msgid "" +"Files B and C are binary equal.\n" +msgstr "" +"Filerne B og C er binært ens.\n" + +#: mergeresultwindow.cpp:806 +msgid "" +"Files B and C have equal text. \n" +msgstr "" +"Filerne B og C har samme tekst.\n" + +#: mergeresultwindow.cpp:812 +msgid "Total number of conflicts: " +msgstr "Totalt antal konflikter: " + +#: mergeresultwindow.cpp:813 +msgid "" +"\n" +"Nr of automatically solved conflicts: " +msgstr "" +"\n" +"Antal automatisk løste konflikter: " + +#: mergeresultwindow.cpp:814 +msgid "" +"\n" +"Nr of unsolved conflicts: " +msgstr "" +"\n" +"Antal uløste konflikter: " + +#: mergeresultwindow.cpp:816 +msgid "Conflicts" +msgstr "Konflikter" + +#: mergeresultwindow.cpp:1652 +msgid "" +msgstr "" + +#: mergeresultwindow.cpp:1660 +msgid "" +msgstr "" + +#: mergeresultwindow.cpp:1662 mergeresultwindow.cpp:2427 +msgid "" +msgstr "" + +#: mergeresultwindow.cpp:2635 +msgid "" +"Not all conflicts are solved yet.\n" +"File not saved.\n" +msgstr "" +"Ikke alle konflikter er løst endnu.\n" +"Filen er ikke gemt.\n" + +#: mergeresultwindow.cpp:2637 +msgid "Conflicts Left" +msgstr "Konflikter tilovers" + +#: mergeresultwindow.cpp:2649 +msgid "" +"\n" +"\n" +"Creating backup failed. File not saved." +msgstr "" +"\n" +"\n" +"Mislykkedes at oprette sikkerhedskopi. Filen blev ikke gemt." + +#: mergeresultwindow.cpp:2649 mergeresultwindow.cpp:2689 +msgid "File Save Error" +msgstr "Fejl ved at gemme fil" + +#: mergeresultwindow.cpp:2689 +msgid "Error while writing." +msgstr "Fejl ved skrivning." + +#: mergeresultwindow.cpp:3020 +msgid "Output" +msgstr "Uddata" + +#: mergeresultwindow.cpp:3032 mergeresultwindow.cpp:3139 +msgid "[Modified]" +msgstr "[Ændret]" + +#: mergeresultwindow.cpp:3039 +msgid "Encoding for saving" +msgstr "Filtegnsæt for at gemme" + +#: mergeresultwindow.cpp:3075 mergeresultwindow.cpp:3081 +#: mergeresultwindow.cpp:3087 +msgid "Codec from" +msgstr "Koder fra" + +#: optiondialog.cpp:362 +msgid "Unicode, 8 bit" +msgstr "Unicode, 8 bit" + +#: optiondialog.cpp:363 +msgid "Unicode" +msgstr "Unicode" + +#: optiondialog.cpp:364 +msgid "Latin1" +msgstr "Latin1" + +#: optiondialog.cpp:383 +msgid "Change this if non-ASCII characters are not displayed correctly." +msgstr "Ændr dette hvis ikke-ASCII tegn ikke vises rigtigt." + +#: optiondialog.cpp:510 +msgid "Editor & Diff Output Font" +msgstr "Editor & Diff uddata-skrifttype" + +#: optiondialog.cpp:531 +msgid "Italic font for deltas" +msgstr "Kursiv skrifttype for deltaer" + +#: optiondialog.cpp:534 +msgid "" +"Selects the italic version of the font for differences.\n" +"If the font doesn't support italic characters, then this does nothing." +msgstr "" +"Vælg den kursive udgave af skrifttypen til forskelle.\n" +"Hvis skrifttypen ikke understøtter kursive tegn, sÃ¥ gør dette intet." + +#: optiondialog.cpp:542 +msgid "Color" +msgstr "Farve" + +#: optiondialog.cpp:542 +msgid "Colors Settings" +msgstr "Farveindstillinger" + +#: optiondialog.cpp:556 +msgid "Editor and Diff Views:" +msgstr "Editor- og forskelsvisninger:" + +#: optiondialog.cpp:564 +msgid "Foreground color:" +msgstr "Forgrundsfarve:" + +#: optiondialog.cpp:570 +msgid "Background color:" +msgstr "Baggrundsfarve:" + +#: optiondialog.cpp:578 +msgid "Diff background color:" +msgstr "Diff baggrundsfarve:" + +#: optiondialog.cpp:585 +msgid "Color A:" +msgstr "Farve A:" + +#: optiondialog.cpp:592 +msgid "Color B:" +msgstr "Farve B:" + +#: optiondialog.cpp:599 +msgid "Color C:" +msgstr "Farve C:" + +#: optiondialog.cpp:605 +msgid "Conflict color:" +msgstr "Konfliktfarve:" + +#: optiondialog.cpp:612 +msgid "Current range background color:" +msgstr "Baggrundsfarve for aktuelt omrÃ¥de:" + +#: optiondialog.cpp:619 +msgid "Current range diff background color:" +msgstr "Diff baggrundsfarve for aktuelt omrÃ¥de:" + +#: optiondialog.cpp:625 +msgid "Color for manually aligned difference ranges:" +msgstr "Farvelæg for manuelt justerede sammenligningsomrÃ¥der:" + +#: optiondialog.cpp:630 +msgid "Directory Comparison View:" +msgstr "Mappesammenligningsvisning:" + +#: optiondialog.cpp:636 +msgid "Newest file color:" +msgstr "Farve for nyeste fil:" + +#: optiondialog.cpp:639 +msgid "" +"Changing this color will only be effective when starting the next directory " +"comparison." +msgstr "At ændre farven fÃ¥r kun virkning nÃ¥r næste mappesammenligning startes." + +#: optiondialog.cpp:644 +msgid "Oldest file color:" +msgstr "Farve for ældste fil:" + +#: optiondialog.cpp:651 +msgid "Middle age file color:" +msgstr "Farve for middelgammel fil:" + +#: optiondialog.cpp:658 +msgid "Color for missing files:" +msgstr "Farve for manglende filer:" + +#: optiondialog.cpp:670 +msgid "Editor" +msgstr "Editor" + +#: optiondialog.cpp:670 +msgid "Editor Behavior" +msgstr "Editor-opførsel" + +#: optiondialog.cpp:680 +msgid "Tab inserts spaces" +msgstr "Tab indsætter mellemrum" + +#: optiondialog.cpp:683 +msgid "" +"On: Pressing tab generates the appropriate number of spaces.\n" +"Off: A Tab-character will be inserted." +msgstr "" +"Til: Tryk pÃ¥ tab genererer et passende antal mellemrum.\n" +"Fra: Et Tab-tegn bliver indsat." + +#: optiondialog.cpp:689 +msgid "Tab size:" +msgstr "Tab-størrelse:" + +#: optiondialog.cpp:694 +msgid "Auto indentation" +msgstr "Auto-indrykning" + +#: optiondialog.cpp:697 +msgid "" +"On: The indentation of the previous line is used for a new line.\n" +msgstr "" +"Til: Indrykningen for den tidligere linje bruges for en ny linje.\n" + +#: optiondialog.cpp:701 +msgid "Auto copy selection" +msgstr "Autokopi udvalg" + +#: optiondialog.cpp:704 +msgid "" +"On: Any selection is immediately written to the clipboard.\n" +"Off: You must explicitely copy e.g. via Ctrl-C." +msgstr "" +"Til: Enhver markering bliver umiddelbart skrevet til klippebordet.\n" +"Fra: Du skal eksplicit kopiere f.eks. via Ctrl-C." + +#: optiondialog.cpp:709 +msgid "Line end style:" +msgstr "Linjeslut-stil:" + +#: optiondialog.cpp:721 +msgid "" +"Sets the line endings for when an edited file is saved.\n" +"DOS/Windows: CR+LF; UNIX: LF; with CR=0D, LF=0A" +msgstr "" +"Sætter linjeafslutninger for nÃ¥r en redigeret fil gemmes.\n" +"DOS/Windows: CR+LF; UNIX: LF; med CR=0D, LF=0A" + +#: optiondialog.cpp:732 +msgid "Diff" +msgstr "Diff" + +#: optiondialog.cpp:732 +msgid "Diff Settings" +msgstr "Opsætning af diff" + +#: optiondialog.cpp:743 +msgid "Preserve carriage return" +msgstr "Bevar vognretur" + +#: optiondialog.cpp:746 +msgid "" +"Show carriage return characters '\\r' if they exist.\n" +"Helps to compare files that were modified under different operating systems." +msgstr "" +"Vis vognretur-tegn '\\r' hvis de eksisterer.\n" +"Hjælper med at sammenligne filer der blev ændrede under forskellige " +"operativsystemer." + +#: optiondialog.cpp:751 +msgid "Ignore numbers" +msgstr "Ignorér numre" + +#: optiondialog.cpp:754 +msgid "" +"Ignore number characters during line matching phase. (Similar to Ignore white " +"space.)\n" +"Might help to compare files with numeric data." +msgstr "" +"Ignorér nummer-tegn i den fase hvor du matcher linjer. (Ligner Ignorér blanke " +"tegn.)\n" +"Kan muligvis hjælpe med at sammenligne numeriske data." + +#: optiondialog.cpp:759 +msgid "Ignore C/C++ comments" +msgstr "Ignorér C/C++ kommentarer" + +#: optiondialog.cpp:761 +msgid "Treat C/C++ comments like white space." +msgstr "Behandl C/C++ kommentarer ligesom blanke tegn." + +#: optiondialog.cpp:765 +msgid "Ignore case" +msgstr "Ignorér versaltype" + +#: optiondialog.cpp:768 +msgid "Treat case differences like white space changes. ('a'<=>'A')" +msgstr "" +"Behandl forskel mellem store og smÃ¥ bogstaver som ændringer i blanke tegn. " +"('a'<=>'A')" + +#: optiondialog.cpp:772 +msgid "Preprocessor command:" +msgstr "Præprocessor kommando:" + +#: optiondialog.cpp:776 +msgid "User defined pre-processing. (See the docs for details.)" +msgstr "Brugerdefineret præ-proces. (Se dokumentationen for detaljer.)" + +#: optiondialog.cpp:779 +msgid "Line-matching preprocessor command:" +msgstr "Linje-matchende præprocessor kommando:" + +#: optiondialog.cpp:783 +msgid "" +"This pre-processor is only used during line matching.\n" +"(See the docs for details.)" +msgstr "" +"Denne præ-processor bruges kun nÃ¥r du matcher linjer.\n" +"(Se dokumentationen for detaljer.)" + +#: optiondialog.cpp:786 +msgid "Try hard (slower)" +msgstr "Prøv hÃ¥rdt (langsommere)" + +#: optiondialog.cpp:789 +msgid "" +"Enables the --minimal option for the external diff.\n" +"The analysis of big files will be much slower." +msgstr "" +"Aktiverer --minimal tilvalget for den eksterne diff.\n" +"Analysen af store filer vil være meget langsommere." + +#: optiondialog.cpp:794 +msgid "Auto advance delay (ms):" +msgstr "Auto fremad-tøven (ms):" + +#: optiondialog.cpp:799 +msgid "" +"When in Auto-Advance mode the result of the current selection is shown \n" +"for the specified time, before jumping to the next conflict. Range: 0-2000 ms" +msgstr "" +"I Auto-fremad tilstand vil resultatet af det øjeblikkelige valg blive vist\n" +"i det angiven tidsrum tid, før der springes frem til den næste konflikt. " +"OmrÃ¥de: 0-2000 ms" + +#: optiondialog.cpp:809 +msgid "Merge Settings" +msgstr "Opsætning af sammenflet" + +#: optiondialog.cpp:822 +msgid "White space 2-file merge default:" +msgstr "Standard for 2-fils indfletning af blanke tegn:" + +#: optiondialog.cpp:826 optiondialog.cpp:839 +msgid "Manual Choice" +msgstr "Manuelt valg" + +#: optiondialog.cpp:830 optiondialog.cpp:844 +msgid "" +"Allow the merge algorithm to automatically select an input for white-space-only " +"changes." +msgstr "" +"Tillad indfletningsalgoritmen automatisk at vælge et input for ændringer kun af " +"blanke tegn." + +#: optiondialog.cpp:835 +msgid "White space 3-file merge default:" +msgstr "Standard for 3-fils indfletning:" + +#: optiondialog.cpp:849 +msgid "Automatic Merge Regular Expression" +msgstr "Automatisk sammenfletning med regulært udtryk" + +#: optiondialog.cpp:858 smalldialogs.cpp:397 +msgid "Auto merge regular expression:" +msgstr "Regulært udtryk for automatisk sammenfletning:" + +#: optiondialog.cpp:862 +msgid "" +"Regular expression for lines where KDiff3 should automatically choose one " +"source.\n" +"When a line with a conflict matches the regular expression then\n" +"- if available - C, otherwise B will be chosen." +msgstr "" +"Regulært udtryk for linjer hvor Kdiff3 automatisk skal vælge en kilde.\n" +"NÃ¥r en linje med en konflikt matcher det regulære udtryk vælges -C \n" +"om tilgængeligt, ellers vælges B." + +#: optiondialog.cpp:868 +msgid "Run regular expression auto merge on merge start" +msgstr "" +"Kør automatisk sammenfletning med regulært udtryk nÃ¥r sammenfletning starter" + +#: optiondialog.cpp:870 +msgid "" +"Run the merge for auto merge regular expressions\n" +"immediately when a merge starts.\n" +msgstr "" +"Kør automatisk sammenfletning med regulært\n" +"udtryk med det samme nÃ¥r en sammenfletning starter.\n" + +#: optiondialog.cpp:875 +msgid "Version Control History Merging" +msgstr "Sammenfletning ifølge versionskontrolhistorik" + +#: optiondialog.cpp:884 smalldialogs.cpp:424 +msgid "History start regular expression:" +msgstr "Regulært udtryk for historikkens begyndelse:" + +#: optiondialog.cpp:888 +msgid "" +"Regular expression for the start of the version control history entry.\n" +"Usually this line contains the \"$Log$\"-keyword.\n" +"Default value: \".*\\$Log.*\\$.*\"" +msgstr "" +"Regulært udtryk for begyndelsen af versionshÃ¥ndteringens historikindgang.\n" +"Som oftest indeholder linjen nøgleordet \"$Log$\".\n" +"Standardværdi: \".*\\$Log.*\\$.*\"" + +#: optiondialog.cpp:894 smalldialogs.cpp:453 +msgid "History entry start regular expression:" +msgstr "Regulært udtryk for historikindgangens begyndelse:" + +#: optiondialog.cpp:906 +msgid "" +"A version control history entry consists of several lines.\n" +"Specify the regular expression to detect the first line (without the leading " +"comment).\n" +"Use parentheses to group the keys you want to use for sorting.\n" +"If left empty, then KDiff3 assumes that empty lines separate history entries.\n" +"See the documentation for details." +msgstr "" +"En versionskontrol historikindgang bestÃ¥r af flere linjer.\n" +"Angiv det regulære udtryk for at detektere første linje (uden den indledende " +"kommentar).\n" +"Brug parenteser for at gruppere nøglerne du vil bruge til sortering.\n" +"Hvis dette efterlades tomt, antager Kdiff3 at tomme linjer skiller " +"historikposterne ad.\n" +"Se dokumentationen for detaljer." + +#: optiondialog.cpp:914 +msgid "History merge sorting" +msgstr "Sortering af historiksammenfletning" + +#: optiondialog.cpp:916 +msgid "Sort version control history by a key." +msgstr "Sortér versionskontrolhistorikken med en nøgle." + +#: optiondialog.cpp:926 +msgid "History entry start sort key order:" +msgstr "Sorteringsnøglernes rækkefølge fra historikpostens begyndelse:" + +#: optiondialog.cpp:930 +msgid "" +"Each parentheses used in the regular expression for the history start entry\n" +"groups a key that can be used for sorting.\n" +"Specify the list of keys (that are numbered in order of occurrence\n" +"starting with 1) using ',' as separator (e.g. \"4,5,6,1,2,3,7\").\n" +"If left empty, then no sorting will be done.\n" +"See the documentation for details." +msgstr "" +"Hver parentes som bruges i det regulære udtryk for historikindgangens " +"begyndelse\n" +"grupperer en nøgle som kan bruges til sortering.\n" +"Angiv listen med nøgler (som nummereres i den rækkefølge de forekommer\n" +"begyndende med pÃ¥ 1), ved brug af ',' som skilletegn (f.eks. " +"\"4,5,6,1,2,3,7\").\n" +"Hvis det efterlades tomt, gøres ingen sortering.\n" +"Se dokumentationen for detaljer." + +#: optiondialog.cpp:941 +msgid "Merge version control history on merge start" +msgstr "" +"Sammenfletning ifølge versionskontrolhistorik nÃ¥r sammenfletning starter" + +#: optiondialog.cpp:943 +msgid "Run version control history automerge on merge start." +msgstr "" +"Kør automatisk sammenfletning ifølge versionskontrolhistorik nÃ¥r sammenfletning " +"starter." + +#: optiondialog.cpp:947 +msgid "Test your regular expressions" +msgstr "Test dine regulære udtryk" + +#: optiondialog.cpp:952 +msgid "Irrelevant merge command:" +msgstr "Ikke relevant sammenfletningskommando:" + +#: optiondialog.cpp:956 +msgid "" +"If specified this script is run after automerge\n" +"when no other relevant changes were detected.\n" +"Called with the parameters: filename1 filename2 filename3" +msgstr "" +"Hvis angivet køres dette script efter automatisk sammenfletning\n" +"nÃ¥r ingen andre relevante ændringer blev detekteret.\n" +"Kaldes med parametrene: filnavn1 filnavn2 filnavn3" + +#: optiondialog.cpp:966 +msgid "Directory Merge" +msgstr "Mappeindfletning" + +#: optiondialog.cpp:975 +msgid "Recursive directories" +msgstr "Rekursive mapper" + +#: optiondialog.cpp:977 +msgid "Whether to analyze subdirectories or not." +msgstr "Om undermapper skal analyseres eller ej." + +#: optiondialog.cpp:979 +msgid "File pattern(s):" +msgstr "Filmønstre:" + +#: optiondialog.cpp:984 +msgid "" +"Pattern(s) of files to be analyzed. \n" +"Wildcards: '*' and '?'\n" +"Several Patterns can be specified by using the separator: ';'" +msgstr "" +"Mønstre af filer der skal undersøges.\n" +"Jokertegn: '*' og '?'\n" +"Flere mønstre kan angives ved brug af adskillertegnet: ';'" + +#: optiondialog.cpp:990 +msgid "File-anti-pattern(s):" +msgstr "Fil-anti-mønstre:" + +#: optiondialog.cpp:995 +msgid "" +"Pattern(s) of files to be excluded from analysis. \n" +"Wildcards: '*' and '?'\n" +"Several Patterns can be specified by using the separator: ';'" +msgstr "" +"Mønstre af filer der skal udelukkes fra analysen.\n" +"Jokertegn: '*' og '?'\n" +"Flere mønstre kan angives ved brug af adskillertegnet: ';'" + +#: optiondialog.cpp:1001 +msgid "Dir-anti-pattern(s):" +msgstr "Mappe-anti-mønstre:" + +#: optiondialog.cpp:1006 +msgid "" +"Pattern(s) of directories to be excluded from analysis. \n" +"Wildcards: '*' and '?'\n" +"Several Patterns can be specified by using the separator: ';'" +msgstr "" +"Mønstre af mapper der skal udelukkes fra analysen.\n" +"Jokertegn: '*' og '?'\n" +"Flere mønstre kan angives ved brug af adskillertegnet: ';'" + +#: optiondialog.cpp:1012 +msgid "Use .cvsignore" +msgstr "Brug .cvsignore" + +#: optiondialog.cpp:1015 +msgid "" +"Extends the antipattern to anything that would be ignored by CVS.\n" +"Via local \".cvsignore\"-files this can be directory specific." +msgstr "" +"Udvider anti-mønstret til hvadsomhelst der ville blive ignoreret af CVS.\n" +"Via lokale \".cvsignore\"-filer kan dette være specifikt for en enkel mappe." + +#: optiondialog.cpp:1020 +msgid "Find hidden files and directories" +msgstr "Find skjulte filer og mapper" + +#: optiondialog.cpp:1023 +msgid "Finds files and directories with the hidden attribute." +msgstr "Finder filer og mapper med en skjulte attribut." + +#: optiondialog.cpp:1025 +msgid "Finds files and directories starting with '.'." +msgstr "Finder filer og mapper der begynder med '.'." + +#: optiondialog.cpp:1029 +msgid "Follow file links" +msgstr "Følger fil-link" + +#: optiondialog.cpp:1032 +msgid "" +"On: Compare the file the link points to.\n" +"Off: Compare the links." +msgstr "" +"Til: Sammenlign med filen som linket peger pÃ¥.\n" +"Fra: Sammenlign link." + +#: optiondialog.cpp:1037 +msgid "Follow directory links" +msgstr "Følg mappe-link" + +#: optiondialog.cpp:1040 +msgid "" +"On: Compare the directory the link points to.\n" +"Off: Compare the links." +msgstr "" +"Til: Sammenlign med mappen som linket peger pÃ¥.\n" +"Fra: Sammenlign link." + +#: optiondialog.cpp:1056 +msgid "Case sensitive filename comparison" +msgstr "Versalfølsom filnavnesammenligning" + +#: optiondialog.cpp:1059 +msgid "" +"The directory comparison will compare files or directories when their names " +"match.\n" +"Set this option if the case of the names must match. (Default for Windows is " +"off, otherwise on.)" +msgstr "" +"Mappesammenligning sammenligner filer eller mapper nÃ¥r deres navne matcher.\n" +"Angiv dette tilvalg hvis navnenes versaltilstand skal matche. (Standardværdien " +"for Windows er fra, ellers til.)" + +#: optiondialog.cpp:1063 +msgid "File Comparison Mode" +msgstr "Filsammenligningstilstand" + +#: optiondialog.cpp:1067 +msgid "Binary comparison" +msgstr "Binær sammenligning" + +#: optiondialog.cpp:1068 +msgid "Binary comparison of each file. (Default)" +msgstr "Binær sammenligning af hver fil. (Standard)" + +#: optiondialog.cpp:1070 +msgid "Full analysis" +msgstr "Fuld analyse" + +#: optiondialog.cpp:1071 +msgid "" +"Do a full analysis and show statistics information in extra columns.\n" +"(Slower than a binary comparison, much slower for binary files.)" +msgstr "" +"Udfør en fuld analyse og vis statistisk information i ekstra søjler.\n" +"(Langsommere end en binær sammenligning, meget langsommere for binære filer.)" + +#: optiondialog.cpp:1074 +msgid "Trust the modification date (unsafe)" +msgstr "Stol pÃ¥ ændringsdato (usikker)" + +#: optiondialog.cpp:1075 +msgid "" +"Assume that files are equal if the modification date and file length are " +"equal.\n" +"Useful for big directories or slow networks." +msgstr "" +"Antag at filer er ens hvis ændringsdatoen og fillængden er ens.\n" +"Nyttigt for store mapper eller langsomme netværk." + +#: optiondialog.cpp:1078 +msgid "Trust the size (unsafe)" +msgstr "Stol pÃ¥ størrelsen (usikker)" + +#: optiondialog.cpp:1079 +msgid "" +"Assume that files are equal if their file lengths are equal.\n" +"Useful for big directories or slow networks when the date is modified during " +"download." +msgstr "" +"Antag at filer er ens hvis deres fillængder er ens.\n" +"Nyttigt for store mapper eller langsomme netværk, nÃ¥r datoen er ændret efter " +"filer er hentet." + +#: optiondialog.cpp:1083 +msgid "Synchronize directories" +msgstr "Synkronisér mapper" + +#: optiondialog.cpp:1086 +msgid "" +"Offers to store files in both directories so that\n" +"both directories are the same afterwards.\n" +"Works only when comparing two directories without specifying a destination." +msgstr "" +"Tilbyder at opbevare filer i begge mapper sÃ¥\n" +"begge mapper er ens bagefter.\n" +"Virker kun nÃ¥r to mapper sammenlignes uden at angive nogen destination." + +#: optiondialog.cpp:1092 +msgid "White space differences considered equal" +msgstr "Forskelle i blanke tegn anses for ens" + +#: optiondialog.cpp:1095 +msgid "" +"If files differ only by white space consider them equal.\n" +"This is only active when full analysis is chosen." +msgstr "" +"Hvis filer kun adskiller sig med blanke tegn, anses dem for ens.\n" +"Dette er kun aktiveret nÃ¥r fuldstændig analyse vælges." + +#: optiondialog.cpp:1101 +msgid "Copy newer instead of merging (unsafe)" +msgstr "Kopiér nyere i stedet for at indflette (usikker)" + +#: optiondialog.cpp:1104 +msgid "" +"Don't look inside, just take the newer file.\n" +"(Use this only if you know what you are doing!)\n" +"Only effective when comparing two directories." +msgstr "" +"Kig ikke indeni, tag blot den nyere fil.\n" +"(Brug kun dette hvis du ved hvad du foretager dig!)\n" +"Kun effektivt nÃ¥r to mapper sammenlignes." + +#: optiondialog.cpp:1109 +msgid "Backup files (.orig)" +msgstr "Sikkerhedskopieringsfiler (.orig)" + +#: optiondialog.cpp:1112 +msgid "" +"When a file would be saved over an old file, then the old file\n" +"will be renamed with a '.orig'-extension instead of being deleted." +msgstr "" +"NÃ¥r en fil ville blive gemt over en gammel fil, sÃ¥ vil den gamle\n" +"fil blive omdøbt med en '.orig'-endelse i stedet for at blive slettet." + +#: optiondialog.cpp:1176 +msgid "Regional Settings" +msgstr "Regional opsætning" + +#: optiondialog.cpp:1272 +msgid "Language (restart required)" +msgstr "Sprog (genstart krævet)" + +#: optiondialog.cpp:1304 +msgid "" +"Choose the language of the GUI-strings or \"Auto\".\n" +"For a change of language to take place, quit and restart KDiff3." +msgstr "" +"Vælg sproget for GUI-strengene eller \"Auto\".\n" +"For at en ændring af sprog skal ske, afslut og start KDiff3 igen." + +#: optiondialog.cpp:1322 +msgid "Use the same encoding for everything:" +msgstr "Brug samme tegnsæt til alt:" + +#: optiondialog.cpp:1325 +msgid "" +"Enable this allows to change all encodings by changing the first only.\n" +"Disable this if different individual settings are needed." +msgstr "" +"At aktivere dette lader dig ændre alle tegnsæt ved at kun ændre den første.\n" +"Deaktivér det hvis forskellige individuelle indstillinger behøves." + +#: optiondialog.cpp:1330 +msgid "Note: Local Encoding is " +msgstr "Bemærk: Lokalt tegnsæt er " + +#: optiondialog.cpp:1334 +msgid "File Encoding for A:" +msgstr "Filtegnsæt for A:" + +#: optiondialog.cpp:1340 +msgid "" +"If enabled then Unicode (UTF-16 or UTF-8) encoding will be detected.\n" +"If the file encoding is not detected then the selected encoding will be used as " +"fallback.\n" +"(Unicode detection depends on the first bytes of a file - the byte order mark " +"\"BOM\".)" +msgstr "" +"Hvis aktiveret detekteres Unicode-kodning (UTF-16 eller UTF-8).\n" +"Hvis filens kodning ikke kan detekteres, bruges den valgte kodning som " +"reserve.\n" +"(Detektering af Unicode afhænger af den første byte i en fil - " +"byterækkefølgemarkøren \"BOM\".)" + +#: optiondialog.cpp:1344 optiondialog.cpp:1353 optiondialog.cpp:1362 +msgid "Auto Detect Unicode" +msgstr "Detektér Unicode automatisk" + +#: optiondialog.cpp:1349 +msgid "File Encoding for B:" +msgstr "Filtegnsæt for B:" + +#: optiondialog.cpp:1358 +msgid "File Encoding for C:" +msgstr "Filtegnsæt for C:" + +#: optiondialog.cpp:1367 +msgid "File Encoding for Merge Output and Saving:" +msgstr "Filtegnsæt for sammenflettede uddata og nÃ¥r der gemmes:" + +#: optiondialog.cpp:1371 +msgid "Auto Select" +msgstr "Automatisk markering" + +#: optiondialog.cpp:1374 +msgid "" +"If enabled then the encoding from the input files is used.\n" +"In ambiguous cases a dialog will ask the user to choose the encoding for " +"saving." +msgstr "" +"Hvis aktiveret bruges inddatafilernes kodning.\n" +"I tvetydige tilfælde bedes brugeren om at vælge kodning at gemme med via en " +"dialog." + +#: optiondialog.cpp:1378 +msgid "File Encoding for Preprocessor Files:" +msgstr "Filtegnsæt for forbehandlingsfiler:" + +#: optiondialog.cpp:1389 +msgid "Right To Left Language" +msgstr "Sprog som læses fra højre til venstre" + +#: optiondialog.cpp:1392 +msgid "" +"Some languages are read from right to left.\n" +"This setting will change the viewer and editor accordingly." +msgstr "" +"Nogle sprog læses fra højre til venstre.\n" +"Indstillingen ændrer visningen og editoren pÃ¥ tilsvarende mÃ¥de." + +#: optiondialog.cpp:1402 +msgid "Integration" +msgstr "Integrering" + +#: optiondialog.cpp:1402 +msgid "Integration Settings" +msgstr "Integreringsindstillinger" + +#: optiondialog.cpp:1412 +msgid "Command line options to ignore:" +msgstr "Kommandolinjeflag at ignorere:" + +#: optiondialog.cpp:1417 +msgid "" +"List of command line options that should be ignored when KDiff3 is used by " +"other tools.\n" +"Several values can be specified if separated via ';'\n" +"This will suppress the \"Unknown option\"-error." +msgstr "" +"Liste med kommandolinjeflag som skal ignoreres nÃ¥r Kdiff3 bruges af andre " +"værktøjer.\n" +"Flere værdier kan angives hvis de adskilles af ';'\n" +"Dette undertrykker fejlmeddelelsen \"Ukendt flag\"." + +#: optiondialog.cpp:1480 +msgid "" +"You selected a variable width font.\n" +"\n" +"Because this program doesn't handle variable width fonts\n" +"correctly, you might experience problems while editing.\n" +"\n" +"Do you want to continue or do you want to select another font." +msgstr "" +"Du valgte en skrifttype med variabel bredde.\n" +"\n" +"Dette program hÃ¥ndterer ikke skrifttyper af variabel skrifttype\n" +"rigtigt, sÃ¥ du vil mÃ¥ske fÃ¥ problemer nÃ¥r du redigerer.\n" +"\n" +"Ønsker du at fortsætte eller at vælge en anden skrifttype." + +#: optiondialog.cpp:1484 +msgid "Incompatible Font" +msgstr "Inkompatibel skrifttype" + +#: optiondialog.cpp:1485 +msgid "Continue at Own Risk" +msgstr "Fortsæt pÃ¥ eget ansvar." + +#: optiondialog.cpp:1485 +msgid "Select Another Font" +msgstr "Vælg en anden skrifttype" + +#: optiondialog.cpp:1521 +msgid "This resets all options. Not only those of the current topic." +msgstr "Dette nulstiller alle tilvalg. Ikke kun dem der angÃ¥r dette emne." + +#: pdiff.cpp:258 +msgid "PreprocessorCmd: " +msgstr "Præprocessor kommando:" + +#: pdiff.cpp:263 +msgid "" +"The following option(s) you selected might change data:\n" +msgstr "" +"Følgende tilvalg du valgte vil muligvis ændre data:\n" + +#: pdiff.cpp:264 +msgid "" +"\n" +"Most likely this is not wanted during a merge.\n" +"Do you want to disable these settings or continue with these settings active?" +msgstr "" +"\n" +"Mest sandsynligt ikke ønsket under en indfletning.\n" +"Ønsker du at deaktivere disse indstillinger eller fortsætte med disse " +"indstillinger aktive?" + +#: pdiff.cpp:266 +msgid "Option Unsafe for Merging" +msgstr "Tilvalg usikkert ved en indfletning" + +#: pdiff.cpp:267 +msgid "Use These Options During Merge" +msgstr "Brug disse tilvalg under en indfletning" + +#: pdiff.cpp:267 +msgid "Disable Unsafe Options" +msgstr "Deaktivér usikre tilvalg" + +#: pdiff.cpp:297 +msgid "Loading A" +msgstr "Indlæser A" + +#: pdiff.cpp:301 +msgid "Loading B" +msgstr "Indlæser B" + +#: pdiff.cpp:318 pdiff.cpp:344 +msgid "Diff: A <-> B" +msgstr "Diff: A <-> B" + +#: pdiff.cpp:324 pdiff.cpp:366 +msgid "Linediff: A <-> B" +msgstr "Linjeforskel: A <-> B" + +#: pdiff.cpp:335 +msgid "Loading C" +msgstr "Indlæser C" + +#: pdiff.cpp:347 +msgid "Diff: B <-> C" +msgstr "Diff: B <-> C" + +#: pdiff.cpp:350 +msgid "Diff: A <-> C" +msgstr "Diff: A <-> C" + +#: pdiff.cpp:369 +msgid "Linediff: B <-> C" +msgstr "Linjeforskel: B <-> C" + +#: pdiff.cpp:372 +msgid "Linediff: A <-> C" +msgstr "Linjeforskel: A <-> C" + +#: pdiff.cpp:513 +msgid "All input files contain the same text, but are not binary equal." +msgstr "" +"Alle inddata-filer indeholder den samme tekst, men er ikke binært ækvivalente." + +#: pdiff.cpp:515 pdiff.cpp:517 pdiff.cpp:519 +msgid "" +"Files %1 and %2 are binary equal.\n" +msgstr "" +"Filerne %1 og %2 er binært ens.\n" + +#: pdiff.cpp:516 pdiff.cpp:518 pdiff.cpp:520 +msgid "" +"Files %1 and %2 have equal text, but are not binary equal. \n" +msgstr "" +"Filerne %1 og %2 har samme tekst men er ikke binært ens.\n" + +#: pdiff.cpp:530 +msgid "" +"Some inputfiles don't seem to be pure textfiles.\n" +"Note that the KDiff3-merge was not meant for binary data.\n" +"Continue at your own risk." +msgstr "" +"Nogle inddatafiler synes ikke at være rene tekstfiler.\n" +"Bemærk at KDiff3-indfletningen ikke er beregnet til binære data.\n" +"Fortsæt pÃ¥ eget ansvar." + +#: pdiff.cpp:979 +msgid "Abort" +msgstr "Afbryd" + +#: pdiff.cpp:985 pdiff.cpp:1073 +msgid "Opening files..." +msgstr "Ã…bner filer..." + +#: pdiff.cpp:1050 pdiff.cpp:1121 +msgid "File open error" +msgstr "Fejl ved Ã¥bning af fil" + +#: pdiff.cpp:1153 +msgid "Cutting selection..." +msgstr "Klipper valgene ud..." + +#: pdiff.cpp:1174 +msgid "Copying selection to clipboard..." +msgstr "Kopierer valgene til klippebord..." + +#: pdiff.cpp:1190 +msgid "Inserting clipboard contents..." +msgstr "Indsætter klippebordets indhold..." + +#: pdiff.cpp:1713 +msgid "Save && Continue" +msgstr "Gem && Fortsæt" + +#: pdiff.cpp:1713 +msgid "Continue Without Saving" +msgstr "Fortsæt uden at gemme" + +#: pdiff.cpp:1920 +msgid "Search complete." +msgstr "Søgning færdig." + +#: pdiff.cpp:1920 +msgid "Search Complete" +msgstr "Søgning færdig" + +#: pdiff.cpp:2144 +msgid "Nothing is selected in either diff input window." +msgstr "Ingenting er markeret i inddatavindue med sammenligning." + +#: pdiff.cpp:2144 +msgid "Error while adding manual diff range" +msgstr "Fejl ved tilføjelse manuelt sammenligningsomrÃ¥de" + +#. i18n: file kdiff3_part.rc line 4 +#: rc.cpp:3 +#, no-c-format +msgid "&KDiff3" +msgstr "&KDiff3" + +#. i18n: file kdiff3_part.rc line 13 +#: rc.cpp:6 +#, no-c-format +msgid "Configure KDiff3" +msgstr "Indstil KDiff3" + +#. i18n: file kdiff3_shell.rc line 7 +#: rc.cpp:15 +#, no-c-format +msgid "&Directory" +msgstr "&Mappe" + +#. i18n: file kdiff3_shell.rc line 30 +#: rc.cpp:18 +#, no-c-format +msgid "Current Item Merge Operation" +msgstr "Indfletningsoperation for dette punkt" + +#. i18n: file kdiff3_shell.rc line 38 +#: rc.cpp:21 +#, no-c-format +msgid "Current Item Sync Operation" +msgstr "Synkroniseringsoperation for dette punkt" + +#. i18n: file kdiff3_shell.rc line 50 +#: rc.cpp:24 +#, no-c-format +msgid "&Movement" +msgstr "&Bevægelse" + +#. i18n: file kdiff3_shell.rc line 61 +#: rc.cpp:27 +#, no-c-format +msgid "D&iffview" +msgstr "D&iff-visning" + +#. i18n: file kdiff3_shell.rc line 73 +#: rc.cpp:30 +#, no-c-format +msgid "&Merge" +msgstr "Ind&flet" + +#. i18n: file kdiff3_shell.rc line 95 +#: rc.cpp:33 +#, no-c-format +msgid "&Window" +msgstr "&Vindue" + +#: smalldialogs.cpp:53 +msgid "A (Base):" +msgstr "A (Basis):" + +#: smalldialogs.cpp:59 smalldialogs.cpp:75 smalldialogs.cpp:91 +#: smalldialogs.cpp:134 +msgid "File..." +msgstr "Fil..." + +#: smalldialogs.cpp:61 smalldialogs.cpp:77 smalldialogs.cpp:93 +#: smalldialogs.cpp:136 +msgid "Dir..." +msgstr "Mappe..." + +#: smalldialogs.cpp:86 +msgid "C (Optional):" +msgstr "C (Frivillig):" + +#: smalldialogs.cpp:108 +msgid "Swap/Copy Names ..." +msgstr "Skift eller kopiér navne..." + +#: smalldialogs.cpp:114 smalldialogs.cpp:115 smalldialogs.cpp:116 +msgid "Swap %1<->%2" +msgstr "Skift %1 ud mod %2" + +#: smalldialogs.cpp:117 smalldialogs.cpp:118 smalldialogs.cpp:119 +msgid "Copy %1->Output" +msgstr "Kopiér %1 til uddata" + +#: smalldialogs.cpp:120 smalldialogs.cpp:121 smalldialogs.cpp:122 +msgid "Swap %1<->Output" +msgstr "Skift %1 ud mod uddata" + +#: smalldialogs.cpp:129 +msgid "Output (optional):" +msgstr "Uddata (frivillig):" + +#: smalldialogs.cpp:158 +msgid "Configure..." +msgstr "Indstil..." + +#: smalldialogs.cpp:347 +msgid "Search text:" +msgstr "Søgetekst:" + +#: smalldialogs.cpp:354 +msgid "Case sensitive" +msgstr "Versalfølsom" + +#: smalldialogs.cpp:357 +msgid "Search A" +msgstr "Gennemsøg A" + +#: smalldialogs.cpp:362 +msgid "Search B" +msgstr "Gennemsøg B" + +#: smalldialogs.cpp:367 +msgid "Search C" +msgstr "Gennemsøg C" + +#: smalldialogs.cpp:372 +msgid "Search output" +msgstr "Søgeuddata" + +#: smalldialogs.cpp:377 +msgid "&Search" +msgstr "&Søg" + +#: smalldialogs.cpp:394 +msgid "Regular Expression Tester" +msgstr "Test af regulære udtryk" + +#: smalldialogs.cpp:405 +msgid "Example auto merge line:" +msgstr "Eksempel pÃ¥ linje for automatisk sammenfletning:" + +#: smalldialogs.cpp:407 +msgid "For auto merge test copy a line as used in your files." +msgstr "" +"For at teste automatisk sammenfletning, kopieres en linje som bruges i dine " +"filer." + +#: smalldialogs.cpp:413 smalldialogs.cpp:442 smalldialogs.cpp:479 +msgid "Match result:" +msgstr "Matchningsresultat:" + +#: smalldialogs.cpp:432 +msgid "Example history start line (with leading comment):" +msgstr "Eksempel pÃ¥ startlinje for historik (med indledende kommentar):" + +#: smalldialogs.cpp:435 +msgid "" +"Copy a history start line as used in your files,\n" +"including the leading comment." +msgstr "" +"Kopiér en startlinje for historik som bruges i dine filer,\n" +"inkluderende den indledende kommentar." + +#: smalldialogs.cpp:461 +msgid "History sort key order:" +msgstr "Sorteringsnøglerækkefølge for historik:" + +#: smalldialogs.cpp:469 +msgid "Example history entry start line (without leading comment):" +msgstr "" +"Eksempel pÃ¥ startlinje for en historikindgang (uden indledende kommentar):" + +#: smalldialogs.cpp:471 +msgid "" +"Copy a history entry start line as used in your files,\n" +"but omit the leading comment." +msgstr "" +"Kopiér en startlinje for en historikindgang som bruges i dine filer,\n" +"men udelad den indledende kommentar." + +#: smalldialogs.cpp:486 +msgid "Sort key result:" +msgstr "Sorteringsnøgleresultat:" + +#: smalldialogs.cpp:537 smalldialogs.cpp:547 smalldialogs.cpp:568 +msgid "Match success." +msgstr "Matchning lykkedes." + +#: smalldialogs.cpp:541 smalldialogs.cpp:551 smalldialogs.cpp:574 +msgid "Match failed." +msgstr "Matchning mislykkedes." + +#: smalldialogs.cpp:559 +msgid "Opening and closing parentheses don't match in regular expression." +msgstr "Indledende og afsluttende parenteser matcher ikke i regulært udtryk." + +#~ msgid "Diff and Merge" +#~ msgstr "Sammenlign og sammenflet" + +#~ msgid "Save Directory Merge State ..." +#~ msgstr "Gem tilstand for mappesammenfletning..." + +#~ msgid "Load Directory Merge State ..." +#~ msgstr "Indlæs tilstand for mappesammenfletning..." + +#~ msgid "Synchronize Directories" +#~ msgstr "Synkronisér mapper" + +#~ msgid "Copy Newer Files Instead of Merging" +#~ msgstr "Kopiér nyere filer i stedet for at sammenflette" + +#~ msgid "List only deltas" +#~ msgstr "Kun deltaer pÃ¥ listen" + +#~ msgid "Files and directories without change will not appear in the list." +#~ msgstr "Filer og mapper uden ændring vil ikke ses pÃ¥ listen." + +#~ msgid "Please click the lines that should match in all windows." +#~ msgstr "Klik pÃ¥ linjerne som skal matche i alle vinduer." + +#~ msgid "Swap" +#~ msgstr "Skift" + +#~ msgid "no selection" +#~ msgstr "ingen markering" + +#~ msgid "Manually match lines" +#~ msgstr "Manuelt valg af linjer" + +#~ msgid "Ok" +#~ msgstr "O.k." + +#~ msgid "Has no effect. For compatibility with certain tools." +#~ msgstr "Har ingen virkning. For kompatibilitet med visse værktøjer." + +#~ msgid "For compatibility with certain tools." +#~ msgstr "For kompatibilitet med visse værktøjer." + +#~ msgid "Colors in Editor & Diff Output" +#~ msgstr "Farver i Editor & Diff-uddata" diff --git a/po/de.po b/po/de.po new file mode 100644 index 0000000..a3ff81a --- /dev/null +++ b/po/de.po @@ -0,0 +1,2570 @@ +# translation of kdiff3.po to German +# Ãœbersetzung von kdiff3.po ins Deutsche +# Copyright (C) +# +# +# Thomas Diehl , 2003, 2004. +# Joachim Eibl , 2004. +# Joachim Eibl , 2004, 2005, 2006. +# Thomas Reitelbach , 2004, 2006. +msgid "" +msgstr "" +"Project-Id-Version: kdiff3\n" +"POT-Creation-Date: 2006-11-05 08:45+0100\n" +"PO-Revision-Date: 2006-07-09 10:25+0200\n" +"Last-Translator: Thomas Reitelbach \n" +"Language-Team: German \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: KBabel 1.11.2\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: _translatorinfo.cpp:1 +msgid "" +"_: NAME OF TRANSLATORS\n" +"Your names" +msgstr "Joachim Eibl" + +#: _translatorinfo.cpp:3 +msgid "" +"_: EMAIL OF TRANSLATORS\n" +"Your emails" +msgstr "joachim.eibl@gmx.de" + +#: diff.cpp:246 +msgid "Writing clipboard data to temp file failed." +msgstr "Speichern der Zwischenablage in temporärer Datei ist fehlgeschlagen." + +#: diff.cpp:250 +msgid "From Clipboard" +msgstr "Aus Zwischenablage" + +#: diff.cpp:491 +msgid "" +"Preprocessing possibly failed. Check this command:\n" +"\n" +" %1\n" +"\n" +"The preprocessing command will be disabled now." +msgstr "" +"Der Vorverarbeitungsbefehl ist möglicherweise fehlgeschlagen.\n" +"Bitte überprüfen sie diesen Befehl:\n" +"\n" +" %1\n" +"\n" +"Diese Vorverarbeitung wird nun deaktiviert." + +#: diff.cpp:526 +msgid "" +"The line-matching-preprocessing possibly failed. Check this command:\n" +"\n" +" %1\n" +"\n" +"The line-matching-preprocessing command will be disabled now." +msgstr "" +"Der Vorverarbeitungsbefehl für Zeilenabgleich ist möglicherweise " +"fehlgeschlagen.\n" +"Bitte überprüfen sie diesen Befehl:\n" +"\n" +" %1\n" +"\n" +"Der Vorverarbeitungsbefehl für Zeilenabgleich wird nun deaktiviert." + +#: diff.cpp:1631 diff.cpp:1645 +msgid "" +"Data loss error:\n" +"If it is reproducable please contact the author.\n" +msgstr "" +"Datenverlust:\n" +"Falls das Problem reproduzierbar ist, nehmen Sie bitte Kontakt mit dem Autor " +"auf.\n" + +#: diff.cpp:1633 diff.cpp:1647 +msgid "Severe Internal Error" +msgstr "Schwerwiegender interner Fehler" + +#: difftextwindow.cpp:1643 kdiff3.cpp:753 +msgid "Top line" +msgstr "Oberste Zeile" + +#: difftextwindow.cpp:1653 +msgid "End" +msgstr "Ende" + +#: directorymergewindow.cpp:142 +msgid "Mix of links and normal files." +msgstr "Vermischung von Verknüpfungen und Dateien" + +#: directorymergewindow.cpp:149 +msgid "Link: " +msgstr "Verknüpfung: " + +#: directorymergewindow.cpp:157 +msgid "Size. " +msgstr "Größe: " + +#: directorymergewindow.cpp:170 +msgid "Date & Size: " +msgstr "Datum & Größe: " + +#: directorymergewindow.cpp:179 directorymergewindow.cpp:185 +msgid "Creating temp copy of %1 failed." +msgstr "Erstellung einer temporären Kopie von %1 ist fehlgeschlagen." + +#: directorymergewindow.cpp:196 directorymergewindow.cpp:204 +msgid "Opening %1 failed." +msgstr "Öffnen von %1 ist fehlgeschlagen." + +#: directorymergewindow.cpp:208 +msgid "Comparing file..." +msgstr "Datei wird verglichen ..." + +#: directorymergewindow.cpp:218 directorymergewindow.cpp:224 +#, c-format +msgid "Error reading from %1" +msgstr "Fehler beim Lesen von %1" + +#: directorymergewindow.cpp:282 +msgid "Name" +msgstr "Name" + +#: directorymergewindow.cpp:286 +msgid "Operation" +msgstr "Aktion" + +#: directorymergewindow.cpp:287 +msgid "Status" +msgstr "Status" + +#: directorymergewindow.cpp:288 +msgid "Unsolved" +msgstr "Ungelöst" + +#: directorymergewindow.cpp:289 +msgid "Solved" +msgstr "Gelöst" + +#: directorymergewindow.cpp:290 +msgid "Nonwhite" +msgstr "Nicht weiß" + +#: directorymergewindow.cpp:291 +msgid "White" +msgstr "Weiß" + +#: directorymergewindow.cpp:319 +msgid "" +"You are currently doing a directory merge. Are you sure, you want to abort the " +"merge and rescan the directory?" +msgstr "" +"Sie sind dabei, Verzeichnisse zusammenzuführen. Sind Sie sicher, dass Sie diese " +"Operation abbrechen und das Verzeichnis erneut einlesen wollen?" + +#: directorymergewindow.cpp:320 directorymergewindow.cpp:2868 +msgid "Rescan" +msgstr "Neu einlesen" + +#: directorymergewindow.cpp:320 kdiff3.cpp:603 pdiff.cpp:979 +msgid "Continue Merging" +msgstr "Zusammenführung fortsetzen" + +#: directorymergewindow.cpp:462 +msgid "Opening of directories failed:" +msgstr "Öffnen der Verzeichnisse fehlgeschlagen:" + +#: directorymergewindow.cpp:465 +msgid "" +"Dir A \"%1\" does not exist or is not a directory.\n" +msgstr "" +"Verzeichnis A \"%1\" existiert nicht oder ist kein Verzeichnis.\n" + +#: directorymergewindow.cpp:468 +msgid "" +"Dir B \"%1\" does not exist or is not a directory.\n" +msgstr "" +"Verzeichnis B \"%1\" existiert nicht oder ist kein Verzeichnis.\n" + +#: directorymergewindow.cpp:471 +msgid "" +"Dir C \"%1\" does not exist or is not a directory.\n" +msgstr "" +"Verzeichnis C \"%1\" existiert nicht oder ist kein Verzeichnis.\n" + +#: directorymergewindow.cpp:473 +msgid "Directory Open Error" +msgstr "Fehler beim Öffnen des Verzeichnisses" + +#: directorymergewindow.cpp:481 +msgid "" +"The destination directory must not be the same as A or B when three directories " +"are merged.\n" +"Check again before continuing." +msgstr "" +"Wenn drei Verzeichnisse zusammengeführt werden, darf das Zielverzeichnis nicht " +"mit A oder B identisch sein.\n" +"Bitte überprüfen Sie dies." + +#: directorymergewindow.cpp:483 +msgid "Parameter Warning" +msgstr "Parameter-Warnung" + +#: directorymergewindow.cpp:488 +msgid "Scanning directories..." +msgstr "Verzeichnisse einlesen ..." + +#: directorymergewindow.cpp:537 +msgid "Reading Directory A" +msgstr "Einlesen von Verzeichnis A" + +#: directorymergewindow.cpp:559 +msgid "Reading Directory B" +msgstr "Einlesen von Verzeichnis B" + +#: directorymergewindow.cpp:581 +msgid "Reading Directory C" +msgstr "Einlesen von Verzeichnis C" + +#: directorymergewindow.cpp:607 +msgid "Some subdirectories were not readable in" +msgstr "Einige Unterverzeichnisse nicht lesbar in" + +#: directorymergewindow.cpp:612 +msgid "Check the permissions of the subdirectories." +msgstr "Ãœberprüfen Sie bitte die Zugriffsrechte für die Unterverzeichnisse." + +#: directorymergewindow.cpp:646 kdiff3.cpp:552 kdiff3.cpp:636 kdiff3.cpp:661 +#: kdiff3.cpp:934 kdiff3.cpp:955 pdiff.cpp:1059 pdiff.cpp:1131 pdiff.cpp:1169 +#: pdiff.cpp:1185 pdiff.cpp:1215 pdiff.cpp:1226 +msgid "Ready." +msgstr "Bereit" + +#: directorymergewindow.cpp:660 +msgid "Directory Comparison Status" +msgstr "Status des Verzeichnisvergleichs" + +#: directorymergewindow.cpp:661 +msgid "Number of subdirectories:" +msgstr "Anzahl der Unterverzeichnisse:" + +#: directorymergewindow.cpp:662 +msgid "Number of equal files:" +msgstr "Anzahl der identischen Dateien:" + +#: directorymergewindow.cpp:663 +msgid "Number of different files:" +msgstr "Anzahl der unterschiedlichen Dateien:" + +#: directorymergewindow.cpp:666 +msgid "Number of manual merges:" +msgstr "Anzahl der manuellen Zusammenführungen:" + +#: directorymergewindow.cpp:802 +msgid "This affects all merge operations." +msgstr "Dies beeinflußt alle Zusammenführungsaktionen." + +#: directorymergewindow.cpp:803 +msgid "Changing All Merge Operations" +msgstr "Änderung aller Zusammenführungsaktionen" + +#: directorymergewindow.cpp:803 mergeresultwindow.cpp:287 +msgid "C&ontinue" +msgstr "&Fortsetzen" + +#: directorymergewindow.cpp:1169 +msgid "Processing " +msgstr "Fortschritt " + +#: directorymergewindow.cpp:1647 directorymergewindow.cpp:1653 +msgid "To do." +msgstr "Unerledigt." + +#: directorymergewindow.cpp:1756 directorymergewindow.cpp:2899 +msgid "Copy A to B" +msgstr "Kopiere A nach B" + +#: directorymergewindow.cpp:1757 directorymergewindow.cpp:2900 +msgid "Copy B to A" +msgstr "Kopiere B nach A" + +#: directorymergewindow.cpp:1758 directorymergewindow.cpp:2901 +msgid "Delete A" +msgstr "Lösche A" + +#: directorymergewindow.cpp:1759 directorymergewindow.cpp:2902 +msgid "Delete B" +msgstr "Lösche B" + +#: directorymergewindow.cpp:1760 +msgid "Delete A & B" +msgstr "Lösche A & B" + +#: directorymergewindow.cpp:1761 directorymergewindow.cpp:2904 +msgid "Merge to A" +msgstr "Zusammenführen nach A" + +#: directorymergewindow.cpp:1762 directorymergewindow.cpp:2905 +msgid "Merge to B" +msgstr "Zusammenführen nach B" + +#: directorymergewindow.cpp:1763 +msgid "Merge to A & B" +msgstr "Zusammenführen nach A & B" + +#: directorymergewindow.cpp:1767 directorymergewindow.cpp:2896 +msgid "Delete (if exists)" +msgstr "Lösche (falls vorhanden)" + +#: directorymergewindow.cpp:1768 directorymergewindow.cpp:1769 +#: directorymergewindow.cpp:2895 optiondialog.cpp:809 smalldialogs.cpp:102 +msgid "Merge" +msgstr "Zusammenführen" + +#: directorymergewindow.cpp:1768 directorymergewindow.cpp:1769 +msgid "Merge (manual)" +msgstr "Zusammenführen (manuell)" + +#: directorymergewindow.cpp:1770 +msgid "Error: Conflicting File Types" +msgstr "Fehler: Konflikt der Dateitypen" + +#: directorymergewindow.cpp:1771 +msgid "Error: Dates are equal but files are not." +msgstr "Fehler: Gleiches Datum, aber unterschiedliche Dateien." + +#: directorymergewindow.cpp:1795 directorymergewindow.cpp:1824 +#: directorymergewindow.cpp:1849 +msgid "This operation is currently not possible." +msgstr "Diese Aktion ist momentan nicht zulässig." + +#: directorymergewindow.cpp:1795 directorymergewindow.cpp:1824 +#: directorymergewindow.cpp:1849 directorymergewindow.cpp:2106 +msgid "Operation Not Possible" +msgstr "Unzulässige Aktion" + +#: directorymergewindow.cpp:1888 +msgid "" +"This should never happen: \n" +"\n" +"mergeResultSaved: m_pMFI=0\n" +"\n" +"If you know how to reproduce this, please contact the program author." +msgstr "" +"Dies sollte nie passieren: \n" +"\n" +"mergeResultSaved: m_pMFI=0\n" +"\n" +"Wenn Sie dies reproduzieren können, informieren Sie bitte den Autor dieses " +"Programms." + +#: directorymergewindow.cpp:1888 +msgid "Program Error" +msgstr "Programm Fehler" + +#: directorymergewindow.cpp:1899 +msgid "" +"An error occurred while copying.\n" +msgstr "" +"Ein Fehler ist während des Kopierens aufgetreten.\n" + +#: directorymergewindow.cpp:1900 directorymergewindow.cpp:2306 +msgid "Merge Error" +msgstr "Zusammenführungsfehler" + +#: directorymergewindow.cpp:1905 directorymergewindow.cpp:2311 +msgid "Error." +msgstr "Fehler." + +#: directorymergewindow.cpp:1910 directorymergewindow.cpp:2202 +#: directorymergewindow.cpp:2242 +msgid "Done." +msgstr "Erledigt." + +#: directorymergewindow.cpp:1933 +msgid "Not saved." +msgstr "Nicht gespeichert." + +#: directorymergewindow.cpp:1968 +msgid "Unknown merge operation. (This must never happen!)" +msgstr "Unbekannte Zusammenführaktion. (Sollte nie passieren!)" + +#: directorymergewindow.cpp:2000 +msgid "Unknown merge operation." +msgstr "Unbekannte Zusammenführaktion." + +#: directorymergewindow.cpp:2015 +msgid "" +"The merge is about to begin.\n" +"\n" +"Choose \"Do it\" if you have read the instructions and know what you are " +"doing.\n" +"Choosing \"Simulate it\" will tell you what would happen.\n" +"\n" +"Be aware that this program still has beta status and there is NO WARRANTY " +"whatsoever! Make backups of your vital data!" +msgstr "" +"Die Zusammenführung kann nun starten.\n" +"\n" +"Wählen Sie \"Start\" wenn Sie die Anleitung gelesen haben und wissen was Sie " +"erwartet.\n" +"Wählen Sie \"Simulieren\" um zu sehen, was passieren würde.\n" +"\n" +"Sie sollten aber wissen, dass dieses Programm noch Beta-Status hat und es KEINE " +"GARANTIE gibt! Erstellen Sie Sicherungkopien Ihrer wichtigen Daten!" + +#: directorymergewindow.cpp:2020 +msgid "Starting Merge" +msgstr "Start der Zusammenführung" + +#: directorymergewindow.cpp:2020 +msgid "Do It" +msgstr "Start" + +#: directorymergewindow.cpp:2020 +msgid "Simulate It" +msgstr "Simulieren" + +#: directorymergewindow.cpp:2046 +msgid "" +"The highlighted item has a different type in the different directories. Select " +"what to do." +msgstr "" +"Das markierte Element hat einen unterschiedlichen Typ in den verschiedenen " +"Verzeichnissen. Wählen Sie eine Aktion." + +#: directorymergewindow.cpp:2055 +msgid "" +"The modification dates of the file are equal but the files are not. Select what " +"to do." +msgstr "" +"Für die markierte Datei ist zwar das Datum der letzen Änderung gleich, aber die " +"Dateien unterscheiden sich. Wählen Sie die Zusammenführaktion." + +#: directorymergewindow.cpp:2106 +msgid "" +"This operation is currently not possible because directory merge is currently " +"running." +msgstr "" +"Diese Aktion ist momentan nicht möglich, weil zur Zeit Verzeichnisse " +"zusammengeführt werden." + +#: directorymergewindow.cpp:2166 +msgid "" +"There was an error in the last step.\n" +"Do you want to continue with the item that caused the error or do you want to " +"skip this item?" +msgstr "" +"Beim letzten Element ist ein Fehler aufgetreten.\n" +"Wollen Sie mit diesem Element fortfahren, oder wollen Sie dieses Element " +"überspringen?" + +#: directorymergewindow.cpp:2168 +msgid "Continue merge after an error" +msgstr "Fortsetzung der Zusammenführung nach einem Fehler" + +#: directorymergewindow.cpp:2168 +msgid "Continue With Last Item" +msgstr "Mit letztem Element fortsetzen" + +#: directorymergewindow.cpp:2168 +msgid "Skip Item" +msgstr "Element überspringen" + +#: directorymergewindow.cpp:2202 +msgid "Skipped." +msgstr "Ãœbersprungen." + +#: directorymergewindow.cpp:2209 directorymergewindow.cpp:2435 +msgid "In progress..." +msgstr "In Bearbeitung ..." + +#: directorymergewindow.cpp:2257 +msgid "Merge operation complete." +msgstr "Die Zusammenführung ist fertig." + +#: directorymergewindow.cpp:2257 directorymergewindow.cpp:2260 +msgid "Merge Complete" +msgstr "Zusammenführung abgeschlossen." + +#: directorymergewindow.cpp:2269 +msgid "" +"Simulated merge complete: Check if you agree with the proposed operations." +msgstr "" +"Die simulierte Zusammenführung ist abgeschlossen. Ãœberprüfen Sie, ob Sie mit " +"den vorgeschlagenen Aktionen einverstanden sind." + +#: directorymergewindow.cpp:2305 +msgid "" +"An error occurred. Press OK to see detailed information.\n" +msgstr "" +"Ein Fehler ist aufgetreten. Wählen Sie OK um Details zu sehen.\n" + +#: directorymergewindow.cpp:2348 +msgid "Error: While deleting %1: Creating backup failed." +msgstr "" +"Fehler: Beim Löschen von %1: Die Erstellung einer Sicherungskopie schlug fehl." + +#: directorymergewindow.cpp:2355 +msgid "delete directory recursively( %1 )" +msgstr "Lösche Verzeichnis rekursiv( %1 )" + +#: directorymergewindow.cpp:2357 +msgid "delete( %1 )" +msgstr "Lösche( %1 )" + +#: directorymergewindow.cpp:2372 +msgid "Error: delete dir operation failed while trying to read the directory." +msgstr "" +"Fehler: Löschen des Verzeichnisses schlug fehl, da es nicht gelesen werden " +"konnte." + +#: directorymergewindow.cpp:2391 +msgid "Error: rmdir( %1 ) operation failed." +msgstr "Fehler: Verzeichnis löschen( %1 ) Operation fehlgeschlagen." + +#: directorymergewindow.cpp:2401 +msgid "Error: delete operation failed." +msgstr "Fehler: Löschoperation fehlgeschlagen." + +#: directorymergewindow.cpp:2427 +msgid "manual merge( %1, %2, %3 -> %4)" +msgstr "Manuelles Zusammenführen( %1, %2, %3 -> %4)" + +#: directorymergewindow.cpp:2430 +msgid "" +" Note: After a manual merge the user should continue by pressing F7." +msgstr " Hinweis: Nach manuellem Zusammenführen mit F7 fortsetzen." + +#: directorymergewindow.cpp:2453 +msgid "Error: copy( %1 -> %2 ) failed.Deleting existing destination failed." +msgstr "" +"Fehler: Kopie( %1 -> %2 ) fehlgeschlagen. Das existierende Ziel konnte nicht " +"gelöscht werden." + +#: directorymergewindow.cpp:2463 +msgid "copyLink( %1 -> %2 )" +msgstr "Verknüpfung kopieren( %1 -> %2 )" + +#: directorymergewindow.cpp:2474 +msgid "Error: copyLink failed: Remote links are not yet supported." +msgstr "" +"Fehler: Verknüpfung kopieren: Nichtlokale Verknüpfungen werden nicht " +"unterstützt." + +#: directorymergewindow.cpp:2480 +msgid "Error: copyLink failed." +msgstr "Fehler: Verknüpfung kopieren fehlgeschlagen." + +#: directorymergewindow.cpp:2500 +msgid "copy( %1 -> %2 )" +msgstr "kopiere( %1 -> %2 )" + +#: directorymergewindow.cpp:2526 +msgid "Error during rename( %1 -> %2 ): Cannot delete existing destination." +msgstr "" +"Fehler beim Umbenennen( %1 -> %2 ): Das existierende Ziel konnte nicht gelöscht " +"werden." + +#: directorymergewindow.cpp:2532 +msgid "rename( %1 -> %2 )" +msgstr "Umbenennen( %1 -> %2 )" + +#: directorymergewindow.cpp:2541 +msgid "Error: Rename failed." +msgstr "Fehler: Umbenennen fehlgeschlagen." + +#: directorymergewindow.cpp:2559 +msgid "Error during makeDir of %1. Cannot delete existing file." +msgstr "" +"Fehler beim Erstellen des Verzeichnisses %1. Kann existierendes Objekt nicht " +"löschen." + +#: directorymergewindow.cpp:2575 +msgid "makeDir( %1 )" +msgstr "erstelleVerzeichnis( %1 )" + +#: directorymergewindow.cpp:2585 +msgid "Error while creating directory." +msgstr "Fehler beim Erstellen eines Verzeichnis." + +#: directorymergewindow.cpp:2608 directorymergewindow.cpp:2725 +msgid "Dest" +msgstr "Ziel" + +#: directorymergewindow.cpp:2612 directorymergewindow.cpp:2650 +msgid "Dir" +msgstr "Verzeichnis" + +#: directorymergewindow.cpp:2613 +msgid "Type" +msgstr "Typ" + +#: directorymergewindow.cpp:2614 +msgid "Size" +msgstr "Größe" + +#: directorymergewindow.cpp:2615 +msgid "Attr" +msgstr "Attr" + +#: directorymergewindow.cpp:2616 +msgid "Last Modification" +msgstr "Letzte Änderung" + +#: directorymergewindow.cpp:2617 +msgid "Link-Destination" +msgstr "Verknüpfungsziel" + +#: directorymergewindow.cpp:2667 +msgid "not available" +msgstr "nicht vorhanden" + +#: directorymergewindow.cpp:2687 +msgid "A (Dest): " +msgstr "A (Ziel): " + +#: directorymergewindow.cpp:2690 +msgid "A (Base): " +msgstr "A (Basis): " + +#: directorymergewindow.cpp:2696 +msgid "B (Dest): " +msgstr "B (Ziel): " + +#: directorymergewindow.cpp:2704 +msgid "C (Dest): " +msgstr "C (Ziel): " + +#: directorymergewindow.cpp:2710 +msgid "Dest: " +msgstr "Ziel: " + +#: directorymergewindow.cpp:2775 +msgid "Save Directory Merge State As..." +msgstr "Verzeichniszusammenführungsstatus speichern unter ..." + +#: directorymergewindow.cpp:2862 +msgid "Start/Continue Directory Merge" +msgstr "Verzeichniszusammenführung starten/fortsetzen" + +#: directorymergewindow.cpp:2863 +msgid "Run Operation for Current Item" +msgstr "Aktion des aktuellen Elements ausführen" + +#: directorymergewindow.cpp:2864 +msgid "Compare Selected File" +msgstr "Vergleiche gewählte Datei" + +#: directorymergewindow.cpp:2865 +msgid "Merge Current File" +msgstr "Aktuelle Datei zusammenführen" + +#: directorymergewindow.cpp:2866 +msgid "Fold All Subdirs" +msgstr "Alle Unterverzeichnisse einklappen" + +#: directorymergewindow.cpp:2867 +msgid "Unfold All Subdirs" +msgstr "Alle Unterverzeichnisse ausklappen" + +#: directorymergewindow.cpp:2871 +msgid "Choose A for All Items" +msgstr "Für alle Elemente A wählen" + +#: directorymergewindow.cpp:2872 +msgid "Choose B for All Items" +msgstr "Für alle Elemente B wählen" + +#: directorymergewindow.cpp:2873 +msgid "Choose C for All Items" +msgstr "Für alle Elemente C wählen" + +#: directorymergewindow.cpp:2874 +msgid "Auto-Choose Operation for All Items" +msgstr "Aktion für alle Elemente automatisch wählen" + +#: directorymergewindow.cpp:2875 +msgid "No Operation for All Items" +msgstr "Keine Aktion für alle Elemente" + +#: directorymergewindow.cpp:2880 +msgid "Show Identical Files" +msgstr "Zeige identische Dateien" + +#: directorymergewindow.cpp:2881 +msgid "Show Different Files" +msgstr "Zeige unterschiedliche Dateien" + +#: directorymergewindow.cpp:2882 +msgid "Show Files only in A" +msgstr "Zeige Dateien nur in A" + +#: directorymergewindow.cpp:2883 +msgid "Show Files only in B" +msgstr "Zeige Dateien nur in B" + +#: directorymergewindow.cpp:2884 +msgid "Show Files only in C" +msgstr "Zeige Dateien nur in C" + +#: directorymergewindow.cpp:2888 +msgid "Compare Explicitly Selected Files" +msgstr "Vergleiche explizit ausgewählte Dateien" + +#: directorymergewindow.cpp:2889 +msgid "Merge Explicitly Selected Files" +msgstr "Führe explizit ausgewählte Dateien zusammen" + +#: directorymergewindow.cpp:2891 directorymergewindow.cpp:2898 +msgid "Do Nothing" +msgstr "Nichts tun" + +#: directorymergewindow.cpp:2892 +msgid "A" +msgstr "A" + +#: directorymergewindow.cpp:2893 +msgid "B" +msgstr "B" + +#: directorymergewindow.cpp:2894 +msgid "C" +msgstr "C" + +#: directorymergewindow.cpp:2903 +msgid "Delete A && B" +msgstr "Lösche A && B" + +#: directorymergewindow.cpp:2906 +msgid "Merge to A && B" +msgstr "Zusammenführen nach A && B" + +#: fileaccess.cpp:595 +msgid "" +"While trying to make a backup, deleting an older backup failed. \n" +"Filename: " +msgstr "" +"Als versucht wurde eine Sicherungskopie zu erstellen, konnte eine schon " +"vorhandene Sicherungskopie nicht gelöscht werden.\n" +"Datei: " + +#: fileaccess.cpp:602 +msgid "" +"While trying to make a backup, renaming failed. \n" +"Filenames: " +msgstr "" +"Als versucht wurde eine Sicherungskopie zu erstellen, ist das Umbenennen " +"fehlgeschlagen:\n" +"Dateinamen: " + +#: fileaccess.cpp:624 +#, c-format +msgid "Getting file status: %1" +msgstr "Hole Datei Status: %1" + +#: fileaccess.cpp:667 +#, c-format +msgid "Reading file: %1" +msgstr "Einlesen von Datei: %1" + +#: fileaccess.cpp:703 +#, c-format +msgid "Writing file: %1" +msgstr "Schreibe Datei: %1" + +#: fileaccess.cpp:731 +msgid "Out of memory" +msgstr "Nicht genügend Speicher" + +#: fileaccess.cpp:766 +#, c-format +msgid "Making directory: %1" +msgstr "Erstelle Verzeichnis: %1" + +#: fileaccess.cpp:786 +#, c-format +msgid "Removing directory: %1" +msgstr "Lösche Verzeichnis: %1" + +#: fileaccess.cpp:801 +#, c-format +msgid "Removing file: %1" +msgstr "Lösche Datei: %1" + +#: fileaccess.cpp:817 +msgid "Creating symbolic link: %1 -> %2" +msgstr "Erstelle Verknüpfung: %1 -> %2" + +#: fileaccess.cpp:843 +msgid "Renaming file: %1 -> %2" +msgstr "Datei umbenennen: %1 -> %2" + +#: fileaccess.cpp:879 +msgid "Copying file: %1 -> %2" +msgstr "Datei kopieren: %1 -> %2" + +#: fileaccess.cpp:893 +#, c-format +msgid "" +"Error during file copy operation: Opening file for reading failed. Filename: %1" +msgstr "Fehler beim Kopieren: Datei konnte nicht zum Lesen geöffnet werden: %1" + +#: fileaccess.cpp:899 +#, c-format +msgid "" +"Error during file copy operation: Opening file for writing failed. Filename: %1" +msgstr "" +"Fehler beim Kopieren: Datei konnte nicht zum Schreiben geöffnet werden: %1" + +#: fileaccess.cpp:914 +#, c-format +msgid "Error during file copy operation: Reading failed. Filename: %1" +msgstr "Fehler beim Kopieren: Lesen fehlgeschlagen: %1" + +#: fileaccess.cpp:923 +#, c-format +msgid "Error during file copy operation: Writing failed. Filename: %1" +msgstr "Fehler beim Kopieren: Schreiben fehlgeschlagen: %1" + +#: fileaccess.cpp:1219 +msgid "Reading directory: " +msgstr "Verzeichnis wird eingelesen:" + +#: fileaccess.cpp:1348 +#, c-format +msgid "Listing directory: %1" +msgstr "Einlesen von Verzeichnis: %1" + +#: kdiff3.cpp:142 +msgid "Current Configuration:" +msgstr "Aktuelle Einstellungen:" + +#: kdiff3.cpp:147 +msgid "Config Option Error:" +msgstr "Fehler in der Einstellungsoption" + +#: kdiff3.cpp:187 +msgid "Option --auto used, but no output file specified." +msgstr "Option --auto verwendet, aber keine Ausgabedatei angegeben." + +#: kdiff3.cpp:323 +msgid "Option --auto ignored for directory comparison." +msgstr "Option --auto wird beim Vergleich von Verzeichnissen ignoriert." + +#: kdiff3.cpp:359 +msgid "Saving failed." +msgstr "Speichern fehlgeschlagen." + +#: kdiff3.cpp:386 pdiff.cpp:1041 pdiff.cpp:1112 +msgid "Opening of these files failed:" +msgstr "Öffnen dieser Dateien schlug fehl:" + +#: kdiff3.cpp:395 +msgid "File Open Error" +msgstr "Fehler beim Dateiöffnen" + +#: kdiff3.cpp:418 +msgid "Opens documents for comparison..." +msgstr "Dateien für Vergleich öffnen ..." + +#: kdiff3.cpp:423 +msgid "Saves the merge result. All conflicts must be solved!" +msgstr "" +"Sichern des Zusammenführergebnisses. Alle Konflikte müssen gelöst sein." + +#: kdiff3.cpp:425 +msgid "Saves the current document as..." +msgstr "Speichert das aktuelle Dokument als ..." + +#: kdiff3.cpp:427 +msgid "Print the differences" +msgstr "Unterschiede drucken" + +#: kdiff3.cpp:429 +msgid "Quits the application" +msgstr "Beendet das Programm" + +#: kdiff3.cpp:431 +msgid "Cuts the selected section and puts it to the clipboard" +msgstr "Schneidet die Auswahl aus und kopiert sie in die Zwischenablage" + +#: kdiff3.cpp:433 +msgid "Copies the selected section to the clipboard" +msgstr "Kopiert den ausgewählten Bereich in die Zwischenablage" + +#: kdiff3.cpp:435 +msgid "Pastes the clipboard contents to actual position" +msgstr "Fügt den Inhalt der Zwischenablage an der aktuellen Position ein" + +#: kdiff3.cpp:437 +msgid "Select everything in current window" +msgstr "Alles auswählen in aktuellem Fenster" + +#: kdiff3.cpp:439 +msgid "Search for a string" +msgstr "Suche nach Text ..." + +#: kdiff3.cpp:441 +msgid "Search again for the string" +msgstr "Weitersuchen" + +#: kdiff3.cpp:443 +msgid "Enables/disables the toolbar" +msgstr "Blendet die Werkzeugleiste ein/aus" + +#: kdiff3.cpp:445 +msgid "Enables/disables the statusbar" +msgstr "Blendet die Statusleiste ein/aus" + +#: kdiff3.cpp:449 +msgid "Configure KDiff3..." +msgstr "KDiff3 einrichten ..." + +#: kdiff3.cpp:470 +msgid "Go to Current Delta" +msgstr "Springe zu aktuellem Unterschied" + +#: kdiff3.cpp:471 +msgid "Go to First Delta" +msgstr "Springe zum ersten Unterschied" + +#: kdiff3.cpp:472 +msgid "Go to Last Delta" +msgstr "Springe zum letzten Unterschied" + +#: kdiff3.cpp:473 +msgid "(Skips white space differences when \"Show White Space\" is disabled.)" +msgstr "" +"(Unterschiede in weißen Zeichen werden übersprungen, wenn \"Zeige weiße " +"Zeichen\" ausgeschaltet ist.)" + +#: kdiff3.cpp:474 +msgid "" +"(Does not skip white space differences even when \"Show White Space\" is " +"disabled.)" +msgstr "" +"(Unterschiede in weißen Zeichen werden nicht übersprungen, auch wenn \"Zeige " +"weiße Zeichen\" ausgeschaltet ist.)" + +#: kdiff3.cpp:475 +msgid "Go to Previous Delta" +msgstr "Springe zu vorigem Unterschied" + +#: kdiff3.cpp:477 +msgid "Go to Next Delta" +msgstr "Springe zu nächstem Unterschied" + +#: kdiff3.cpp:479 +msgid "Go to Previous Conflict" +msgstr "Springe zu vorigem Konflikt" + +#: kdiff3.cpp:481 +msgid "Go to Next Conflict" +msgstr "Springe zu nächstem Konflikt" + +#: kdiff3.cpp:483 +msgid "Go to Previous Unsolved Conflict" +msgstr "Springe zu vorigem ungelösten Konflikt" + +#: kdiff3.cpp:485 +msgid "Go to Next Unsolved Conflict" +msgstr "Springe zu nächstem ungelöstem Konflikt" + +#: kdiff3.cpp:487 +msgid "Select Line(s) From A" +msgstr "Wähle Zeile(n) von A" + +#: kdiff3.cpp:488 +msgid "Select Line(s) From B" +msgstr "Wähle Zeile(n) von B" + +#: kdiff3.cpp:489 +msgid "Select Line(s) From C" +msgstr "Wähle Zeile(n) von C" + +#: kdiff3.cpp:490 +msgid "Automatically Go to Next Unsolved Conflict After Source Selection" +msgstr "Automatisch zu nächstem ungelösten Konflikt weiterspringen" + +#: kdiff3.cpp:492 +msgid "Show Space && Tabulator Characters for Differences" +msgstr "Zeige Leerzeichen und Tabulator Zeichen in Unterschieden" + +#: kdiff3.cpp:493 +msgid "Show White Space" +msgstr "Zeige \"weiße\" Zeichen" + +#: kdiff3.cpp:495 +msgid "Show Line Numbers" +msgstr "Zeige Zeilennummern" + +#: kdiff3.cpp:496 +msgid "Choose A Everywhere" +msgstr "Wähle A überall" + +#: kdiff3.cpp:497 +msgid "Choose B Everywhere" +msgstr "Wähle B überall" + +#: kdiff3.cpp:498 +msgid "Choose C Everywhere" +msgstr "Wähle C überall" + +#: kdiff3.cpp:499 +msgid "Choose A for All Unsolved Conflicts" +msgstr "Wähle A für alle ungelösten Konflikte" + +#: kdiff3.cpp:500 +msgid "Choose B for All Unsolved Conflicts" +msgstr "Wähle B für alle ungelösten Konflikte" + +#: kdiff3.cpp:501 +msgid "Choose C for All Unsolved Conflicts" +msgstr "Wähle C für alle ungelösten Konflikte" + +#: kdiff3.cpp:502 +msgid "Choose A for All Unsolved Whitespace Conflicts" +msgstr "Wähle A für alle ungelösten \"weißen\" Konflikte" + +#: kdiff3.cpp:503 +msgid "Choose B for All Unsolved Whitespace Conflicts" +msgstr "Wähle B für alle ungelösten \"weißen\" Konflikte" + +#: kdiff3.cpp:504 +msgid "Choose C for All Unsolved Whitespace Conflicts" +msgstr "Wähle C für alle ungelösten \"weißen\" Konflikte" + +#: kdiff3.cpp:505 +msgid "Automatically Solve Simple Conflicts" +msgstr "Automatisch einfache Konflikte lösen" + +#: kdiff3.cpp:506 +msgid "Set Deltas to Conflicts" +msgstr "Alle Unterschiede zu Konflikten machen" + +#: kdiff3.cpp:507 +msgid "Run Regular Expression Auto Merge" +msgstr "Regulärer-Ausdruck-Zusammenführung starten" + +#: kdiff3.cpp:508 +msgid "Automatically Solve History Conflicts" +msgstr "Automatisch History-Konflikte auflösen" + +#: kdiff3.cpp:509 +msgid "Split Diff At Selection" +msgstr "Trenne Unterschied bei der Auswahlsmarkierung" + +#: kdiff3.cpp:510 +msgid "Join Selected Diffs" +msgstr "Verbinde markierte Unterschiede" + +#: kdiff3.cpp:512 +msgid "Show Window A" +msgstr "Zeige Fenster A" + +#: kdiff3.cpp:513 +msgid "Show Window B" +msgstr "Zeige Fenster B" + +#: kdiff3.cpp:514 +msgid "Show Window C" +msgstr "Zeige Fenster C" + +#: kdiff3.cpp:515 kdiff3.cpp:526 +msgid "Focus Next Window" +msgstr "Setze Fokus zum nächsten Fenster" + +#: kdiff3.cpp:517 +msgid "Normal Overview" +msgstr "Normale Ãœbersicht" + +#: kdiff3.cpp:518 +msgid "A vs. B Overview" +msgstr "A vs. B Ãœbersicht" + +#: kdiff3.cpp:519 +msgid "A vs. C Overview" +msgstr "A vs. C Ãœbersicht" + +#: kdiff3.cpp:520 +msgid "B vs. C Overview" +msgstr "B vs. C Ãœbersicht" + +#: kdiff3.cpp:521 +msgid "Word Wrap Diff Windows" +msgstr "Zeilenumbruch für Vergleichsanzeige" + +#: kdiff3.cpp:522 +msgid "Add Manual Diff Alignment" +msgstr "Manuelle Ausrichtung hinzufügen" + +#: kdiff3.cpp:523 +msgid "Clear All Manual Diff Alignments" +msgstr "Alle manuellen Ausrichtungen entfernen" + +#: kdiff3.cpp:528 +msgid "Focus Prev Window" +msgstr "Setze Fokus zum vorigen Fenster" + +#: kdiff3.cpp:529 +msgid "Toggle Split Orientation" +msgstr "Ausrichtung der Fensterteilung wechseln" + +#: kdiff3.cpp:531 +msgid "Dir && Text Split Screen View" +msgstr "Verzeichnis && Textfenster teilen sich Hauptfenster" + +#: kdiff3.cpp:533 +msgid "Toggle Between Dir && Text View" +msgstr "Wechsel zwischen Verzeichnis && Text Fenster" + +#: kdiff3.cpp:582 pdiff.cpp:1712 +msgid "The merge result hasn't been saved." +msgstr "Das Zusammenführungsergebnis wurde nicht gespeichert." + +#: kdiff3.cpp:583 +msgid "Save && Quit" +msgstr "Speichern && Beenden" + +#: kdiff3.cpp:583 +msgid "Quit Without Saving" +msgstr "Beenden ohne zu speichern" + +#: kdiff3.cpp:591 pdiff.cpp:1721 +msgid "Saving the merge result failed." +msgstr "Speichern des Zusammenführungsergebnisses schlug fehl." + +#: kdiff3.cpp:602 pdiff.cpp:978 +msgid "" +"You are currently doing a directory merge. Are you sure, you want to abort?" +msgstr "" +"Sie führen eine Verzeichniszusammenführung durch. Sind sie sicher, dass sie " +"diese beenden möchten?" + +#: kdiff3.cpp:625 +msgid "Saving file..." +msgstr "Datei wird gespeichert ..." + +#: kdiff3.cpp:642 +msgid "Saving file with a new filename..." +msgstr "Datei wird unter neuem Namen gespeichert ..." + +#: kdiff3.cpp:732 +msgid "Printing..." +msgstr "Drucken ..." + +#: kdiff3.cpp:738 kdiff3.cpp:900 +msgid "Printing aborted." +msgstr "Drucken abgebrochen." + +#: kdiff3.cpp:870 +msgid "Selection" +msgstr "Auswahl" + +#: kdiff3.cpp:896 +msgid "Printing completed." +msgstr "Drucken beendet." + +#: kdiff3.cpp:906 +msgid "Exiting..." +msgstr "Wird beendet ..." + +#: kdiff3.cpp:918 +msgid "Toggling toolbar..." +msgstr "Werkzeugleiste (de)aktivieren ..." + +#: kdiff3.cpp:939 +msgid "Toggle the statusbar..." +msgstr "Statusleiste an/aus ..." + +#: kdiff3_part.cpp:155 kdiff3_part.cpp:224 +msgid "Couldn't find files for comparison." +msgstr "Konnte Dateien für Vergleich nicht finden." + +#: kdiff3_part.cpp:291 +msgid "KDiff3Part" +msgstr "KDiff3-Komponente" + +#: kdiff3_shell.cpp:78 +msgid "" +"Could not find our part!\n" +"This usually happens due to an installation problem. Please read the " +"README-file in the source package for details." +msgstr "" +"Konnte die KDiff3-Komponente nicht finden!\n" +"Das ist normalerweise ein Installationsproblem. Bitte lesen Sie die " +"README-Datei, die den Quelltexten beiliegt." + +#: main.cpp:35 +msgid "Tool for Comparison and Merge of Files and Directories" +msgstr "" +"Programm zum Vergleichen und Zusammenführen von Dateien und Verzeichnissen" + +#: main.cpp:40 +msgid "Merge the input." +msgstr "Quellen zusammenführen." + +#: main.cpp:42 +msgid "Explicit base file. For compatibility with certain tools." +msgstr "Explizite Basisdatei. Für Kompatibilität mit anderen Werkzeugen." + +#: main.cpp:44 +msgid "Output file. Implies -m. E.g.: -o newfile.txt" +msgstr "Ergebnisdateiname bei Zusammenführung. z.B.: -o neu.txt" + +#: main.cpp:45 +msgid "Output file, again. (For compatibility with certain tools.)" +msgstr "Ergebnisdatei. (Für Kompatibilität mit anderen Werkzeugen.)" + +#: main.cpp:46 +msgid "No GUI if all conflicts are auto-solvable. (Needs -o file)" +msgstr "" +"Kein Fenster anzeigen, wenn alle Konflikte automatisch lösbar sind. (Benötigt " +"-o)" + +#: main.cpp:47 +msgid "Don't solve conflicts automatically. (For compatibility...)" +msgstr "Keine Konflikte automatisch lösen. (Für Kompatibilität ...)" + +#: main.cpp:48 +msgid "Visible name replacement for input file 1 (base)." +msgstr "Anderer angezeigter Dateiname für erste Datei (Basis)." + +#: main.cpp:49 +msgid "Visible name replacement for input file 2." +msgstr "Anderer angezeigter Dateiname für zweite Datei." + +#: main.cpp:50 +msgid "Visible name replacement for input file 3." +msgstr "Anderer angezeigter Dateiname für dritte Datei." + +#: main.cpp:52 +msgid "Alternative visible name replacement. Supply this once for every input." +msgstr "" +"Anderer angezeigter Dateiname: Kann für jede Quelle spezifiziert werden." + +#: main.cpp:53 +msgid "" +"Override a config setting. Use once for every setting. E.g.: --cs " +"\"AutoAdvance=1\"" +msgstr "" +"Eine Einstellung ändern. Je Einstellung verwendbar. Bsp.: --cs " +"\"AutoAdvance=1\"" + +#: main.cpp:54 +msgid "Show list of config settings and current values." +msgstr "Zeige Liste aller Einstellungen und aktueller Werte." + +#: main.cpp:55 +msgid "Use a different config file." +msgstr "Eine andere Einstellungsdatei benützen." + +#: main.cpp:59 +msgid "file1 to open (base, if not specified via --base)" +msgstr "Erste Datei (Basis, falls nicht --base benützt wird)" + +#: main.cpp:60 +msgid "file2 to open" +msgstr "Zweite Datei" + +#: main.cpp:61 +msgid "file3 to open" +msgstr "Dritte Datei" + +#: main.cpp:93 +msgid "Ignored. (User defined.)" +msgstr "Ignoriert. (Benutzerdefiniert.)" + +#. i18n: file kdiff3_part.rc line 16 +#: main.cpp:173 rc.cpp:9 +#, no-c-format +msgid "KDiff3" +msgstr "KDiff3" + +#: main.cpp:186 +msgid "+ Many thanks to those who reported bugs and contributed ideas!" +msgstr "" +"+ Vielen Dank an alle, die Fehler gemeldet und Ideen beigesteuert haben!" + +#: mergeresultwindow.cpp:136 mergeresultwindow.cpp:939 +#: mergeresultwindow.cpp:953 mergeresultwindow.cpp:965 +#: mergeresultwindow.cpp:977 +msgid "Number of remaining unsolved conflicts: %1 (of which %2 are whitespace)" +msgstr "" +"Anzahl der verbleibenden ungelösten Konflikte: %1 (wobei %2 davon weiße " +"Konflikte sind)" + +#: mergeresultwindow.cpp:285 +msgid "" +"The output has been modified.\n" +"If you continue your changes will be lost." +msgstr "" +"Das Ergebnis wurde verändert.\n" +"Wenn sie fortsetzen gehen die Änderungen verloren." + +#: mergeresultwindow.cpp:797 pdiff.cpp:511 +msgid "All input files are binary equal." +msgstr "Alle Quelldateien sind binär identisch." + +#: mergeresultwindow.cpp:799 +msgid "All input files contain the same text." +msgstr "Alle Quelldateien enthalten den gleichen Text." + +#: mergeresultwindow.cpp:801 +msgid "" +"Files A and B are binary equal.\n" +msgstr "" +"Die Dateien A und B sind binär identisch.\n" + +#: mergeresultwindow.cpp:802 +msgid "" +"Files A and B have equal text. \n" +msgstr "" +"Die Dateien A und B enthalten den gleichen Text. \n" + +#: mergeresultwindow.cpp:803 +msgid "" +"Files A and C are binary equal.\n" +msgstr "" +"Die Dateien A und C sind binär identisch.\n" + +#: mergeresultwindow.cpp:804 +msgid "" +"Files A and C have equal text. \n" +msgstr "" +"Die Dateien A und C enthalten den gleichen Text. \n" + +#: mergeresultwindow.cpp:805 +msgid "" +"Files B and C are binary equal.\n" +msgstr "" +"Die Dateien B und C sind binär identisch.\n" + +#: mergeresultwindow.cpp:806 +msgid "" +"Files B and C have equal text. \n" +msgstr "" +"Die Dateien B und C enthalten den gleichen Text. \n" + +#: mergeresultwindow.cpp:812 +msgid "Total number of conflicts: " +msgstr "Gesamte Anzahl der Konflikte: " + +#: mergeresultwindow.cpp:813 +msgid "" +"\n" +"Nr of automatically solved conflicts: " +msgstr "" +"\n" +"Anzahl der automatisch gelösten Konflikte: " + +#: mergeresultwindow.cpp:814 +msgid "" +"\n" +"Nr of unsolved conflicts: " +msgstr "" +"\n" +"Anzahl der ungelösten Konflikte: " + +#: mergeresultwindow.cpp:816 +msgid "Conflicts" +msgstr "Konflikte" + +#: mergeresultwindow.cpp:1652 +msgid "" +msgstr "" + +#: mergeresultwindow.cpp:1660 +msgid "" +msgstr "" + +#: mergeresultwindow.cpp:1662 mergeresultwindow.cpp:2427 +msgid "" +msgstr "" + +#: mergeresultwindow.cpp:2635 +msgid "" +"Not all conflicts are solved yet.\n" +"File not saved.\n" +msgstr "" +"Noch sind nicht alle Konflikt gelöst.\n" +"Die Datei wurde nicht gespeichert.\n" + +#: mergeresultwindow.cpp:2637 +msgid "Conflicts Left" +msgstr "Es sind noch ungelöste Konflikte übrig" + +#: mergeresultwindow.cpp:2649 +msgid "" +"\n" +"\n" +"Creating backup failed. File not saved." +msgstr "" +"\n" +"\n" +"Die Sicherungskopie anzulegen schlug fehl. Die Datei wurde nicht gespeichert." + +#: mergeresultwindow.cpp:2649 mergeresultwindow.cpp:2689 +msgid "File Save Error" +msgstr "Fehler beim Speichern der Datei" + +#: mergeresultwindow.cpp:2689 +msgid "Error while writing." +msgstr "Fehler beim Schreiben." + +#: mergeresultwindow.cpp:3020 +msgid "Output" +msgstr "Ausgabe" + +#: mergeresultwindow.cpp:3032 mergeresultwindow.cpp:3139 +msgid "[Modified]" +msgstr "[Geändert]" + +#: mergeresultwindow.cpp:3039 +#, fuzzy +msgid "Encoding for saving" +msgstr "Dateikodierung für C:" + +#: mergeresultwindow.cpp:3075 mergeresultwindow.cpp:3081 +#: mergeresultwindow.cpp:3087 +msgid "Codec from" +msgstr "" + +#: optiondialog.cpp:362 +msgid "Unicode, 8 bit" +msgstr "Unicode, 8 bit" + +#: optiondialog.cpp:363 +msgid "Unicode" +msgstr "Unicode" + +#: optiondialog.cpp:364 +msgid "Latin1" +msgstr "Latin1" + +#: optiondialog.cpp:383 +msgid "Change this if non-ASCII characters are not displayed correctly." +msgstr "" +"Falls die speziellen Zeichen Ihrer Sprache nicht korrekt dargestellt werden, " +"können diesen Wert ändern. (Vielleicht hilfts.)" + +#: optiondialog.cpp:510 +msgid "Editor & Diff Output Font" +msgstr "Schrift für Editor & Vergleichsfenster" + +#: optiondialog.cpp:531 +msgid "Italic font for deltas" +msgstr "Kursivschrift bei Unterschieden" + +#: optiondialog.cpp:534 +msgid "" +"Selects the italic version of the font for differences.\n" +"If the font doesn't support italic characters, then this does nothing." +msgstr "" +"Unterschiede werden kursiv angezeigt.\n" +" Wenn aber diese Schriftart keine kursiven Zeichen unterstützt, passiert " +"nichts." + +#: optiondialog.cpp:542 +msgid "Color" +msgstr "Farbe" + +#: optiondialog.cpp:542 +msgid "Colors Settings" +msgstr "Farbeinstellungen" + +#: optiondialog.cpp:556 +msgid "Editor and Diff Views:" +msgstr "Editor und Unterschiedsansicht:" + +#: optiondialog.cpp:564 +msgid "Foreground color:" +msgstr "Vordergrundfarbe:" + +#: optiondialog.cpp:570 +msgid "Background color:" +msgstr "Hintergrundfarbe:" + +#: optiondialog.cpp:578 +msgid "Diff background color:" +msgstr "Hintergrundfarbe bei Unterschieden:" + +#: optiondialog.cpp:585 +msgid "Color A:" +msgstr "Farbe für A:" + +#: optiondialog.cpp:592 +msgid "Color B:" +msgstr "Farbe für B:" + +#: optiondialog.cpp:599 +msgid "Color C:" +msgstr "Farbe für C:" + +#: optiondialog.cpp:605 +msgid "Conflict color:" +msgstr "Farbe für Konflikte:" + +#: optiondialog.cpp:612 +msgid "Current range background color:" +msgstr "Hintergrundfarbe für aktuellen Bereich:" + +#: optiondialog.cpp:619 +msgid "Current range diff background color:" +msgstr "Hintergrundfarbe für Unterschiede im aktuellen Bereich:" + +#: optiondialog.cpp:625 +msgid "Color for manually aligned difference ranges:" +msgstr "Farbe für manuell ausgerichtete Unterschiede:" + +#: optiondialog.cpp:630 +msgid "Directory Comparison View:" +msgstr "Verzeichnisvergleichsansicht:" + +#: optiondialog.cpp:636 +msgid "Newest file color:" +msgstr "Farbe für neueste Datei:" + +#: optiondialog.cpp:639 +msgid "" +"Changing this color will only be effective when starting the next directory " +"comparison." +msgstr "" +"Diese Farbe zu ändern, wird erst beim Start des nächsten Verzeichnisvergleichs " +"wirksam." + +#: optiondialog.cpp:644 +msgid "Oldest file color:" +msgstr "Farbe für älteste Datei:" + +#: optiondialog.cpp:651 +msgid "Middle age file color:" +msgstr "Farbe für mittelalte Datei:" + +#: optiondialog.cpp:658 +msgid "Color for missing files:" +msgstr "Farbe für fehlende Datei:" + +#: optiondialog.cpp:670 +msgid "Editor" +msgstr "Editor" + +#: optiondialog.cpp:670 +msgid "Editor Behavior" +msgstr "Verhalten des Editors" + +#: optiondialog.cpp:680 +msgid "Tab inserts spaces" +msgstr "Tabulator fügt Leerzeichen ein" + +#: optiondialog.cpp:683 +msgid "" +"On: Pressing tab generates the appropriate number of spaces.\n" +"Off: A Tab-character will be inserted." +msgstr "" +"Falls aktiv wird bei Betätigen des Tabulaturs die passende Anzahl Leerzeichen " +"eingefügt. Sonst wird ein Tabulatorzeichen eingefügt." + +#: optiondialog.cpp:689 +msgid "Tab size:" +msgstr "Tabulator Länge:" + +#: optiondialog.cpp:694 +msgid "Auto indentation" +msgstr "Automatisch einrücken" + +#: optiondialog.cpp:697 +msgid "" +"On: The indentation of the previous line is used for a new line.\n" +msgstr "" +"Wenn aktiv, dann wird die Einrückung der vorigen Zeile bei neuen Zeilen " +"übernommen.\n" + +#: optiondialog.cpp:701 +msgid "Auto copy selection" +msgstr "Auswahl automatisch kopieren" + +#: optiondialog.cpp:704 +msgid "" +"On: Any selection is immediately written to the clipboard.\n" +"Off: You must explicitely copy e.g. via Ctrl-C." +msgstr "" +"Falls aktiv wird die Auswahl automatisch sofort in die Zwischenablage kopiert.\n" +"Sonst muss man explizit kopieren, z.B. mit Ctrl-C." + +#: optiondialog.cpp:709 +msgid "Line end style:" +msgstr "Zeilenende-Kodierung:" + +#: optiondialog.cpp:721 +msgid "" +"Sets the line endings for when an edited file is saved.\n" +"DOS/Windows: CR+LF; UNIX: LF; with CR=0D, LF=0A" +msgstr "" +"Legt die Kodierung für Zeilenenden beim Speichern fest.\n" +"DOS/Windows: CR+LF; Unix: LF; with CR=0D, LF=0A" + +#: optiondialog.cpp:732 +#, fuzzy +msgid "Diff" +msgstr "KDiff3" + +#: optiondialog.cpp:732 +#, fuzzy +msgid "Diff Settings" +msgstr "Vergleichs- und Zusammenführungs-Einstellungen" + +#: optiondialog.cpp:743 +msgid "Preserve carriage return" +msgstr "Wagenrücklaufzeichen anzeigen" + +#: optiondialog.cpp:746 +msgid "" +"Show carriage return characters '\\r' if they exist.\n" +"Helps to compare files that were modified under different operating systems." +msgstr "" +"Zeige das Wagenrücklaufzeichen '\\r' falls vorhanden.\n" +"Hilft beim Vergleich von Dateien, die unter verschiedenen Betriebssystemen " +"geändert wurden." + +#: optiondialog.cpp:751 +msgid "Ignore numbers" +msgstr "Zahlen ignorieren" + +#: optiondialog.cpp:754 +msgid "" +"Ignore number characters during line matching phase. (Similar to Ignore white " +"space.)\n" +"Might help to compare files with numeric data." +msgstr "" +"Zahlen werden während des Vergleichs wie \"weiße\" Zeichen behandelt.\n" +"Könnte helfen, wenn Dateien viele Zahlen enthalten." + +#: optiondialog.cpp:759 +msgid "Ignore C/C++ comments" +msgstr "Ignoriere C/C++ Kommentare" + +#: optiondialog.cpp:761 +msgid "Treat C/C++ comments like white space." +msgstr "Behandle C/C++ Kommentare wie \"weiße\" Zeichen." + +#: optiondialog.cpp:765 +msgid "Ignore case" +msgstr "Unterschiede bei Groß- und Kleinschreibung ignorieren" + +#: optiondialog.cpp:768 +msgid "Treat case differences like white space changes. ('a'<=>'A')" +msgstr "" +"Unterschiede bei Groß- und Kleinschreibung wie weiße Unterschiede behandeln. " +"('a'<=>'A')" + +#: optiondialog.cpp:772 +msgid "Preprocessor command:" +msgstr "Vorverarbeitungsbefehl:" + +#: optiondialog.cpp:776 +msgid "User defined pre-processing. (See the docs for details.)" +msgstr "" +"Benutzerdefinierbare Vorverarbeitung: (Siehe Beschreibung für Details.)" + +#: optiondialog.cpp:779 +msgid "Line-matching preprocessor command:" +msgstr "Vorverarbeitungsbefehl nur für Zeilenabgleich:" + +#: optiondialog.cpp:783 +msgid "" +"This pre-processor is only used during line matching.\n" +"(See the docs for details.)" +msgstr "" +"Dieser Vorverarbeitungsbefehl wirkt nur in der Phase des Zeilenabgleichs.\n" +"(Für Details siehe die Dokumentation.)" + +#: optiondialog.cpp:786 +msgid "Try hard (slower)" +msgstr "Aufwendig suchen (langsamer)" + +#: optiondialog.cpp:789 +msgid "" +"Enables the --minimal option for the external diff.\n" +"The analysis of big files will be much slower." +msgstr "" +"Der Vergleichsalgorithmus versucht aufwendig nach kleinem Satz von Änderungen " +"zu suchen. \n" +"Für sehr große Dateien kann der Vergleich viel langsamer sein." + +#: optiondialog.cpp:794 +msgid "Auto advance delay (ms):" +msgstr "Automatisch-Weiterspringen-Verzögerung (ms):" + +#: optiondialog.cpp:799 +msgid "" +"When in Auto-Advance mode the result of the current selection is shown \n" +"for the specified time, before jumping to the next conflict. Range: 0-2000 ms" +msgstr "" +"Wenn automatisches Weiterspringen aktiviert ist, wird das Ergebnis der letzten " +"Auswahl\n" +"für diese Dauer angezeigt, bevor weitergesprungen wird. (0-2000 ms)" + +#: optiondialog.cpp:809 +#, fuzzy +msgid "Merge Settings" +msgstr "Vergleichs- und Zusammenführungs-Einstellungen" + +#: optiondialog.cpp:822 +msgid "White space 2-file merge default:" +msgstr "\"Weiße\" Zeichen Autoauswahl bei 2 Dateien:" + +#: optiondialog.cpp:826 optiondialog.cpp:839 +msgid "Manual Choice" +msgstr "Manuelle Auswahl" + +#: optiondialog.cpp:830 optiondialog.cpp:844 +msgid "" +"Allow the merge algorithm to automatically select an input for white-space-only " +"changes." +msgstr "" +"Bei Datei-Zusammenführungen wird automatisch diese Vorauswahl für " +"ausschliesslich \"weiße\" Konflikte gewählt." + +#: optiondialog.cpp:835 +msgid "White space 3-file merge default:" +msgstr "\"Weiße\" Zeichen Autoauswahl bei 3 Dateien:" + +#: optiondialog.cpp:849 +msgid "Automatic Merge Regular Expression" +msgstr "Regulärer Ausdrück für automatische Zusammenführung" + +#: optiondialog.cpp:858 smalldialogs.cpp:397 +msgid "Auto merge regular expression:" +msgstr "Regulärer Ausdrück für automatische Zusammenführung:" + +#: optiondialog.cpp:862 +msgid "" +"Regular expression for lines where KDiff3 should automatically choose one " +"source.\n" +"When a line with a conflict matches the regular expression then\n" +"- if available - C, otherwise B will be chosen." +msgstr "" +"Regulärer Ausdruck für Zeilen, wo KDiff3 automatisch eine Quelle auswählen " +"soll.\n" +"Wenn eine Konfliktzeile auf diesen regulären Ausdruck passt, wird\n" +"- sofern verfügbar - C, ansonsten B ausgewählt." + +#: optiondialog.cpp:868 +msgid "Run regular expression auto merge on merge start" +msgstr "" +"Zusammenführung für Regulären Ausdruck beim Start einer Zusammenführung " +"durchführen" + +#: optiondialog.cpp:870 +msgid "" +"Run the merge for auto merge regular expressions\n" +"immediately when a merge starts.\n" +msgstr "" +"Führe die Zusammenführung für Reguläre Ausdrücke sofort\n" +"beim Start einer Zusammenführung durch.\n" + +#: optiondialog.cpp:875 +msgid "Version Control History Merging" +msgstr "Versionsverwaltungs History-Zusammenführung" + +#: optiondialog.cpp:884 smalldialogs.cpp:424 +msgid "History start regular expression:" +msgstr "Regulärer Ausdruck für History-Start:" + +#: optiondialog.cpp:888 +msgid "" +"Regular expression for the start of the version control history entry.\n" +"Usually this line contains the \"$Log$\"-keyword.\n" +"Default value: \".*\\$Log.*\\$.*\"" +msgstr "" +"Regulärer Ausdruck für die Startzeile der Versionsverwaltungs-History.\n" +"Normalerweise enthält diese Zeile das \"$Log$\"-Schlüsselwort.\n" +"Voreinstellung: \".*\\$Log.*\\$.*\"" + +#: optiondialog.cpp:894 smalldialogs.cpp:453 +msgid "History entry start regular expression:" +msgstr "Regulärer Ausdruck für History-Eintrag-Startzeile:" + +#: optiondialog.cpp:906 +msgid "" +"A version control history entry consists of several lines.\n" +"Specify the regular expression to detect the first line (without the leading " +"comment).\n" +"Use parentheses to group the keys you want to use for sorting.\n" +"If left empty, then KDiff3 assumes that empty lines separate history entries.\n" +"See the documentation for details." +msgstr "" +"Ein Versionsverwaltungs-History Eintrag besteht aus mehreren Zeilen.\n" +"Geben Sie einen regulären Ausdruck an, um die erste Zeile (ohne die\n" +"voranstehenden Kommentarzeichen) zu erkennen.\n" +"Verwenden Sie runde Klammern um Sortierschlüssel zu gruppieren.\n" +"Wenn leergelassen, nimmt KDiff3 an, dass die History-Einträge durch Leerzeilen\n" +"getrennt sind. (Siehe Dokumentation für Details.)" + +#: optiondialog.cpp:914 +msgid "History merge sorting" +msgstr "Sortierte History-Zusammenführung" + +#: optiondialog.cpp:916 +msgid "Sort version control history by a key." +msgstr "Schlüsselbasierte Sortierung der Versionsverwaltungs-Historyeinträge" + +#: optiondialog.cpp:926 +msgid "History entry start sort key order:" +msgstr "Historyeintragsstart Sortierschlüsselreihenfolge:" + +#: optiondialog.cpp:930 +msgid "" +"Each parentheses used in the regular expression for the history start entry\n" +"groups a key that can be used for sorting.\n" +"Specify the list of keys (that are numbered in order of occurrence\n" +"starting with 1) using ',' as separator (e.g. \"4,5,6,1,2,3,7\").\n" +"If left empty, then no sorting will be done.\n" +"See the documentation for details." +msgstr "" +"Jede runde Klammer im regulären Ausdruck des History-Start-Eintrags\n" +"gruppiert einen Schlüssel der für Sortierung benützt werden kann.\n" +"Geben Sie eine liste der Schlüssel an (nummeriert in der Auftrittsreihenfolge,\n" +"mit 1 beginnend), wobei Komma ',' als Trennzeichen benützt wird. (z.B.: " +"\"4,5,6,1,2,3,7\").\n" +"Wenn der Eintrag leer ist, wird keine Sortierung durchgeführt.\n" +"(Siehe Dokumentation für Details)." + +#: optiondialog.cpp:941 +msgid "Merge version control history on merge start" +msgstr "" +"Versionsverwaltungs-History beim Start einer Zusammenführung zusammenführen" + +#: optiondialog.cpp:943 +msgid "Run version control history automerge on merge start." +msgstr "" +"Starte Versionsverwaltungs-History-Zusammenführung beim Start einer " +"Zusammenführung" + +#: optiondialog.cpp:947 +msgid "Test your regular expressions" +msgstr "Testen Sie Ihre regulären Ausdrücke" + +#: optiondialog.cpp:952 +msgid "Irrelevant merge command:" +msgstr "Befehl bei irrelevanter Zusammenführung:" + +#: optiondialog.cpp:956 +msgid "" +"If specified this script is run after automerge\n" +"when no other relevant changes were detected.\n" +"Called with the parameters: filename1 filename2 filename3" +msgstr "" +"Wenn spezifiziert wird dieser Befehl nach einer automatischen Zusammenführung \n" +"ausgeführt, wenn keine relevanten Änderungen detektiert wurden.\n" +"Aufruf erfolgt mit den Parametern: Dateiname1 Dateiname2 Dateiname3" + +#: optiondialog.cpp:966 +msgid "Directory Merge" +msgstr "Verzeichnis-Zusammenführung" + +#: optiondialog.cpp:975 +msgid "Recursive directories" +msgstr "Rekursive Verzeichnisse" + +#: optiondialog.cpp:977 +msgid "Whether to analyze subdirectories or not." +msgstr "Falls aktiv werden auch Unterverzeichnisse eingelesen." + +#: optiondialog.cpp:979 +msgid "File pattern(s):" +msgstr "Datei Muster:" + +#: optiondialog.cpp:984 +msgid "" +"Pattern(s) of files to be analyzed. \n" +"Wildcards: '*' and '?'\n" +"Several Patterns can be specified by using the separator: ';'" +msgstr "" +"Muster der zu analysierenden Dateien. \n" +"Jokerzeichen: '*' und '?'\n" +"Mehrer Muster können angegeben werden, indem das Trennzeichen ';' benützt wird." + +#: optiondialog.cpp:990 +msgid "File-anti-pattern(s):" +msgstr "Datei Anti-Muster:" + +#: optiondialog.cpp:995 +msgid "" +"Pattern(s) of files to be excluded from analysis. \n" +"Wildcards: '*' and '?'\n" +"Several Patterns can be specified by using the separator: ';'" +msgstr "" +"Muster der auszuschließenden Dateien. \n" +"Jokerzeichen: '*' und '?'\n" +"Mehrer Muster können angegeben werden, indem das Trennzeichen ';' benützt wird." + +#: optiondialog.cpp:1001 +msgid "Dir-anti-pattern(s):" +msgstr "Verzeichnis Anti-Muster:" + +#: optiondialog.cpp:1006 +msgid "" +"Pattern(s) of directories to be excluded from analysis. \n" +"Wildcards: '*' and '?'\n" +"Several Patterns can be specified by using the separator: ';'" +msgstr "" +"Muster der auszuschließenden Verzeichnisse. \n" +"Jokerzeichen: '*' und '?'\n" +"Mehrer Muster können angegeben werden, indem das Trennzeichen ';' benützt wird." + +#: optiondialog.cpp:1012 +msgid "Use .cvsignore" +msgstr ".cvsignore benützen" + +#: optiondialog.cpp:1015 +msgid "" +"Extends the antipattern to anything that would be ignored by CVS.\n" +"Via local \".cvsignore\"-files this can be directory specific." +msgstr "" +"Erweitert die Anti-Muster um alles, das auch CVS ignorieren würde.\n" +"Mit Hilfe der lokalen \".cvsignore\"-Dateien ist dies Verzeichnis-spezifisch." + +#: optiondialog.cpp:1020 +msgid "Find hidden files and directories" +msgstr "Finde versteckte Dateien und Verzeichnisse" + +#: optiondialog.cpp:1023 +msgid "Finds files and directories with the hidden attribute." +msgstr "Findet versteckte Dateien und Verzeichnisse." + +#: optiondialog.cpp:1025 +msgid "Finds files and directories starting with '.'." +msgstr "Findet versteckte Dateien und Verzeichnisse, die mit '.' beginnen." + +#: optiondialog.cpp:1029 +msgid "Follow file links" +msgstr "Folge Datei-Verknüpfungen" + +#: optiondialog.cpp:1032 +msgid "" +"On: Compare the file the link points to.\n" +"Off: Compare the links." +msgstr "" +"Falls aktiv werden die Dateien auf die die Verknüpfung verweist, verglichen.\n" +"Sonst nur die Verknüpfungen selbst." + +#: optiondialog.cpp:1037 +msgid "Follow directory links" +msgstr "Folge Verzeichnis-Verküpfungen" + +#: optiondialog.cpp:1040 +msgid "" +"On: Compare the directory the link points to.\n" +"Off: Compare the links." +msgstr "" +"Falls aktiv werden die Verzeichnisse, auf die eine Verküpfung zeigt, " +"verglichen.\n" +"Sonst nur die Verknüpfungen." + +#: optiondialog.cpp:1056 +msgid "Case sensitive filename comparison" +msgstr "Groß-/kleinschreibung bei Dateinamen" + +#: optiondialog.cpp:1059 +msgid "" +"The directory comparison will compare files or directories when their names " +"match.\n" +"Set this option if the case of the names must match. (Default for Windows is " +"off, otherwise on.)" +msgstr "" +"Der Verzeichnisvergleich vergleicht Dateien und Verzeichnisse wenn deren Namen " +"gleich sind.\n" +"Aktivieren Sie diese Einstellung, wenn es auch auf Groß-/Kleinschreibung im " +"Dateinamen ankommt. (Voreinstellung für Windows ist aus, sonst ein.)" + +#: optiondialog.cpp:1063 +msgid "File Comparison Mode" +msgstr "Dateivergleichsmethode" + +#: optiondialog.cpp:1067 +msgid "Binary comparison" +msgstr "Binärvergleich" + +#: optiondialog.cpp:1068 +msgid "Binary comparison of each file. (Default)" +msgstr "Binärvergleich aller Dateien (Voreinstellung)" + +#: optiondialog.cpp:1070 +msgid "Full analysis" +msgstr "Vollständige Analyse" + +#: optiondialog.cpp:1071 +msgid "" +"Do a full analysis and show statistics information in extra columns.\n" +"(Slower than a binary comparison, much slower for binary files.)" +msgstr "" +"Vollständige Analyse durchführen und Statistik-Information in eigenen Spalten " +"anzeigen.\n" +"(Langsamer als Binärvergleich, viel langsamer bei Binärdateien.)" + +#: optiondialog.cpp:1074 +msgid "Trust the modification date (unsafe)" +msgstr "Vertraue dem Änderungsdatum (unsicher)" + +#: optiondialog.cpp:1075 +msgid "" +"Assume that files are equal if the modification date and file length are " +"equal.\n" +"Useful for big directories or slow networks." +msgstr "" +"Annahme, dass Dateien identisch sind, wenn das Änderungsdatum und die Größe " +"übereinstimmen.\n" +"Hilfreich bei großen Verzeichnissen oder langsamen Verbindungen." + +#: optiondialog.cpp:1078 +msgid "Trust the size (unsafe)" +msgstr "Vertraue der Größe (unsicher)" + +#: optiondialog.cpp:1079 +msgid "" +"Assume that files are equal if their file lengths are equal.\n" +"Useful for big directories or slow networks when the date is modified during " +"download." +msgstr "" +"Annahme, dass Dateien identisch sind, wenn die Größe übereinstimmt.\n" +"Hilfreich bei großen Verzeichnissen oder langsamen Verbindungen, wenn das " +"Veränderungsdatum beim Kopieren modifiziert wird." + +#: optiondialog.cpp:1083 +msgid "Synchronize directories" +msgstr "Verzeichnisse synchronisieren" + +#: optiondialog.cpp:1086 +msgid "" +"Offers to store files in both directories so that\n" +"both directories are the same afterwards.\n" +"Works only when comparing two directories without specifying a destination." +msgstr "" +"Dateien werden in beiden Verzeichnissen gespeichert, damit die Verzeichnisse " +"nachher identisch sind.\n" +"Funktioniert nur, wenn zwei Verzeichnisse verglichen werden, und kein Ziel " +"angegeben wird." + +#: optiondialog.cpp:1092 +msgid "White space differences considered equal" +msgstr "Dateien mit \"Weißen\" Unterschieden als gleich markieren" + +#: optiondialog.cpp:1095 +msgid "" +"If files differ only by white space consider them equal.\n" +"This is only active when full analysis is chosen." +msgstr "" +"Wenn sich Dateien nur durch weiße Zeichen unterscheiden, sollen diese wie " +"gleiche Dateien behandelt werden.\n" +" Dies ist nur wählbar, wenn vollständige Analyse ausgewählt ist." + +#: optiondialog.cpp:1101 +msgid "Copy newer instead of merging (unsafe)" +msgstr "Neuere Datei statt Zusammenführung auswählen (unsicher)" + +#: optiondialog.cpp:1104 +msgid "" +"Don't look inside, just take the newer file.\n" +"(Use this only if you know what you are doing!)\n" +"Only effective when comparing two directories." +msgstr "" +"Falls aktiv würde bei unterschiedlichen Dateien immer die neuere Datei als " +"Aktion vorgeschlagen werden.\n" +"(Nicht empfehlenswert, wenn beide Versionen Änderungen enthalten könnten.)\n" +"Falls inaktiv wird eine Zusammenführung vorgeschlagen.\n" +"Nur beim Vergleich zweier Verzeichnisse wirksam." + +#: optiondialog.cpp:1109 +msgid "Backup files (.orig)" +msgstr "Sicherungskopie erstellen (.orig)" + +#: optiondialog.cpp:1112 +msgid "" +"When a file would be saved over an old file, then the old file\n" +"will be renamed with a '.orig'-extension instead of being deleted." +msgstr "" +"Wenn eine Datei über eine existierende Datei gespeichert würde, wird die \n" +"bestehende Datei mit der Erweiterung '.orig' umbenannt und nicht gelöscht." + +#: optiondialog.cpp:1176 +msgid "Regional Settings" +msgstr "Regionale Einstellungen" + +#: optiondialog.cpp:1272 +msgid "Language (restart required)" +msgstr "Sprache (Neustart erforderlich)" + +#: optiondialog.cpp:1304 +msgid "" +"Choose the language of the GUI-strings or \"Auto\".\n" +"For a change of language to take place, quit and restart KDiff3." +msgstr "" +"Sprache für das Benutzerinterface wählen oder \"Auto\".\n" +"Diese Änderung wird erst nach Beendigung und Neustart von KDiff3 wirksam." + +#: optiondialog.cpp:1322 +msgid "Use the same encoding for everything:" +msgstr "Die gleiche Kodierung für alles benützen:" + +#: optiondialog.cpp:1325 +msgid "" +"Enable this allows to change all encodings by changing the first only.\n" +"Disable this if different individual settings are needed." +msgstr "" +"Durch Aktivierung dieser Option können alle Kodierungen durch Setzen der ersten " +"eingestellt werden. Dies auszuschalten erlaubt unterschiedliche individuelle " +"Einstellungen." + +#: optiondialog.cpp:1330 +msgid "Note: Local Encoding is " +msgstr "Hinweis: Die lokale Kodierung ist " + +#: optiondialog.cpp:1334 +msgid "File Encoding for A:" +msgstr "Dateikodierung für A:" + +#: optiondialog.cpp:1340 +msgid "" +"If enabled then Unicode (UTF-16 or UTF-8) encoding will be detected.\n" +"If the file encoding is not detected then the selected encoding will be used as " +"fallback.\n" +"(Unicode detection depends on the first bytes of a file - the byte order mark " +"\"BOM\".)" +msgstr "" + +#: optiondialog.cpp:1344 optiondialog.cpp:1353 optiondialog.cpp:1362 +msgid "Auto Detect Unicode" +msgstr "" + +#: optiondialog.cpp:1349 +msgid "File Encoding for B:" +msgstr "Dateikodierung für B:" + +#: optiondialog.cpp:1358 +msgid "File Encoding for C:" +msgstr "Dateikodierung für C:" + +#: optiondialog.cpp:1367 +msgid "File Encoding for Merge Output and Saving:" +msgstr "Dateikodierung für Zusammenführung und Speichern:" + +#: optiondialog.cpp:1371 +#, fuzzy +msgid "Auto Select" +msgstr "Auswahl automatisch kopieren" + +#: optiondialog.cpp:1374 +msgid "" +"If enabled then the encoding from the input files is used.\n" +"In ambiguous cases a dialog will ask the user to choose the encoding for " +"saving." +msgstr "" + +#: optiondialog.cpp:1378 +msgid "File Encoding for Preprocessor Files:" +msgstr "Dateikodierung für Präprozessor Dateien:" + +#: optiondialog.cpp:1389 +msgid "Right To Left Language" +msgstr "Rechts-Nach-Links Sprache" + +#: optiondialog.cpp:1392 +msgid "" +"Some languages are read from right to left.\n" +"This setting will change the viewer and editor accordingly." +msgstr "" +"Einige Sprachen werden von rechts nach links gelesen.\n" +"Diese Einstellung ändert die Anzeige und den Editor entsprechend." + +#: optiondialog.cpp:1402 +msgid "Integration" +msgstr "Integration" + +#: optiondialog.cpp:1402 +msgid "Integration Settings" +msgstr "Einstellungen für Integration" + +#: optiondialog.cpp:1412 +msgid "Command line options to ignore:" +msgstr "Ignorierbare Kommandozeilenoptionen:" + +#: optiondialog.cpp:1417 +msgid "" +"List of command line options that should be ignored when KDiff3 is used by " +"other tools.\n" +"Several values can be specified if separated via ';'\n" +"This will suppress the \"Unknown option\"-error." +msgstr "" +"Liste der Kommandozeilenoptionen die ignoriert werden sollen, wenn KDiff3\n" +"von anderen Werkzeugen aufgerufen wird.\n" +"Mehrere Werte können mit Trennzeichen ';' angegeben werden.\n" +"Dies wird die Fehlermeldung \"Unbekannte Option\" beim Start unterdrücken." + +#: optiondialog.cpp:1480 +msgid "" +"You selected a variable width font.\n" +"\n" +"Because this program doesn't handle variable width fonts\n" +"correctly, you might experience problems while editing.\n" +"\n" +"Do you want to continue or do you want to select another font." +msgstr "" +"Sie haben eine Schrift mit variabler Breite gewählt.\n" +"\n" +"Weil dieses Programm nicht mit solchen Schriften umgehen kann,\n" +"werden beim Editieren wahrscheinlich Probleme auftreten. \n" +"\n" +"Wollen Sie mit dieser Schrift fortfahren oder doch eine andere Schrift wählen?" + +#: optiondialog.cpp:1484 +msgid "Incompatible Font" +msgstr "Inkompatible Schriftart" + +#: optiondialog.cpp:1485 +msgid "Continue at Own Risk" +msgstr "Weiter auf eigenes Risiko" + +#: optiondialog.cpp:1485 +msgid "Select Another Font" +msgstr "Andere Schrift wählen" + +#: optiondialog.cpp:1521 +msgid "This resets all options. Not only those of the current topic." +msgstr "" +"Dies führt zum zurücksetzen aller Einstellungen, nicht nur des aktuellen " +"Themas." + +#: pdiff.cpp:258 +msgid "PreprocessorCmd: " +msgstr "Vorverarbeitungsbefehl: " + +#: pdiff.cpp:263 +msgid "" +"The following option(s) you selected might change data:\n" +msgstr "" +"Die folgende(n) aktive(n) Einstellung(en) könnten Daten verändern.\n" + +#: pdiff.cpp:264 +msgid "" +"\n" +"Most likely this is not wanted during a merge.\n" +"Do you want to disable these settings or continue with these settings active?" +msgstr "" +"\n" +"Wahrscheinlich ist dies während der Dateizusammenführung nicht erwünscht.\n" +"Wollen Sie diese Einstellungen deaktivieren oder beibehalten und fortfahren?" + +#: pdiff.cpp:266 +msgid "Option Unsafe for Merging" +msgstr "Einstellung ist unsicher bei Dateizusammenführungen" + +#: pdiff.cpp:267 +msgid "Use These Options During Merge" +msgstr "Verwendung dieser Option während der Zusammenführung" + +#: pdiff.cpp:267 +msgid "Disable Unsafe Options" +msgstr "Unsichere Einstellung deaktivieren" + +#: pdiff.cpp:297 +msgid "Loading A" +msgstr "Lade A" + +#: pdiff.cpp:301 +msgid "Loading B" +msgstr "Lade B" + +#: pdiff.cpp:318 pdiff.cpp:344 +msgid "Diff: A <-> B" +msgstr "Vergleiche: A <-> B" + +#: pdiff.cpp:324 pdiff.cpp:366 +msgid "Linediff: A <-> B" +msgstr "Zeilenvergleich: A <-> B" + +#: pdiff.cpp:335 +msgid "Loading C" +msgstr "Lade C" + +#: pdiff.cpp:347 +msgid "Diff: B <-> C" +msgstr "Vergleiche: B <-> C" + +#: pdiff.cpp:350 +msgid "Diff: A <-> C" +msgstr "Vergleiche: A <-> C" + +#: pdiff.cpp:369 +msgid "Linediff: B <-> C" +msgstr "Zeilenvergleiche: B <-> C" + +#: pdiff.cpp:372 +msgid "Linediff: A <-> C" +msgstr "Zeilenvergleich: A <-> C" + +#: pdiff.cpp:513 +msgid "All input files contain the same text, but are not binary equal." +msgstr "" +"Alle Quelldateien enthalten den gleichen Text, sind aber nicht binär identisch." + +#: pdiff.cpp:515 pdiff.cpp:517 pdiff.cpp:519 +msgid "" +"Files %1 and %2 are binary equal.\n" +msgstr "" +"Die Dateien %1 und %2 sind binär identisch.\n" + +#: pdiff.cpp:516 pdiff.cpp:518 pdiff.cpp:520 +msgid "" +"Files %1 and %2 have equal text, but are not binary equal. \n" +msgstr "" +"Die Dateien %1 und %2 haben den gleichen Text, sind aber nicht binär " +"identisch.\n" + +#: pdiff.cpp:530 +msgid "" +"Some inputfiles don't seem to be pure textfiles.\n" +"Note that the KDiff3-merge was not meant for binary data.\n" +"Continue at your own risk." +msgstr "" +"Einige Quelldateien scheinen keine reinen Textdateien zu sein.\n" +"Beachten Sie, dass KDiff3 nicht für den Binärdatenvergleich konzipiert ist.\n" +"Machen Sie auf eigenes Risiko weiter." + +#: pdiff.cpp:979 +msgid "Abort" +msgstr "Abbrechen" + +#: pdiff.cpp:985 pdiff.cpp:1073 +msgid "Opening files..." +msgstr "Dateien öffnen ..." + +#: pdiff.cpp:1050 pdiff.cpp:1121 +msgid "File open error" +msgstr "Fehler beim Öffnen der Datei" + +#: pdiff.cpp:1153 +msgid "Cutting selection..." +msgstr "Auswahl wird ausgeschnitten ..." + +#: pdiff.cpp:1174 +msgid "Copying selection to clipboard..." +msgstr "Auswahl wird in Zwischenablage kopiert ..." + +#: pdiff.cpp:1190 +msgid "Inserting clipboard contents..." +msgstr "Inhalt der Zwischenablage wird eingefügt ..." + +#: pdiff.cpp:1713 +msgid "Save && Continue" +msgstr "Speichern && Fortsetzen" + +#: pdiff.cpp:1713 +msgid "Continue Without Saving" +msgstr "Fortsetzen ohne zu Speichern" + +#: pdiff.cpp:1920 +msgid "Search complete." +msgstr "Suche abgeschlossen." + +#: pdiff.cpp:1920 +msgid "Search Complete" +msgstr "Suche abgeschlossen" + +#: pdiff.cpp:2144 +msgid "Nothing is selected in either diff input window." +msgstr "In keinem der Unterschiedsfenster ist eine Auswahl markiert." + +#: pdiff.cpp:2144 +msgid "Error while adding manual diff range" +msgstr "Fehler beim Hinzufügen einer manuellen Ausrichtung." + +#. i18n: file kdiff3_part.rc line 4 +#: rc.cpp:3 +#, no-c-format +msgid "&KDiff3" +msgstr "&KDiff3" + +#. i18n: file kdiff3_part.rc line 13 +#: rc.cpp:6 +#, no-c-format +msgid "Configure KDiff3" +msgstr "KDiff3 einrichten" + +#. i18n: file kdiff3_shell.rc line 7 +#: rc.cpp:15 +#, no-c-format +msgid "&Directory" +msgstr "V&erzeichnis" + +#. i18n: file kdiff3_shell.rc line 30 +#: rc.cpp:18 +#, no-c-format +msgid "Current Item Merge Operation" +msgstr "Zusammenführaktion für aktuelles Element" + +#. i18n: file kdiff3_shell.rc line 38 +#: rc.cpp:21 +#, no-c-format +msgid "Current Item Sync Operation" +msgstr "Synchronisationsaktion für aktuelles Element" + +#. i18n: file kdiff3_shell.rc line 50 +#: rc.cpp:24 +#, no-c-format +msgid "&Movement" +msgstr "&Navigation" + +#. i18n: file kdiff3_shell.rc line 61 +#: rc.cpp:27 +#, no-c-format +msgid "D&iffview" +msgstr "Vergleichsansicht" + +#. i18n: file kdiff3_shell.rc line 73 +#: rc.cpp:30 +#, no-c-format +msgid "&Merge" +msgstr "&Zusammenführen" + +#. i18n: file kdiff3_shell.rc line 95 +#: rc.cpp:33 +#, no-c-format +msgid "&Window" +msgstr "&Fenster" + +#: smalldialogs.cpp:53 +msgid "A (Base):" +msgstr "A (Basis):" + +#: smalldialogs.cpp:59 smalldialogs.cpp:75 smalldialogs.cpp:91 +#: smalldialogs.cpp:134 +msgid "File..." +msgstr "Datei ..." + +#: smalldialogs.cpp:61 smalldialogs.cpp:77 smalldialogs.cpp:93 +#: smalldialogs.cpp:136 +msgid "Dir..." +msgstr "Verzeichnis ..." + +#: smalldialogs.cpp:86 +msgid "C (Optional):" +msgstr "C (Optional):" + +#: smalldialogs.cpp:108 +msgid "Swap/Copy Names ..." +msgstr "Tausche/Kopiere Namen ..." + +#: smalldialogs.cpp:114 smalldialogs.cpp:115 smalldialogs.cpp:116 +msgid "Swap %1<->%2" +msgstr "Tausche %1<->%2" + +#: smalldialogs.cpp:117 smalldialogs.cpp:118 smalldialogs.cpp:119 +msgid "Copy %1->Output" +msgstr "Kopiere %1->Ziel" + +#: smalldialogs.cpp:120 smalldialogs.cpp:121 smalldialogs.cpp:122 +msgid "Swap %1<->Output" +msgstr "Tausche %1<->Ziel" + +#: smalldialogs.cpp:129 +msgid "Output (optional):" +msgstr "Ziel (optional):" + +#: smalldialogs.cpp:158 +msgid "Configure..." +msgstr "Einrichten ..." + +#: smalldialogs.cpp:347 +msgid "Search text:" +msgstr "Suchtext:" + +#: smalldialogs.cpp:354 +msgid "Case sensitive" +msgstr "Groß/Kleinschreibung beachten" + +#: smalldialogs.cpp:357 +msgid "Search A" +msgstr "Suche in A" + +#: smalldialogs.cpp:362 +msgid "Search B" +msgstr "Suche in B" + +#: smalldialogs.cpp:367 +msgid "Search C" +msgstr "Suche in C" + +#: smalldialogs.cpp:372 +msgid "Search output" +msgstr "Suche im Ergebnis" + +#: smalldialogs.cpp:377 +msgid "&Search" +msgstr "&Suchen" + +#: smalldialogs.cpp:394 +msgid "Regular Expression Tester" +msgstr "Testhilfe für reguläre Ausdrücke" + +#: smalldialogs.cpp:405 +msgid "Example auto merge line:" +msgstr "Beispielzeile für automatische Zusammenführung:" + +#: smalldialogs.cpp:407 +msgid "For auto merge test copy a line as used in your files." +msgstr "Kopieren Sie eine Testzeile aus Ihrer Datei." + +#: smalldialogs.cpp:413 smalldialogs.cpp:442 smalldialogs.cpp:479 +msgid "Match result:" +msgstr "Ãœbereinstimmungsergebnis:" + +#: smalldialogs.cpp:432 +msgid "Example history start line (with leading comment):" +msgstr "Beispielzeile für History-Startzeile (mit Kommentarzeichen):" + +#: smalldialogs.cpp:435 +msgid "" +"Copy a history start line as used in your files,\n" +"including the leading comment." +msgstr "" +"Kopieren Sie eine History-Startzeile aus Ihren Dateien,\n" +"inklusive der Kommentarzeichen am Anfang der Zeile." + +#: smalldialogs.cpp:461 +msgid "History sort key order:" +msgstr "History-Sortierschlüsselreihenfolge:" + +#: smalldialogs.cpp:469 +msgid "Example history entry start line (without leading comment):" +msgstr "Historyeintragbeispielstartzeile (ohne Kommentarzeichen):" + +#: smalldialogs.cpp:471 +msgid "" +"Copy a history entry start line as used in your files,\n" +"but omit the leading comment." +msgstr "" +"Kopieren Sie eine Historyeintragsstartzeile aus Ihren Dateien,\n" +"wobei Sie hier die Kommentarzeichen am Anfang weglassen." + +#: smalldialogs.cpp:486 +msgid "Sort key result:" +msgstr "Sortierschlüsselergebnis:" + +#: smalldialogs.cpp:537 smalldialogs.cpp:547 smalldialogs.cpp:568 +msgid "Match success." +msgstr "Ãœbereinstimmung erfolgreich." + +#: smalldialogs.cpp:541 smalldialogs.cpp:551 smalldialogs.cpp:574 +msgid "Match failed." +msgstr "Ãœbereinstimmung fehlgeschlagen." + +#: smalldialogs.cpp:559 +msgid "Opening and closing parentheses don't match in regular expression." +msgstr "" +"Öffnende und schließende runde Klammern in regulärem Ausdruck passen nicht " +"zusammen." + +#~ msgid "Diff and Merge" +#~ msgstr "Vergleich und Zusammenführung" diff --git a/po/el.po b/po/el.po new file mode 100644 index 0000000..0b086a6 --- /dev/null +++ b/po/el.po @@ -0,0 +1,2567 @@ +# translation of kdiff3.po to Greek +# +# Spiros Georgaras , 2005, 2006, 2007. +# Toussis Manolis , 2005, 2006. +msgid "" +msgstr "" +"Project-Id-Version: kdiff3\n" +"POT-Creation-Date: 2006-11-05 08:45+0100\n" +"PO-Revision-Date: 2007-03-15 15:23+0200\n" +"Last-Translator: Spiros Georgaras \n" +"Language-Team: Greek \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: KBabel 1.11.4\n" + +#: _translatorinfo.cpp:1 +msgid "" +"_: NAME OF TRANSLATORS\n" +"Your names" +msgstr "ΣπÏÏος ΓεωÏγαÏάς,ΤοÏσης Μανώλης" + +#: _translatorinfo.cpp:3 +msgid "" +"_: EMAIL OF TRANSLATORS\n" +"Your emails" +msgstr "sngeorgaras@otenet.gr,manolis@koppermind.homelinux.org" + +#: diff.cpp:246 +msgid "Writing clipboard data to temp file failed." +msgstr "Η εγγÏαφή δεδομένων στο Ï€ÏοσωÏινό αÏχείο απέτυχε." + +#: diff.cpp:250 +msgid "From Clipboard" +msgstr "Από το Ï€ÏόχειÏο" + +#: diff.cpp:491 +msgid "" +"Preprocessing possibly failed. Check this command:\n" +"\n" +" %1\n" +"\n" +"The preprocessing command will be disabled now." +msgstr "" +"Η Ï€ÏοεπεξεÏγασία απέτυχε. Ελέγξτε αυτή την εντολή:\n" +"\n" +" %1\n" +"\n" +"Η εντολή Ï€ÏοεπεξεÏγασίας θα απενεÏγοποιηθεί Ï„ÏŽÏα." + +#: diff.cpp:526 +msgid "" +"The line-matching-preprocessing possibly failed. Check this command:\n" +"\n" +" %1\n" +"\n" +"The line-matching-preprocessing command will be disabled now." +msgstr "" +"Η δυνατότητα Ï€ÏοεπεξεÏγασίας αντιστοίχησης γÏαμμών απέτυχε. Ελέγξτε αυτή την " +"εντολή:\n" +"\n" +" %1\n" +"\n" +"Η δυνατότητα Ï€ÏοεπεξεÏγασίας αντιστοίχησης γÏαμμών θα απενεÏγοποιηθεί Ï„ÏŽÏα." + +#: diff.cpp:1631 diff.cpp:1645 +msgid "" +"Data loss error:\n" +"If it is reproducable please contact the author.\n" +msgstr "" +"Σφάλμα απώλειας δεδομένων:\n" +"Αν αναπαÏάγεται το σφάλμα, παÏακαλώ επικοινωνήστε με το συγγÏαφέα.\n" + +#: diff.cpp:1633 diff.cpp:1647 +msgid "Severe Internal Error" +msgstr "ΣοβαÏÏŒ εσωτεÏικό σφάλμα" + +#: difftextwindow.cpp:1643 kdiff3.cpp:753 +msgid "Top line" +msgstr "Πάνω γÏαμμή" + +#: difftextwindow.cpp:1653 +msgid "End" +msgstr "Τέλος" + +#: directorymergewindow.cpp:142 +msgid "Mix of links and normal files." +msgstr "Ανάμιξη δεσμών και κανονικών αÏχείων." + +#: directorymergewindow.cpp:149 +msgid "Link: " +msgstr "Δεσμός: " + +#: directorymergewindow.cpp:157 +msgid "Size. " +msgstr "Μέγεθος. " + +#: directorymergewindow.cpp:170 +msgid "Date & Size: " +msgstr "ΗμεÏομηνία & μέγεθος: " + +#: directorymergewindow.cpp:179 directorymergewindow.cpp:185 +msgid "Creating temp copy of %1 failed." +msgstr "Η δημιουÏγία του Ï€ÏοσωÏÎ¹Î½Î¿Ï Î±Î½Ï„Î¹Î³Ïάφου για το %1 απέτυχε." + +#: directorymergewindow.cpp:196 directorymergewindow.cpp:204 +msgid "Opening %1 failed." +msgstr "Το άνοιγμα του %1 απέτυχε." + +#: directorymergewindow.cpp:208 +msgid "Comparing file..." +msgstr "ΣÏγκÏιση αÏχείου..." + +#: directorymergewindow.cpp:218 directorymergewindow.cpp:224 +#, c-format +msgid "Error reading from %1" +msgstr "Σφάλμα ανάγνωσης από το %1" + +#: directorymergewindow.cpp:282 +msgid "Name" +msgstr "Όνομα" + +#: directorymergewindow.cpp:286 +msgid "Operation" +msgstr "ΛειτουÏγία" + +#: directorymergewindow.cpp:287 +msgid "Status" +msgstr "Κατάσταση" + +#: directorymergewindow.cpp:288 +msgid "Unsolved" +msgstr "Μη λυμένο" + +#: directorymergewindow.cpp:289 +msgid "Solved" +msgstr "Λυμένο" + +#: directorymergewindow.cpp:290 +msgid "Nonwhite" +msgstr "Μη κενό" + +#: directorymergewindow.cpp:291 +msgid "White" +msgstr "Κενό" + +#: directorymergewindow.cpp:319 +msgid "" +"You are currently doing a directory merge. Are you sure, you want to abort the " +"merge and rescan the directory?" +msgstr "" +"Αυτή τη στιγμή κάνετε μια συγχώνευση καταλόγου. Είστε σίγουÏοι ότι επιθυμείτε " +"την εγκατάλειψη της συγχώνευσης και την επανασάÏωση του καταλόγου;" + +#: directorymergewindow.cpp:320 directorymergewindow.cpp:2868 +msgid "Rescan" +msgstr "ΕπανασάÏωση" + +#: directorymergewindow.cpp:320 kdiff3.cpp:603 pdiff.cpp:979 +msgid "Continue Merging" +msgstr "Συνέχεια συγχώνευσης" + +#: directorymergewindow.cpp:462 +msgid "Opening of directories failed:" +msgstr "Το άνοιγμα των καταλόγων απέτυχε:" + +#: directorymergewindow.cpp:465 +msgid "" +"Dir A \"%1\" does not exist or is not a directory.\n" +msgstr "" +"Ο κατάλογος Α \"%1\" δεν υπάÏχει ή δεν είναι κατάλογος.\n" + +#: directorymergewindow.cpp:468 +msgid "" +"Dir B \"%1\" does not exist or is not a directory.\n" +msgstr "" +"Ο κατάλογος Î’ \"%1\" δεν υπάÏχει ή δεν είναι κατάλογος.\n" + +#: directorymergewindow.cpp:471 +msgid "" +"Dir C \"%1\" does not exist or is not a directory.\n" +msgstr "" +"Ο κατάλογος Γ \"%1\" δεν υπάÏχει ή δεν είναι κατάλογος.\n" + +#: directorymergewindow.cpp:473 +msgid "Directory Open Error" +msgstr "Σφάλμα ανοίγματος Καταλόγου" + +#: directorymergewindow.cpp:481 +msgid "" +"The destination directory must not be the same as A or B when three directories " +"are merged.\n" +"Check again before continuing." +msgstr "" +"Ο κατάλογος Ï€ÏοοÏÎ¹ÏƒÎ¼Î¿Ï Î´ÎµÎ½ Ï€Ïέπει να είναι ίδιος με τους Α ή Î’ όταν " +"συγχωνεÏονται Ï„Ïεις κατάλογοι.\n" +"Κάντε έναν έλεγχο ξανά Ï€Ïιν συνεχίσετε." + +#: directorymergewindow.cpp:483 +msgid "Parameter Warning" +msgstr "ΠÏοειδοποίηση παÏαμέτÏου" + +#: directorymergewindow.cpp:488 +msgid "Scanning directories..." +msgstr "ΣάÏωση καταλόγων..." + +#: directorymergewindow.cpp:537 +msgid "Reading Directory A" +msgstr "Ανάγνωση καταλόγου Α" + +#: directorymergewindow.cpp:559 +msgid "Reading Directory B" +msgstr "Ανάγνωση καταλόγου Î’" + +#: directorymergewindow.cpp:581 +msgid "Reading Directory C" +msgstr "Ανάγνωση καταλόγου Γ" + +#: directorymergewindow.cpp:607 +msgid "Some subdirectories were not readable in" +msgstr "ΜεÏικοί υποκατάλογοι δεν είναι αναγνώσιμοι στο" + +#: directorymergewindow.cpp:612 +msgid "Check the permissions of the subdirectories." +msgstr "Ελέγξτε τις άδειες χÏήσης των υποκαταλόγων." + +#: directorymergewindow.cpp:646 kdiff3.cpp:552 kdiff3.cpp:636 kdiff3.cpp:661 +#: kdiff3.cpp:934 kdiff3.cpp:955 pdiff.cpp:1059 pdiff.cpp:1131 pdiff.cpp:1169 +#: pdiff.cpp:1185 pdiff.cpp:1215 pdiff.cpp:1226 +msgid "Ready." +msgstr "Έτοιμο." + +#: directorymergewindow.cpp:660 +msgid "Directory Comparison Status" +msgstr "Κατάσταση σÏγκÏισης καταλόγου" + +#: directorymergewindow.cpp:661 +msgid "Number of subdirectories:" +msgstr "ΑÏιθμός υποκαταλόγων:" + +#: directorymergewindow.cpp:662 +msgid "Number of equal files:" +msgstr "ΑÏιθμός ίδιων αÏχείων:" + +#: directorymergewindow.cpp:663 +msgid "Number of different files:" +msgstr "ΑÏιθμός διαφοÏετικών αÏχείων:" + +#: directorymergewindow.cpp:666 +msgid "Number of manual merges:" +msgstr "ΑÏιθμός χειÏοκίνητων συγχωνεÏσεων:" + +#: directorymergewindow.cpp:802 +msgid "This affects all merge operations." +msgstr "Αυτό επηÏεάζει όλες τις συγχωνεÏσεις." + +#: directorymergewindow.cpp:803 +msgid "Changing All Merge Operations" +msgstr "Αλλαγή όλων των λειτουÏγιών συγχώνευσης" + +#: directorymergewindow.cpp:803 mergeresultwindow.cpp:287 +msgid "C&ontinue" +msgstr "Συνέ&χεια" + +#: directorymergewindow.cpp:1169 +msgid "Processing " +msgstr "ΕπεξεÏγασία " + +#: directorymergewindow.cpp:1647 directorymergewindow.cpp:1653 +msgid "To do." +msgstr "ΠÏος υλοποίηση." + +#: directorymergewindow.cpp:1756 directorymergewindow.cpp:2899 +msgid "Copy A to B" +msgstr "ΑντιγÏαφή του Α στο Î’" + +#: directorymergewindow.cpp:1757 directorymergewindow.cpp:2900 +msgid "Copy B to A" +msgstr "ΑντιγÏαφή του Î’ στο Α" + +#: directorymergewindow.cpp:1758 directorymergewindow.cpp:2901 +msgid "Delete A" +msgstr "ΔιαγÏαφή του Α" + +#: directorymergewindow.cpp:1759 directorymergewindow.cpp:2902 +msgid "Delete B" +msgstr "ΔιαγÏαφή του Î’" + +#: directorymergewindow.cpp:1760 +msgid "Delete A & B" +msgstr "ΔιαγÏαφή των Α & Î’" + +#: directorymergewindow.cpp:1761 directorymergewindow.cpp:2904 +msgid "Merge to A" +msgstr "Συγχώνευση στο Α" + +#: directorymergewindow.cpp:1762 directorymergewindow.cpp:2905 +msgid "Merge to B" +msgstr "Συγχώνευση στο Î’" + +#: directorymergewindow.cpp:1763 +msgid "Merge to A & B" +msgstr "Συγχώνευση στα Α & Î’" + +#: directorymergewindow.cpp:1767 directorymergewindow.cpp:2896 +msgid "Delete (if exists)" +msgstr "ΔιαγÏαφή (αν υπάÏχει)" + +#: directorymergewindow.cpp:1768 directorymergewindow.cpp:1769 +#: directorymergewindow.cpp:2895 optiondialog.cpp:809 smalldialogs.cpp:102 +msgid "Merge" +msgstr "Συγχώνευση" + +#: directorymergewindow.cpp:1768 directorymergewindow.cpp:1769 +msgid "Merge (manual)" +msgstr "Συγχώνευση (χειÏοκίνητη)" + +#: directorymergewindow.cpp:1770 +msgid "Error: Conflicting File Types" +msgstr "Σφάλμα: ΣÏγκÏουση Ï„Ïπου αÏχείων" + +#: directorymergewindow.cpp:1771 +msgid "Error: Dates are equal but files are not." +msgstr "Σφάλμα: Οι ημεÏομηνίες είναι ίδιες αλλά τα αÏχεία όχι." + +#: directorymergewindow.cpp:1795 directorymergewindow.cpp:1824 +#: directorymergewindow.cpp:1849 +msgid "This operation is currently not possible." +msgstr "Αυτή η λειτουÏγία δεν είναι δυνατή αυτή τη στιγμή." + +#: directorymergewindow.cpp:1795 directorymergewindow.cpp:1824 +#: directorymergewindow.cpp:1849 directorymergewindow.cpp:2106 +msgid "Operation Not Possible" +msgstr "Μη δυνατή λειτουÏγία" + +#: directorymergewindow.cpp:1888 +msgid "" +"This should never happen: \n" +"\n" +"mergeResultSaved: m_pMFI=0\n" +"\n" +"If you know how to reproduce this, please contact the program author." +msgstr "" +"Αυτό δε θα έπÏεπε να συμβεί ποτέ: \n" +"\n" +"mergeResultSaved: m_pMFI=0\n" +"\n" +"Αν μποÏείτε να το αναπαÏάγετε, παÏακαλώ επικοινωνήστε με το συγγÏαφέα του " +"Ï€ÏογÏάμματος." + +#: directorymergewindow.cpp:1888 +msgid "Program Error" +msgstr "Σφάλμα Ï€ÏογÏάμματος" + +#: directorymergewindow.cpp:1899 +msgid "" +"An error occurred while copying.\n" +msgstr "" +"Ένα σφάλμα παÏουσιάστηκε κατά την αντιγÏαφή.\n" + +#: directorymergewindow.cpp:1900 directorymergewindow.cpp:2306 +msgid "Merge Error" +msgstr "Σφάλμα συγχώνευσης" + +#: directorymergewindow.cpp:1905 directorymergewindow.cpp:2311 +msgid "Error." +msgstr "Σφάλμα." + +#: directorymergewindow.cpp:1910 directorymergewindow.cpp:2202 +#: directorymergewindow.cpp:2242 +msgid "Done." +msgstr "Έγινε." + +#: directorymergewindow.cpp:1933 +msgid "Not saved." +msgstr "Δεν αποθηκεÏτηκε." + +#: directorymergewindow.cpp:1968 +msgid "Unknown merge operation. (This must never happen!)" +msgstr "Άγνωστη λειτουÏγία συγχώνευσης. (Δε θα έπÏεπε να συμβεί ποτέ!)" + +#: directorymergewindow.cpp:2000 +msgid "Unknown merge operation." +msgstr "Άγνωστη λειτουÏγία συγχώνευσης." + +#: directorymergewindow.cpp:2015 +msgid "" +"The merge is about to begin.\n" +"\n" +"Choose \"Do it\" if you have read the instructions and know what you are " +"doing.\n" +"Choosing \"Simulate it\" will tell you what would happen.\n" +"\n" +"Be aware that this program still has beta status and there is NO WARRANTY " +"whatsoever! Make backups of your vital data!" +msgstr "" +"Η συγχώνευση είναι έτοιμη να ξεκινήσει.\n" +"\n" +"Επιλέξτε το \"Εκτέλεση\" αν διαβάσατε αÏκετές οδηγίες και γνωÏίζετε τι κάνετε.\n" +"Επιλέγοντας την \"Εξομοίωση\" θα γίνει αναφοÏά του τι θα συμβεί.\n" +"\n" +"Σημειώστε ότι το αυτό το Ï€ÏόγÏαμμα βÏίσκεται ακόμη σε κατάσταση beta και δεν " +"υπάÏχει ΕΓΓΥΗΣΗ οÏτως ή άλλως! Κάντε αντίγÏαφα ασφαλείας για τα σημαντικά " +"δεδομένα σας!" + +#: directorymergewindow.cpp:2020 +msgid "Starting Merge" +msgstr "Εκκίνηση συγχώνευσης" + +#: directorymergewindow.cpp:2020 +msgid "Do It" +msgstr "Εκτέλεση" + +#: directorymergewindow.cpp:2020 +msgid "Simulate It" +msgstr "Εξομοίωση" + +#: directorymergewindow.cpp:2046 +msgid "" +"The highlighted item has a different type in the different directories. Select " +"what to do." +msgstr "" +"Το τονισμένο αντικείμενο έχει διαφοÏετικό Ï„Ïπο σε διαφοÏετικοÏÏ‚ καταλόγους. " +"Επιλέξτε τι θέλετε να κάνετε." + +#: directorymergewindow.cpp:2055 +msgid "" +"The modification dates of the file are equal but the files are not. Select what " +"to do." +msgstr "" +"Οι ημεÏομηνίες Ï„Ïοποποίησης των αÏχείων είναι ίδιες αλλά τα αÏχεία δεν είναι. " +"Επιλέξτε τι θέλετε να κάνετε." + +#: directorymergewindow.cpp:2106 +msgid "" +"This operation is currently not possible because directory merge is currently " +"running." +msgstr "" +"Αυτή η λειτουÏγία δεν είναι αυτή τη στιγμή δυνατή γιατί η συγχώνευση καταλόγου " +"εκτελείται αυτήν τη στιγμή." + +#: directorymergewindow.cpp:2166 +msgid "" +"There was an error in the last step.\n" +"Do you want to continue with the item that caused the error or do you want to " +"skip this item?" +msgstr "" +"ΥπήÏξε ένα σφάλμα στο τελευταίο βήμα.\n" +"Επιθυμείτε τη συνέχεια με το αντικείμενο που Ï€Ïοκάλεσε το σφάλμα ή επιθυμείτε " +"την παÏάλειψή του;" + +#: directorymergewindow.cpp:2168 +msgid "Continue merge after an error" +msgstr "Συνέχεια συγχώνευσης μετά από ένα σφάλμα" + +#: directorymergewindow.cpp:2168 +msgid "Continue With Last Item" +msgstr "Συνέχεια με το τελευταίο αντικείμενο" + +#: directorymergewindow.cpp:2168 +msgid "Skip Item" +msgstr "ΠαÏάλειψη αντικειμένου" + +#: directorymergewindow.cpp:2202 +msgid "Skipped." +msgstr "ΠαÏαλείφθηκε." + +#: directorymergewindow.cpp:2209 directorymergewindow.cpp:2435 +msgid "In progress..." +msgstr "Σε Ï€Ïόοδο..." + +#: directorymergewindow.cpp:2257 +msgid "Merge operation complete." +msgstr "Η λειτουÏγία συγχώνευσης ολοκληÏώθηκε." + +#: directorymergewindow.cpp:2257 directorymergewindow.cpp:2260 +msgid "Merge Complete" +msgstr "Η συγχώνευση ολοκληÏώθηκε" + +#: directorymergewindow.cpp:2269 +msgid "" +"Simulated merge complete: Check if you agree with the proposed operations." +msgstr "" +"Η εξομοίωση συγχώνευσης ολοκληÏώθηκε: Ελέγξτε αν συμφωνείτε με τις " +"Ï€Ïοτεινόμενες ενέÏγειες." + +#: directorymergewindow.cpp:2305 +msgid "" +"An error occurred. Press OK to see detailed information.\n" +msgstr "" +"ΠαÏουσιάστηκε ένα σφάλμα. Πατήστε το Εντάξει για να δείτε λεπτομεÏείς " +"πληÏοφοÏίες.\n" + +#: directorymergewindow.cpp:2348 +msgid "Error: While deleting %1: Creating backup failed." +msgstr "" +"Σφάλμα: Κατά τη διαγÏαφή του %1: Η δημιουÏγία του αντιγÏάφου ασφαλείας απέτυχε." + +#: directorymergewindow.cpp:2355 +msgid "delete directory recursively( %1 )" +msgstr "αναδÏομική διαγÏαφή καταλόγου( %1 )" + +#: directorymergewindow.cpp:2357 +msgid "delete( %1 )" +msgstr "διαγÏαφή ( %1 )" + +#: directorymergewindow.cpp:2372 +msgid "Error: delete dir operation failed while trying to read the directory." +msgstr "" +"Σφάλμα: η διαγÏαφή καταλόγου απέτυχε κατά την Ï€Ïοσπάθεια ανάγνωσης του " +"καταλόγου." + +#: directorymergewindow.cpp:2391 +msgid "Error: rmdir( %1 ) operation failed." +msgstr "Σφάλμα: η λειτουÏγία rmdir( %1 ) απέτυχε." + +#: directorymergewindow.cpp:2401 +msgid "Error: delete operation failed." +msgstr "Σφάλμα: η διαγÏαφή απέτυχε." + +#: directorymergewindow.cpp:2427 +msgid "manual merge( %1, %2, %3 -> %4)" +msgstr "χειÏοκίνητη συγχώνευση( %1, %2, %3 -> %4)" + +#: directorymergewindow.cpp:2430 +msgid "" +" Note: After a manual merge the user should continue by pressing F7." +msgstr "" +" Σημείωση: Μετά από μία χειÏοκίνητη συγχώνευση ο χÏήστης θα Ï€Ïέπει να " +"συνεχίσει πατώντας F7." + +#: directorymergewindow.cpp:2453 +msgid "Error: copy( %1 -> %2 ) failed.Deleting existing destination failed." +msgstr "" +"Σφάλμα: η αντιγÏαφή ( %1 -> %2 ) απέτυχε. Η διαγÏαφή του υπάÏχοντος Ï€ÏοοÏÎ¹ÏƒÎ¼Î¿Ï " +"απέτυχε." + +#: directorymergewindow.cpp:2463 +msgid "copyLink( %1 -> %2 )" +msgstr "ΑντιγÏαφή δεσμοÏ( %1 -> %2 )" + +#: directorymergewindow.cpp:2474 +msgid "Error: copyLink failed: Remote links are not yet supported." +msgstr "" +"Σφάλμα: η αντιγÏαφή Î´ÎµÏƒÎ¼Î¿Ï Î±Ï€Î­Ï„Ï…Ï‡Îµ: Οι απομακÏυσμένοι δεσμοί δεν υποστηÏίζονται " +"ακόμα." + +#: directorymergewindow.cpp:2480 +msgid "Error: copyLink failed." +msgstr "Σφάλμα: η αντιγÏαφή Î´ÎµÏƒÎ¼Î¿Ï Î±Ï€Î­Ï„Ï…Ï‡Îµ." + +#: directorymergewindow.cpp:2500 +msgid "copy( %1 -> %2 )" +msgstr "αντιγÏαφή ( %1 -> %2 )" + +#: directorymergewindow.cpp:2526 +msgid "Error during rename( %1 -> %2 ): Cannot delete existing destination." +msgstr "" +"Σφάλμα κατά την μετονομασία( %1 -> %2 ): Αδυναμία διαγÏαφής του υπάÏχοντος " +"Ï€ÏοοÏισμοÏ." + +#: directorymergewindow.cpp:2532 +msgid "rename( %1 -> %2 )" +msgstr "μετονομασία ( %1 -> %2 )" + +#: directorymergewindow.cpp:2541 +msgid "Error: Rename failed." +msgstr "Σφάλμα: Η μετονομασία απέτυχε." + +#: directorymergewindow.cpp:2559 +msgid "Error during makeDir of %1. Cannot delete existing file." +msgstr "" +"Σφάλμα κατά τη δημιουÏγία του καταλόγου %1. ΑδÏνατη η διαγÏαφή υπάÏχοντος " +"αÏχείου." + +#: directorymergewindow.cpp:2575 +msgid "makeDir( %1 )" +msgstr "ΔημιουÏγία καταλόγου( %1 )" + +#: directorymergewindow.cpp:2585 +msgid "Error while creating directory." +msgstr "Σφάλμα κατά τη δημιουÏγία του καταλόγου." + +#: directorymergewindow.cpp:2608 directorymergewindow.cpp:2725 +msgid "Dest" +msgstr "ΠÏοοÏ." + +#: directorymergewindow.cpp:2612 directorymergewindow.cpp:2650 +msgid "Dir" +msgstr "Κατ" + +#: directorymergewindow.cpp:2613 +msgid "Type" +msgstr "ΤÏπος" + +#: directorymergewindow.cpp:2614 +msgid "Size" +msgstr "Μέγεθος" + +#: directorymergewindow.cpp:2615 +msgid "Attr" +msgstr "Ιδιοτ" + +#: directorymergewindow.cpp:2616 +msgid "Last Modification" +msgstr "Τελευταία Ï„Ïοποποίηση" + +#: directorymergewindow.cpp:2617 +msgid "Link-Destination" +msgstr "Δεσμός-Ï€ÏοοÏισμός" + +#: directorymergewindow.cpp:2667 +msgid "not available" +msgstr "μη διαθέσιμο" + +#: directorymergewindow.cpp:2687 +msgid "A (Dest): " +msgstr "A (ΠÏοοÏ): " + +#: directorymergewindow.cpp:2690 +msgid "A (Base): " +msgstr "A (Βάση): " + +#: directorymergewindow.cpp:2696 +msgid "B (Dest): " +msgstr "B (ΠÏοοÏ): " + +#: directorymergewindow.cpp:2704 +msgid "C (Dest): " +msgstr "Γ (ΠÏοοÏ): " + +#: directorymergewindow.cpp:2710 +msgid "Dest: " +msgstr "ΠÏοοÏ: " + +#: directorymergewindow.cpp:2775 +msgid "Save Directory Merge State As..." +msgstr "Αποθήκευση κατάστασης συγχώνευσης καταλόγου ως..." + +#: directorymergewindow.cpp:2862 +msgid "Start/Continue Directory Merge" +msgstr "ΈναÏξη/συνέχεια συγχώνευσης καταλόγου" + +#: directorymergewindow.cpp:2863 +msgid "Run Operation for Current Item" +msgstr "Εκτέλεση της λειτουÏγίας για το Ï„Ïέχον αντικείμενο" + +#: directorymergewindow.cpp:2864 +msgid "Compare Selected File" +msgstr "ΣÏγκÏιση του επιλεγμένου αÏχείου" + +#: directorymergewindow.cpp:2865 +msgid "Merge Current File" +msgstr "Συγχώνευση του επιλεγμένου αÏχείου" + +#: directorymergewindow.cpp:2866 +msgid "Fold All Subdirs" +msgstr "Αναδίπλωση όλων των υποκαταλόγων" + +#: directorymergewindow.cpp:2867 +msgid "Unfold All Subdirs" +msgstr "Ανάπτυξη όλων των υποκαταλόγων" + +#: directorymergewindow.cpp:2871 +msgid "Choose A for All Items" +msgstr "Επιλογή του Α για όλα τα αντικείμενα" + +#: directorymergewindow.cpp:2872 +msgid "Choose B for All Items" +msgstr "Επιλογή του Î’ για όλα τα αντικείμενα" + +#: directorymergewindow.cpp:2873 +msgid "Choose C for All Items" +msgstr "Επιλογή του Γ για Όλα τα αντικείμενα" + +#: directorymergewindow.cpp:2874 +msgid "Auto-Choose Operation for All Items" +msgstr "ΛειτουÏγία αυτόματης επιλογής για όλα τα αντικείμενα" + +#: directorymergewindow.cpp:2875 +msgid "No Operation for All Items" +msgstr "Καμία λειτουÏγία για όλα τα αντικείμενα" + +#: directorymergewindow.cpp:2880 +msgid "Show Identical Files" +msgstr "Εμφάνιση ταυτόσημων αÏχείων" + +#: directorymergewindow.cpp:2881 +msgid "Show Different Files" +msgstr "Εμφάνιση διαφοÏετικών αÏχείων" + +#: directorymergewindow.cpp:2882 +msgid "Show Files only in A" +msgstr "Εμφάνιση αÏχείων μόνο στο Α" + +#: directorymergewindow.cpp:2883 +msgid "Show Files only in B" +msgstr "Εμφάνιση αÏχείων μόνο στο Î’" + +#: directorymergewindow.cpp:2884 +msgid "Show Files only in C" +msgstr "Εμφάνιση αÏχείων μόνο στο Γ" + +#: directorymergewindow.cpp:2888 +msgid "Compare Explicitly Selected Files" +msgstr "ΣÏγκÏιση άμεσα επιλεγμένων αÏχείων" + +#: directorymergewindow.cpp:2889 +msgid "Merge Explicitly Selected Files" +msgstr "Συγχώνευση άμεσα επιλεγμένων αÏχείων" + +#: directorymergewindow.cpp:2891 directorymergewindow.cpp:2898 +msgid "Do Nothing" +msgstr "Îα μη γίνει τίποτα" + +#: directorymergewindow.cpp:2892 +msgid "A" +msgstr "Α" + +#: directorymergewindow.cpp:2893 +msgid "B" +msgstr "Î’" + +#: directorymergewindow.cpp:2894 +msgid "C" +msgstr "Γ" + +#: directorymergewindow.cpp:2903 +msgid "Delete A && B" +msgstr "ΔιαγÏαφή των A && B" + +#: directorymergewindow.cpp:2906 +msgid "Merge to A && B" +msgstr "Συγχώνευση σε A && B" + +#: fileaccess.cpp:595 +msgid "" +"While trying to make a backup, deleting an older backup failed. \n" +"Filename: " +msgstr "" +"Αποτυχία διαγÏαφής ενός παλιότεÏου αντιγÏάφου ασφαλείας, κατά τη δημιουÏγία " +"αντιγÏάφου ασφαλείας. \n" +"Όνομα αÏχείου: " + +#: fileaccess.cpp:602 +msgid "" +"While trying to make a backup, renaming failed. \n" +"Filenames: " +msgstr "" +"Αποτυχία μετονομασίας, κατά τη δημιουÏγία αντιγÏάφου ασφαλείας. \n" +"Ονόματα αÏχείων: " + +#: fileaccess.cpp:624 +#, c-format +msgid "Getting file status: %1" +msgstr "Ανάκτηση κατάστασης αÏχείου: %1" + +#: fileaccess.cpp:667 +#, c-format +msgid "Reading file: %1" +msgstr "Ανάγνωση αÏχείου: %1" + +#: fileaccess.cpp:703 +#, c-format +msgid "Writing file: %1" +msgstr "ΕγγÏαφή αÏχείου: %1" + +#: fileaccess.cpp:731 +msgid "Out of memory" +msgstr "Τέλος μνήμης" + +#: fileaccess.cpp:766 +#, c-format +msgid "Making directory: %1" +msgstr "ΔημιουÏγία καταλόγου: %1" + +#: fileaccess.cpp:786 +#, c-format +msgid "Removing directory: %1" +msgstr "ΑφαίÏεση καταλόγου: %1" + +#: fileaccess.cpp:801 +#, c-format +msgid "Removing file: %1" +msgstr "ΑφαίÏεση αÏχείου: %1" + +#: fileaccess.cpp:817 +msgid "Creating symbolic link: %1 -> %2" +msgstr "ΔημιουÏγία ÏƒÏ…Î¼Î²Î¿Î»Î¹ÎºÎ¿Ï Î´ÎµÏƒÎ¼Î¿Ï: %1 -> %2" + +#: fileaccess.cpp:843 +msgid "Renaming file: %1 -> %2" +msgstr "Μετονομασία αÏχείου: %1 -> %2" + +#: fileaccess.cpp:879 +msgid "Copying file: %1 -> %2" +msgstr "ΑντιγÏαφή αÏχείου: %1 -> %2" + +#: fileaccess.cpp:893 +#, c-format +msgid "" +"Error during file copy operation: Opening file for reading failed. Filename: %1" +msgstr "" +"Σφάλμα κατά την αντιγÏαφή: Το άνοιγμα του αÏχείου για ανάγνωση απέτυχε. Όνομα " +"αÏχείου: %1" + +#: fileaccess.cpp:899 +#, c-format +msgid "" +"Error during file copy operation: Opening file for writing failed. Filename: %1" +msgstr "" +"Σφάλμα κατά την αντιγÏαφή: Το άνοιγμα του αÏχείου για εγγÏαφή απέτυχε. Όνομα " +"αÏχείου: %1" + +#: fileaccess.cpp:914 +#, c-format +msgid "Error during file copy operation: Reading failed. Filename: %1" +msgstr "Σφάλμα κατά την αντιγÏαφή: Η ανάγνωση απέτυχε. Όνομα αÏχείου: %1" + +#: fileaccess.cpp:923 +#, c-format +msgid "Error during file copy operation: Writing failed. Filename: %1" +msgstr "Σφάλμα κατά την αντιγÏαφή: Η εγγÏαφή απέτυχε. Όνομα αÏχείου: %1" + +#: fileaccess.cpp:1219 +msgid "Reading directory: " +msgstr "Ανάγνωση καταλόγου: " + +#: fileaccess.cpp:1348 +#, c-format +msgid "Listing directory: %1" +msgstr "Εμφάνιση καταλόγου: %1" + +#: kdiff3.cpp:142 +msgid "Current Configuration:" +msgstr "ΤÏέχουσα ÏÏθμιση:" + +#: kdiff3.cpp:147 +msgid "Config Option Error:" +msgstr "Σφάλμα ÏÏθμισης επιλογής:" + +#: kdiff3.cpp:187 +msgid "Option --auto used, but no output file specified." +msgstr "ΧÏησιμοποιήθηκε η επιλογή --auto, αλλά δεν καθοÏίστηκε αÏχείο εξόδου." + +#: kdiff3.cpp:323 +msgid "Option --auto ignored for directory comparison." +msgstr "Η επιλογή --auto αγνοήθηκε για τη σÏγκÏιση καταλόγων." + +#: kdiff3.cpp:359 +msgid "Saving failed." +msgstr "Η αποθήκευση απέτυχε." + +#: kdiff3.cpp:386 pdiff.cpp:1041 pdiff.cpp:1112 +msgid "Opening of these files failed:" +msgstr "Το άνοιγμα αυτών των αÏχείων απέτυχε:" + +#: kdiff3.cpp:395 +msgid "File Open Error" +msgstr "Σφάλμα ανοίγματος αÏχείου" + +#: kdiff3.cpp:418 +msgid "Opens documents for comparison..." +msgstr "Ανοίγει έγγÏαφα για σÏγκÏιση..." + +#: kdiff3.cpp:423 +msgid "Saves the merge result. All conflicts must be solved!" +msgstr "" +"ΑποθηκεÏει το αποτέλεσμα της συγχώνευσης. Όλες οι συγκÏοÏσεις θα Ï€Ïέπει να " +"έχουν επιλυθεί!" + +#: kdiff3.cpp:425 +msgid "Saves the current document as..." +msgstr "ΑποθηκεÏει το Ï„Ïέχον έγγÏαφο ως..." + +#: kdiff3.cpp:427 +msgid "Print the differences" +msgstr "ΕκτÏπωση των διαφοÏών" + +#: kdiff3.cpp:429 +msgid "Quits the application" +msgstr "Κλείνει την εφαÏμογή" + +#: kdiff3.cpp:431 +msgid "Cuts the selected section and puts it to the clipboard" +msgstr "Αποκοπή του επιλεγμένου τμήματος και τοποθέτηση στο Ï€ÏόχειÏο" + +#: kdiff3.cpp:433 +msgid "Copies the selected section to the clipboard" +msgstr "ΑντιγÏαφή του επιλεγμένου τμήματος στο Ï€ÏόχειÏο" + +#: kdiff3.cpp:435 +msgid "Pastes the clipboard contents to actual position" +msgstr "Επικόλληση των πεÏιεχομένων του Ï€ÏόχειÏου στην Ï„Ïέχουσα θέση" + +#: kdiff3.cpp:437 +msgid "Select everything in current window" +msgstr "Επιλογή όλων στο Ï„Ïέχον παÏάθυÏο" + +#: kdiff3.cpp:439 +msgid "Search for a string" +msgstr "Αναζήτηση για μια συμβολοσειÏά" + +#: kdiff3.cpp:441 +msgid "Search again for the string" +msgstr "Αναζήτηση ξανά για μια συμβολοσειÏά" + +#: kdiff3.cpp:443 +msgid "Enables/disables the toolbar" +msgstr "ΕνεÏγοποίηση/απενεÏγοποίηση της γÏαμμής εÏγαλείων" + +#: kdiff3.cpp:445 +msgid "Enables/disables the statusbar" +msgstr "ΕνεÏγοποιεί/απενεÏγοποιεί τη γÏαμμή κατάστασης" + +#: kdiff3.cpp:449 +msgid "Configure KDiff3..." +msgstr "ΡÏθμιση του KDiff3..." + +#: kdiff3.cpp:470 +msgid "Go to Current Delta" +msgstr "Μετάβαση στην Ï„Ïέχουσα διαφοÏά" + +#: kdiff3.cpp:471 +msgid "Go to First Delta" +msgstr "Μετάβαση στη Ï€Ïώτη διαφοÏά" + +#: kdiff3.cpp:472 +msgid "Go to Last Delta" +msgstr "Μετάβαση στην τελευταία διαφοÏά" + +#: kdiff3.cpp:473 +msgid "(Skips white space differences when \"Show White Space\" is disabled.)" +msgstr "" +"(ΠαÏάλειψη των διαφοÏών στα κενά όταν είναι απενεÏγοποιημένη η \"Εμφάνιση " +"κενών\")" + +#: kdiff3.cpp:474 +msgid "" +"(Does not skip white space differences even when \"Show White Space\" is " +"disabled.)" +msgstr "" +"(Μη παÏάλειψη των διαφοÏών στα κενά ακόμη και αν είναι απενεÏγοποιημένη η " +"\"Εμφάνιση κενών\")" + +#: kdiff3.cpp:475 +msgid "Go to Previous Delta" +msgstr "Μετάβαση στη Ï€ÏοηγοÏμενη διαφοÏά" + +#: kdiff3.cpp:477 +msgid "Go to Next Delta" +msgstr "Μετάβαση στην επόμενη διαφοÏά" + +#: kdiff3.cpp:479 +msgid "Go to Previous Conflict" +msgstr "Μετάβαση στην Ï€ÏοηγοÏμενη σÏγκÏουση" + +#: kdiff3.cpp:481 +msgid "Go to Next Conflict" +msgstr "Μετάβαση στην επόμενη σÏγκÏουση" + +#: kdiff3.cpp:483 +msgid "Go to Previous Unsolved Conflict" +msgstr "Μετάβαση στην Ï€ÏοηγοÏμενη μη λυμένη σÏγκÏουση" + +#: kdiff3.cpp:485 +msgid "Go to Next Unsolved Conflict" +msgstr "Μετάβαση στην επόμενη μη λυμένη σÏγκÏουση" + +#: kdiff3.cpp:487 +msgid "Select Line(s) From A" +msgstr "Επιλογή γÏαμμής(ών) από το Α" + +#: kdiff3.cpp:488 +msgid "Select Line(s) From B" +msgstr "Επιλογή γÏαμμής(ών) από το Î’" + +#: kdiff3.cpp:489 +msgid "Select Line(s) From C" +msgstr "Επιλογή γÏαμμής(ών) από το Γ" + +#: kdiff3.cpp:490 +msgid "Automatically Go to Next Unsolved Conflict After Source Selection" +msgstr "" +"Αυτόματη μετάβαση στην επόμενη μη λυμένη σÏγκÏουση μετά την επιλογή πηγής" + +#: kdiff3.cpp:492 +msgid "Show Space && Tabulator Characters for Differences" +msgstr "Εμφάνιση κενών && χαÏακτήÏων οÏιοθέτησης για διαφοÏές" + +#: kdiff3.cpp:493 +msgid "Show White Space" +msgstr "Εμφάνιση κενών" + +#: kdiff3.cpp:495 +msgid "Show Line Numbers" +msgstr "Εμφάνιση αÏιθμών γÏαμμής" + +#: kdiff3.cpp:496 +msgid "Choose A Everywhere" +msgstr "Επιλογή Ï€Î±Î½Ï„Î¿Ï Ï„Î¿Ï… Α" + +#: kdiff3.cpp:497 +msgid "Choose B Everywhere" +msgstr "Επιλογή Ï€Î±Î½Ï„Î¿Ï Ï„Î¿Ï… Î’" + +#: kdiff3.cpp:498 +msgid "Choose C Everywhere" +msgstr "Επιλογή Ï€Î±Î½Ï„Î¿Ï Ï„Î¿ Γ" + +#: kdiff3.cpp:499 +msgid "Choose A for All Unsolved Conflicts" +msgstr "Επιλογή του Α για όλες τις μη λυμένες διαφοÏές" + +#: kdiff3.cpp:500 +msgid "Choose B for All Unsolved Conflicts" +msgstr "Επιλογή του Î’ για όλες τις μη λυμένες διαφοÏές" + +#: kdiff3.cpp:501 +msgid "Choose C for All Unsolved Conflicts" +msgstr "Επιλογή του Γ για όλες τις μη λυμένες διαφοÏές" + +#: kdiff3.cpp:502 +msgid "Choose A for All Unsolved Whitespace Conflicts" +msgstr "Επιλογή του Α για όλες τις μη λυμένες διαφοÏές κενών" + +#: kdiff3.cpp:503 +msgid "Choose B for All Unsolved Whitespace Conflicts" +msgstr "Επιλογή του Î’ για όλες τις μη λυμένες διαφοÏές κενών" + +#: kdiff3.cpp:504 +msgid "Choose C for All Unsolved Whitespace Conflicts" +msgstr "Επιλογή του Γ για όλες τις μη λυμένες διαφοÏές κενών" + +#: kdiff3.cpp:505 +msgid "Automatically Solve Simple Conflicts" +msgstr "Αυτόματη επίλυση απλών συγκÏοÏσεων" + +#: kdiff3.cpp:506 +msgid "Set Deltas to Conflicts" +msgstr "ΟÏισμός διαφοÏών στις συγκÏοÏσεις" + +#: kdiff3.cpp:507 +msgid "Run Regular Expression Auto Merge" +msgstr "Εκτέλεση κανονικής έκφÏασης αυτόματης συγχώνευσης" + +#: kdiff3.cpp:508 +msgid "Automatically Solve History Conflicts" +msgstr "Αυτόματη επίλυση συγκÏοÏσεων ιστοÏικοÏ" + +#: kdiff3.cpp:509 +msgid "Split Diff At Selection" +msgstr "ΔιαίÏεση διαφοÏών στην επιλογή" + +#: kdiff3.cpp:510 +msgid "Join Selected Diffs" +msgstr "Ένωση των επιλεγμένων διαφοÏών" + +#: kdiff3.cpp:512 +msgid "Show Window A" +msgstr "Εμφάνιση του παÏαθÏÏου Α" + +#: kdiff3.cpp:513 +msgid "Show Window B" +msgstr "Εμφάνιση του παÏαθÏÏου Î’" + +#: kdiff3.cpp:514 +msgid "Show Window C" +msgstr "Εμφάνιση του παÏαθÏÏου Γ" + +#: kdiff3.cpp:515 kdiff3.cpp:526 +msgid "Focus Next Window" +msgstr "Εστίαση στο επόμενο παÏάθυÏο" + +#: kdiff3.cpp:517 +msgid "Normal Overview" +msgstr "Κανονική επισκόπηση" + +#: kdiff3.cpp:518 +msgid "A vs. B Overview" +msgstr "Επισκόπηση Α με το Î’" + +#: kdiff3.cpp:519 +msgid "A vs. C Overview" +msgstr "Επισκόπηση Α με το Γ" + +#: kdiff3.cpp:520 +msgid "B vs. C Overview" +msgstr "Επισκόπηση Î’ με το Γ" + +#: kdiff3.cpp:521 +msgid "Word Wrap Diff Windows" +msgstr "Αναδίπλωση λέξεων στα παÏάθυÏα διαφοÏάς" + +#: kdiff3.cpp:522 +msgid "Add Manual Diff Alignment" +msgstr "ΠÏοσθήκη χειÏοκίνητης στοίχισης διαφοÏών" + +#: kdiff3.cpp:523 +msgid "Clear All Manual Diff Alignments" +msgstr "ΚαθαÏισμός όλων των χειÏοκίνητων στοιχίσεων διαφοÏών" + +#: kdiff3.cpp:528 +msgid "Focus Prev Window" +msgstr "Εστίαση στο Ï€ÏοηγοÏμενο παÏάθυÏο" + +#: kdiff3.cpp:529 +msgid "Toggle Split Orientation" +msgstr "Εναλλαγή Ï€ÏÎ¿ÏƒÎ±Î½Î±Ï„Î¿Î»Î¹ÏƒÎ¼Î¿Ï Î´Î¹Î±Î¯Ïεσης" + +#: kdiff3.cpp:531 +msgid "Dir && Text Split Screen View" +msgstr "ΔιαίÏεση Ï€Ïοβολής καταλόγου && κειμένου" + +#: kdiff3.cpp:533 +msgid "Toggle Between Dir && Text View" +msgstr "Εναλλαγή Î¼ÎµÏ„Î±Î¾Ï Ï€Ïοβολής καταλόγου && κειμένου" + +#: kdiff3.cpp:582 pdiff.cpp:1712 +msgid "The merge result hasn't been saved." +msgstr "Το αποτέλεσμα της συγχώνευσης δεν έχει αποθηκευτεί." + +#: kdiff3.cpp:583 +msgid "Save && Quit" +msgstr "Αποθήκευση && έξοδος" + +#: kdiff3.cpp:583 +msgid "Quit Without Saving" +msgstr "Έξοδος χωÏίς αποθήκευση" + +#: kdiff3.cpp:591 pdiff.cpp:1721 +msgid "Saving the merge result failed." +msgstr "Αποτυχία αποθήκευσης του αποτελέσματος συγχώνευσης." + +#: kdiff3.cpp:602 pdiff.cpp:978 +msgid "" +"You are currently doing a directory merge. Are you sure, you want to abort?" +msgstr "" +"Αυτή τη στιγμή εκτελείται μια συγχώνευση καταλόγου. Είστε σίγουÏοι ότι " +"επιθυμείτε να την εγκαταλείψετε;" + +#: kdiff3.cpp:625 +msgid "Saving file..." +msgstr "Αποθήκευση αÏχείου..." + +#: kdiff3.cpp:642 +msgid "Saving file with a new filename..." +msgstr "Αποθήκευση αÏχείου με ένα νέο όνομα..." + +#: kdiff3.cpp:732 +msgid "Printing..." +msgstr "ΕκτÏπωση..." + +#: kdiff3.cpp:738 kdiff3.cpp:900 +msgid "Printing aborted." +msgstr "Η εκτÏπωση εγκαταλείφθηκε." + +#: kdiff3.cpp:870 +msgid "Selection" +msgstr "Επιλογή" + +#: kdiff3.cpp:896 +msgid "Printing completed." +msgstr "Η εκτÏπωση ολοκληÏώθηκε." + +#: kdiff3.cpp:906 +msgid "Exiting..." +msgstr "Έξοδος..." + +#: kdiff3.cpp:918 +msgid "Toggling toolbar..." +msgstr "Εναλλαγή γÏαμμής εÏγαλείων..." + +#: kdiff3.cpp:939 +msgid "Toggle the statusbar..." +msgstr "Εναλλαγή της γÏαμμής κατάστασης..." + +#: kdiff3_part.cpp:155 kdiff3_part.cpp:224 +msgid "Couldn't find files for comparison." +msgstr "Δε βÏέθηκαν αÏχεία για σÏγκÏιση." + +#: kdiff3_part.cpp:291 +msgid "KDiff3Part" +msgstr "KDiff3Part" + +#: kdiff3_shell.cpp:78 +msgid "" +"Could not find our part!\n" +"This usually happens due to an installation problem. Please read the " +"README-file in the source package for details." +msgstr "" +"Αδυναμία εÏÏεσης του τμήματος μας!\n" +"Αυτό συνήθως συμβαίνει εξαιτίας ενός Ï€Ïοβλήματος εγκατάστασης. ΠαÏακαλώ " +"διαβάστε το αÏχείο README στο πακέτου του πηγαίου κώδικα για λεπτομέÏειες." + +#: main.cpp:35 +msgid "Tool for Comparison and Merge of Files and Directories" +msgstr "ΕÏγαλείο για σÏγκÏιση και συγχώνευση αÏχείων και καταλόγων" + +#: main.cpp:40 +msgid "Merge the input." +msgstr "Συγχώνευση της εισόδου." + +#: main.cpp:42 +msgid "Explicit base file. For compatibility with certain tools." +msgstr "Άμεσο αÏχείο βάση. Για συμβατότητα με οÏισμένα εÏγαλεία." + +#: main.cpp:44 +msgid "Output file. Implies -m. E.g.: -o newfile.txt" +msgstr "ΑÏχείο εξόδου. Εννοείται η επιλογή -m. Π.χ.: -o newfile.txt" + +#: main.cpp:45 +msgid "Output file, again. (For compatibility with certain tools.)" +msgstr "ΑÏχείο εξόδου, και πάλι. (Για συμβατότητα με οÏισμένα εÏγαλεία.)" + +#: main.cpp:46 +msgid "No GUI if all conflicts are auto-solvable. (Needs -o file)" +msgstr "" +"ΧωÏίς γÏαφικό πεÏιβάλλον αν όλες οι συγκÏοÏσεις μποÏοÏν να επιλυθοÏν αυτόματα. " +"(Απαιτεί το -o file)" + +#: main.cpp:47 +msgid "Don't solve conflicts automatically. (For compatibility...)" +msgstr "Îα μη γίνει αυτόματη επίλυση συγκÏοÏσεων. (Για συμβατότητα...)" + +#: main.cpp:48 +msgid "Visible name replacement for input file 1 (base)." +msgstr "ΟÏατή αντικατάσταση ονόματος για το αÏχείο εισόδου 1 (βάση)." + +#: main.cpp:49 +msgid "Visible name replacement for input file 2." +msgstr "ΟÏατή αντικατάσταση ονόματος για το αÏχείο εισόδου 2." + +#: main.cpp:50 +msgid "Visible name replacement for input file 3." +msgstr "ΟÏατή αντικατάσταση ονόματος για το αÏχείο εισόδου 3." + +#: main.cpp:52 +msgid "Alternative visible name replacement. Supply this once for every input." +msgstr "" +"Εναλλακτική οÏατή αντικατάσταση ονόματος. Δώστε το μία φοÏά για κάθε είσοδο." + +#: main.cpp:53 +msgid "" +"Override a config setting. Use once for every setting. E.g.: --cs " +"\"AutoAdvance=1\"" +msgstr "" +"Αντικατάσταση μίας ÏÏθμισης επιλογής. ΧÏήση μία φοÏά για κάθε ÏÏθμιση. Π.χ.: " +"--cs \"AutoAdvance=1\"" + +#: main.cpp:54 +msgid "Show list of config settings and current values." +msgstr "Εμφάνιση λίστα Ïυθμίσεων και Ï„Ïεχουσών τιμών." + +#: main.cpp:55 +msgid "Use a different config file." +msgstr "ΧÏήση ενός διαφοÏÎµÏ„Î¹ÎºÎ¿Ï Î±Ïχείου Ïυθμίσεων." + +#: main.cpp:59 +msgid "file1 to open (base, if not specified via --base)" +msgstr "αÏχείο1 για άνοιγμα (βάση, αν δεν καθοÏιστεί μέσω του --base)" + +#: main.cpp:60 +msgid "file2 to open" +msgstr "αÏχείο2 για άνοιγμα" + +#: main.cpp:61 +msgid "file3 to open" +msgstr "αÏχείο3 για άνοιγμα" + +#: main.cpp:93 +msgid "Ignored. (User defined.)" +msgstr "Αγνόηση. (καθοÏισμός από χÏήστη.)" + +#. i18n: file kdiff3_part.rc line 16 +#: main.cpp:173 rc.cpp:9 +#, no-c-format +msgid "KDiff3" +msgstr "KDiff3" + +#: main.cpp:186 +msgid "+ Many thanks to those who reported bugs and contributed ideas!" +msgstr "" +"+ Πολλές ευχαÏιστίες σε όσους ανέφεÏαν σφάλματα και συνεισέφεÏαν ιδέες!" + +#: mergeresultwindow.cpp:136 mergeresultwindow.cpp:939 +#: mergeresultwindow.cpp:953 mergeresultwindow.cpp:965 +#: mergeresultwindow.cpp:977 +msgid "Number of remaining unsolved conflicts: %1 (of which %2 are whitespace)" +msgstr "" +"ΑÏιθμός εναπομείναντων μη λυμένων συγκÏοÏσεων: %1 ( %2 από τις οποίες αφοÏοÏν " +"κενά)" + +#: mergeresultwindow.cpp:285 +msgid "" +"The output has been modified.\n" +"If you continue your changes will be lost." +msgstr "" +"Η έξοδος έχει Ï„Ïοποποιηθεί.\n" +"Αν συνεχίσετε οι αλλαγές σας θα χαθοÏν." + +#: mergeresultwindow.cpp:797 pdiff.cpp:511 +msgid "All input files are binary equal." +msgstr "Όλα τα αÏχεία εισόδου είναι δυαδικά ίσα." + +#: mergeresultwindow.cpp:799 +msgid "All input files contain the same text." +msgstr "Όλα τα αÏχεία εισόδου πεÏιέχουν το ίδιο κείμενο." + +#: mergeresultwindow.cpp:801 +msgid "" +"Files A and B are binary equal.\n" +msgstr "" +"Τα αÏχεία Α και Î’ είναι δυαδικά ίσα.\n" + +#: mergeresultwindow.cpp:802 +msgid "" +"Files A and B have equal text. \n" +msgstr "" +"Τα αÏχεία Α και Î’ πεÏιέχουν το ίδιο κείμενο. \n" + +#: mergeresultwindow.cpp:803 +msgid "" +"Files A and C are binary equal.\n" +msgstr "" +"Τα αÏχεία Α και Γ είναι δυαδικά ίσα.\n" + +#: mergeresultwindow.cpp:804 +msgid "" +"Files A and C have equal text. \n" +msgstr "" +"Τα αÏχεία Α και Γ πεÏιέχουν το ίδιο κείμενο. \n" + +#: mergeresultwindow.cpp:805 +msgid "" +"Files B and C are binary equal.\n" +msgstr "" +"Τα αÏχεία Î’ και Γ είναι δυαδικά ίσα.\n" + +#: mergeresultwindow.cpp:806 +msgid "" +"Files B and C have equal text. \n" +msgstr "" +"Τα αÏχεία Î’ και Γ πεÏιέχουν το ίδιο κείμενο. \n" + +#: mergeresultwindow.cpp:812 +msgid "Total number of conflicts: " +msgstr "Συνολικός αÏιθμός συγκÏοÏσεων: " + +#: mergeresultwindow.cpp:813 +msgid "" +"\n" +"Nr of automatically solved conflicts: " +msgstr "" +"\n" +"ΑÏιθμός αυτόματα λυμένων συγκÏοÏσεων: " + +#: mergeresultwindow.cpp:814 +msgid "" +"\n" +"Nr of unsolved conflicts: " +msgstr "" +"\n" +"ΑÏιθμός μη λυμένων συγκÏοÏσεων: " + +#: mergeresultwindow.cpp:816 +msgid "Conflicts" +msgstr "ΣυγκÏοÏσεις" + +#: mergeresultwindow.cpp:1652 +msgid "" +msgstr "<ΧωÏίς γÏαμμή πηγής>" + +#: mergeresultwindow.cpp:1660 +msgid "" +msgstr "<ΣÏγκÏουση συγχώνευσης (μόνο κενών)>" + +#: mergeresultwindow.cpp:1662 mergeresultwindow.cpp:2427 +msgid "" +msgstr "<ΣÏγκÏουση συγχώνευσης>" + +#: mergeresultwindow.cpp:2635 +msgid "" +"Not all conflicts are solved yet.\n" +"File not saved.\n" +msgstr "" +"Δεν έχουν επιλυθεί ακόμη όλες οι συγκÏοÏσεις.\n" +"Το αÏχείο δεν αποθηκεÏτηκε.\n" + +#: mergeresultwindow.cpp:2637 +msgid "Conflicts Left" +msgstr "ΣυγκÏοÏσεις που απομένουν" + +#: mergeresultwindow.cpp:2649 +msgid "" +"\n" +"\n" +"Creating backup failed. File not saved." +msgstr "" +"\n" +"\n" +"Η δημιουÏγία αντιγÏάφου ασφαλείας απέτυχε. Το αÏχείο δεν αποθηκεÏτηκε." + +#: mergeresultwindow.cpp:2649 mergeresultwindow.cpp:2689 +msgid "File Save Error" +msgstr "Σφάλμα εγγÏαφής αÏχείου" + +#: mergeresultwindow.cpp:2689 +msgid "Error while writing." +msgstr "Σφάλμα κατά την εγγÏαφή." + +#: mergeresultwindow.cpp:3020 +msgid "Output" +msgstr "Έξοδος" + +#: mergeresultwindow.cpp:3032 mergeresultwindow.cpp:3139 +msgid "[Modified]" +msgstr "[ΤÏοποποιημένο]" + +#: mergeresultwindow.cpp:3039 +msgid "Encoding for saving" +msgstr "Κωδικοποίηση για την αποθήκευση" + +#: mergeresultwindow.cpp:3075 mergeresultwindow.cpp:3081 +#: mergeresultwindow.cpp:3087 +msgid "Codec from" +msgstr "Κωδικοποιητής από" + +#: optiondialog.cpp:362 +msgid "Unicode, 8 bit" +msgstr "Unicode, 8 bit" + +#: optiondialog.cpp:363 +msgid "Unicode" +msgstr "Unicode" + +#: optiondialog.cpp:364 +msgid "Latin1" +msgstr "Latin1" + +#: optiondialog.cpp:383 +msgid "Change this if non-ASCII characters are not displayed correctly." +msgstr "ΤÏοποποιήστε αυτό αν οι μη ASCII χαÏακτήÏες δεν εμφανίζονται σωστά." + +#: optiondialog.cpp:510 +msgid "Editor & Diff Output Font" +msgstr "ΓÏαμματοσειÏά επεξεÏγαστή & εξόδου διαφοÏών" + +#: optiondialog.cpp:531 +msgid "Italic font for deltas" +msgstr "Πλάγια γÏαφή για διαφοÏές" + +#: optiondialog.cpp:534 +msgid "" +"Selects the italic version of the font for differences.\n" +"If the font doesn't support italic characters, then this does nothing." +msgstr "" +"Επιλέγει την πλάγια έκδοση της γÏαμματοσειÏάς για τις διαφοÏές.\n" +"Αν η γÏαμματοσειÏά δεν υποστηÏίζει τους πλάγιους χαÏακτήÏες, τότε αυτό δεν έχει " +"αποτέλεσμα." + +#: optiondialog.cpp:542 +msgid "Color" +msgstr "ΧÏώμα" + +#: optiondialog.cpp:542 +msgid "Colors Settings" +msgstr "Ρυθμίσεις χÏωμάτων" + +#: optiondialog.cpp:556 +msgid "Editor and Diff Views:" +msgstr "ΠÏοβολές επεξεÏγαστή και διαφοÏών:" + +#: optiondialog.cpp:564 +msgid "Foreground color:" +msgstr "ΧÏώμα Ï€Ïοσκηνίου:" + +#: optiondialog.cpp:570 +msgid "Background color:" +msgstr "ΧÏώμα φόντου:" + +#: optiondialog.cpp:578 +msgid "Diff background color:" +msgstr "ΧÏώμα φόντου διαφοÏών:" + +#: optiondialog.cpp:585 +msgid "Color A:" +msgstr "ΧÏώμα Α:" + +#: optiondialog.cpp:592 +msgid "Color B:" +msgstr "ΧÏώμα Î’:" + +#: optiondialog.cpp:599 +msgid "Color C:" +msgstr "ΧÏώμα Γ:" + +#: optiondialog.cpp:605 +msgid "Conflict color:" +msgstr "ΧÏώμα σÏγκÏουσης:" + +#: optiondialog.cpp:612 +msgid "Current range background color:" +msgstr "ΤÏέχον εÏÏος χÏώματος φόντου:" + +#: optiondialog.cpp:619 +msgid "Current range diff background color:" +msgstr "ΤÏέχον εÏÏος χÏώματος φόντου διαφοÏών:" + +#: optiondialog.cpp:625 +msgid "Color for manually aligned difference ranges:" +msgstr "ΧÏώμα για χειÏοκίνητα στοιχισμένα εÏÏη διαφοÏών:" + +#: optiondialog.cpp:630 +msgid "Directory Comparison View:" +msgstr "ΠÏοβολή σÏγκÏισης καταλόγου:" + +#: optiondialog.cpp:636 +msgid "Newest file color:" +msgstr "ΧÏώμα νεότεÏου αÏχείου:" + +#: optiondialog.cpp:639 +msgid "" +"Changing this color will only be effective when starting the next directory " +"comparison." +msgstr "" +"Η Ï„Ïοποποίηση Î±Ï…Ï„Î¿Ï Ï„Î¿Ï… χÏώματος θα έχει Î¹ÏƒÏ‡Ï ÎºÎ±Ï„Î¬ την επόμενη σÏγκÏιση " +"καταλόγου." + +#: optiondialog.cpp:644 +msgid "Oldest file color:" +msgstr "ΧÏώμα παλαιότεÏου αÏχείου:" + +#: optiondialog.cpp:651 +msgid "Middle age file color:" +msgstr "ΧÏώμα μέσου αÏχείου:" + +#: optiondialog.cpp:658 +msgid "Color for missing files:" +msgstr "ΧÏώμα αÏχείων που λείπουν:" + +#: optiondialog.cpp:670 +msgid "Editor" +msgstr "ΕπεξεÏγαστής" + +#: optiondialog.cpp:670 +msgid "Editor Behavior" +msgstr "ΣυμπεÏιφοÏά επεξεÏγαστή" + +#: optiondialog.cpp:680 +msgid "Tab inserts spaces" +msgstr "Το Tab εισάγει κενά" + +#: optiondialog.cpp:683 +msgid "" +"On: Pressing tab generates the appropriate number of spaces.\n" +"Off: A Tab-character will be inserted." +msgstr "" +"ΕνεÏγοποιημένο: Πατώντας το tab εισάγεται ο κατάλληλος αÏιθμός κενών.\n" +"ΑπενεÏγοποιημένο: Θα εισαχθεί ο χαÏακτήÏας στηλοθέτη (tab)." + +#: optiondialog.cpp:689 +msgid "Tab size:" +msgstr "Μέγεθος στηλοθέτη:" + +#: optiondialog.cpp:694 +msgid "Auto indentation" +msgstr "Αυτόματη χÏήση εσοχών" + +#: optiondialog.cpp:697 +msgid "" +"On: The indentation of the previous line is used for a new line.\n" +msgstr "" +"ΕνεÏγοποιημένο: Η εσοχή της Ï€ÏοηγοÏμενης γÏαμμής θα χÏησιμοποιηθεί για μια νέα " +"γÏαμμή.\n" + +#: optiondialog.cpp:701 +msgid "Auto copy selection" +msgstr "Αυτόματη αντιγÏαφή επιλογής" + +#: optiondialog.cpp:704 +msgid "" +"On: Any selection is immediately written to the clipboard.\n" +"Off: You must explicitely copy e.g. via Ctrl-C." +msgstr "" +"ΕνεÏγοποιημένο: Οποιαδήποτε επιλογή γÏάφεται άμεσα στο Ï€ÏόχειÏο. " +"ΑπενεÏγοποιημένο: Θα Ï€Ïέπει να την αντιγÏάψετε εσείς Ï€.χ. μέσω του Ctrl-C." + +#: optiondialog.cpp:709 +msgid "Line end style:" +msgstr "Στυλ τέλους γÏαμμής:" + +#: optiondialog.cpp:721 +msgid "" +"Sets the line endings for when an edited file is saved.\n" +"DOS/Windows: CR+LF; UNIX: LF; with CR=0D, LF=0A" +msgstr "" +"ΚαθοÏίζει τον Ï„Ïπο τέλους γÏαμμής όταν αποθηκεÏεται ένα επεξεÏγασμένο αÏχείο.\n" +"DOS/Windows: CR+LF; UNIX: LF; με τα CR=0D, LF=0A" + +#: optiondialog.cpp:732 +msgid "Diff" +msgstr "Diff" + +#: optiondialog.cpp:732 +msgid "Diff Settings" +msgstr "Ρυθμίσεις του Diff" + +#: optiondialog.cpp:743 +msgid "Preserve carriage return" +msgstr "ΔιατήÏηση επαναφοÏάς κεφαλής" + +#: optiondialog.cpp:746 +msgid "" +"Show carriage return characters '\\r' if they exist.\n" +"Helps to compare files that were modified under different operating systems." +msgstr "" +"Εμφανίζει τους χαÏακτήÏες επαναφοÏάς κεφαλής '\\r' αν υπάÏχουν.\n" +"Βοηθάει στη σÏγκÏιση αÏχείων που Ï„Ïοποποιήθηκαν σε διαφοÏετικά λειτουÏγικά " +"συστήματα." + +#: optiondialog.cpp:751 +msgid "Ignore numbers" +msgstr "ΠαÏάβλεψη αÏιθμών" + +#: optiondialog.cpp:754 +msgid "" +"Ignore number characters during line matching phase. (Similar to Ignore white " +"space.)\n" +"Might help to compare files with numeric data." +msgstr "" +"ΠαÏάβλεψη αÏιθμών κατά τη φάση ταιÏιάσματος γÏαμμών. (Αντίστοιχο με την " +"παÏάβλεψη κενών).\n" +"ΜποÏεί να φανεί χÏήσιμο κατά τη σÏγκÏιση αÏχείων με αÏιθμητικά δεδομένα." + +#: optiondialog.cpp:759 +msgid "Ignore C/C++ comments" +msgstr "ΠαÏάβλεψη σχολίων C/C++" + +#: optiondialog.cpp:761 +msgid "Treat C/C++ comments like white space." +msgstr "ΘεώÏηση των σχολίων C/C++ σαν κενά." + +#: optiondialog.cpp:765 +msgid "Ignore case" +msgstr "Αγνόηση διάκÏισης πεζών/κεφαλαίων" + +#: optiondialog.cpp:768 +msgid "Treat case differences like white space changes. ('a'<=>'A')" +msgstr "ΧειÏισμός των διαφοÏών σε πεζά/κεφαλαία ως αλλαγές κενών. ('α'<=>'Α')" + +#: optiondialog.cpp:772 +msgid "Preprocessor command:" +msgstr "Εντολή Ï€ÏοεπεξεÏγαστή:" + +#: optiondialog.cpp:776 +msgid "User defined pre-processing. (See the docs for details.)" +msgstr "" +"ΠÏοεπεξεÏγασία οÏισμένη από το χÏήστη. (Δείτε τα εγχειÏίδια για λεπτομέÏειες)." + +#: optiondialog.cpp:779 +msgid "Line-matching preprocessor command:" +msgstr "Εντολή Ï€ÏοεπεξεÏγαστή για ταίÏιασμα γÏαμμών:" + +#: optiondialog.cpp:783 +msgid "" +"This pre-processor is only used during line matching.\n" +"(See the docs for details.)" +msgstr "" +"Ο Ï€ÏοεπεξεÏγαστής χÏησιμοποιείται μόνο κατά το ταίÏιασμα γÏαμμών.\n" +"(Δείτε τα εγχειÏίδια για λεπτομέÏειες)." + +#: optiondialog.cpp:786 +msgid "Try hard (slower)" +msgstr "Εις βάθος ανάλυση (πιο αÏγό)" + +#: optiondialog.cpp:789 +msgid "" +"Enables the --minimal option for the external diff.\n" +"The analysis of big files will be much slower." +msgstr "" +"ΕνεÏγοποιεί την επιλογή --minimal για το εξωτεÏικό diff.\n" +"Η ανάλυση μεγάλων αÏχείων θα είναι αισθητά πιο αÏγή." + +#: optiondialog.cpp:794 +msgid "Auto advance delay (ms):" +msgstr "ΚαθυστέÏηση αυτόματης μετάβασης (ms):" + +#: optiondialog.cpp:799 +msgid "" +"When in Auto-Advance mode the result of the current selection is shown \n" +"for the specified time, before jumping to the next conflict. Range: 0-2000 ms" +msgstr "" +"Όταν βÏίσκεστε στη λειτουÏγία αυτόματης μετάβασης εμφανίζεται το αποτέλεσμα της " +"Ï„Ïέχουσας επιλογής\n" +"για τον καθοÏισμένο χÏόνο, Ï€Ïιν την μεταπήδηση στην επόμενη σÏγκÏουση. ΕÏÏος: " +"0-2000 ms" + +#: optiondialog.cpp:809 +msgid "Merge Settings" +msgstr "Ρυθμίσεις συγχώνευσης" + +#: optiondialog.cpp:822 +msgid "White space 2-file merge default:" +msgstr "ΠÏοκαθοÏισμός κενών διαφοÏών συγχώνευσης 2 αÏχείων:" + +#: optiondialog.cpp:826 optiondialog.cpp:839 +msgid "Manual Choice" +msgstr "ΧειÏοκίνητη επιλογή" + +#: optiondialog.cpp:830 optiondialog.cpp:844 +msgid "" +"Allow the merge algorithm to automatically select an input for white-space-only " +"changes." +msgstr "" +"ΕπιτÏέπει στον αλγόÏιθμο συγχώνευσης την αυτόματη επιλογή μιας εισόδου για " +"διαφοÏές μόνο κενών." + +#: optiondialog.cpp:835 +msgid "White space 3-file merge default:" +msgstr "ΠÏοκαθοÏισμός κενών διαφοÏών συγχώνευσης 3 αÏχείων:" + +#: optiondialog.cpp:849 +msgid "Automatic Merge Regular Expression" +msgstr "Κανονική έκφÏαση αυτόματης συγχώνευσης" + +#: optiondialog.cpp:858 smalldialogs.cpp:397 +msgid "Auto merge regular expression:" +msgstr "Κανονική έκφÏαση αυτόματης συγχώνευσης:" + +#: optiondialog.cpp:862 +msgid "" +"Regular expression for lines where KDiff3 should automatically choose one " +"source.\n" +"When a line with a conflict matches the regular expression then\n" +"- if available - C, otherwise B will be chosen." +msgstr "" +"Κανονική έκφÏαση για γÏαμμές όπου το KDiff3 θα Ï€Ïέπει να επιλέξει αυτόματα μία " +"πηγή.\n" +"Αν μία γÏαμμή με σÏγκÏουση ταιÏιάζει στην κανονική έκφÏαση τότε θα επιλεχθεί το " +"Γ, αν\n" +"είναι διαθέσιμο, ενώ σε άλλη πεÏίπτωση το Î’." + +#: optiondialog.cpp:868 +msgid "Run regular expression auto merge on merge start" +msgstr "" +"Εκτέλεση κανονικής έκφÏασης αυτόματης συγχώνευσης στην αÏχή της συγχώνευσης" + +#: optiondialog.cpp:870 +msgid "" +"Run the merge for auto merge regular expressions\n" +"immediately when a merge starts.\n" +msgstr "" +"Εκτέλεση της συγχώνευσης για κανονικές εκφÏάσεις αυτόματης συγχώνευσης\n" +"αμέσως μετά την έναÏξη της συγχώνευσης.\n" + +#: optiondialog.cpp:875 +msgid "Version Control History Merging" +msgstr "Συγχώνευση ιστοÏÎ¹ÎºÎ¿Ï ÎµÎ»Î­Î³Ï‡Î¿Ï… έκδοσης" + +#: optiondialog.cpp:884 smalldialogs.cpp:424 +msgid "History start regular expression:" +msgstr "Κανονική έκφÏαση έναÏξης ιστοÏικοÏ:" + +#: optiondialog.cpp:888 +msgid "" +"Regular expression for the start of the version control history entry.\n" +"Usually this line contains the \"$Log$\"-keyword.\n" +"Default value: \".*\\$Log.*\\$.*\"" +msgstr "" +"Κανονική έκφÏαση για την έναÏξη της καταχώÏησης του ιστοÏÎ¹ÎºÎ¿Ï ÏƒÏ…Î³Ï‡ÏŽÎ½ÎµÏ…ÏƒÎ·Ï‚.\n" +"Συνήθως αυτή η γÏαμμή πεÏιέχει τη λέξη κλειδί \"$Log$\".\n" +"Η Ï€ÏοκαθοÏισμένη τιμή είναι: \".*\\$Log.*\\$.*\"" + +#: optiondialog.cpp:894 smalldialogs.cpp:453 +msgid "History entry start regular expression:" +msgstr "Κανονική έκφÏαση για την έναÏξη της καταχώÏησης ιστοÏικοÏ:" + +#: optiondialog.cpp:906 +msgid "" +"A version control history entry consists of several lines.\n" +"Specify the regular expression to detect the first line (without the leading " +"comment).\n" +"Use parentheses to group the keys you want to use for sorting.\n" +"If left empty, then KDiff3 assumes that empty lines separate history entries.\n" +"See the documentation for details." +msgstr "" +"Μία καταχώÏηση ιστοÏÎ¹ÎºÎ¿Ï ÏƒÏ…Î³Ï‡ÏŽÎ½ÎµÏ…ÏƒÎ·Ï‚ αποτελείται από πολλές γÏαμμές.\n" +"ΚαθοÏίστε την κανονική έκφÏαση για τον εντοπισμό της Ï€Ïώτης γÏαμμής (χωÏίς το " +"σχόλιο που Ï€Ïοηγείται).\n" +"ΧÏησιμοποιείστε παÏενθέσεις για την ομαδοποίηση των κλειδιών που επιθυμείτε για " +"την ταξινόμηση.\n" +"Αν οÏισθεί σαν κενή, τότε το KDiff3 θεωÏεί ότι οι καταχωÏήσεις ιστοÏÎ¹ÎºÎ¿Ï " +"διαχωÏίζονται με κενές γÏαμμές.\n" +"Δείτε την τεκμηÏίωση για λεπτομέÏειες." + +#: optiondialog.cpp:914 +msgid "History merge sorting" +msgstr "Ταξινόμηση ιστοÏÎ¹ÎºÎ¿Ï ÏƒÏ…Î³Ï‡ÏŽÎ½ÎµÏ…ÏƒÎ·Ï‚" + +#: optiondialog.cpp:916 +msgid "Sort version control history by a key." +msgstr "Ταξινόμηση ιστοÏÎ¹ÎºÎ¿Ï ÎµÎ»Î­Î³Ï‡Î¿Ï… εκδόσεων κατά ένα κλειδί." + +#: optiondialog.cpp:926 +msgid "History entry start sort key order:" +msgstr "ΣειÏά ταξινόμησης ιστοÏÎ¹ÎºÎ¿Ï ÎµÎ»Î­Î³Ï‡Î¿Ï… εκδόσεων:" + +#: optiondialog.cpp:930 +msgid "" +"Each parentheses used in the regular expression for the history start entry\n" +"groups a key that can be used for sorting.\n" +"Specify the list of keys (that are numbered in order of occurrence\n" +"starting with 1) using ',' as separator (e.g. \"4,5,6,1,2,3,7\").\n" +"If left empty, then no sorting will be done.\n" +"See the documentation for details." +msgstr "" +"Κάθε παÏένθεση της κανονικής έκφÏασης για την έναÏξη καταχώÏησης ιστοÏικοÏ\n" +"δημιουÏγεί ένα κλειδί που μποÏεί να χÏησιμοποιηθεί για ταξινόμηση.\n" +"ΟÏίστε τη λίστα των κλειδιών (τα οποία αÏιθμοÏνται με σειÏά εμφάνισης\n" +"ξεκινώντας από το 1) χÏησιμοποιώντας το ',' ως διαχωÏιστικό (Ï€.χ. " +"\"4,5,6,1,2,3,7\").\n" +"Αν οÏισθεί κενό, τότε δε θα γίνει ταξινόμηση.\n" +"Δείτε την τεκμηÏίωση για λεπτομέÏειες." + +#: optiondialog.cpp:941 +msgid "Merge version control history on merge start" +msgstr "Συγχώνευση ιστοÏÎ¹ÎºÎ¿Ï ÎµÎ»Î­Î³Ï‡Î¿Ï… έκδοσης κατά την έναÏξη συγχώνευσης" + +#: optiondialog.cpp:943 +msgid "Run version control history automerge on merge start." +msgstr "" +"Εκτέλεση συγχώνευσης ιστοÏÎ¹ÎºÎ¿Ï ÎµÎ»Î­Î³Ï‡Î¿Ï… έκδοσης κατά την έναÏξη συγχώνευσης." + +#: optiondialog.cpp:947 +msgid "Test your regular expressions" +msgstr "Δοκιμή των κανονικών εκφÏάσεών σας" + +#: optiondialog.cpp:952 +msgid "Irrelevant merge command:" +msgstr "Εντολή συγχώνευσης με σχετικοÏ:" + +#: optiondialog.cpp:956 +msgid "" +"If specified this script is run after automerge\n" +"when no other relevant changes were detected.\n" +"Called with the parameters: filename1 filename2 filename3" +msgstr "" +"Αν καθοÏιστεί αυτό το σενάÏιο εκτελείται μετά την αυτόματη συγχώνευση\n" +"όταν δεν εντοπιστοÏν άλλες σχετικές Ï„Ïοποποιήσεις.\n" +"Καλείται με παÏαμέτÏους τα: όνομααÏχείου1 όνομααÏχείου2 όνομααÏχείου3" + +#: optiondialog.cpp:966 +msgid "Directory Merge" +msgstr "Συγχώνευση καταλόγου" + +#: optiondialog.cpp:975 +msgid "Recursive directories" +msgstr "ΑναδÏομικά στους καταλόγους" + +#: optiondialog.cpp:977 +msgid "Whether to analyze subdirectories or not." +msgstr "Αν θα αναλυθοÏν οι υποκατάλογοι ή όχι." + +#: optiondialog.cpp:979 +msgid "File pattern(s):" +msgstr "Μοτίβα αÏχείου:" + +#: optiondialog.cpp:984 +msgid "" +"Pattern(s) of files to be analyzed. \n" +"Wildcards: '*' and '?'\n" +"Several Patterns can be specified by using the separator: ';'" +msgstr "" +"Μοτίβα αÏχείων που θα αναλυθοÏν. \n" +"ΣÏμβολα υποκατάστασης: '*' και '?'\n" +"ΜποÏοÏν να οÏιστοÏν πολλαπλά μοτίβα χÏησιμοποιώντας το διαχωÏιστικό: ';'" + +#: optiondialog.cpp:990 +msgid "File-anti-pattern(s):" +msgstr "ΑντίστÏοφα μοτίβα αÏχείου:" + +#: optiondialog.cpp:995 +msgid "" +"Pattern(s) of files to be excluded from analysis. \n" +"Wildcards: '*' and '?'\n" +"Several Patterns can be specified by using the separator: ';'" +msgstr "" +"Μοτίβα αÏχείων που θα εξαιÏεθοÏν από την ανάλυση. \n" +"ΣÏμβολα υποκατάστασης: '*' και '?'\n" +"ΜποÏοÏν να οÏιστοÏν πολλαπλά μοτίβα χÏησιμοποιώντας το διαχωÏιστικό: ';'" + +#: optiondialog.cpp:1001 +msgid "Dir-anti-pattern(s):" +msgstr "ΑντίστÏοφα μοτίβα καταλόγου:" + +#: optiondialog.cpp:1006 +msgid "" +"Pattern(s) of directories to be excluded from analysis. \n" +"Wildcards: '*' and '?'\n" +"Several Patterns can be specified by using the separator: ';'" +msgstr "" +"Μοτίβα καταλόγων που θα εξαιÏεθοÏν από την ανάλυση. \n" +"ΣÏμβολα υποκατάστασης: '*' και '?'\n" +"ΜποÏοÏν να οÏιστοÏν πολλαπλά μοτίβα χÏησιμοποιώντας το διαχωÏιστικό: ';'" + +#: optiondialog.cpp:1012 +msgid "Use .cvsignore" +msgstr "ΧÏήση .cvsignore" + +#: optiondialog.cpp:1015 +msgid "" +"Extends the antipattern to anything that would be ignored by CVS.\n" +"Via local \".cvsignore\"-files this can be directory specific." +msgstr "" +"Επέκταση του αντίστÏοφου μοτίβου σε οτιδήποτε που θα αγνοηθεί στο CVS.\n" +"Μέσω των τοπικών αÏχείων \".cvsignore\" μποÏεί αυτό να είναι συγκεκÏιμένου " +"καταλόγου." + +#: optiondialog.cpp:1020 +msgid "Find hidden files and directories" +msgstr "Αναζήτηση κÏυφών αÏχείων και καταλόγων" + +#: optiondialog.cpp:1023 +msgid "Finds files and directories with the hidden attribute." +msgstr "Αναζητεί αÏχεία και καταλόγους που είναι κÏυφά." + +#: optiondialog.cpp:1025 +msgid "Finds files and directories starting with '.'." +msgstr "Αναζητεί αÏχεία και καταλόγους που αÏχίζουν με '.'." + +#: optiondialog.cpp:1029 +msgid "Follow file links" +msgstr "ΑκολοÏθηση δεσμών αÏχείων" + +#: optiondialog.cpp:1032 +msgid "" +"On: Compare the file the link points to.\n" +"Off: Compare the links." +msgstr "" +"ΕνεÏγοποιημένο: ΣÏγκÏιση του αÏχείου στο οποίο δείχνει ο δεσμός.\n" +"ΑπενεÏγοποιημένο: ΣÏγκÏιση των δεσμών." + +#: optiondialog.cpp:1037 +msgid "Follow directory links" +msgstr "ΑκολοÏθηση δεσμών καταλόγων" + +#: optiondialog.cpp:1040 +msgid "" +"On: Compare the directory the link points to.\n" +"Off: Compare the links." +msgstr "" +"ΕνεÏγοποιημένο: ΣÏγκÏιση του καταλόγου στο οποίο δείχνει ο δεσμός.\n" +"ΑπενεÏγοποιημένο: ΣÏγκÏιση των δεσμών." + +#: optiondialog.cpp:1056 +msgid "Case sensitive filename comparison" +msgstr "ΣÏγκÏιση αÏχείων με ευαισθησία κεφαλαίων/πεζών" + +#: optiondialog.cpp:1059 +msgid "" +"The directory comparison will compare files or directories when their names " +"match.\n" +"Set this option if the case of the names must match. (Default for Windows is " +"off, otherwise on.)" +msgstr "" +"Η σÏγκÏιση καταλόγων θα εκτελέσει σÏγκÏιση των αÏχείων όταν ταιÏιάζουν τα " +"ονόματά τους.\n" +"ΕνεÏγοποιήστε αυτή την επιλογή όταν τα ονόματα των αÏχείων Ï€Ïέπει να " +"ταιÏιάζουν. (ΠÏοκαθοÏισμένο για τα Windows είναι ανενεÏγό, ενώ σε άλλη " +"πεÏίπτωση είναι ενεÏγό.)" + +#: optiondialog.cpp:1063 +msgid "File Comparison Mode" +msgstr "ΛειτουÏγία σÏγκÏισης αÏχείου" + +#: optiondialog.cpp:1067 +msgid "Binary comparison" +msgstr "Δυαδική σÏγκÏιση" + +#: optiondialog.cpp:1068 +msgid "Binary comparison of each file. (Default)" +msgstr "Δυαδική σÏγκÏιση του κάθε αÏχείου (ΠÏοκαθοÏισμένο)" + +#: optiondialog.cpp:1070 +msgid "Full analysis" +msgstr "ΠλήÏης ανάλυση" + +#: optiondialog.cpp:1071 +msgid "" +"Do a full analysis and show statistics information in extra columns.\n" +"(Slower than a binary comparison, much slower for binary files.)" +msgstr "" +"ΠÏαγματοποιεί πλήÏη ανάλυση και εμφανίζει στατιστικά σε επιπλέον στήλες.\n" +"(Πιο αÏγό από τη δυαδική σÏγκÏιση, και Ï€Î¿Î»Ï Ï€Î¹Î¿ αÏγό για δυαδικά αÏχεία)." + +#: optiondialog.cpp:1074 +msgid "Trust the modification date (unsafe)" +msgstr "ΕμπιστοσÏνη στην ημεÏομηνία Ï„Ïοποποίησης (μη ασφαλές)" + +#: optiondialog.cpp:1075 +msgid "" +"Assume that files are equal if the modification date and file length are " +"equal.\n" +"Useful for big directories or slow networks." +msgstr "" +"ΘεώÏησε ότι τα αÏχεία είναι ίσα αν η ημεÏομηνία Ï„Ïοποποίησης και το μέγεθος των " +"αÏχείων είναι ίσα.\n" +"ΧÏήσιμο για μεγάλους καταλόγους ή αÏγά δίκτυα." + +#: optiondialog.cpp:1078 +msgid "Trust the size (unsafe)" +msgstr "ΕμπιστοσÏνη στο μέγεθος (μη ασφαλές)" + +#: optiondialog.cpp:1079 +msgid "" +"Assume that files are equal if their file lengths are equal.\n" +"Useful for big directories or slow networks when the date is modified during " +"download." +msgstr "" +"ΘεώÏησε ότι τα αÏχεία είναι ίσα αν το μέγεθος των αÏχείων είναι ίσο.\n" +"ΧÏήσιμο για μεγάλους καταλόγους ή αÏγά δίκτυα όπου η ημεÏομηνία Ï„Ïοποποιείται " +"κατά τη λήψη." + +#: optiondialog.cpp:1083 +msgid "Synchronize directories" +msgstr "ΣυγχÏονισμός καταλόγων" + +#: optiondialog.cpp:1086 +msgid "" +"Offers to store files in both directories so that\n" +"both directories are the same afterwards.\n" +"Works only when comparing two directories without specifying a destination." +msgstr "" +"ΠÏοσφέÏει την αποθήκευση αÏχείων και στους δÏο καταλόγους\n" +"ώστε στο τέλος οι δÏο κατάλογοι να είναι ίδιοι.\n" +"ΔουλεÏει μόνο κατά τη σÏγκÏιση δÏο καταλόγων χωÏίς να έχει καθοÏιστεί " +"Ï€ÏοοÏισμός." + +#: optiondialog.cpp:1092 +msgid "White space differences considered equal" +msgstr "Οι διαφοÏές των κενών θεωÏοÏνται ίσες" + +#: optiondialog.cpp:1095 +msgid "" +"If files differ only by white space consider them equal.\n" +"This is only active when full analysis is chosen." +msgstr "" +"Αν τα αÏχεία διαφέÏουν μόνο σε κενοÏÏ‚ χαÏακτήÏες θεωÏοÏνται ότι είναι ίσα.\n" +"Αυτό είναι ενεÏγοποιημένο μόνο όταν επιλεγεί η πλήÏης ανάλυση." + +#: optiondialog.cpp:1101 +msgid "Copy newer instead of merging (unsafe)" +msgstr "ΑντιγÏαφή του νεότεÏου αντί για συγχώνευση (μη ασφαλές)" + +#: optiondialog.cpp:1104 +msgid "" +"Don't look inside, just take the newer file.\n" +"(Use this only if you know what you are doing!)\n" +"Only effective when comparing two directories." +msgstr "" +"Îα μη γίνει ανάλυση, αλλά απλά να ληφθεί το νεότεÏο αÏχείο.\n" +"(ΧÏησιμοποιήστε το μόνο αν ξέÏετε τι κάνετε!)\n" +"ΔουλεÏει μόνο όταν συγκÏίνονται δÏο κατάλογοι." + +#: optiondialog.cpp:1109 +msgid "Backup files (.orig)" +msgstr "ΔημιουÏγία αντιγÏάφων ασφαλείας (.orig)" + +#: optiondialog.cpp:1112 +msgid "" +"When a file would be saved over an old file, then the old file\n" +"will be renamed with a '.orig'-extension instead of being deleted." +msgstr "" +"Όταν ένα αÏχείο θα αποθηκευτεί με το όνομα ενός υπάÏχοντος αÏχείου, το υπάÏχον " +"αÏχείο θα μετονομαστεί με επέκταση '.orig' αντί να διαγÏαφεί." + +#: optiondialog.cpp:1176 +msgid "Regional Settings" +msgstr "Ρυθμίσεις πεÏιοχής" + +#: optiondialog.cpp:1272 +msgid "Language (restart required)" +msgstr "Γλώσσα (απαιτείται επανεκκίνηση)" + +#: optiondialog.cpp:1304 +msgid "" +"Choose the language of the GUI-strings or \"Auto\".\n" +"For a change of language to take place, quit and restart KDiff3." +msgstr "" +"Επιλέξτε τη γλώσσα των μηνυμάτων του γÏÎ±Ï†Î¹ÎºÎ¿Ï Ï€ÎµÏιβάλλοντος ή επιλέξτε " +"\"Αυτόματη\".\n" +"Για να γίνει η αλλαγή της γλώσσας, επανεκκινήστε το KDiff3." + +#: optiondialog.cpp:1322 +msgid "Use the same encoding for everything:" +msgstr "ΧÏήση της ίδιας κωδικοποίησης παντοÏ:" + +#: optiondialog.cpp:1325 +msgid "" +"Enable this allows to change all encodings by changing the first only.\n" +"Disable this if different individual settings are needed." +msgstr "" +"ΕνεÏγοποιώντας αυτή την επιλογή επιτÏέπει την αλλαγή όλων των κωδικοποιήσεων " +"αλλάζοντας μόνο την Ï€Ïώτη.\n" +"ΑπενεÏγοποιήστε αυτή την επιλογή αν χÏειάζεστε διαφοÏετικές επί μέÏους " +"επιλογές." + +#: optiondialog.cpp:1330 +msgid "Note: Local Encoding is " +msgstr "Σημείωση: Η τοπική κωδικοποίηση είναι " + +#: optiondialog.cpp:1334 +msgid "File Encoding for A:" +msgstr "Κωδικοποίηση αÏχείου για το Α:" + +#: optiondialog.cpp:1340 +msgid "" +"If enabled then Unicode (UTF-16 or UTF-8) encoding will be detected.\n" +"If the file encoding is not detected then the selected encoding will be used as " +"fallback.\n" +"(Unicode detection depends on the first bytes of a file - the byte order mark " +"\"BOM\".)" +msgstr "" +"Αν ενεÏγοποιηθεί θα γίνει ανίχνευση της κωδικοποίησης Unicode (UTF-16 or " +"UTF-8).\n" +"Αν δεν είναι δυνατή η ανίχνευση της κωδικοποίησης του αÏχείου, θα " +"χÏησιμοποιηθεί η επιλεγμένη κωδικοποίηση.\n" +"(Η ανίχνευση του Unicode εξαÏτάται από τα Ï€Ïώτα byte του αÏχείου - αυτά θα " +"είναι \"BOM\".)" + +#: optiondialog.cpp:1344 optiondialog.cpp:1353 optiondialog.cpp:1362 +msgid "Auto Detect Unicode" +msgstr "Αυτόματη ανίχνευση Unicode" + +#: optiondialog.cpp:1349 +msgid "File Encoding for B:" +msgstr "Κωδικοποίηση αÏχείου για το Î’:" + +#: optiondialog.cpp:1358 +msgid "File Encoding for C:" +msgstr "Κωδικοποίηση αÏχείου για το Γ:" + +#: optiondialog.cpp:1367 +msgid "File Encoding for Merge Output and Saving:" +msgstr "Κωδικοποίηση αÏχείου για την έξοδο συγχώνευσης και την αποθήκευση:" + +#: optiondialog.cpp:1371 +msgid "Auto Select" +msgstr "Αυτόματη επιλογή" + +#: optiondialog.cpp:1374 +msgid "" +"If enabled then the encoding from the input files is used.\n" +"In ambiguous cases a dialog will ask the user to choose the encoding for " +"saving." +msgstr "" +"Αν ενεÏγοποιηθεί, θα χÏησιμοποιηθεί η κωδικοποίηση του αÏχείου εισόδου.\n" +"Σε πεÏίπτωση αμφιβολίας θα εμφανιστεί ένα παÏάθυÏο διαλόγου όπου ο χÏήστης θα " +"Ï€Ïέπει να επιλέξει την κωδικοποίηση για την αποθήκευση." + +#: optiondialog.cpp:1378 +msgid "File Encoding for Preprocessor Files:" +msgstr "Κωδικοποίηση για τα αÏχεία του Ï€ÏοεπεξεÏγαστή:" + +#: optiondialog.cpp:1389 +msgid "Right To Left Language" +msgstr "Γλώσσας αναγνώσιμη από δεξιά στα αÏιστεÏά" + +#: optiondialog.cpp:1392 +msgid "" +"Some languages are read from right to left.\n" +"This setting will change the viewer and editor accordingly." +msgstr "" +"ΜεÏικές γλώσσες διαβάζονται από δεξιά στα αÏιστεÏά.\n" +"Αυτή η ÏÏθμιση θα Ï„Ïοποποίηση τον Ï€Ïοβολέα και τον επεξεÏγαστή κατάλληλα." + +#: optiondialog.cpp:1402 +msgid "Integration" +msgstr "Ενσωμάτωση" + +#: optiondialog.cpp:1402 +msgid "Integration Settings" +msgstr "Ρυθμίσεις ενσωμάτωσης" + +#: optiondialog.cpp:1412 +msgid "Command line options to ignore:" +msgstr "Επιλογές γÏαμμής εντολών για αγνόηση:" + +#: optiondialog.cpp:1417 +msgid "" +"List of command line options that should be ignored when KDiff3 is used by " +"other tools.\n" +"Several values can be specified if separated via ';'\n" +"This will suppress the \"Unknown option\"-error." +msgstr "" +"Λίστα τον επιλογών της γÏαμμής εντολών που θα Ï€Ïέπει να αγνοηθοÏν όταν το " +"KDiff3 χÏησιμοποιείται από άλλα εÏγαλεία.\n" +"ΜποÏοÏν να οÏισθοÏν πολλές τιμές διαχωÏισμένες με το ';'\n" +"Αυτό καταστέλλει το σφάλμα \"Άγνωστης επιλογής\"." + +#: optiondialog.cpp:1480 +msgid "" +"You selected a variable width font.\n" +"\n" +"Because this program doesn't handle variable width fonts\n" +"correctly, you might experience problems while editing.\n" +"\n" +"Do you want to continue or do you want to select another font." +msgstr "" +"Επιλέξατε μία γÏαμματοσειÏά Î¼ÎµÏ„Î±Î²Î»Î·Ï„Î¿Ï Î¼Î®ÎºÎ¿Ï…Ï‚.\n" +"\n" +"Επειδή το Ï€ÏόγÏαμμα δε διαχειÏίζεται σωστά γÏαμματοσειÏές Î¼ÎµÏ„Î±Î²Î»Î·Ï„Î¿Ï \n" +"μήκους ίσως έχετε Ï€Ïοβλήματα κατά την επεξεÏγασία.\n" +"Επιθυμείτε τη συνέχεια ή την επιλογή μιας άλλης γÏαμματοσειÏάς;" + +#: optiondialog.cpp:1484 +msgid "Incompatible Font" +msgstr "Μη συμβατή γÏαμματοσειÏά" + +#: optiondialog.cpp:1485 +msgid "Continue at Own Risk" +msgstr "Συνέχεια με δικιά σας ευθÏνη" + +#: optiondialog.cpp:1485 +msgid "Select Another Font" +msgstr "Επιλέξτε μία άλλη γÏαμματοσειÏά" + +#: optiondialog.cpp:1521 +msgid "This resets all options. Not only those of the current topic." +msgstr "" +"Αυτό επαναφέÏει όλες τις επιλογές. Όχι μόνο αυτές του Ï„Ïέχοντος θέματος." + +#: pdiff.cpp:258 +msgid "PreprocessorCmd: " +msgstr "Εντολή Ï€ÏοεπεξεÏγαστή: " + +#: pdiff.cpp:263 +msgid "" +"The following option(s) you selected might change data:\n" +msgstr "" +"Οι ακόλουθες επιλογές που κάνατε ίσως Ï„Ïοποποιήσουν δεδομένα:\n" + +#: pdiff.cpp:264 +msgid "" +"\n" +"Most likely this is not wanted during a merge.\n" +"Do you want to disable these settings or continue with these settings active?" +msgstr "" +"\n" +"Το πιθανότεÏο είναι ότι αυτό δεν είναι επιθυμητό κατά τη συγχώνευση.\n" +"Θέλετε να απενεÏγοποιήσετε αυτές τις επιλογές ή να συνεχίσετε όπως είναι;" + +#: pdiff.cpp:266 +msgid "Option Unsafe for Merging" +msgstr "Μη ασφαλής επιλογή για συγχώνευση" + +#: pdiff.cpp:267 +msgid "Use These Options During Merge" +msgstr "ΧÏήση αυτών των επιλογών κατά τη συγχώνευση" + +#: pdiff.cpp:267 +msgid "Disable Unsafe Options" +msgstr "ΑπενεÏγοποίηση μη ασφαλών επιλογών" + +#: pdiff.cpp:297 +msgid "Loading A" +msgstr "ΦόÏτωση του Α" + +#: pdiff.cpp:301 +msgid "Loading B" +msgstr "ΦόÏτωση του Î’" + +#: pdiff.cpp:318 pdiff.cpp:344 +msgid "Diff: A <-> B" +msgstr "ΔιαφοÏά: Α <-> Î’" + +#: pdiff.cpp:324 pdiff.cpp:366 +msgid "Linediff: A <-> B" +msgstr "ΔιαφοÏά γÏαμμής: Α <-> Î’" + +#: pdiff.cpp:335 +msgid "Loading C" +msgstr "ΦόÏτωση του Γ" + +#: pdiff.cpp:347 +msgid "Diff: B <-> C" +msgstr "ΔιαφοÏά: Î’ <-> Γ" + +#: pdiff.cpp:350 +msgid "Diff: A <-> C" +msgstr "ΔιαφοÏά: Α <-> Γ" + +#: pdiff.cpp:369 +msgid "Linediff: B <-> C" +msgstr "ΔιαφοÏά γÏαμμής: Î’ <-> Γ" + +#: pdiff.cpp:372 +msgid "Linediff: A <-> C" +msgstr "ΔιαφοÏά γÏαμμής: Α <-> Γ" + +#: pdiff.cpp:513 +msgid "All input files contain the same text, but are not binary equal." +msgstr "" +"Όλα τα αÏχεία εισόδου πεÏιέχουν το ίδιο κείμενο, αλλά δεν είναι δυαδικά ίσα." + +#: pdiff.cpp:515 pdiff.cpp:517 pdiff.cpp:519 +msgid "" +"Files %1 and %2 are binary equal.\n" +msgstr "" +"Τα αÏχεία %1 και %2 είναι δυαδικά ίσα.\n" + +#: pdiff.cpp:516 pdiff.cpp:518 pdiff.cpp:520 +msgid "" +"Files %1 and %2 have equal text, but are not binary equal. \n" +msgstr "" +"Τα αÏχεία %1 και %2 πεÏιέχουν το ίδιο κείμενο, αλλά δεν είναι δυαδικά ίσα.\n" + +#: pdiff.cpp:530 +msgid "" +"Some inputfiles don't seem to be pure textfiles.\n" +"Note that the KDiff3-merge was not meant for binary data.\n" +"Continue at your own risk." +msgstr "" +"ΜεÏικά από τα αÏχεία εισόδου δε φαίνεται να είναι αÏχεία κειμένου.\n" +"Σημειώστε ότι το KDiff3-merge δε φτιάχτηκε για δυαδικά δεδομένα.\n" +"Αν συνεχίσετε θα είναι με δική σας ευθÏνη." + +#: pdiff.cpp:979 +msgid "Abort" +msgstr "Εγκατάλειψη" + +#: pdiff.cpp:985 pdiff.cpp:1073 +msgid "Opening files..." +msgstr "Άνοιγμα αÏχείων..." + +#: pdiff.cpp:1050 pdiff.cpp:1121 +msgid "File open error" +msgstr "Σφάλμα ανοίγματος αÏχείου" + +#: pdiff.cpp:1153 +msgid "Cutting selection..." +msgstr "Αποκοπή επιλογής..." + +#: pdiff.cpp:1174 +msgid "Copying selection to clipboard..." +msgstr "ΑντιγÏαφή της επιλογής στο Ï€ÏόχειÏο..." + +#: pdiff.cpp:1190 +msgid "Inserting clipboard contents..." +msgstr "Εισαγωγή των πεÏιεχομένων του Ï€ÏοχείÏου..." + +#: pdiff.cpp:1713 +msgid "Save && Continue" +msgstr "Αποθήκευση && συνέχεια" + +#: pdiff.cpp:1713 +msgid "Continue Without Saving" +msgstr "Συνέχεια χωÏίς αποθήκευση" + +#: pdiff.cpp:1920 +msgid "Search complete." +msgstr "Η αναζήτηση ολοκληÏώθηκε." + +#: pdiff.cpp:1920 +msgid "Search Complete" +msgstr "Η αναζήτηση ολοκληÏώθηκε" + +#: pdiff.cpp:2144 +msgid "Nothing is selected in either diff input window." +msgstr "Δεν έχει επιλεγεί τίποτα σε κανένα παÏάθυÏο εισαγωγής διαφοÏών." + +#: pdiff.cpp:2144 +msgid "Error while adding manual diff range" +msgstr "Σφάλμα κατά την Ï€Ïοσθήκη χειÏοκίνητου εÏÏους διαφοÏών" + +#. i18n: file kdiff3_part.rc line 4 +#: rc.cpp:3 +#, no-c-format +msgid "&KDiff3" +msgstr "&KDiff3" + +#. i18n: file kdiff3_part.rc line 13 +#: rc.cpp:6 +#, no-c-format +msgid "Configure KDiff3" +msgstr "ΡÏθμιση του KDiff3" + +#. i18n: file kdiff3_shell.rc line 7 +#: rc.cpp:15 +#, no-c-format +msgid "&Directory" +msgstr "&Κατάλογος" + +#. i18n: file kdiff3_shell.rc line 30 +#: rc.cpp:18 +#, no-c-format +msgid "Current Item Merge Operation" +msgstr "ΛειτουÏγία συγχώνευσης του Ï„Ïέχοντος αντικειμένου" + +#. i18n: file kdiff3_shell.rc line 38 +#: rc.cpp:21 +#, no-c-format +msgid "Current Item Sync Operation" +msgstr "ΛειτουÏγία συγχÏÎ¿Î½Î¹ÏƒÎ¼Î¿Ï Ï„Î¿Ï… Ï„Ïέχοντος αντικειμένου" + +#. i18n: file kdiff3_shell.rc line 50 +#: rc.cpp:24 +#, no-c-format +msgid "&Movement" +msgstr "&Μετακίνηση" + +#. i18n: file kdiff3_shell.rc line 61 +#: rc.cpp:27 +#, no-c-format +msgid "D&iffview" +msgstr "ΠÏοβολή &διαφοÏών" + +#. i18n: file kdiff3_shell.rc line 73 +#: rc.cpp:30 +#, no-c-format +msgid "&Merge" +msgstr "&Συγχώνευση" + +#. i18n: file kdiff3_shell.rc line 95 +#: rc.cpp:33 +#, no-c-format +msgid "&Window" +msgstr "&ΠαÏάθυÏο" + +#: smalldialogs.cpp:53 +msgid "A (Base):" +msgstr "Α (Βάση):" + +#: smalldialogs.cpp:59 smalldialogs.cpp:75 smalldialogs.cpp:91 +#: smalldialogs.cpp:134 +msgid "File..." +msgstr "ΑÏχείο..." + +#: smalldialogs.cpp:61 smalldialogs.cpp:77 smalldialogs.cpp:93 +#: smalldialogs.cpp:136 +msgid "Dir..." +msgstr "Κατάλογος..." + +#: smalldialogs.cpp:86 +msgid "C (Optional):" +msgstr "Γ (ΠÏοαιÏετικό):" + +#: smalldialogs.cpp:108 +msgid "Swap/Copy Names ..." +msgstr "Εναλλαγή/ΑντιγÏαφή ονομάτων..." + +#: smalldialogs.cpp:114 smalldialogs.cpp:115 smalldialogs.cpp:116 +msgid "Swap %1<->%2" +msgstr "Εναλλαγή %1<->%2" + +#: smalldialogs.cpp:117 smalldialogs.cpp:118 smalldialogs.cpp:119 +msgid "Copy %1->Output" +msgstr "ΑντιγÏαφή %1->Έξοδο" + +#: smalldialogs.cpp:120 smalldialogs.cpp:121 smalldialogs.cpp:122 +msgid "Swap %1<->Output" +msgstr "Εναλλαγή %1<->Έξοδος" + +#: smalldialogs.cpp:129 +msgid "Output (optional):" +msgstr "Έξοδος (Ï€ÏοαιÏετική):" + +#: smalldialogs.cpp:158 +msgid "Configure..." +msgstr "ΡÏθμιση..." + +#: smalldialogs.cpp:347 +msgid "Search text:" +msgstr "Αναζήτηση κειμένου:" + +#: smalldialogs.cpp:354 +msgid "Case sensitive" +msgstr "ΔιάκÏιση πεζών/κεφαλαίων" + +#: smalldialogs.cpp:357 +msgid "Search A" +msgstr "Αναζήτηση στο Α" + +#: smalldialogs.cpp:362 +msgid "Search B" +msgstr "Αναζήτηση στο Î’" + +#: smalldialogs.cpp:367 +msgid "Search C" +msgstr "Αναζήτηση στο Γ" + +#: smalldialogs.cpp:372 +msgid "Search output" +msgstr "Έξοδος αναζήτησης" + +#: smalldialogs.cpp:377 +msgid "&Search" +msgstr "&Αναζήτηση" + +#: smalldialogs.cpp:394 +msgid "Regular Expression Tester" +msgstr "Δοκιμή κανονικής έκφÏασης" + +#: smalldialogs.cpp:405 +msgid "Example auto merge line:" +msgstr "ΠαÏάδειγμα γÏαμμής αυτόματης συγχώνευσης:" + +#: smalldialogs.cpp:407 +msgid "For auto merge test copy a line as used in your files." +msgstr "" +"Για τη δοκιμή αυτόματης συγχώνευσης αντιγÏάψτε μια γÏαμμή όπως αυτή " +"χÏησιμοποιείται στα αÏχεία σας." + +#: smalldialogs.cpp:413 smalldialogs.cpp:442 smalldialogs.cpp:479 +msgid "Match result:" +msgstr "Αποτέλεσμα ταιÏιάσματος:" + +#: smalldialogs.cpp:432 +msgid "Example history start line (with leading comment):" +msgstr "ΠαÏάδειγμα γÏαμμής αÏχής ιστοÏÎ¹ÎºÎ¿Ï (χωÏίς το σχόλιο που Ï€Ïοηγείται):" + +#: smalldialogs.cpp:435 +msgid "" +"Copy a history start line as used in your files,\n" +"including the leading comment." +msgstr "" +"ΑντιγÏαφή μίας γÏαμμής αÏχής ιστοÏÎ¹ÎºÎ¿Ï ÏŒÏ€Ï‰Ï‚ αυτή χÏησιμοποιείται στα αÏχεία " +"σας,\n" +"χωÏίς να πεÏιληφθεί το σχόλιο που Ï€Ïοηγείται." + +#: smalldialogs.cpp:461 +msgid "History sort key order:" +msgstr "ΣειÏά κλειδιών ταξινόμησης ιστοÏικοÏ:" + +#: smalldialogs.cpp:469 +msgid "Example history entry start line (without leading comment):" +msgstr "" +"ΠαÏάδειγμα γÏαμμής αÏχής καταχώÏησης ιστοÏÎ¹ÎºÎ¿Ï (χωÏίς το σχόλιο που " +"Ï€Ïοηγείται):" + +#: smalldialogs.cpp:471 +msgid "" +"Copy a history entry start line as used in your files,\n" +"but omit the leading comment." +msgstr "" +"ΑντιγÏάψτε μία γÏαμμή αÏχής καταχώÏησης ιστοÏÎ¹ÎºÎ¿Ï ÏŒÏ€Ï‰Ï‚ αυτή χÏησιμοποιείται στα " +"αÏχεία σας,\n" +"χωÏίς να πεÏιλάβετε το σχόλιο που Ï€Ïοηγείται." + +#: smalldialogs.cpp:486 +msgid "Sort key result:" +msgstr "Αποτέλεσμα ÎºÎ»ÎµÎ¹Î´Î¹Î¿Ï Ï„Î±Î¾Î¹Î½ÏŒÎ¼Î·ÏƒÎ·Ï‚:" + +#: smalldialogs.cpp:537 smalldialogs.cpp:547 smalldialogs.cpp:568 +msgid "Match success." +msgstr "Επιτυχία ταιÏιάσματος." + +#: smalldialogs.cpp:541 smalldialogs.cpp:551 smalldialogs.cpp:574 +msgid "Match failed." +msgstr "Αποτυχία ταιÏιάσματος." + +#: smalldialogs.cpp:559 +msgid "Opening and closing parentheses don't match in regular expression." +msgstr "" +"Αδυναμία ταιÏιάσματος παÏενθέσεων ανοίγματος και κλεισίματος στην κανονική " +"έκφÏαση." diff --git a/po/en_GB.po b/po/en_GB.po new file mode 100644 index 0000000..4d92607 --- /dev/null +++ b/po/en_GB.po @@ -0,0 +1,2533 @@ +# translation of kdiff3.po to British English +# Copyright (C) 2003, 2004, 2005 Free Software Foundation, Inc. +# Malcolm Hunter , 2003. +# Jonathan Riddell , 2003. +# Andrew Coles , 2004, 2005. +# +msgid "" +msgstr "" +"Project-Id-Version: kdiff3\n" +"POT-Creation-Date: 2006-11-05 08:45+0100\n" +"PO-Revision-Date: 2005-02-02 11:52+0000\n" +"Last-Translator: Andrew Coles \n" +"Language-Team: British English \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: KBabel 1.9\n" + +#: _translatorinfo.cpp:1 +msgid "" +"_: NAME OF TRANSLATORS\n" +"Your names" +msgstr "Jonathan Riddell" + +#: _translatorinfo.cpp:3 +msgid "" +"_: EMAIL OF TRANSLATORS\n" +"Your emails" +msgstr "kde-en-gb@jriddell.org" + +#: diff.cpp:246 +msgid "Writing clipboard data to temp file failed." +msgstr "Writing clipboard data to temp file failed." + +#: diff.cpp:250 +msgid "From Clipboard" +msgstr "From Clipboard" + +#: diff.cpp:491 +msgid "" +"Preprocessing possibly failed. Check this command:\n" +"\n" +" %1\n" +"\n" +"The preprocessing command will be disabled now." +msgstr "" +"Preprocessing possibly failed. Check this command:\n" +"\n" +" %1\n" +"\n" +"The preprocessing command will be disabled now." + +#: diff.cpp:526 +msgid "" +"The line-matching-preprocessing possibly failed. Check this command:\n" +"\n" +" %1\n" +"\n" +"The line-matching-preprocessing command will be disabled now." +msgstr "" +"The line-matching-preprocessing possibly failed. Check this command:\n" +"\n" +" %1\n" +"\n" +"The line-matching-preprocessing command will be disabled now." + +#: diff.cpp:1631 diff.cpp:1645 +msgid "" +"Data loss error:\n" +"If it is reproducable please contact the author.\n" +msgstr "" +"Data loss error:\n" +"If it is reproducable please contact the author.\n" + +#: diff.cpp:1633 diff.cpp:1647 +msgid "Severe Internal Error" +msgstr "Severe Internal Error" + +#: difftextwindow.cpp:1643 kdiff3.cpp:753 +#, fuzzy +msgid "Top line" +msgstr "Top line %1" + +#: difftextwindow.cpp:1653 +msgid "End" +msgstr "End" + +#: directorymergewindow.cpp:142 +msgid "Mix of links and normal files." +msgstr "Mix of links and normal files." + +#: directorymergewindow.cpp:149 +msgid "Link: " +msgstr "Link: " + +#: directorymergewindow.cpp:157 +msgid "Size. " +msgstr "Size. " + +#: directorymergewindow.cpp:170 +msgid "Date & Size: " +msgstr "Date & Size: " + +#: directorymergewindow.cpp:179 directorymergewindow.cpp:185 +msgid "Creating temp copy of %1 failed." +msgstr "Creating temp copy of %1 failed." + +#: directorymergewindow.cpp:196 directorymergewindow.cpp:204 +msgid "Opening %1 failed." +msgstr "Opening %1 failed." + +#: directorymergewindow.cpp:208 +msgid "Comparing file..." +msgstr "Comparing file..." + +#: directorymergewindow.cpp:218 directorymergewindow.cpp:224 +#, c-format +msgid "Error reading from %1" +msgstr "Error reading from %1" + +#: directorymergewindow.cpp:282 +msgid "Name" +msgstr "Name" + +#: directorymergewindow.cpp:286 +msgid "Operation" +msgstr "Operation" + +#: directorymergewindow.cpp:287 +msgid "Status" +msgstr "Status" + +#: directorymergewindow.cpp:288 +msgid "Unsolved" +msgstr "Unsolved" + +#: directorymergewindow.cpp:289 +msgid "Solved" +msgstr "Solved" + +#: directorymergewindow.cpp:290 +msgid "Nonwhite" +msgstr "Nonwhite" + +#: directorymergewindow.cpp:291 +msgid "White" +msgstr "White" + +#: directorymergewindow.cpp:319 +msgid "" +"You are currently doing a directory merge. Are you sure, you want to abort the " +"merge and rescan the directory?" +msgstr "" +"You are currently doing a directory merge. Are you sure, you want to abort the " +"merge and rescan the directory?" + +#: directorymergewindow.cpp:320 directorymergewindow.cpp:2868 +msgid "Rescan" +msgstr "Rescan" + +#: directorymergewindow.cpp:320 kdiff3.cpp:603 pdiff.cpp:979 +msgid "Continue Merging" +msgstr "Continue Merging" + +#: directorymergewindow.cpp:462 +msgid "Opening of directories failed:" +msgstr "Opening of directories failed:" + +#: directorymergewindow.cpp:465 +msgid "" +"Dir A \"%1\" does not exist or is not a directory.\n" +msgstr "" +"Dir A \"%1\" does not exist or is not a directory.\n" + +#: directorymergewindow.cpp:468 +msgid "" +"Dir B \"%1\" does not exist or is not a directory.\n" +msgstr "" +"Dir B \"%1\" does not exist or is not a directory.\n" + +#: directorymergewindow.cpp:471 +msgid "" +"Dir C \"%1\" does not exist or is not a directory.\n" +msgstr "" +"Dir C \"%1\" does not exist or is not a directory.\n" + +#: directorymergewindow.cpp:473 +msgid "Directory Open Error" +msgstr "Directory Open Error" + +#: directorymergewindow.cpp:481 +msgid "" +"The destination directory must not be the same as A or B when three directories " +"are merged.\n" +"Check again before continuing." +msgstr "" +"The destination directory must not be the same as A or B when three directories " +"are merged.\n" +"Check again before continuing." + +#: directorymergewindow.cpp:483 +msgid "Parameter Warning" +msgstr "Parameter Warning" + +#: directorymergewindow.cpp:488 +msgid "Scanning directories..." +msgstr "Scanning directories..." + +#: directorymergewindow.cpp:537 +msgid "Reading Directory A" +msgstr "Reading Directory A" + +#: directorymergewindow.cpp:559 +msgid "Reading Directory B" +msgstr "Reading Directory B" + +#: directorymergewindow.cpp:581 +msgid "Reading Directory C" +msgstr "Reading Directory C" + +#: directorymergewindow.cpp:607 +msgid "Some subdirectories were not readable in" +msgstr "Some subdirectories were not readable in" + +#: directorymergewindow.cpp:612 +msgid "Check the permissions of the subdirectories." +msgstr "Check the permissions of the subdirectories." + +#: directorymergewindow.cpp:646 kdiff3.cpp:552 kdiff3.cpp:636 kdiff3.cpp:661 +#: kdiff3.cpp:934 kdiff3.cpp:955 pdiff.cpp:1059 pdiff.cpp:1131 pdiff.cpp:1169 +#: pdiff.cpp:1185 pdiff.cpp:1215 pdiff.cpp:1226 +msgid "Ready." +msgstr "Ready." + +#: directorymergewindow.cpp:660 +msgid "Directory Comparison Status" +msgstr "Directory Comparison Status" + +#: directorymergewindow.cpp:661 +msgid "Number of subdirectories:" +msgstr "Number of subdirectories:" + +#: directorymergewindow.cpp:662 +msgid "Number of equal files:" +msgstr "Number of equal files:" + +#: directorymergewindow.cpp:663 +msgid "Number of different files:" +msgstr "Number of different files:" + +#: directorymergewindow.cpp:666 +msgid "Number of manual merges:" +msgstr "Number of manual merges:" + +#: directorymergewindow.cpp:802 +msgid "This affects all merge operations." +msgstr "This affects all merge operations." + +#: directorymergewindow.cpp:803 +msgid "Changing All Merge Operations" +msgstr "Changing All Merge Operations" + +#: directorymergewindow.cpp:803 mergeresultwindow.cpp:287 +msgid "C&ontinue" +msgstr "C&ontinue" + +#: directorymergewindow.cpp:1169 +msgid "Processing " +msgstr "Processing " + +#: directorymergewindow.cpp:1647 directorymergewindow.cpp:1653 +msgid "To do." +msgstr "To do." + +#: directorymergewindow.cpp:1756 directorymergewindow.cpp:2899 +msgid "Copy A to B" +msgstr "Copy A to B" + +#: directorymergewindow.cpp:1757 directorymergewindow.cpp:2900 +msgid "Copy B to A" +msgstr "Copy B to A" + +#: directorymergewindow.cpp:1758 directorymergewindow.cpp:2901 +msgid "Delete A" +msgstr "Delete A" + +#: directorymergewindow.cpp:1759 directorymergewindow.cpp:2902 +msgid "Delete B" +msgstr "Delete B" + +#: directorymergewindow.cpp:1760 +msgid "Delete A & B" +msgstr "Delete A & B" + +#: directorymergewindow.cpp:1761 directorymergewindow.cpp:2904 +msgid "Merge to A" +msgstr "Merge to A" + +#: directorymergewindow.cpp:1762 directorymergewindow.cpp:2905 +msgid "Merge to B" +msgstr "Merge to B" + +#: directorymergewindow.cpp:1763 +msgid "Merge to A & B" +msgstr "Merge to A & B" + +#: directorymergewindow.cpp:1767 directorymergewindow.cpp:2896 +msgid "Delete (if exists)" +msgstr "Delete (if exists)" + +#: directorymergewindow.cpp:1768 directorymergewindow.cpp:1769 +#: directorymergewindow.cpp:2895 optiondialog.cpp:809 smalldialogs.cpp:102 +msgid "Merge" +msgstr "Merge" + +#: directorymergewindow.cpp:1768 directorymergewindow.cpp:1769 +msgid "Merge (manual)" +msgstr "Merge (manual)" + +#: directorymergewindow.cpp:1770 +msgid "Error: Conflicting File Types" +msgstr "Error: Conflicting File Types" + +#: directorymergewindow.cpp:1771 +msgid "Error: Dates are equal but files are not." +msgstr "Error: Dates are equal but files are not." + +#: directorymergewindow.cpp:1795 directorymergewindow.cpp:1824 +#: directorymergewindow.cpp:1849 +msgid "This operation is currently not possible." +msgstr "This operation is currently not possible." + +#: directorymergewindow.cpp:1795 directorymergewindow.cpp:1824 +#: directorymergewindow.cpp:1849 directorymergewindow.cpp:2106 +msgid "Operation Not Possible" +msgstr "Operation Not Possible" + +#: directorymergewindow.cpp:1888 +msgid "" +"This should never happen: \n" +"\n" +"mergeResultSaved: m_pMFI=0\n" +"\n" +"If you know how to reproduce this, please contact the program author." +msgstr "" +"This should never happen: \n" +"\n" +"mergeResultSaved: m_pMFI=0\n" +"\n" +"If you know how to reproduce this, please contact the program author." + +#: directorymergewindow.cpp:1888 +msgid "Program Error" +msgstr "Program Error" + +#: directorymergewindow.cpp:1899 +msgid "" +"An error occurred while copying.\n" +msgstr "" +"An error occurred while copying.\n" + +#: directorymergewindow.cpp:1900 directorymergewindow.cpp:2306 +msgid "Merge Error" +msgstr "Merge Error" + +#: directorymergewindow.cpp:1905 directorymergewindow.cpp:2311 +msgid "Error." +msgstr "Error." + +#: directorymergewindow.cpp:1910 directorymergewindow.cpp:2202 +#: directorymergewindow.cpp:2242 +msgid "Done." +msgstr "Done." + +#: directorymergewindow.cpp:1933 +msgid "Not saved." +msgstr "Not saved." + +#: directorymergewindow.cpp:1968 +msgid "Unknown merge operation. (This must never happen!)" +msgstr "Unknown merge operation. (This must never happen!)" + +#: directorymergewindow.cpp:2000 +msgid "Unknown merge operation." +msgstr "Unknown merge operation." + +#: directorymergewindow.cpp:2015 +msgid "" +"The merge is about to begin.\n" +"\n" +"Choose \"Do it\" if you have read the instructions and know what you are " +"doing.\n" +"Choosing \"Simulate it\" will tell you what would happen.\n" +"\n" +"Be aware that this program still has beta status and there is NO WARRANTY " +"whatsoever! Make backups of your vital data!" +msgstr "" +"The merge is about to begin.\n" +"\n" +"Choose \"Do it\" if you have read the instructions and know what you are " +"doing.\n" +"Choosing \"Simulate it\" will tell you what would happen.\n" +"\n" +"Be aware that this program still has beta status and there is NO WARRANTY " +"whatsoever! Make backups of your vital data!" + +#: directorymergewindow.cpp:2020 +msgid "Starting Merge" +msgstr "Starting Merge" + +#: directorymergewindow.cpp:2020 +msgid "Do It" +msgstr "Do It" + +#: directorymergewindow.cpp:2020 +msgid "Simulate It" +msgstr "Simulate It" + +#: directorymergewindow.cpp:2046 +msgid "" +"The highlighted item has a different type in the different directories. Select " +"what to do." +msgstr "" +"The highlighted item has a different type in the different directories. Select " +"what to do." + +#: directorymergewindow.cpp:2055 +msgid "" +"The modification dates of the file are equal but the files are not. Select what " +"to do." +msgstr "" +"The modification dates of the file are equal but the files are not. Select what " +"to do." + +#: directorymergewindow.cpp:2106 +msgid "" +"This operation is currently not possible because directory merge is currently " +"running." +msgstr "" +"This operation is currently not possible because directory merge is currently " +"running." + +#: directorymergewindow.cpp:2166 +msgid "" +"There was an error in the last step.\n" +"Do you want to continue with the item that caused the error or do you want to " +"skip this item?" +msgstr "" +"There was an error in the last step.\n" +"Do you want to continue with the item that caused the error or do you want to " +"skip this item?" + +#: directorymergewindow.cpp:2168 +msgid "Continue merge after an error" +msgstr "Continue merge after an error" + +#: directorymergewindow.cpp:2168 +msgid "Continue With Last Item" +msgstr "Continue With Last Item" + +#: directorymergewindow.cpp:2168 +msgid "Skip Item" +msgstr "Skip Item" + +#: directorymergewindow.cpp:2202 +msgid "Skipped." +msgstr "Skipped." + +#: directorymergewindow.cpp:2209 directorymergewindow.cpp:2435 +msgid "In progress..." +msgstr "In progress..." + +#: directorymergewindow.cpp:2257 +msgid "Merge operation complete." +msgstr "Merge operation complete." + +#: directorymergewindow.cpp:2257 directorymergewindow.cpp:2260 +msgid "Merge Complete" +msgstr "Merge Complete" + +#: directorymergewindow.cpp:2269 +msgid "" +"Simulated merge complete: Check if you agree with the proposed operations." +msgstr "" +"Simulated merge complete: Check if you agree with the proposed operations." + +#: directorymergewindow.cpp:2305 +msgid "" +"An error occurred. Press OK to see detailed information.\n" +msgstr "" +"An error occurred. Press OK to see detailed information.\n" + +#: directorymergewindow.cpp:2348 +msgid "Error: While deleting %1: Creating backup failed." +msgstr "Error: While deleting %1: Creating backup failed." + +#: directorymergewindow.cpp:2355 +msgid "delete directory recursively( %1 )" +msgstr "delete directory recursively( %1 )" + +#: directorymergewindow.cpp:2357 +msgid "delete( %1 )" +msgstr "delete( %1 )" + +#: directorymergewindow.cpp:2372 +msgid "Error: delete dir operation failed while trying to read the directory." +msgstr "Error: delete dir operation failed while trying to read the directory." + +#: directorymergewindow.cpp:2391 +msgid "Error: rmdir( %1 ) operation failed." +msgstr "Error: rmdir( %1 ) operation failed." + +#: directorymergewindow.cpp:2401 +msgid "Error: delete operation failed." +msgstr "Error: delete operation failed." + +#: directorymergewindow.cpp:2427 +msgid "manual merge( %1, %2, %3 -> %4)" +msgstr "manual merge( %1, %2, %3 -> %4)" + +#: directorymergewindow.cpp:2430 +msgid "" +" Note: After a manual merge the user should continue by pressing F7." +msgstr "" +" Note: After a manual merge the user should continue by pressing F7." + +#: directorymergewindow.cpp:2453 +msgid "Error: copy( %1 -> %2 ) failed.Deleting existing destination failed." +msgstr "Error: copy( %1 -> %2 ) failed.Deleting existing destination failed." + +#: directorymergewindow.cpp:2463 +msgid "copyLink( %1 -> %2 )" +msgstr "copyLink( %1 -> %2 )" + +#: directorymergewindow.cpp:2474 +msgid "Error: copyLink failed: Remote links are not yet supported." +msgstr "Error: copyLink failed: Remote links are not yet supported." + +#: directorymergewindow.cpp:2480 +msgid "Error: copyLink failed." +msgstr "Error: copyLink failed." + +#: directorymergewindow.cpp:2500 +msgid "copy( %1 -> %2 )" +msgstr "copy( %1 -> %2 )" + +#: directorymergewindow.cpp:2526 +msgid "Error during rename( %1 -> %2 ): Cannot delete existing destination." +msgstr "Error during rename( %1 -> %2 ): Cannot delete existing destination." + +#: directorymergewindow.cpp:2532 +msgid "rename( %1 -> %2 )" +msgstr "rename( %1 -> %2 )" + +#: directorymergewindow.cpp:2541 +msgid "Error: Rename failed." +msgstr "Error: Rename failed." + +#: directorymergewindow.cpp:2559 +msgid "Error during makeDir of %1. Cannot delete existing file." +msgstr "Error during makeDir of %1. Cannot delete existing file." + +#: directorymergewindow.cpp:2575 +msgid "makeDir( %1 )" +msgstr "makeDir( %1 )" + +#: directorymergewindow.cpp:2585 +msgid "Error while creating directory." +msgstr "Error while creating directory." + +#: directorymergewindow.cpp:2608 directorymergewindow.cpp:2725 +msgid "Dest" +msgstr "Dest" + +#: directorymergewindow.cpp:2612 directorymergewindow.cpp:2650 +msgid "Dir" +msgstr "Dir" + +#: directorymergewindow.cpp:2613 +msgid "Type" +msgstr "Type" + +#: directorymergewindow.cpp:2614 +msgid "Size" +msgstr "Size" + +#: directorymergewindow.cpp:2615 +msgid "Attr" +msgstr "Attr" + +#: directorymergewindow.cpp:2616 +msgid "Last Modification" +msgstr "Last Modification" + +#: directorymergewindow.cpp:2617 +msgid "Link-Destination" +msgstr "Link-Destination" + +#: directorymergewindow.cpp:2667 +msgid "not available" +msgstr "not available" + +#: directorymergewindow.cpp:2687 +msgid "A (Dest): " +msgstr "A (Dest): " + +#: directorymergewindow.cpp:2690 +msgid "A (Base): " +msgstr "A (Base): " + +#: directorymergewindow.cpp:2696 +msgid "B (Dest): " +msgstr "B (Dest): " + +#: directorymergewindow.cpp:2704 +msgid "C (Dest): " +msgstr "C (Dest): " + +#: directorymergewindow.cpp:2710 +msgid "Dest: " +msgstr "Dest: " + +#: directorymergewindow.cpp:2775 +#, fuzzy +msgid "Save Directory Merge State As..." +msgstr "Directory Merge" + +#: directorymergewindow.cpp:2862 +msgid "Start/Continue Directory Merge" +msgstr "Start/Continue Directory Merge" + +#: directorymergewindow.cpp:2863 +msgid "Run Operation for Current Item" +msgstr "Run Operation for Current Item" + +#: directorymergewindow.cpp:2864 +msgid "Compare Selected File" +msgstr "Compare Selected File" + +#: directorymergewindow.cpp:2865 +msgid "Merge Current File" +msgstr "Merge Current File" + +#: directorymergewindow.cpp:2866 +msgid "Fold All Subdirs" +msgstr "Fold All Subdirs" + +#: directorymergewindow.cpp:2867 +msgid "Unfold All Subdirs" +msgstr "Unfold All Subdirs" + +#: directorymergewindow.cpp:2871 +msgid "Choose A for All Items" +msgstr "Choose A for All Items" + +#: directorymergewindow.cpp:2872 +msgid "Choose B for All Items" +msgstr "Choose B for All Items" + +#: directorymergewindow.cpp:2873 +msgid "Choose C for All Items" +msgstr "Choose C for All Items" + +#: directorymergewindow.cpp:2874 +msgid "Auto-Choose Operation for All Items" +msgstr "Auto-Choose Operation for All Items" + +#: directorymergewindow.cpp:2875 +msgid "No Operation for All Items" +msgstr "No Operation for All Items" + +#: directorymergewindow.cpp:2880 +msgid "Show Identical Files" +msgstr "" + +#: directorymergewindow.cpp:2881 +#, fuzzy +msgid "Show Different Files" +msgstr "Number of different files:" + +#: directorymergewindow.cpp:2882 +msgid "Show Files only in A" +msgstr "" + +#: directorymergewindow.cpp:2883 +msgid "Show Files only in B" +msgstr "" + +#: directorymergewindow.cpp:2884 +msgid "Show Files only in C" +msgstr "" + +#: directorymergewindow.cpp:2888 +#, fuzzy +msgid "Compare Explicitly Selected Files" +msgstr "Compare Selected File" + +#: directorymergewindow.cpp:2889 +#, fuzzy +msgid "Merge Explicitly Selected Files" +msgstr "Compare Selected File" + +#: directorymergewindow.cpp:2891 directorymergewindow.cpp:2898 +msgid "Do Nothing" +msgstr "Do Nothing" + +#: directorymergewindow.cpp:2892 +msgid "A" +msgstr "A" + +#: directorymergewindow.cpp:2893 +msgid "B" +msgstr "B" + +#: directorymergewindow.cpp:2894 +msgid "C" +msgstr "C" + +#: directorymergewindow.cpp:2903 +msgid "Delete A && B" +msgstr "Delete A && B" + +#: directorymergewindow.cpp:2906 +msgid "Merge to A && B" +msgstr "Merge to A && B" + +#: fileaccess.cpp:595 +msgid "" +"While trying to make a backup, deleting an older backup failed. \n" +"Filename: " +msgstr "" +"While trying to make a backup, deleting an older backup failed. \n" +"Filename: " + +#: fileaccess.cpp:602 +msgid "" +"While trying to make a backup, renaming failed. \n" +"Filenames: " +msgstr "" +"While trying to make a backup, renaming failed. \n" +"Filenames: " + +#: fileaccess.cpp:624 +#, c-format +msgid "Getting file status: %1" +msgstr "Getting file status: %1" + +#: fileaccess.cpp:667 +#, c-format +msgid "Reading file: %1" +msgstr "Reading file: %1" + +#: fileaccess.cpp:703 +#, c-format +msgid "Writing file: %1" +msgstr "Writing file: %1" + +#: fileaccess.cpp:731 +msgid "Out of memory" +msgstr "Out of memory" + +#: fileaccess.cpp:766 +#, c-format +msgid "Making directory: %1" +msgstr "Making directory: %1" + +#: fileaccess.cpp:786 +#, c-format +msgid "Removing directory: %1" +msgstr "Removing directory: %1" + +#: fileaccess.cpp:801 +#, c-format +msgid "Removing file: %1" +msgstr "Removing file: %1" + +#: fileaccess.cpp:817 +msgid "Creating symbolic link: %1 -> %2" +msgstr "Creating symbolic link: %1 -> %2" + +#: fileaccess.cpp:843 +msgid "Renaming file: %1 -> %2" +msgstr "Renaming file: %1 -> %2" + +#: fileaccess.cpp:879 +msgid "Copying file: %1 -> %2" +msgstr "Copying file: %1 -> %2" + +#: fileaccess.cpp:893 +#, c-format +msgid "" +"Error during file copy operation: Opening file for reading failed. Filename: %1" +msgstr "" +"Error during file copy operation: Opening file for reading failed. Filename: %1" + +#: fileaccess.cpp:899 +#, c-format +msgid "" +"Error during file copy operation: Opening file for writing failed. Filename: %1" +msgstr "" +"Error during file copy operation: Opening file for writing failed. Filename: %1" + +#: fileaccess.cpp:914 +#, c-format +msgid "Error during file copy operation: Reading failed. Filename: %1" +msgstr "Error during file copy operation: Reading failed. Filename: %1" + +#: fileaccess.cpp:923 +#, c-format +msgid "Error during file copy operation: Writing failed. Filename: %1" +msgstr "Error during file copy operation: Writing failed. Filename: %1" + +#: fileaccess.cpp:1219 +msgid "Reading directory: " +msgstr "Reading directory: " + +#: fileaccess.cpp:1348 +#, c-format +msgid "Listing directory: %1" +msgstr "Listing directory: %1" + +#: kdiff3.cpp:142 +#, fuzzy +msgid "Current Configuration:" +msgstr "Current Item Sync Operation" + +#: kdiff3.cpp:147 +#, fuzzy +msgid "Config Option Error:" +msgstr "File Open Error" + +#: kdiff3.cpp:187 +msgid "Option --auto used, but no output file specified." +msgstr "Option --auto used, but no output file specified." + +#: kdiff3.cpp:323 +msgid "Option --auto ignored for directory comparison." +msgstr "Option --auto ignored for directory comparison." + +#: kdiff3.cpp:359 +msgid "Saving failed." +msgstr "Saving failed." + +#: kdiff3.cpp:386 pdiff.cpp:1041 pdiff.cpp:1112 +msgid "Opening of these files failed:" +msgstr "Opening of these files failed:" + +#: kdiff3.cpp:395 +msgid "File Open Error" +msgstr "File Open Error" + +#: kdiff3.cpp:418 +msgid "Opens documents for comparison..." +msgstr "Opens documents for comparison..." + +#: kdiff3.cpp:423 +msgid "Saves the merge result. All conflicts must be solved!" +msgstr "Saves the merge result. All conflicts must be solved!" + +#: kdiff3.cpp:425 +msgid "Saves the current document as..." +msgstr "Saves the current document as..." + +#: kdiff3.cpp:427 +msgid "Print the differences" +msgstr "" + +#: kdiff3.cpp:429 +msgid "Quits the application" +msgstr "Quits the application" + +#: kdiff3.cpp:431 +msgid "Cuts the selected section and puts it to the clipboard" +msgstr "Cuts the selected section and puts it to the clipboard" + +#: kdiff3.cpp:433 +msgid "Copies the selected section to the clipboard" +msgstr "Copies the selected section to the clipboard" + +#: kdiff3.cpp:435 +msgid "Pastes the clipboard contents to actual position" +msgstr "Pastes the clipboard contents to actual position" + +#: kdiff3.cpp:437 +msgid "Select everything in current window" +msgstr "" + +#: kdiff3.cpp:439 +msgid "Search for a string" +msgstr "Search for a string" + +#: kdiff3.cpp:441 +msgid "Search again for the string" +msgstr "Search again for the string" + +#: kdiff3.cpp:443 +msgid "Enables/disables the toolbar" +msgstr "Enables/disables the toolbar" + +#: kdiff3.cpp:445 +msgid "Enables/disables the statusbar" +msgstr "Enables/disables the statusbar" + +#: kdiff3.cpp:449 +msgid "Configure KDiff3..." +msgstr "Configure KDiff3..." + +#: kdiff3.cpp:470 +msgid "Go to Current Delta" +msgstr "Go to Current Delta" + +#: kdiff3.cpp:471 +msgid "Go to First Delta" +msgstr "Go to First Delta" + +#: kdiff3.cpp:472 +msgid "Go to Last Delta" +msgstr "Go to Last Delta" + +#: kdiff3.cpp:473 +msgid "(Skips white space differences when \"Show White Space\" is disabled.)" +msgstr "(Skips white space differences when \"Show White Space\" is disabled.)" + +#: kdiff3.cpp:474 +msgid "" +"(Does not skip white space differences even when \"Show White Space\" is " +"disabled.)" +msgstr "" +"(Does not skip white space differences even when \"Show White Space\" is " +"disabled.)" + +#: kdiff3.cpp:475 +msgid "Go to Previous Delta" +msgstr "Go to Previous Delta" + +#: kdiff3.cpp:477 +msgid "Go to Next Delta" +msgstr "Go to Next Delta" + +#: kdiff3.cpp:479 +msgid "Go to Previous Conflict" +msgstr "Go to Previous Conflict" + +#: kdiff3.cpp:481 +msgid "Go to Next Conflict" +msgstr "Go to Next Conflict" + +#: kdiff3.cpp:483 +msgid "Go to Previous Unsolved Conflict" +msgstr "Go to Previous Unsolved Conflict" + +#: kdiff3.cpp:485 +msgid "Go to Next Unsolved Conflict" +msgstr "Go to Next Unsolved Conflict" + +#: kdiff3.cpp:487 +msgid "Select Line(s) From A" +msgstr "Select Line(s) From A" + +#: kdiff3.cpp:488 +msgid "Select Line(s) From B" +msgstr "Select Line(s) From B" + +#: kdiff3.cpp:489 +msgid "Select Line(s) From C" +msgstr "Select Line(s) From C" + +#: kdiff3.cpp:490 +msgid "Automatically Go to Next Unsolved Conflict After Source Selection" +msgstr "Automatically Go to Next Unsolved Conflict After Source Selection" + +#: kdiff3.cpp:492 +msgid "Show Space && Tabulator Characters for Differences" +msgstr "Show Space && Tabulator Characters for Differences" + +#: kdiff3.cpp:493 +msgid "Show White Space" +msgstr "Show White Space" + +#: kdiff3.cpp:495 +msgid "Show Line Numbers" +msgstr "Show Line Numbers" + +#: kdiff3.cpp:496 +msgid "Choose A Everywhere" +msgstr "Choose A Everywhere" + +#: kdiff3.cpp:497 +msgid "Choose B Everywhere" +msgstr "Choose B Everywhere" + +#: kdiff3.cpp:498 +msgid "Choose C Everywhere" +msgstr "Choose C Everywhere" + +#: kdiff3.cpp:499 +msgid "Choose A for All Unsolved Conflicts" +msgstr "Choose A for All Unsolved Conflicts" + +#: kdiff3.cpp:500 +msgid "Choose B for All Unsolved Conflicts" +msgstr "Choose B for All Unsolved Conflicts" + +#: kdiff3.cpp:501 +msgid "Choose C for All Unsolved Conflicts" +msgstr "Choose C for All Unsolved Conflicts" + +#: kdiff3.cpp:502 +msgid "Choose A for All Unsolved Whitespace Conflicts" +msgstr "Choose A for All Unsolved Whitespace Conflicts" + +#: kdiff3.cpp:503 +msgid "Choose B for All Unsolved Whitespace Conflicts" +msgstr "Choose B for All Unsolved Whitespace Conflicts" + +#: kdiff3.cpp:504 +msgid "Choose C for All Unsolved Whitespace Conflicts" +msgstr "Choose C for All Unsolved Whitespace Conflicts" + +#: kdiff3.cpp:505 +msgid "Automatically Solve Simple Conflicts" +msgstr "Automatically Solve Simple Conflicts" + +#: kdiff3.cpp:506 +msgid "Set Deltas to Conflicts" +msgstr "Set Deltas to Conflicts" + +#: kdiff3.cpp:507 +msgid "Run Regular Expression Auto Merge" +msgstr "" + +#: kdiff3.cpp:508 +#, fuzzy +msgid "Automatically Solve History Conflicts" +msgstr "Automatically Solve Simple Conflicts" + +#: kdiff3.cpp:509 +msgid "Split Diff At Selection" +msgstr "" + +#: kdiff3.cpp:510 +#, fuzzy +msgid "Join Selected Diffs" +msgstr "Compare Selected File" + +#: kdiff3.cpp:512 +msgid "Show Window A" +msgstr "Show Window A" + +#: kdiff3.cpp:513 +msgid "Show Window B" +msgstr "Show Window B" + +#: kdiff3.cpp:514 +msgid "Show Window C" +msgstr "Show Window C" + +#: kdiff3.cpp:515 kdiff3.cpp:526 +msgid "Focus Next Window" +msgstr "Focus Next Window" + +#: kdiff3.cpp:517 +msgid "Normal Overview" +msgstr "Normal Overview" + +#: kdiff3.cpp:518 +msgid "A vs. B Overview" +msgstr "A vs. B Overview" + +#: kdiff3.cpp:519 +msgid "A vs. C Overview" +msgstr "A vs. C Overview" + +#: kdiff3.cpp:520 +msgid "B vs. C Overview" +msgstr "B vs. C Overview" + +#: kdiff3.cpp:521 +msgid "Word Wrap Diff Windows" +msgstr "Word Wrap Diff Windows" + +#: kdiff3.cpp:522 +msgid "Add Manual Diff Alignment" +msgstr "" + +#: kdiff3.cpp:523 +msgid "Clear All Manual Diff Alignments" +msgstr "" + +#: kdiff3.cpp:528 +msgid "Focus Prev Window" +msgstr "Focus Prev Window" + +#: kdiff3.cpp:529 +msgid "Toggle Split Orientation" +msgstr "Toggle Split Orientation" + +#: kdiff3.cpp:531 +msgid "Dir && Text Split Screen View" +msgstr "Dir && Text Split Screen View" + +#: kdiff3.cpp:533 +msgid "Toggle Between Dir && Text View" +msgstr "Toggle Between Dir && Text View" + +#: kdiff3.cpp:582 pdiff.cpp:1712 +msgid "The merge result hasn't been saved." +msgstr "The merge result hasn't been saved." + +#: kdiff3.cpp:583 +msgid "Save && Quit" +msgstr "Save && Quit" + +#: kdiff3.cpp:583 +msgid "Quit Without Saving" +msgstr "Quit Without Saving" + +#: kdiff3.cpp:591 pdiff.cpp:1721 +msgid "Saving the merge result failed." +msgstr "Saving the merge result failed." + +#: kdiff3.cpp:602 pdiff.cpp:978 +msgid "" +"You are currently doing a directory merge. Are you sure, you want to abort?" +msgstr "" +"You are currently doing a directory merge. Are you sure, you want to abort?" + +#: kdiff3.cpp:625 +msgid "Saving file..." +msgstr "Saving file..." + +#: kdiff3.cpp:642 +msgid "Saving file with a new filename..." +msgstr "Saving file with a new filename..." + +#: kdiff3.cpp:732 +#, fuzzy +msgid "Printing..." +msgstr "Exiting..." + +#: kdiff3.cpp:738 kdiff3.cpp:900 +msgid "Printing aborted." +msgstr "" + +#: kdiff3.cpp:870 +msgid "Selection" +msgstr "" + +#: kdiff3.cpp:896 +#, fuzzy +msgid "Printing completed." +msgstr "Merge operation complete." + +#: kdiff3.cpp:906 +msgid "Exiting..." +msgstr "Exiting..." + +#: kdiff3.cpp:918 +msgid "Toggling toolbar..." +msgstr "Toggling toolbar..." + +#: kdiff3.cpp:939 +msgid "Toggle the statusbar..." +msgstr "Toggle the statusbar..." + +#: kdiff3_part.cpp:155 kdiff3_part.cpp:224 +msgid "Couldn't find files for comparison." +msgstr "Couldn't find files for comparison." + +#: kdiff3_part.cpp:291 +msgid "KDiff3Part" +msgstr "KDiff3Part" + +#: kdiff3_shell.cpp:78 +msgid "" +"Could not find our part!\n" +"This usually happens due to an installation problem. Please read the " +"README-file in the source package for details." +msgstr "" +"Could not find our part!\n" +"This usually happens due to an installation problem. Please read the " +"README-file in the source package for details." + +#: main.cpp:35 +msgid "Tool for Comparison and Merge of Files and Directories" +msgstr "Tool for Comparison and Merge of Files and Directories" + +#: main.cpp:40 +msgid "Merge the input." +msgstr "Merge the input." + +#: main.cpp:42 +msgid "Explicit base file. For compatibility with certain tools." +msgstr "Explicit base file. For compatibility with certain tools." + +#: main.cpp:44 +msgid "Output file. Implies -m. E.g.: -o newfile.txt" +msgstr "Output file. Implies -m. E.g.: -o newfile.txt" + +#: main.cpp:45 +msgid "Output file, again. (For compatibility with certain tools.)" +msgstr "Output file, again. (For compatibility with certain tools.)" + +#: main.cpp:46 +msgid "No GUI if all conflicts are auto-solvable. (Needs -o file)" +msgstr "No GUI if all conflicts are auto-solvable. (Needs -o file)" + +#: main.cpp:47 +msgid "Don't solve conflicts automatically. (For compatibility...)" +msgstr "Don't solve conflicts automatically. (For compatibility...)" + +#: main.cpp:48 +msgid "Visible name replacement for input file 1 (base)." +msgstr "Visible name replacement for input file 1 (base)." + +#: main.cpp:49 +msgid "Visible name replacement for input file 2." +msgstr "Visible name replacement for input file 2." + +#: main.cpp:50 +msgid "Visible name replacement for input file 3." +msgstr "Visible name replacement for input file 3." + +#: main.cpp:52 +msgid "Alternative visible name replacement. Supply this once for every input." +msgstr "" +"Alternative visible name replacement. Supply this once for every input." + +#: main.cpp:53 +msgid "" +"Override a config setting. Use once for every setting. E.g.: --cs " +"\"AutoAdvance=1\"" +msgstr "" + +#: main.cpp:54 +msgid "Show list of config settings and current values." +msgstr "" + +#: main.cpp:55 +#, fuzzy +msgid "Use a different config file." +msgstr "Number of different files:" + +#: main.cpp:59 +msgid "file1 to open (base, if not specified via --base)" +msgstr "file1 to open (base, if not specified via --base)" + +#: main.cpp:60 +msgid "file2 to open" +msgstr "file2 to open" + +#: main.cpp:61 +msgid "file3 to open" +msgstr "file3 to open" + +#: main.cpp:93 +msgid "Ignored. (User defined.)" +msgstr "" + +#. i18n: file kdiff3_part.rc line 16 +#: main.cpp:173 rc.cpp:9 +#, no-c-format +msgid "KDiff3" +msgstr "KDiff3" + +#: main.cpp:186 +msgid "+ Many thanks to those who reported bugs and contributed ideas!" +msgstr "+ Many thanks to those who reported bugs and contributed ideas!" + +#: mergeresultwindow.cpp:136 mergeresultwindow.cpp:939 +#: mergeresultwindow.cpp:953 mergeresultwindow.cpp:965 +#: mergeresultwindow.cpp:977 +msgid "Number of remaining unsolved conflicts: %1 (of which %2 are whitespace)" +msgstr "" +"Number of remaining unsolved conflicts: %1 (of which %2 are whitespace)" + +#: mergeresultwindow.cpp:285 +msgid "" +"The output has been modified.\n" +"If you continue your changes will be lost." +msgstr "" +"The output has been modified.\n" +"If you continue your changes will be lost." + +#: mergeresultwindow.cpp:797 pdiff.cpp:511 +msgid "All input files are binary equal." +msgstr "All input files are binary equal." + +#: mergeresultwindow.cpp:799 +msgid "All input files contain the same text." +msgstr "All input files contain the same text." + +#: mergeresultwindow.cpp:801 +msgid "" +"Files A and B are binary equal.\n" +msgstr "" +"Files A and B are binary equal.\n" + +#: mergeresultwindow.cpp:802 +msgid "" +"Files A and B have equal text. \n" +msgstr "" +"Files A and B have equal text. \n" + +#: mergeresultwindow.cpp:803 +msgid "" +"Files A and C are binary equal.\n" +msgstr "" +"Files A and C are binary equal.\n" + +#: mergeresultwindow.cpp:804 +msgid "" +"Files A and C have equal text. \n" +msgstr "" +"Files A and C have equal text. \n" + +#: mergeresultwindow.cpp:805 +msgid "" +"Files B and C are binary equal.\n" +msgstr "" +"Files B and C are binary equal.\n" + +#: mergeresultwindow.cpp:806 +msgid "" +"Files B and C have equal text. \n" +msgstr "" +"Files B and C have equal text. \n" + +#: mergeresultwindow.cpp:812 +msgid "Total number of conflicts: " +msgstr "Total number of conflicts: " + +#: mergeresultwindow.cpp:813 +msgid "" +"\n" +"Nr of automatically solved conflicts: " +msgstr "" +"\n" +"Nr of automatically solved conflicts: " + +#: mergeresultwindow.cpp:814 +msgid "" +"\n" +"Nr of unsolved conflicts: " +msgstr "" +"\n" +"Nr of unsolved conflicts: " + +#: mergeresultwindow.cpp:816 +msgid "Conflicts" +msgstr "Conflicts" + +#: mergeresultwindow.cpp:1652 +msgid "" +msgstr "" + +#: mergeresultwindow.cpp:1660 +msgid "" +msgstr "" + +#: mergeresultwindow.cpp:1662 mergeresultwindow.cpp:2427 +msgid "" +msgstr "" + +#: mergeresultwindow.cpp:2635 +msgid "" +"Not all conflicts are solved yet.\n" +"File not saved.\n" +msgstr "" +"Not all conflicts are solved yet.\n" +"File not saved.\n" + +#: mergeresultwindow.cpp:2637 +msgid "Conflicts Left" +msgstr "Conflicts Left" + +#: mergeresultwindow.cpp:2649 +msgid "" +"\n" +"\n" +"Creating backup failed. File not saved." +msgstr "" +"\n" +"\n" +"Creating backup failed. File not saved." + +#: mergeresultwindow.cpp:2649 mergeresultwindow.cpp:2689 +msgid "File Save Error" +msgstr "File Save Error" + +#: mergeresultwindow.cpp:2689 +msgid "Error while writing." +msgstr "Error while writing." + +#: mergeresultwindow.cpp:3020 +msgid "Output" +msgstr "Output" + +#: mergeresultwindow.cpp:3032 mergeresultwindow.cpp:3139 +msgid "[Modified]" +msgstr "[Modified]" + +#: mergeresultwindow.cpp:3039 +#, fuzzy +msgid "Encoding for saving" +msgstr "File Encoding for C:" + +#: mergeresultwindow.cpp:3075 mergeresultwindow.cpp:3081 +#: mergeresultwindow.cpp:3087 +msgid "Codec from" +msgstr "" + +#: optiondialog.cpp:362 +msgid "Unicode, 8 bit" +msgstr "Unicode, 8 bit" + +#: optiondialog.cpp:363 +msgid "Unicode" +msgstr "Unicode" + +#: optiondialog.cpp:364 +msgid "Latin1" +msgstr "Latin1" + +#: optiondialog.cpp:383 +msgid "Change this if non-ASCII characters are not displayed correctly." +msgstr "Change this if non-ASCII characters are not displayed correctly." + +#: optiondialog.cpp:510 +msgid "Editor & Diff Output Font" +msgstr "Editor & Diff Output Font" + +#: optiondialog.cpp:531 +msgid "Italic font for deltas" +msgstr "Italic font for deltas" + +#: optiondialog.cpp:534 +msgid "" +"Selects the italic version of the font for differences.\n" +"If the font doesn't support italic characters, then this does nothing." +msgstr "" +"Selects the italic version of the font for differences.\n" +"If the font doesn't support italic characters, then this does nothing." + +#: optiondialog.cpp:542 +msgid "Color" +msgstr "Colour" + +#: optiondialog.cpp:542 +#, fuzzy +msgid "Colors Settings" +msgstr "Regional Settings" + +#: optiondialog.cpp:556 +msgid "Editor and Diff Views:" +msgstr "" + +#: optiondialog.cpp:564 +msgid "Foreground color:" +msgstr "Foreground colour:" + +#: optiondialog.cpp:570 +msgid "Background color:" +msgstr "Background colour:" + +#: optiondialog.cpp:578 +msgid "Diff background color:" +msgstr "Diff background colour:" + +#: optiondialog.cpp:585 +msgid "Color A:" +msgstr "Colour A:" + +#: optiondialog.cpp:592 +msgid "Color B:" +msgstr "Colour B:" + +#: optiondialog.cpp:599 +msgid "Color C:" +msgstr "Colour C:" + +#: optiondialog.cpp:605 +msgid "Conflict color:" +msgstr "Conflict colour:" + +#: optiondialog.cpp:612 +msgid "Current range background color:" +msgstr "Current range background colour:" + +#: optiondialog.cpp:619 +msgid "Current range diff background color:" +msgstr "Current range diff background colour:" + +#: optiondialog.cpp:625 +msgid "Color for manually aligned difference ranges:" +msgstr "" + +#: optiondialog.cpp:630 +#, fuzzy +msgid "Directory Comparison View:" +msgstr "Directory Comparison Status" + +#: optiondialog.cpp:636 +msgid "Newest file color:" +msgstr "" + +#: optiondialog.cpp:639 +msgid "" +"Changing this color will only be effective when starting the next directory " +"comparison." +msgstr "" + +#: optiondialog.cpp:644 +msgid "Oldest file color:" +msgstr "" + +#: optiondialog.cpp:651 +msgid "Middle age file color:" +msgstr "" + +#: optiondialog.cpp:658 +msgid "Color for missing files:" +msgstr "" + +#: optiondialog.cpp:670 +msgid "Editor" +msgstr "Editor" + +#: optiondialog.cpp:670 +msgid "Editor Behavior" +msgstr "Editor Behaviour" + +#: optiondialog.cpp:680 +msgid "Tab inserts spaces" +msgstr "Tab inserts spaces" + +#: optiondialog.cpp:683 +msgid "" +"On: Pressing tab generates the appropriate number of spaces.\n" +"Off: A Tab-character will be inserted." +msgstr "" +"On: Pressing tab generates the appropriate number of spaces.\n" +"Off: A Tab-character will be inserted." + +#: optiondialog.cpp:689 +msgid "Tab size:" +msgstr "Tab size:" + +#: optiondialog.cpp:694 +msgid "Auto indentation" +msgstr "Auto indentation" + +#: optiondialog.cpp:697 +msgid "" +"On: The indentation of the previous line is used for a new line.\n" +msgstr "" +"On: The indentation of the previous line is used for a new line.\n" + +#: optiondialog.cpp:701 +msgid "Auto copy selection" +msgstr "Auto copy selection" + +#: optiondialog.cpp:704 +msgid "" +"On: Any selection is immediately written to the clipboard.\n" +"Off: You must explicitely copy e.g. via Ctrl-C." +msgstr "" +"On: Any selection is immediately written to the clipboard.\n" +"Off: You must explicitely copy e.g. via Ctrl-C." + +#: optiondialog.cpp:709 +msgid "Line end style:" +msgstr "Line end style:" + +#: optiondialog.cpp:721 +msgid "" +"Sets the line endings for when an edited file is saved.\n" +"DOS/Windows: CR+LF; UNIX: LF; with CR=0D, LF=0A" +msgstr "" +"Sets the line endings for when an edited file is saved.\n" +"DOS/Windows: CR+LF; UNIX: LF; with CR=0D, LF=0A" + +#: optiondialog.cpp:732 +#, fuzzy +msgid "Diff" +msgstr "KDiff3" + +#: optiondialog.cpp:732 +#, fuzzy +msgid "Diff Settings" +msgstr "Diff & Merge Settings" + +#: optiondialog.cpp:743 +msgid "Preserve carriage return" +msgstr "Preserve carriage return" + +#: optiondialog.cpp:746 +msgid "" +"Show carriage return characters '\\r' if they exist.\n" +"Helps to compare files that were modified under different operating systems." +msgstr "" +"Show carriage return characters '\\r' if they exist.\n" +"Helps to compare files that were modified under different operating systems." + +#: optiondialog.cpp:751 +msgid "Ignore numbers" +msgstr "Ignore numbers" + +#: optiondialog.cpp:754 +msgid "" +"Ignore number characters during line matching phase. (Similar to Ignore white " +"space.)\n" +"Might help to compare files with numeric data." +msgstr "" +"Ignore number characters during line matching phase. (Similar to Ignore white " +"space.)\n" +"Might help to compare files with numeric data." + +#: optiondialog.cpp:759 +msgid "Ignore C/C++ comments" +msgstr "Ignore C/C++ comments" + +#: optiondialog.cpp:761 +msgid "Treat C/C++ comments like white space." +msgstr "Treat C/C++ comments like white space." + +#: optiondialog.cpp:765 +msgid "Ignore case" +msgstr "Ignore case" + +#: optiondialog.cpp:768 +msgid "Treat case differences like white space changes. ('a'<=>'A')" +msgstr "Treat case differences like white space changes. ('a'<=>'A')" + +#: optiondialog.cpp:772 +msgid "Preprocessor command:" +msgstr "Preprocessor command:" + +#: optiondialog.cpp:776 +msgid "User defined pre-processing. (See the docs for details.)" +msgstr "User defined pre-processing. (See the docs for details.)" + +#: optiondialog.cpp:779 +msgid "Line-matching preprocessor command:" +msgstr "Line-matching preprocessor command:" + +#: optiondialog.cpp:783 +msgid "" +"This pre-processor is only used during line matching.\n" +"(See the docs for details.)" +msgstr "" +"This pre-processor is only used during line matching.\n" +"(See the docs for details.)" + +#: optiondialog.cpp:786 +msgid "Try hard (slower)" +msgstr "Try hard (slower)" + +#: optiondialog.cpp:789 +msgid "" +"Enables the --minimal option for the external diff.\n" +"The analysis of big files will be much slower." +msgstr "" +"Enables the --minimal option for the external diff.\n" +"The analysis of big files will be much slower." + +#: optiondialog.cpp:794 +msgid "Auto advance delay (ms):" +msgstr "Auto advance delay (ms):" + +#: optiondialog.cpp:799 +msgid "" +"When in Auto-Advance mode the result of the current selection is shown \n" +"for the specified time, before jumping to the next conflict. Range: 0-2000 ms" +msgstr "" +"When in Auto-Advance mode the result of the current selection is shown \n" +"for the specified time, before jumping to the next conflict. Range: 0-2000 ms" + +#: optiondialog.cpp:809 +#, fuzzy +msgid "Merge Settings" +msgstr "Diff & Merge Settings" + +#: optiondialog.cpp:822 +msgid "White space 2-file merge default:" +msgstr "White space 2-file merge default:" + +#: optiondialog.cpp:826 optiondialog.cpp:839 +msgid "Manual Choice" +msgstr "Manual Choice" + +#: optiondialog.cpp:830 optiondialog.cpp:844 +msgid "" +"Allow the merge algorithm to automatically select an input for white-space-only " +"changes." +msgstr "" +"Allow the merge algorithm to automatically select an input for white-space-only " +"changes." + +#: optiondialog.cpp:835 +msgid "White space 3-file merge default:" +msgstr "White space 3-file merge default:" + +#: optiondialog.cpp:849 +msgid "Automatic Merge Regular Expression" +msgstr "" + +#: optiondialog.cpp:858 smalldialogs.cpp:397 +msgid "Auto merge regular expression:" +msgstr "" + +#: optiondialog.cpp:862 +msgid "" +"Regular expression for lines where KDiff3 should automatically choose one " +"source.\n" +"When a line with a conflict matches the regular expression then\n" +"- if available - C, otherwise B will be chosen." +msgstr "" + +#: optiondialog.cpp:868 +msgid "Run regular expression auto merge on merge start" +msgstr "" + +#: optiondialog.cpp:870 +msgid "" +"Run the merge for auto merge regular expressions\n" +"immediately when a merge starts.\n" +msgstr "" + +#: optiondialog.cpp:875 +msgid "Version Control History Merging" +msgstr "" + +#: optiondialog.cpp:884 smalldialogs.cpp:424 +msgid "History start regular expression:" +msgstr "" + +#: optiondialog.cpp:888 +msgid "" +"Regular expression for the start of the version control history entry.\n" +"Usually this line contains the \"$Log$\"-keyword.\n" +"Default value: \".*\\$Log.*\\$.*\"" +msgstr "" + +#: optiondialog.cpp:894 smalldialogs.cpp:453 +msgid "History entry start regular expression:" +msgstr "" + +#: optiondialog.cpp:906 +msgid "" +"A version control history entry consists of several lines.\n" +"Specify the regular expression to detect the first line (without the leading " +"comment).\n" +"Use parentheses to group the keys you want to use for sorting.\n" +"If left empty, then KDiff3 assumes that empty lines separate history entries.\n" +"See the documentation for details." +msgstr "" + +#: optiondialog.cpp:914 +msgid "History merge sorting" +msgstr "" + +#: optiondialog.cpp:916 +msgid "Sort version control history by a key." +msgstr "" + +#: optiondialog.cpp:926 +msgid "History entry start sort key order:" +msgstr "" + +#: optiondialog.cpp:930 +msgid "" +"Each parentheses used in the regular expression for the history start entry\n" +"groups a key that can be used for sorting.\n" +"Specify the list of keys (that are numbered in order of occurrence\n" +"starting with 1) using ',' as separator (e.g. \"4,5,6,1,2,3,7\").\n" +"If left empty, then no sorting will be done.\n" +"See the documentation for details." +msgstr "" + +#: optiondialog.cpp:941 +msgid "Merge version control history on merge start" +msgstr "" + +#: optiondialog.cpp:943 +msgid "Run version control history automerge on merge start." +msgstr "" + +#: optiondialog.cpp:947 +msgid "Test your regular expressions" +msgstr "" + +#: optiondialog.cpp:952 +msgid "Irrelevant merge command:" +msgstr "" + +#: optiondialog.cpp:956 +msgid "" +"If specified this script is run after automerge\n" +"when no other relevant changes were detected.\n" +"Called with the parameters: filename1 filename2 filename3" +msgstr "" + +#: optiondialog.cpp:966 +msgid "Directory Merge" +msgstr "Directory Merge" + +#: optiondialog.cpp:975 +msgid "Recursive directories" +msgstr "Recursive directories" + +#: optiondialog.cpp:977 +msgid "Whether to analyze subdirectories or not." +msgstr "Whether to analyse subdirectories or not." + +#: optiondialog.cpp:979 +msgid "File pattern(s):" +msgstr "File pattern(s):" + +#: optiondialog.cpp:984 +msgid "" +"Pattern(s) of files to be analyzed. \n" +"Wildcards: '*' and '?'\n" +"Several Patterns can be specified by using the separator: ';'" +msgstr "" +"Pattern(s) of files to be analysed. \n" +"Wildcards: '*' and '?'\n" +"Several Patterns can be specified by using the separator: ';'" + +#: optiondialog.cpp:990 +msgid "File-anti-pattern(s):" +msgstr "File-anti-pattern(s):" + +#: optiondialog.cpp:995 +msgid "" +"Pattern(s) of files to be excluded from analysis. \n" +"Wildcards: '*' and '?'\n" +"Several Patterns can be specified by using the separator: ';'" +msgstr "" +"Pattern(s) of files to be excluded from analysis. \n" +"Wildcards: '*' and '?'\n" +"Several Patterns can be specified by using the separator: ';'" + +#: optiondialog.cpp:1001 +msgid "Dir-anti-pattern(s):" +msgstr "Dir-anti-pattern(s):" + +#: optiondialog.cpp:1006 +msgid "" +"Pattern(s) of directories to be excluded from analysis. \n" +"Wildcards: '*' and '?'\n" +"Several Patterns can be specified by using the separator: ';'" +msgstr "" +"Pattern(s) of directories to be excluded from analysis. \n" +"Wildcards: '*' and '?'\n" +"Several Patterns can be specified by using the separator: ';'" + +#: optiondialog.cpp:1012 +msgid "Use .cvsignore" +msgstr "Use .cvsignore" + +#: optiondialog.cpp:1015 +msgid "" +"Extends the antipattern to anything that would be ignored by CVS.\n" +"Via local \".cvsignore\"-files this can be directory specific." +msgstr "" +"Extends the antipattern to anything that would be ignored by CVS.\n" +"Via local \".cvsignore\"-files this can be directory specific." + +#: optiondialog.cpp:1020 +msgid "Find hidden files and directories" +msgstr "Find hidden files and directories" + +#: optiondialog.cpp:1023 +msgid "Finds files and directories with the hidden attribute." +msgstr "Finds files and directories with the hidden attribute." + +#: optiondialog.cpp:1025 +msgid "Finds files and directories starting with '.'." +msgstr "Finds files and directories starting with '.'." + +#: optiondialog.cpp:1029 +msgid "Follow file links" +msgstr "Follow file links" + +#: optiondialog.cpp:1032 +msgid "" +"On: Compare the file the link points to.\n" +"Off: Compare the links." +msgstr "" +"On: Compare the file the link points to.\n" +"Off: Compare the links." + +#: optiondialog.cpp:1037 +msgid "Follow directory links" +msgstr "Follow directory links" + +#: optiondialog.cpp:1040 +msgid "" +"On: Compare the directory the link points to.\n" +"Off: Compare the links." +msgstr "" +"On: Compare the directory the link points to.\n" +"Off: Compare the links." + +#: optiondialog.cpp:1056 +msgid "Case sensitive filename comparison" +msgstr "" + +#: optiondialog.cpp:1059 +msgid "" +"The directory comparison will compare files or directories when their names " +"match.\n" +"Set this option if the case of the names must match. (Default for Windows is " +"off, otherwise on.)" +msgstr "" + +#: optiondialog.cpp:1063 +msgid "File Comparison Mode" +msgstr "File Comparison Mode" + +#: optiondialog.cpp:1067 +msgid "Binary comparison" +msgstr "Binary comparison" + +#: optiondialog.cpp:1068 +msgid "Binary comparison of each file. (Default)" +msgstr "Binary comparison of each file. (Default)" + +#: optiondialog.cpp:1070 +msgid "Full analysis" +msgstr "Full analysis" + +#: optiondialog.cpp:1071 +msgid "" +"Do a full analysis and show statistics information in extra columns.\n" +"(Slower than a binary comparison, much slower for binary files.)" +msgstr "" +"Do a full analysis and show statistics information in extra columns.\n" +"(Slower than a binary comparison, much slower for binary files.)" + +#: optiondialog.cpp:1074 +msgid "Trust the modification date (unsafe)" +msgstr "Trust the modification date (unsafe)" + +#: optiondialog.cpp:1075 +msgid "" +"Assume that files are equal if the modification date and file length are " +"equal.\n" +"Useful for big directories or slow networks." +msgstr "" +"Assume that files are equal if the modification date and file length are " +"equal.\n" +"Useful for big directories or slow networks." + +#: optiondialog.cpp:1078 +msgid "Trust the size (unsafe)" +msgstr "Trust the size (unsafe)" + +#: optiondialog.cpp:1079 +msgid "" +"Assume that files are equal if their file lengths are equal.\n" +"Useful for big directories or slow networks when the date is modified during " +"download." +msgstr "" +"Assume that files are equal if their file lengths are equal.\n" +"Useful for big directories or slow networks when the date is modified during " +"download." + +#: optiondialog.cpp:1083 +msgid "Synchronize directories" +msgstr "Synchronise directories" + +#: optiondialog.cpp:1086 +msgid "" +"Offers to store files in both directories so that\n" +"both directories are the same afterwards.\n" +"Works only when comparing two directories without specifying a destination." +msgstr "" +"Offers to store files in both directories so that\n" +"both directories are the same afterwards.\n" +"Works only when comparing two directories without specifying a destination." + +#: optiondialog.cpp:1092 +msgid "White space differences considered equal" +msgstr "White space differences considered equal" + +#: optiondialog.cpp:1095 +msgid "" +"If files differ only by white space consider them equal.\n" +"This is only active when full analysis is chosen." +msgstr "" +"If files differ only by white space consider them equal.\n" +"This is only active when full analysis is chosen." + +#: optiondialog.cpp:1101 +msgid "Copy newer instead of merging (unsafe)" +msgstr "Copy newer instead of merging (unsafe)" + +#: optiondialog.cpp:1104 +msgid "" +"Don't look inside, just take the newer file.\n" +"(Use this only if you know what you are doing!)\n" +"Only effective when comparing two directories." +msgstr "" +"Don't look inside, just take the newer file.\n" +"(Use this only if you know what you are doing!)\n" +"Only effective when comparing two directories." + +#: optiondialog.cpp:1109 +msgid "Backup files (.orig)" +msgstr "Backup files (.orig)" + +#: optiondialog.cpp:1112 +msgid "" +"When a file would be saved over an old file, then the old file\n" +"will be renamed with a '.orig'-extension instead of being deleted." +msgstr "" +"When a file would be saved over an old file, then the old file\n" +"will be renamed with a '.orig'-extension instead of being deleted." + +#: optiondialog.cpp:1176 +msgid "Regional Settings" +msgstr "Regional Settings" + +#: optiondialog.cpp:1272 +msgid "Language (restart required)" +msgstr "Language (restart required)" + +#: optiondialog.cpp:1304 +msgid "" +"Choose the language of the GUI-strings or \"Auto\".\n" +"For a change of language to take place, quit and restart KDiff3." +msgstr "" +"Choose the language of the GUI-strings or \"Auto\".\n" +"For a change of language to take place, quit and restart KDiff3." + +#: optiondialog.cpp:1322 +msgid "Use the same encoding for everything:" +msgstr "Use the same encoding for everything:" + +#: optiondialog.cpp:1325 +msgid "" +"Enable this allows to change all encodings by changing the first only.\n" +"Disable this if different individual settings are needed." +msgstr "" +"Enable this allows to change all encodings by changing the first only.\n" +"Disable this if different individual settings are needed." + +#: optiondialog.cpp:1330 +msgid "Note: Local Encoding is " +msgstr "Note: Local Encoding is " + +#: optiondialog.cpp:1334 +msgid "File Encoding for A:" +msgstr "File Encoding for A:" + +#: optiondialog.cpp:1340 +msgid "" +"If enabled then Unicode (UTF-16 or UTF-8) encoding will be detected.\n" +"If the file encoding is not detected then the selected encoding will be used as " +"fallback.\n" +"(Unicode detection depends on the first bytes of a file - the byte order mark " +"\"BOM\".)" +msgstr "" + +#: optiondialog.cpp:1344 optiondialog.cpp:1353 optiondialog.cpp:1362 +msgid "Auto Detect Unicode" +msgstr "" + +#: optiondialog.cpp:1349 +msgid "File Encoding for B:" +msgstr "File Encoding for B:" + +#: optiondialog.cpp:1358 +msgid "File Encoding for C:" +msgstr "File Encoding for C:" + +#: optiondialog.cpp:1367 +msgid "File Encoding for Merge Output and Saving:" +msgstr "File Encoding for Merge Output and Saving:" + +#: optiondialog.cpp:1371 +#, fuzzy +msgid "Auto Select" +msgstr "Auto copy selection" + +#: optiondialog.cpp:1374 +msgid "" +"If enabled then the encoding from the input files is used.\n" +"In ambiguous cases a dialog will ask the user to choose the encoding for " +"saving." +msgstr "" + +#: optiondialog.cpp:1378 +msgid "File Encoding for Preprocessor Files:" +msgstr "File Encoding for Preprocessor Files:" + +#: optiondialog.cpp:1389 +msgid "Right To Left Language" +msgstr "Right To Left Language" + +#: optiondialog.cpp:1392 +msgid "" +"Some languages are read from right to left.\n" +"This setting will change the viewer and editor accordingly." +msgstr "" +"Some languages are read from right to left.\n" +"This setting will change the viewer and editor accordingly." + +#: optiondialog.cpp:1402 +#, fuzzy +msgid "Integration" +msgstr "Operation" + +#: optiondialog.cpp:1402 +#, fuzzy +msgid "Integration Settings" +msgstr "Regional Settings" + +#: optiondialog.cpp:1412 +msgid "Command line options to ignore:" +msgstr "" + +#: optiondialog.cpp:1417 +msgid "" +"List of command line options that should be ignored when KDiff3 is used by " +"other tools.\n" +"Several values can be specified if separated via ';'\n" +"This will suppress the \"Unknown option\"-error." +msgstr "" + +#: optiondialog.cpp:1480 +msgid "" +"You selected a variable width font.\n" +"\n" +"Because this program doesn't handle variable width fonts\n" +"correctly, you might experience problems while editing.\n" +"\n" +"Do you want to continue or do you want to select another font." +msgstr "" +"You selected a variable width font.\n" +"\n" +"Because this program doesn't handle variable width fonts\n" +"correctly, you might experience problems while editing.\n" +"\n" +"Do you want to continue or do you want to select another font." + +#: optiondialog.cpp:1484 +msgid "Incompatible Font" +msgstr "Incompatible Font" + +#: optiondialog.cpp:1485 +msgid "Continue at Own Risk" +msgstr "Continue at Own Risk" + +#: optiondialog.cpp:1485 +msgid "Select Another Font" +msgstr "Select Another Font" + +#: optiondialog.cpp:1521 +msgid "This resets all options. Not only those of the current topic." +msgstr "This resets all options. Not only those of the current topic." + +#: pdiff.cpp:258 +msgid "PreprocessorCmd: " +msgstr "PreprocessorCmd: " + +#: pdiff.cpp:263 +msgid "" +"The following option(s) you selected might change data:\n" +msgstr "" +"The following option(s) you selected might change data:\n" + +#: pdiff.cpp:264 +msgid "" +"\n" +"Most likely this is not wanted during a merge.\n" +"Do you want to disable these settings or continue with these settings active?" +msgstr "" +"\n" +"Most likely this is not wanted during a merge.\n" +"Do you want to disable these settings or continue with these settings active?" + +#: pdiff.cpp:266 +msgid "Option Unsafe for Merging" +msgstr "Option Unsafe for Merging" + +#: pdiff.cpp:267 +msgid "Use These Options During Merge" +msgstr "Use These Options During Merge" + +#: pdiff.cpp:267 +msgid "Disable Unsafe Options" +msgstr "Disable Unsafe Options" + +#: pdiff.cpp:297 +msgid "Loading A" +msgstr "Loading A" + +#: pdiff.cpp:301 +msgid "Loading B" +msgstr "Loading B" + +#: pdiff.cpp:318 pdiff.cpp:344 +msgid "Diff: A <-> B" +msgstr "Diff: A <-> B" + +#: pdiff.cpp:324 pdiff.cpp:366 +msgid "Linediff: A <-> B" +msgstr "Linediff: A <-> B" + +#: pdiff.cpp:335 +msgid "Loading C" +msgstr "Loading C" + +#: pdiff.cpp:347 +msgid "Diff: B <-> C" +msgstr "Diff: B <-> C" + +#: pdiff.cpp:350 +msgid "Diff: A <-> C" +msgstr "Diff: A <-> C" + +#: pdiff.cpp:369 +msgid "Linediff: B <-> C" +msgstr "Linediff: B <-> C" + +#: pdiff.cpp:372 +msgid "Linediff: A <-> C" +msgstr "Linediff: A <-> C" + +#: pdiff.cpp:513 +#, fuzzy +msgid "All input files contain the same text, but are not binary equal." +msgstr "All input files contain the same text." + +#: pdiff.cpp:515 pdiff.cpp:517 pdiff.cpp:519 +#, fuzzy +msgid "" +"Files %1 and %2 are binary equal.\n" +msgstr "" +"Files B and C are binary equal.\n" + +#: pdiff.cpp:516 pdiff.cpp:518 pdiff.cpp:520 +#, fuzzy +msgid "" +"Files %1 and %2 have equal text, but are not binary equal. \n" +msgstr "" +"Files A and B are binary equal.\n" + +#: pdiff.cpp:530 +msgid "" +"Some inputfiles don't seem to be pure textfiles.\n" +"Note that the KDiff3-merge was not meant for binary data.\n" +"Continue at your own risk." +msgstr "" +"Some inputfiles don't seem to be pure textfiles.\n" +"Note that the KDiff3-merge was not meant for binary data.\n" +"Continue at your own risk." + +#: pdiff.cpp:979 +msgid "Abort" +msgstr "Abort" + +#: pdiff.cpp:985 pdiff.cpp:1073 +msgid "Opening files..." +msgstr "Opening files..." + +#: pdiff.cpp:1050 pdiff.cpp:1121 +msgid "File open error" +msgstr "File open error" + +#: pdiff.cpp:1153 +msgid "Cutting selection..." +msgstr "Cutting selection..." + +#: pdiff.cpp:1174 +msgid "Copying selection to clipboard..." +msgstr "Copying selection to clipboard..." + +#: pdiff.cpp:1190 +msgid "Inserting clipboard contents..." +msgstr "Inserting clipboard contents..." + +#: pdiff.cpp:1713 +msgid "Save && Continue" +msgstr "Save && Continue" + +#: pdiff.cpp:1713 +msgid "Continue Without Saving" +msgstr "Continue Without Saving" + +#: pdiff.cpp:1920 +msgid "Search complete." +msgstr "Search complete." + +#: pdiff.cpp:1920 +msgid "Search Complete" +msgstr "Search Complete" + +#: pdiff.cpp:2144 +msgid "Nothing is selected in either diff input window." +msgstr "" + +#: pdiff.cpp:2144 +#, fuzzy +msgid "Error while adding manual diff range" +msgstr "Error while creating directory." + +#. i18n: file kdiff3_part.rc line 4 +#: rc.cpp:3 +#, no-c-format +msgid "&KDiff3" +msgstr "&KDiff3" + +#. i18n: file kdiff3_part.rc line 13 +#: rc.cpp:6 +#, no-c-format +msgid "Configure KDiff3" +msgstr "Configure KDiff3" + +#. i18n: file kdiff3_shell.rc line 7 +#: rc.cpp:15 +#, no-c-format +msgid "&Directory" +msgstr "&Directory" + +#. i18n: file kdiff3_shell.rc line 30 +#: rc.cpp:18 +#, no-c-format +msgid "Current Item Merge Operation" +msgstr "Current Item Merge Operation" + +#. i18n: file kdiff3_shell.rc line 38 +#: rc.cpp:21 +#, no-c-format +msgid "Current Item Sync Operation" +msgstr "Current Item Sync Operation" + +#. i18n: file kdiff3_shell.rc line 50 +#: rc.cpp:24 +#, no-c-format +msgid "&Movement" +msgstr "&Movement" + +#. i18n: file kdiff3_shell.rc line 61 +#: rc.cpp:27 +#, no-c-format +msgid "D&iffview" +msgstr "D&iffview" + +#. i18n: file kdiff3_shell.rc line 73 +#: rc.cpp:30 +#, no-c-format +msgid "&Merge" +msgstr "&Merge" + +#. i18n: file kdiff3_shell.rc line 95 +#: rc.cpp:33 +#, no-c-format +msgid "&Window" +msgstr "&Window" + +#: smalldialogs.cpp:53 +msgid "A (Base):" +msgstr "A (Base):" + +#: smalldialogs.cpp:59 smalldialogs.cpp:75 smalldialogs.cpp:91 +#: smalldialogs.cpp:134 +msgid "File..." +msgstr "File..." + +#: smalldialogs.cpp:61 smalldialogs.cpp:77 smalldialogs.cpp:93 +#: smalldialogs.cpp:136 +msgid "Dir..." +msgstr "Dir..." + +#: smalldialogs.cpp:86 +msgid "C (Optional):" +msgstr "C (Optional):" + +#: smalldialogs.cpp:108 +msgid "Swap/Copy Names ..." +msgstr "" + +#: smalldialogs.cpp:114 smalldialogs.cpp:115 smalldialogs.cpp:116 +msgid "Swap %1<->%2" +msgstr "" + +#: smalldialogs.cpp:117 smalldialogs.cpp:118 smalldialogs.cpp:119 +msgid "Copy %1->Output" +msgstr "" + +#: smalldialogs.cpp:120 smalldialogs.cpp:121 smalldialogs.cpp:122 +msgid "Swap %1<->Output" +msgstr "" + +#: smalldialogs.cpp:129 +msgid "Output (optional):" +msgstr "Output (optional):" + +#: smalldialogs.cpp:158 +msgid "Configure..." +msgstr "Configure..." + +#: smalldialogs.cpp:347 +msgid "Search text:" +msgstr "Search text:" + +#: smalldialogs.cpp:354 +msgid "Case sensitive" +msgstr "Case sensitive" + +#: smalldialogs.cpp:357 +msgid "Search A" +msgstr "Search A" + +#: smalldialogs.cpp:362 +msgid "Search B" +msgstr "Search B" + +#: smalldialogs.cpp:367 +msgid "Search C" +msgstr "Search C" + +#: smalldialogs.cpp:372 +msgid "Search output" +msgstr "Search output" + +#: smalldialogs.cpp:377 +msgid "&Search" +msgstr "&Search" + +#: smalldialogs.cpp:394 +msgid "Regular Expression Tester" +msgstr "" + +#: smalldialogs.cpp:405 +msgid "Example auto merge line:" +msgstr "" + +#: smalldialogs.cpp:407 +msgid "For auto merge test copy a line as used in your files." +msgstr "" + +#: smalldialogs.cpp:413 smalldialogs.cpp:442 smalldialogs.cpp:479 +msgid "Match result:" +msgstr "" + +#: smalldialogs.cpp:432 +msgid "Example history start line (with leading comment):" +msgstr "" + +#: smalldialogs.cpp:435 +msgid "" +"Copy a history start line as used in your files,\n" +"including the leading comment." +msgstr "" + +#: smalldialogs.cpp:461 +msgid "History sort key order:" +msgstr "" + +#: smalldialogs.cpp:469 +msgid "Example history entry start line (without leading comment):" +msgstr "" + +#: smalldialogs.cpp:471 +msgid "" +"Copy a history entry start line as used in your files,\n" +"but omit the leading comment." +msgstr "" + +#: smalldialogs.cpp:486 +msgid "Sort key result:" +msgstr "" + +#: smalldialogs.cpp:537 smalldialogs.cpp:547 smalldialogs.cpp:568 +msgid "Match success." +msgstr "" + +#: smalldialogs.cpp:541 smalldialogs.cpp:551 smalldialogs.cpp:574 +#, fuzzy +msgid "Match failed." +msgstr "Saving failed." + +#: smalldialogs.cpp:559 +msgid "Opening and closing parentheses don't match in regular expression." +msgstr "" + +#, fuzzy +#~ msgid "Diff and Merge" +#~ msgstr "Diff & Merge" + +#, fuzzy +#~ msgid "Save Directory Merge State ..." +#~ msgstr "Directory Merge" + +#, fuzzy +#~ msgid "Load Directory Merge State ..." +#~ msgstr "Directory Merge" + +#, fuzzy +#~ msgid "Synchronize Directories" +#~ msgstr "Synchronise directories" + +#, fuzzy +#~ msgid "Copy Newer Files Instead of Merging" +#~ msgstr "Copy newer instead of merging (unsafe)" + +#~ msgid "List only deltas" +#~ msgstr "List only deltas" + +#~ msgid "Files and directories without change will not appear in the list." +#~ msgstr "Files and directories without change will not appear in the list." + +#, fuzzy +#~ msgid "no selection" +#~ msgstr "Auto copy selection" + +#, fuzzy +#~ msgid "Manually match lines" +#~ msgstr "Manual Choice" + +#~ msgid "Has no effect. For compatibility with certain tools." +#~ msgstr "Has no effect. For compatibility with certain tools." + +#~ msgid "For compatibility with certain tools." +#~ msgstr "For compatibility with certain tools." + +#~ msgid "Colors in Editor & Diff Output" +#~ msgstr "Colours in Editor & Diff Output" diff --git a/po/es.po b/po/es.po new file mode 100644 index 0000000..29f544e --- /dev/null +++ b/po/es.po @@ -0,0 +1,2568 @@ +# translation of kdiff3.po to Español +# traducción de kdiff3.po a Español +# Copyright (C) 2003,2004, 2005, 2006 Free Software Foundation, Inc. +# +# Miguel Revilla Rodríguez , 2003. +# Carlos Mayo Hernández , 2003,2004, 2005. +# santi , 2005, 2006. +# Santiago Fernandez Sancho , 2006. +msgid "" +msgstr "" +"Project-Id-Version: kdiff3\n" +"POT-Creation-Date: 2006-11-05 08:45+0100\n" +"PO-Revision-Date: 2006-11-06 22:21+0100\n" +"Last-Translator: santi \n" +"Language-Team: Español \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: KBabel 1.11.4\n" + +#: _translatorinfo.cpp:1 +msgid "" +"_: NAME OF TRANSLATORS\n" +"Your names" +msgstr "Carlos Mayo Hernández" + +#: _translatorinfo.cpp:3 +msgid "" +"_: EMAIL OF TRANSLATORS\n" +"Your emails" +msgstr "carlos.mayo@hispalinux.es" + +#: diff.cpp:246 +msgid "Writing clipboard data to temp file failed." +msgstr "Error al escribir los datos del portapapeles en el archivo temporal." + +#: diff.cpp:250 +msgid "From Clipboard" +msgstr "Desde el portapapeles" + +#: diff.cpp:491 +msgid "" +"Preprocessing possibly failed. Check this command:\n" +"\n" +" %1\n" +"\n" +"The preprocessing command will be disabled now." +msgstr "" +"Posiblemente falló el pre-procesamiento. Compruebe esta orden:\n" +"\n" +" %1\n" +"\n" +"La orden de pre-procesamiento se desactivará ahora." + +#: diff.cpp:526 +msgid "" +"The line-matching-preprocessing possibly failed. Check this command:\n" +"\n" +" %1\n" +"\n" +"The line-matching-preprocessing command will be disabled now." +msgstr "" +"El preprocesamiento de combinación de linea probablemente falló. Compruebe esta " +"orden:\n" +"\n" +" %1\n" +"\n" +"La orden de preprocesamiento de combinación de linea se desactivará." + +#: diff.cpp:1631 diff.cpp:1645 +msgid "" +"Data loss error:\n" +"If it is reproducable please contact the author.\n" +msgstr "" +"Error de pérdida de datos:\n" +"Si se puede reproducir contacte con el autor.\n" + +#: diff.cpp:1633 diff.cpp:1647 +msgid "Severe Internal Error" +msgstr "Error interno grave" + +#: difftextwindow.cpp:1643 kdiff3.cpp:753 +msgid "Top line" +msgstr "Linea superior" + +#: difftextwindow.cpp:1653 +msgid "End" +msgstr "Fin" + +#: directorymergewindow.cpp:142 +msgid "Mix of links and normal files." +msgstr "Mezcla de enlaces y archivos normales." + +#: directorymergewindow.cpp:149 +msgid "Link: " +msgstr "Enlace: " + +#: directorymergewindow.cpp:157 +msgid "Size. " +msgstr "Tamaño: " + +#: directorymergewindow.cpp:170 +msgid "Date & Size: " +msgstr "Fecha y tamaño: " + +#: directorymergewindow.cpp:179 directorymergewindow.cpp:185 +msgid "Creating temp copy of %1 failed." +msgstr "Falló la creación de la copia temporal de %1." + +#: directorymergewindow.cpp:196 directorymergewindow.cpp:204 +msgid "Opening %1 failed." +msgstr "Falló la apertura de %1." + +#: directorymergewindow.cpp:208 +msgid "Comparing file..." +msgstr "Comparando archivo..." + +#: directorymergewindow.cpp:218 directorymergewindow.cpp:224 +#, c-format +msgid "Error reading from %1" +msgstr "Error al leer de %1" + +#: directorymergewindow.cpp:282 +msgid "Name" +msgstr "Nombre" + +#: directorymergewindow.cpp:286 +msgid "Operation" +msgstr "Operación" + +#: directorymergewindow.cpp:287 +msgid "Status" +msgstr "Estado" + +#: directorymergewindow.cpp:288 +msgid "Unsolved" +msgstr "Sin resolver" + +#: directorymergewindow.cpp:289 +msgid "Solved" +msgstr "Resuelto" + +#: directorymergewindow.cpp:290 +msgid "Nonwhite" +msgstr "No blanco" + +#: directorymergewindow.cpp:291 +msgid "White" +msgstr "Blanco" + +#: directorymergewindow.cpp:319 +msgid "" +"You are currently doing a directory merge. Are you sure, you want to abort the " +"merge and rescan the directory?" +msgstr "" +"Actualmente está haciendo una fusión de directorio. ¿Está seguro de que desea " +"abandonar la fusión y volver a leer el directorio?" + +#: directorymergewindow.cpp:320 directorymergewindow.cpp:2868 +msgid "Rescan" +msgstr "Volver a buscar" + +#: directorymergewindow.cpp:320 kdiff3.cpp:603 pdiff.cpp:979 +msgid "Continue Merging" +msgstr "Continuar fusionando" + +#: directorymergewindow.cpp:462 +msgid "Opening of directories failed:" +msgstr "Falló la apertura de directorios:" + +#: directorymergewindow.cpp:465 +msgid "" +"Dir A \"%1\" does not exist or is not a directory.\n" +msgstr "" +"Dir A «%1» no existe o no es un directorio.\n" + +#: directorymergewindow.cpp:468 +msgid "" +"Dir B \"%1\" does not exist or is not a directory.\n" +msgstr "" +"Dir B «%1» no existe o no es un directorio.\n" + +#: directorymergewindow.cpp:471 +msgid "" +"Dir C \"%1\" does not exist or is not a directory.\n" +msgstr "" +"Dir C «%1» no existe o no es un directorio.\n" + +#: directorymergewindow.cpp:473 +msgid "Directory Open Error" +msgstr "Error al abrir directorio" + +#: directorymergewindow.cpp:481 +msgid "" +"The destination directory must not be the same as A or B when three directories " +"are merged.\n" +"Check again before continuing." +msgstr "" +"El directorio de destino no debe ser el mismo que A o B cuando tres directorio " +"estan fusionados.\n" +"Compruebe de nuevo antes de continuar." + +#: directorymergewindow.cpp:483 +msgid "Parameter Warning" +msgstr "Advertencia en el parámetro" + +#: directorymergewindow.cpp:488 +msgid "Scanning directories..." +msgstr "Escaneando directorios ..." + +#: directorymergewindow.cpp:537 +msgid "Reading Directory A" +msgstr "Leyendo directorio A" + +#: directorymergewindow.cpp:559 +msgid "Reading Directory B" +msgstr "Leyendo directorio B" + +#: directorymergewindow.cpp:581 +msgid "Reading Directory C" +msgstr "Leyendo directorio C" + +#: directorymergewindow.cpp:607 +msgid "Some subdirectories were not readable in" +msgstr "Algunos subdirectorios no se pudieron leer" + +#: directorymergewindow.cpp:612 +msgid "Check the permissions of the subdirectories." +msgstr "Comprobar los permisos de los subdirectorios." + +#: directorymergewindow.cpp:646 kdiff3.cpp:552 kdiff3.cpp:636 kdiff3.cpp:661 +#: kdiff3.cpp:934 kdiff3.cpp:955 pdiff.cpp:1059 pdiff.cpp:1131 pdiff.cpp:1169 +#: pdiff.cpp:1185 pdiff.cpp:1215 pdiff.cpp:1226 +msgid "Ready." +msgstr "Listo." + +#: directorymergewindow.cpp:660 +msgid "Directory Comparison Status" +msgstr "Estado de la comparación del directorio" + +#: directorymergewindow.cpp:661 +msgid "Number of subdirectories:" +msgstr "Número de subdirectorios:" + +#: directorymergewindow.cpp:662 +msgid "Number of equal files:" +msgstr "Número de archivos iguales:" + +#: directorymergewindow.cpp:663 +msgid "Number of different files:" +msgstr "Número de archivos diferentes:" + +#: directorymergewindow.cpp:666 +msgid "Number of manual merges:" +msgstr "Número de fusiones manuales:" + +#: directorymergewindow.cpp:802 +msgid "This affects all merge operations." +msgstr "Esto afecta a todas las operaciones de fusión." + +#: directorymergewindow.cpp:803 +msgid "Changing All Merge Operations" +msgstr "Cambiando todas las operaciones de fusión" + +#: directorymergewindow.cpp:803 mergeresultwindow.cpp:287 +msgid "C&ontinue" +msgstr "C&ontinuar" + +#: directorymergewindow.cpp:1169 +msgid "Processing " +msgstr "Procesando" + +#: directorymergewindow.cpp:1647 directorymergewindow.cpp:1653 +msgid "To do." +msgstr "Por hacer." + +#: directorymergewindow.cpp:1756 directorymergewindow.cpp:2899 +msgid "Copy A to B" +msgstr "Copiar A a B" + +#: directorymergewindow.cpp:1757 directorymergewindow.cpp:2900 +msgid "Copy B to A" +msgstr "Copiar B a A" + +#: directorymergewindow.cpp:1758 directorymergewindow.cpp:2901 +msgid "Delete A" +msgstr "Eliminar A" + +#: directorymergewindow.cpp:1759 directorymergewindow.cpp:2902 +msgid "Delete B" +msgstr "Eliminar B" + +#: directorymergewindow.cpp:1760 +msgid "Delete A & B" +msgstr "Eliminar A y B" + +#: directorymergewindow.cpp:1761 directorymergewindow.cpp:2904 +msgid "Merge to A" +msgstr "Fusionar a A" + +#: directorymergewindow.cpp:1762 directorymergewindow.cpp:2905 +msgid "Merge to B" +msgstr "Fusionar a B" + +#: directorymergewindow.cpp:1763 +msgid "Merge to A & B" +msgstr "Fusionar a A y B" + +#: directorymergewindow.cpp:1767 directorymergewindow.cpp:2896 +msgid "Delete (if exists)" +msgstr "Eliminar (si existe)" + +#: directorymergewindow.cpp:1768 directorymergewindow.cpp:1769 +#: directorymergewindow.cpp:2895 optiondialog.cpp:809 smalldialogs.cpp:102 +msgid "Merge" +msgstr "Fusionar" + +#: directorymergewindow.cpp:1768 directorymergewindow.cpp:1769 +msgid "Merge (manual)" +msgstr "Fusionar (manual)" + +#: directorymergewindow.cpp:1770 +msgid "Error: Conflicting File Types" +msgstr "Error: Conflicto de tipos de archivo" + +#: directorymergewindow.cpp:1771 +msgid "Error: Dates are equal but files are not." +msgstr "Error: Las fechas son iguales pero los archivos no." + +#: directorymergewindow.cpp:1795 directorymergewindow.cpp:1824 +#: directorymergewindow.cpp:1849 +msgid "This operation is currently not possible." +msgstr "Esta operación no es posible actualmente." + +#: directorymergewindow.cpp:1795 directorymergewindow.cpp:1824 +#: directorymergewindow.cpp:1849 directorymergewindow.cpp:2106 +msgid "Operation Not Possible" +msgstr "Operación imposible" + +#: directorymergewindow.cpp:1888 +msgid "" +"This should never happen: \n" +"\n" +"mergeResultSaved: m_pMFI=0\n" +"\n" +"If you know how to reproduce this, please contact the program author." +msgstr "" +"Esto nunca debe ocurrir: \n" +"\n" +"mergeResultSaved: m_pMFI=0\n" +"\n" +"Si sabe cómo reproducir esto, por favor contacte con el autor del programa." + +#: directorymergewindow.cpp:1888 +msgid "Program Error" +msgstr "Error de programa" + +#: directorymergewindow.cpp:1899 +msgid "" +"An error occurred while copying.\n" +msgstr "" +"Ocurrió un error mientras se copiaba.\n" + +#: directorymergewindow.cpp:1900 directorymergewindow.cpp:2306 +msgid "Merge Error" +msgstr "Error de fusión" + +#: directorymergewindow.cpp:1905 directorymergewindow.cpp:2311 +msgid "Error." +msgstr "Error." + +#: directorymergewindow.cpp:1910 directorymergewindow.cpp:2202 +#: directorymergewindow.cpp:2242 +msgid "Done." +msgstr "Hecho." + +#: directorymergewindow.cpp:1933 +msgid "Not saved." +msgstr "Sin guardar." + +#: directorymergewindow.cpp:1968 +msgid "Unknown merge operation. (This must never happen!)" +msgstr "Operación de fusión desconocida. (Esto no debe ocurrir nunca)" + +#: directorymergewindow.cpp:2000 +msgid "Unknown merge operation." +msgstr "Operación de fusión desconocida." + +#: directorymergewindow.cpp:2015 +msgid "" +"The merge is about to begin.\n" +"\n" +"Choose \"Do it\" if you have read the instructions and know what you are " +"doing.\n" +"Choosing \"Simulate it\" will tell you what would happen.\n" +"\n" +"Be aware that this program still has beta status and there is NO WARRANTY " +"whatsoever! Make backups of your vital data!" +msgstr "" +"La fusión va a comenzar.\n" +"\n" +"Elija «Hacerlo» si ha leido las instrucciones y sabe que está haciendo.\n" +"Eligiendo «Simularlo» le dirá lo que ocurriría.\n" +"\n" +"Tenga en cuenta que este programa todavía es una versión beta y no está " +"totalmente garantizado. ¡Realice copias de seguridad de sus datos vitales!" + +#: directorymergewindow.cpp:2020 +msgid "Starting Merge" +msgstr "Comenzando fusión" + +#: directorymergewindow.cpp:2020 +msgid "Do It" +msgstr "Hacerlo" + +#: directorymergewindow.cpp:2020 +msgid "Simulate It" +msgstr "Simularlo" + +#: directorymergewindow.cpp:2046 +msgid "" +"The highlighted item has a different type in the different directories. Select " +"what to do." +msgstr "" +"El elemento marcado tiene un tipo diferente en los diferentes directorios. " +"Seleccione qué hacer." + +#: directorymergewindow.cpp:2055 +msgid "" +"The modification dates of the file are equal but the files are not. Select what " +"to do." +msgstr "" +"Las fechas de modificación del archivo son iguales pero los archivos no. " +"Seleccionar qué hacer." + +#: directorymergewindow.cpp:2106 +msgid "" +"This operation is currently not possible because directory merge is currently " +"running." +msgstr "" +"Esta operación no es posible actualmente porque se esta ejecutando una fusión " +"de directorios." + +#: directorymergewindow.cpp:2166 +msgid "" +"There was an error in the last step.\n" +"Do you want to continue with the item that caused the error or do you want to " +"skip this item?" +msgstr "" +"Hubo un error en el último paso.\n" +"¿Desea continuar con el elemento que causó el error o desea omitir este " +"elemento?" + +#: directorymergewindow.cpp:2168 +msgid "Continue merge after an error" +msgstr "Continuar la fusión después de un error" + +#: directorymergewindow.cpp:2168 +msgid "Continue With Last Item" +msgstr "Continuar con el último elemento" + +#: directorymergewindow.cpp:2168 +msgid "Skip Item" +msgstr "Omitir elemento" + +#: directorymergewindow.cpp:2202 +msgid "Skipped." +msgstr "Omitido." + +#: directorymergewindow.cpp:2209 directorymergewindow.cpp:2435 +msgid "In progress..." +msgstr "En progreso..." + +#: directorymergewindow.cpp:2257 +msgid "Merge operation complete." +msgstr "Operación de fusión completa." + +#: directorymergewindow.cpp:2257 directorymergewindow.cpp:2260 +msgid "Merge Complete" +msgstr "Fusión completa" + +#: directorymergewindow.cpp:2269 +msgid "" +"Simulated merge complete: Check if you agree with the proposed operations." +msgstr "" +"Fusión simulada completa. Compruebe si está de acuerdo con las operaciones " +"propuestas." + +#: directorymergewindow.cpp:2305 +msgid "" +"An error occurred. Press OK to see detailed information.\n" +msgstr "" +"Ocurrió un error. Pulse OK para ver información mas detallada.\n" + +#: directorymergewindow.cpp:2348 +msgid "Error: While deleting %1: Creating backup failed." +msgstr "" +"Error: Mientras se borraba %1: Falló la creación de copia de seguridad." + +#: directorymergewindow.cpp:2355 +msgid "delete directory recursively( %1 )" +msgstr "eliminar directorio recursivamente( %1 )" + +#: directorymergewindow.cpp:2357 +msgid "delete( %1 )" +msgstr "eliminar( %1 )" + +#: directorymergewindow.cpp:2372 +msgid "Error: delete dir operation failed while trying to read the directory." +msgstr "" +"Error: la operación de eliminación de directorio falló al intentar leer el " +"directorio." + +#: directorymergewindow.cpp:2391 +msgid "Error: rmdir( %1 ) operation failed." +msgstr "Error: la operación rmdir( %1 ) falló." + +#: directorymergewindow.cpp:2401 +msgid "Error: delete operation failed." +msgstr "Error: falló la operación de eliminación." + +#: directorymergewindow.cpp:2427 +msgid "manual merge( %1, %2, %3 -> %4)" +msgstr "fusión manual ( %1, %2, %3 -> %4)" + +#: directorymergewindow.cpp:2430 +msgid "" +" Note: After a manual merge the user should continue by pressing F7." +msgstr "" +" Nota: Después de una fusión manual el usuario puede continuar presionando " +"F7." + +#: directorymergewindow.cpp:2453 +msgid "Error: copy( %1 -> %2 ) failed.Deleting existing destination failed." +msgstr "" +"Error: falló la copia ( %1 -> %2 ). Fallo al eliminar destino existente." + +#: directorymergewindow.cpp:2463 +msgid "copyLink( %1 -> %2 )" +msgstr "copyLink( %1 -> %2 )" + +#: directorymergewindow.cpp:2474 +msgid "Error: copyLink failed: Remote links are not yet supported." +msgstr "Error: falló copyLink. Enlaces remotos no están soportados todavía." + +#: directorymergewindow.cpp:2480 +msgid "Error: copyLink failed." +msgstr "Error: falló copyLink." + +#: directorymergewindow.cpp:2500 +msgid "copy( %1 -> %2 )" +msgstr "copy( %1 -> %2 )" + +#: directorymergewindow.cpp:2526 +msgid "Error during rename( %1 -> %2 ): Cannot delete existing destination." +msgstr "" +"Error durante renombrar( %1 -> %2 ): No se puede eliminar un destino existente." + +#: directorymergewindow.cpp:2532 +msgid "rename( %1 -> %2 )" +msgstr "renombrar( %1 -> %2 )" + +#: directorymergewindow.cpp:2541 +msgid "Error: Rename failed." +msgstr "Error: Fallo al renombrar." + +#: directorymergewindow.cpp:2559 +msgid "Error during makeDir of %1. Cannot delete existing file." +msgstr "" +"Error durante makeDir de %1. No se puede eliminar un archivo existente." + +#: directorymergewindow.cpp:2575 +msgid "makeDir( %1 )" +msgstr "makeDir( %1 )" + +#: directorymergewindow.cpp:2585 +msgid "Error while creating directory." +msgstr "Error al crear el directorio." + +#: directorymergewindow.cpp:2608 directorymergewindow.cpp:2725 +msgid "Dest" +msgstr "Dest" + +#: directorymergewindow.cpp:2612 directorymergewindow.cpp:2650 +msgid "Dir" +msgstr "Dir" + +#: directorymergewindow.cpp:2613 +msgid "Type" +msgstr "Tipo" + +#: directorymergewindow.cpp:2614 +msgid "Size" +msgstr "Tamaño" + +#: directorymergewindow.cpp:2615 +msgid "Attr" +msgstr "Atrib" + +#: directorymergewindow.cpp:2616 +msgid "Last Modification" +msgstr "Última modificación" + +#: directorymergewindow.cpp:2617 +msgid "Link-Destination" +msgstr "Destino del enlace" + +#: directorymergewindow.cpp:2667 +msgid "not available" +msgstr "no disponible" + +#: directorymergewindow.cpp:2687 +msgid "A (Dest): " +msgstr "A (Dest): " + +#: directorymergewindow.cpp:2690 +msgid "A (Base): " +msgstr "A (base): " + +#: directorymergewindow.cpp:2696 +msgid "B (Dest): " +msgstr "B (Dest): " + +#: directorymergewindow.cpp:2704 +msgid "C (Dest): " +msgstr "C (Dest): " + +#: directorymergewindow.cpp:2710 +msgid "Dest: " +msgstr "Dest: " + +#: directorymergewindow.cpp:2775 +msgid "Save Directory Merge State As..." +msgstr "Guardar estado del directorio de fusión como..." + +#: directorymergewindow.cpp:2862 +msgid "Start/Continue Directory Merge" +msgstr "Comenzar/Continuar fusión de directorio" + +#: directorymergewindow.cpp:2863 +msgid "Run Operation for Current Item" +msgstr "Realizar operación para el elemento actual" + +#: directorymergewindow.cpp:2864 +msgid "Compare Selected File" +msgstr "Comparar el archivo seleccionado" + +#: directorymergewindow.cpp:2865 +msgid "Merge Current File" +msgstr "Fusionar archivo actual" + +#: directorymergewindow.cpp:2866 +msgid "Fold All Subdirs" +msgstr "Plegar todos los subdirectorios" + +#: directorymergewindow.cpp:2867 +msgid "Unfold All Subdirs" +msgstr "Desplegar todos los subdirectorios" + +#: directorymergewindow.cpp:2871 +msgid "Choose A for All Items" +msgstr "Elegir A para todos los elementos" + +#: directorymergewindow.cpp:2872 +msgid "Choose B for All Items" +msgstr "Elegir B para todos los elementos" + +#: directorymergewindow.cpp:2873 +msgid "Choose C for All Items" +msgstr "Elegir C para todos los elementos" + +#: directorymergewindow.cpp:2874 +msgid "Auto-Choose Operation for All Items" +msgstr "Auto-elegir operación para todos los elementos" + +#: directorymergewindow.cpp:2875 +msgid "No Operation for All Items" +msgstr "Ninguna operación para todos los elementos" + +#: directorymergewindow.cpp:2880 +msgid "Show Identical Files" +msgstr "Mostrar archivos idénticos" + +#: directorymergewindow.cpp:2881 +msgid "Show Different Files" +msgstr "Mostrar archivos diferentes" + +#: directorymergewindow.cpp:2882 +msgid "Show Files only in A" +msgstr "Mostrar archivos solo en A" + +#: directorymergewindow.cpp:2883 +msgid "Show Files only in B" +msgstr "Mostrar archivos solo en B" + +#: directorymergewindow.cpp:2884 +msgid "Show Files only in C" +msgstr "Mostrar archivos solo en C" + +#: directorymergewindow.cpp:2888 +msgid "Compare Explicitly Selected Files" +msgstr "Comparar explícitamente los archivos seleccionados" + +#: directorymergewindow.cpp:2889 +msgid "Merge Explicitly Selected Files" +msgstr "Fusionar explícitamente los archivos seleccionados" + +#: directorymergewindow.cpp:2891 directorymergewindow.cpp:2898 +msgid "Do Nothing" +msgstr "No hacer nada" + +#: directorymergewindow.cpp:2892 +msgid "A" +msgstr "A" + +#: directorymergewindow.cpp:2893 +msgid "B" +msgstr "B" + +#: directorymergewindow.cpp:2894 +msgid "C" +msgstr "C" + +#: directorymergewindow.cpp:2903 +msgid "Delete A && B" +msgstr "Eliminar A y B" + +#: directorymergewindow.cpp:2906 +msgid "Merge to A && B" +msgstr "Fusionar a A y B" + +#: fileaccess.cpp:595 +msgid "" +"While trying to make a backup, deleting an older backup failed. \n" +"Filename: " +msgstr "" +"Mientras se intentaba hacer una copia de seguridad, se produjo un fallo al " +"eliminar una copia de seguridad anterior.\n" +"Nombre de archivo: " + +#: fileaccess.cpp:602 +msgid "" +"While trying to make a backup, renaming failed. \n" +"Filenames: " +msgstr "" +"Mientras se intentaba hacer una copia de seguridad, se produjo un fallo al " +"renombrar.\n" +"Nombres de archivos: " + +#: fileaccess.cpp:624 +#, c-format +msgid "Getting file status: %1" +msgstr "Obteniendo estado de archivo: %1" + +#: fileaccess.cpp:667 +#, c-format +msgid "Reading file: %1" +msgstr "Leyendo archivo: %1" + +#: fileaccess.cpp:703 +#, c-format +msgid "Writing file: %1" +msgstr "Escribiendo archivo: %1" + +#: fileaccess.cpp:731 +msgid "Out of memory" +msgstr "Fuera de memoria" + +#: fileaccess.cpp:766 +#, c-format +msgid "Making directory: %1" +msgstr "Creando directorio: %1" + +#: fileaccess.cpp:786 +#, c-format +msgid "Removing directory: %1" +msgstr "Eliminando directorio: %1" + +#: fileaccess.cpp:801 +#, c-format +msgid "Removing file: %1" +msgstr "Eliminando archivo: %1" + +#: fileaccess.cpp:817 +msgid "Creating symbolic link: %1 -> %2" +msgstr "Creando enlace simbólico: %1 -> %2" + +#: fileaccess.cpp:843 +msgid "Renaming file: %1 -> %2" +msgstr "Renombrando archivo: %1 -> %2" + +#: fileaccess.cpp:879 +msgid "Copying file: %1 -> %2" +msgstr "Copiando archivo: %1 -> %2" + +#: fileaccess.cpp:893 +#, c-format +msgid "" +"Error during file copy operation: Opening file for reading failed. Filename: %1" +msgstr "" +"Error durante la operación de copia de archivo. Falló al abrir archivo para " +"lectura. Nombre de archivo: %1" + +#: fileaccess.cpp:899 +#, c-format +msgid "" +"Error during file copy operation: Opening file for writing failed. Filename: %1" +msgstr "" +"Error durante la operación de copia de archivo. Falló al abrir archivo para " +"escritura. Nombre de archivo: %1" + +#: fileaccess.cpp:914 +#, c-format +msgid "Error during file copy operation: Reading failed. Filename: %1" +msgstr "" +"Error durante la operación de copia de archivo. Falló al leer. Nombre de " +"archivo: %1" + +#: fileaccess.cpp:923 +#, c-format +msgid "Error during file copy operation: Writing failed. Filename: %1" +msgstr "" +"Error durante la operación de copia de archivo. Falló al escribir. Nombre de " +"archivo: %1" + +#: fileaccess.cpp:1219 +msgid "Reading directory: " +msgstr "Leyendo directorio: " + +#: fileaccess.cpp:1348 +#, c-format +msgid "Listing directory: %1" +msgstr "Listando directorio: %1" + +#: kdiff3.cpp:142 +msgid "Current Configuration:" +msgstr "Configuración actual:" + +#: kdiff3.cpp:147 +msgid "Config Option Error:" +msgstr "Configuración de la opción de error:" + +#: kdiff3.cpp:187 +msgid "Option --auto used, but no output file specified." +msgstr "Opción --auto usada, pero sin archivo de salida especificado." + +#: kdiff3.cpp:323 +msgid "Option --auto ignored for directory comparison." +msgstr "Opción --auto ignorada para comparación de directorio." + +#: kdiff3.cpp:359 +msgid "Saving failed." +msgstr "Fallo al guardar." + +#: kdiff3.cpp:386 pdiff.cpp:1041 pdiff.cpp:1112 +msgid "Opening of these files failed:" +msgstr "Fallo al abrir estos archivos:" + +#: kdiff3.cpp:395 +msgid "File Open Error" +msgstr "Error de apertura de archivo" + +#: kdiff3.cpp:418 +msgid "Opens documents for comparison..." +msgstr "Abre documentos para comparación..." + +#: kdiff3.cpp:423 +msgid "Saves the merge result. All conflicts must be solved!" +msgstr "" +"Guarda el resultado de la fusión ¡Todos los conflictos deben estar resueltos!" + +#: kdiff3.cpp:425 +msgid "Saves the current document as..." +msgstr "Guarda el documento actual como..." + +#: kdiff3.cpp:427 +msgid "Print the differences" +msgstr "Imprimir las diferencias" + +#: kdiff3.cpp:429 +msgid "Quits the application" +msgstr "Sale de la aplicación" + +#: kdiff3.cpp:431 +msgid "Cuts the selected section and puts it to the clipboard" +msgstr "Corta la sección seleccionada y la pega en el portapapeles" + +#: kdiff3.cpp:433 +msgid "Copies the selected section to the clipboard" +msgstr "Copia la sección seleccionada al portapapeles" + +#: kdiff3.cpp:435 +msgid "Pastes the clipboard contents to actual position" +msgstr "Pega el contenido del portapapeles en la posición actual" + +#: kdiff3.cpp:437 +msgid "Select everything in current window" +msgstr "Seleccionar todo en la ventana actual" + +#: kdiff3.cpp:439 +msgid "Search for a string" +msgstr "Buscar por una cadena" + +#: kdiff3.cpp:441 +msgid "Search again for the string" +msgstr "Buscar de nuevo la cadena" + +#: kdiff3.cpp:443 +msgid "Enables/disables the toolbar" +msgstr "Activar/desactivar la barra de herramientas" + +#: kdiff3.cpp:445 +msgid "Enables/disables the statusbar" +msgstr "Activar/desactivar la barra de estado" + +#: kdiff3.cpp:449 +msgid "Configure KDiff3..." +msgstr "Configurar KDiff3..." + +#: kdiff3.cpp:470 +msgid "Go to Current Delta" +msgstr "Ir al Delta actual" + +#: kdiff3.cpp:471 +msgid "Go to First Delta" +msgstr "Ir al primer Delta" + +#: kdiff3.cpp:472 +msgid "Go to Last Delta" +msgstr "Ir al último Delta" + +#: kdiff3.cpp:473 +msgid "(Skips white space differences when \"Show White Space\" is disabled.)" +msgstr "" +"(Omite diferencias de espacios en blanco cuando «Mostrar espacios en blanco» " +"esta desactivado.)" + +#: kdiff3.cpp:474 +msgid "" +"(Does not skip white space differences even when \"Show White Space\" is " +"disabled.)" +msgstr "" +"(No omite diferencias de espacios en blanco incluso cuando «Mostrar espacios en " +"blanco» esta desactivado)" + +#: kdiff3.cpp:475 +msgid "Go to Previous Delta" +msgstr "Ir al Delta anterior" + +#: kdiff3.cpp:477 +msgid "Go to Next Delta" +msgstr "Ir al siguiente Delta" + +#: kdiff3.cpp:479 +msgid "Go to Previous Conflict" +msgstr "Ir al conflicto anterior" + +#: kdiff3.cpp:481 +msgid "Go to Next Conflict" +msgstr "Ir al conflicto siguiente" + +#: kdiff3.cpp:483 +msgid "Go to Previous Unsolved Conflict" +msgstr "Ir al conflicto anterior sin resolver" + +#: kdiff3.cpp:485 +msgid "Go to Next Unsolved Conflict" +msgstr "Ir al conflicto siguiente sin resolver" + +#: kdiff3.cpp:487 +msgid "Select Line(s) From A" +msgstr "Seleccionar linea(s) de A" + +#: kdiff3.cpp:488 +msgid "Select Line(s) From B" +msgstr "Seleccionar linea(s) de B" + +#: kdiff3.cpp:489 +msgid "Select Line(s) From C" +msgstr "Seleccionar linea(s) de C" + +#: kdiff3.cpp:490 +msgid "Automatically Go to Next Unsolved Conflict After Source Selection" +msgstr "" +"Automáticamente Ir al conflicto siguiente sin resolver después de una selección " +"origen" + +#: kdiff3.cpp:492 +msgid "Show Space && Tabulator Characters for Differences" +msgstr "Mostrar carácteres espacio y tabulador por diferencias" + +#: kdiff3.cpp:493 +msgid "Show White Space" +msgstr "Mostar espacio en blanco" + +#: kdiff3.cpp:495 +msgid "Show Line Numbers" +msgstr "Mostar número de lineas" + +#: kdiff3.cpp:496 +msgid "Choose A Everywhere" +msgstr "Elegir A en cualquier sitio" + +#: kdiff3.cpp:497 +msgid "Choose B Everywhere" +msgstr "Elegir B en cualquier sitio" + +#: kdiff3.cpp:498 +msgid "Choose C Everywhere" +msgstr "Elegir C en cualquier sitio" + +#: kdiff3.cpp:499 +msgid "Choose A for All Unsolved Conflicts" +msgstr "Elegir A para todos los conflictos sin resolver" + +#: kdiff3.cpp:500 +msgid "Choose B for All Unsolved Conflicts" +msgstr "Elegir B para todos los conflictos sin resolver" + +#: kdiff3.cpp:501 +msgid "Choose C for All Unsolved Conflicts" +msgstr "Elegir C para todos los conflictos sin resolver" + +#: kdiff3.cpp:502 +msgid "Choose A for All Unsolved Whitespace Conflicts" +msgstr "Elegir A para todos los conflictos de espacios en blanco sin resolver" + +#: kdiff3.cpp:503 +msgid "Choose B for All Unsolved Whitespace Conflicts" +msgstr "Elegir B para todos los conflictos de espacios en blanco sin resolver" + +#: kdiff3.cpp:504 +msgid "Choose C for All Unsolved Whitespace Conflicts" +msgstr "Elegir C para todos los conflictos de espacios en blanco sin resolver" + +#: kdiff3.cpp:505 +msgid "Automatically Solve Simple Conflicts" +msgstr "Resolver automáticamente conflictos simples" + +#: kdiff3.cpp:506 +msgid "Set Deltas to Conflicts" +msgstr "Establecer Deltas a conflictos" + +#: kdiff3.cpp:507 +msgid "Run Regular Expression Auto Merge" +msgstr "Ejecutar expresión regular de fusión automática" + +#: kdiff3.cpp:508 +msgid "Automatically Solve History Conflicts" +msgstr "Resolver automáticamente conflictos históricamente" + +#: kdiff3.cpp:509 +msgid "Split Diff At Selection" +msgstr "Dividir Diff en la selección" + +#: kdiff3.cpp:510 +msgid "Join Selected Diffs" +msgstr "Unir las diferencias seleccionadas" + +#: kdiff3.cpp:512 +msgid "Show Window A" +msgstr "Mostar ventana A" + +#: kdiff3.cpp:513 +msgid "Show Window B" +msgstr "Mostar ventana B" + +#: kdiff3.cpp:514 +msgid "Show Window C" +msgstr "Mostar ventana C" + +#: kdiff3.cpp:515 kdiff3.cpp:526 +msgid "Focus Next Window" +msgstr "Ir a la siguiente ventana" + +#: kdiff3.cpp:517 +msgid "Normal Overview" +msgstr "Vista normal" + +#: kdiff3.cpp:518 +msgid "A vs. B Overview" +msgstr "Vista A vs. B" + +#: kdiff3.cpp:519 +msgid "A vs. C Overview" +msgstr "Vista A vs. C" + +#: kdiff3.cpp:520 +msgid "B vs. C Overview" +msgstr "Vista B vs. C" + +#: kdiff3.cpp:521 +msgid "Word Wrap Diff Windows" +msgstr "Ventanas de diferencias con ajuste de palabra" + +#: kdiff3.cpp:522 +msgid "Add Manual Diff Alignment" +msgstr "Añadir alineación manual de las diferencias" + +#: kdiff3.cpp:523 +msgid "Clear All Manual Diff Alignments" +msgstr "Borrar todas las alineaciones de diferencias manuales" + +#: kdiff3.cpp:528 +msgid "Focus Prev Window" +msgstr "Ir a la ventana anterior" + +#: kdiff3.cpp:529 +msgid "Toggle Split Orientation" +msgstr "Cambiar orientación de división" + +#: kdiff3.cpp:531 +msgid "Dir && Text Split Screen View" +msgstr "Vista de la división de pantalla Dir y Texto" + +#: kdiff3.cpp:533 +msgid "Toggle Between Dir && Text View" +msgstr "Cambiar entre vista Dir y Texto" + +#: kdiff3.cpp:582 pdiff.cpp:1712 +msgid "The merge result hasn't been saved." +msgstr "El resultado de la fusión no ha sido guardado." + +#: kdiff3.cpp:583 +msgid "Save && Quit" +msgstr "Guardar y salir" + +#: kdiff3.cpp:583 +msgid "Quit Without Saving" +msgstr "Salir sin guardar" + +#: kdiff3.cpp:591 pdiff.cpp:1721 +msgid "Saving the merge result failed." +msgstr "Falló al guardar el resultado de la fusión." + +#: kdiff3.cpp:602 pdiff.cpp:978 +msgid "" +"You are currently doing a directory merge. Are you sure, you want to abort?" +msgstr "" +"Actualmente está haciendo una fusión de directorio. ¿Está seguro de que desea " +"abandonar?" + +#: kdiff3.cpp:625 +msgid "Saving file..." +msgstr "Guardando archivo..." + +#: kdiff3.cpp:642 +msgid "Saving file with a new filename..." +msgstr "Guardando archivo con un nuevo nombre..." + +#: kdiff3.cpp:732 +msgid "Printing..." +msgstr "Imprimiendo..." + +#: kdiff3.cpp:738 kdiff3.cpp:900 +msgid "Printing aborted." +msgstr "Impresión abandonada." + +#: kdiff3.cpp:870 +msgid "Selection" +msgstr "Selección" + +#: kdiff3.cpp:896 +msgid "Printing completed." +msgstr "Impresión terminada." + +#: kdiff3.cpp:906 +msgid "Exiting..." +msgstr "Saliendo..." + +#: kdiff3.cpp:918 +msgid "Toggling toolbar..." +msgstr "Cambiando barra de herramientas..." + +#: kdiff3.cpp:939 +msgid "Toggle the statusbar..." +msgstr "Cambiar la barra de estado..." + +#: kdiff3_part.cpp:155 kdiff3_part.cpp:224 +msgid "Couldn't find files for comparison." +msgstr "No se pudo encontrar archivos para comparar." + +#: kdiff3_part.cpp:291 +msgid "KDiff3Part" +msgstr "KDiff3Part" + +#: kdiff3_shell.cpp:78 +msgid "" +"Could not find our part!\n" +"This usually happens due to an installation problem. Please read the " +"README-file in the source package for details." +msgstr "" +"No pudo encontrar nuestra parte!\n" +"Esto normalmente ocurre debido a un problema de instalación. Por favor lea el " +"archivo README en el paquete fuente para mas detalles." + +#: main.cpp:35 +msgid "Tool for Comparison and Merge of Files and Directories" +msgstr "Herramienta para comparación y fusión de archivos y directorios" + +#: main.cpp:40 +msgid "Merge the input." +msgstr "Fusionar la entrada." + +#: main.cpp:42 +msgid "Explicit base file. For compatibility with certain tools." +msgstr "Archivo base explícito. Para compatibilidad con algunas herramientas." + +#: main.cpp:44 +msgid "Output file. Implies -m. E.g.: -o newfile.txt" +msgstr "Archivo de salida. Implica -m. E.g.: -o newfile.txt" + +#: main.cpp:45 +msgid "Output file, again. (For compatibility with certain tools.)" +msgstr "" +"Archivo de salida, de nuevo. (Para compatibilidad con algunas herramientas.)" + +#: main.cpp:46 +msgid "No GUI if all conflicts are auto-solvable. (Needs -o file)" +msgstr "" +"Ninguna interfaz si todos los conflictos son auto-resolvibles. (necesita " +"archivo -o)" + +#: main.cpp:47 +msgid "Don't solve conflicts automatically. (For compatibility...)" +msgstr "No resolver conflictos automáticamente (Por compatibilidad...)" + +#: main.cpp:48 +msgid "Visible name replacement for input file 1 (base)." +msgstr "Reemplazamiento visible de nombre para el archivo de entrada 1 (base)." + +#: main.cpp:49 +msgid "Visible name replacement for input file 2." +msgstr "Reemplazamiento visible de nombre para el archivo de entrada 2." + +#: main.cpp:50 +msgid "Visible name replacement for input file 3." +msgstr "Reemplazamiento visible de nombre para el archivo de entrada 3." + +#: main.cpp:52 +msgid "Alternative visible name replacement. Supply this once for every input." +msgstr "" +"Reemplazamiento alternativo visible de nombre. Facilitarlo una vez por cada " +"entrada." + +#: main.cpp:53 +msgid "" +"Override a config setting. Use once for every setting. E.g.: --cs " +"\"AutoAdvance=1\"" +msgstr "" +"Sustituir una opción de configuración. Utilícelo para cada configuración. P. " +"ej.: --cs \"AutoAdvance=1\"" + +#: main.cpp:54 +msgid "Show list of config settings and current values." +msgstr "Mostrar una lista de las configuraciones y valores actuales." + +#: main.cpp:55 +msgid "Use a different config file." +msgstr "Utilizar un archivo de configuración diferente." + +#: main.cpp:59 +msgid "file1 to open (base, if not specified via --base)" +msgstr "archivo1 a abrir (base, si no se ha especificado via --base)" + +#: main.cpp:60 +msgid "file2 to open" +msgstr "archivo2 a abrir" + +#: main.cpp:61 +msgid "file3 to open" +msgstr "archivo3 a abrir" + +#: main.cpp:93 +msgid "Ignored. (User defined.)" +msgstr "Ignorada (definida por el usuario)" + +#. i18n: file kdiff3_part.rc line 16 +#: main.cpp:173 rc.cpp:9 +#, no-c-format +msgid "KDiff3" +msgstr "KDiff3" + +#: main.cpp:186 +msgid "+ Many thanks to those who reported bugs and contributed ideas!" +msgstr "" +"+ ¡Muchas gracias a aquellos que han informado de errores y han contribuido con " +"ideas!" + +#: mergeresultwindow.cpp:136 mergeresultwindow.cpp:939 +#: mergeresultwindow.cpp:953 mergeresultwindow.cpp:965 +#: mergeresultwindow.cpp:977 +msgid "Number of remaining unsolved conflicts: %1 (of which %2 are whitespace)" +msgstr "" +"Número de conflictos sin resolver: %1 (%2 de los cuales son espacios en blanco)" + +#: mergeresultwindow.cpp:285 +msgid "" +"The output has been modified.\n" +"If you continue your changes will be lost." +msgstr "" +"La salida ha sido modificada.\n" +"Si continua, sus cambios se perderán." + +#: mergeresultwindow.cpp:797 pdiff.cpp:511 +msgid "All input files are binary equal." +msgstr "Todos los archivos de entrada son binariamente iguales." + +#: mergeresultwindow.cpp:799 +msgid "All input files contain the same text." +msgstr "Todos los archivos de entrada contienen el mismo texto." + +#: mergeresultwindow.cpp:801 +msgid "" +"Files A and B are binary equal.\n" +msgstr "" +"Los archivos A y B son binariamente iguales.\n" + +#: mergeresultwindow.cpp:802 +msgid "" +"Files A and B have equal text. \n" +msgstr "" +"Los archivos A y B tiene el mismo texto. \n" + +#: mergeresultwindow.cpp:803 +msgid "" +"Files A and C are binary equal.\n" +msgstr "" +"Los archivos A y C son binariamente iguales.\n" + +#: mergeresultwindow.cpp:804 +msgid "" +"Files A and C have equal text. \n" +msgstr "" +"Los archivos A y C tiene el mismo texto. \n" + +#: mergeresultwindow.cpp:805 +msgid "" +"Files B and C are binary equal.\n" +msgstr "" +"Los archivos B y C son binariamente iguales.\n" + +#: mergeresultwindow.cpp:806 +msgid "" +"Files B and C have equal text. \n" +msgstr "" +"Los archivos B y C tiene el mismo texto. \n" + +#: mergeresultwindow.cpp:812 +msgid "Total number of conflicts: " +msgstr "Número total de conflictos: " + +#: mergeresultwindow.cpp:813 +msgid "" +"\n" +"Nr of automatically solved conflicts: " +msgstr "" +"\n" +"Nº de conflictos resueltos automáticamente: " + +#: mergeresultwindow.cpp:814 +msgid "" +"\n" +"Nr of unsolved conflicts: " +msgstr "" +"\n" +"Nº de conflictos sin resolver: " + +#: mergeresultwindow.cpp:816 +msgid "Conflicts" +msgstr "Conflictos" + +#: mergeresultwindow.cpp:1652 +msgid "" +msgstr "" + +#: mergeresultwindow.cpp:1660 +msgid "" +msgstr "" + +#: mergeresultwindow.cpp:1662 mergeresultwindow.cpp:2427 +msgid "" +msgstr "" + +#: mergeresultwindow.cpp:2635 +msgid "" +"Not all conflicts are solved yet.\n" +"File not saved.\n" +msgstr "" +"No todos los conflictos se han resuelto ya.\n" +"Archivo sin guardar.\n" + +#: mergeresultwindow.cpp:2637 +msgid "Conflicts Left" +msgstr "Conflictos que faltan" + +#: mergeresultwindow.cpp:2649 +msgid "" +"\n" +"\n" +"Creating backup failed. File not saved." +msgstr "" +"\n" +"\n" +"Fallo al crear copia de seguridad. Archivo sin guardar." + +#: mergeresultwindow.cpp:2649 mergeresultwindow.cpp:2689 +msgid "File Save Error" +msgstr "Error al guardar archivo" + +#: mergeresultwindow.cpp:2689 +msgid "Error while writing." +msgstr "Error al escribir." + +#: mergeresultwindow.cpp:3020 +msgid "Output" +msgstr "Salida" + +#: mergeresultwindow.cpp:3032 mergeresultwindow.cpp:3139 +msgid "[Modified]" +msgstr "[Modificado]" + +#: mergeresultwindow.cpp:3039 +msgid "Encoding for saving" +msgstr "Codificación para guardar" + +#: mergeresultwindow.cpp:3075 mergeresultwindow.cpp:3081 +#: mergeresultwindow.cpp:3087 +msgid "Codec from" +msgstr "Códec de" + +#: optiondialog.cpp:362 +msgid "Unicode, 8 bit" +msgstr "Unicode, 8 bit" + +#: optiondialog.cpp:363 +msgid "Unicode" +msgstr "Unicode" + +#: optiondialog.cpp:364 +msgid "Latin1" +msgstr "Latin1" + +#: optiondialog.cpp:383 +msgid "Change this if non-ASCII characters are not displayed correctly." +msgstr "Cambier esto si ningún carácter ASCII se muestra correctamente." + +#: optiondialog.cpp:510 +msgid "Editor & Diff Output Font" +msgstr "Fuente para el editor y salida diff" + +#: optiondialog.cpp:531 +msgid "Italic font for deltas" +msgstr "Fuenta cursiva para deltas" + +#: optiondialog.cpp:534 +msgid "" +"Selects the italic version of the font for differences.\n" +"If the font doesn't support italic characters, then this does nothing." +msgstr "" +"Selecciona la version cursiva de la fuente para las diferencias.\n" +"Si la fuente no soporta carácteres cursivos, entonces esto no hace nada." + +#: optiondialog.cpp:542 +msgid "Color" +msgstr "Color" + +#: optiondialog.cpp:542 +msgid "Colors Settings" +msgstr "Preferencias de color" + +#: optiondialog.cpp:556 +msgid "Editor and Diff Views:" +msgstr "Vistas del editor y las diferencias:" + +#: optiondialog.cpp:564 +msgid "Foreground color:" +msgstr "Color de primer plano:" + +#: optiondialog.cpp:570 +msgid "Background color:" +msgstr "Color de fondo:" + +#: optiondialog.cpp:578 +msgid "Diff background color:" +msgstr "Color de fondo de diff:" + +#: optiondialog.cpp:585 +msgid "Color A:" +msgstr "Color A:" + +#: optiondialog.cpp:592 +msgid "Color B:" +msgstr "Color B:" + +#: optiondialog.cpp:599 +msgid "Color C:" +msgstr "Color C:" + +#: optiondialog.cpp:605 +msgid "Conflict color:" +msgstr "Color de conflicto:" + +#: optiondialog.cpp:612 +msgid "Current range background color:" +msgstr "Rango actual de color de fondo:" + +#: optiondialog.cpp:619 +msgid "Current range diff background color:" +msgstr "Rango actual de color de fondo de diff:" + +#: optiondialog.cpp:625 +msgid "Color for manually aligned difference ranges:" +msgstr "Color para los rangos de diferencias alineadas manualmente:" + +#: optiondialog.cpp:630 +msgid "Directory Comparison View:" +msgstr "Vista de comparación de directorio:" + +#: optiondialog.cpp:636 +msgid "Newest file color:" +msgstr "Color del archivo más nuevo:" + +#: optiondialog.cpp:639 +msgid "" +"Changing this color will only be effective when starting the next directory " +"comparison." +msgstr "" +"Cambiar este color solo será efectivo cuando inicie de nuevo la comparación de " +"directorios." + +#: optiondialog.cpp:644 +msgid "Oldest file color:" +msgstr "Color del archivo más antiguo:" + +#: optiondialog.cpp:651 +msgid "Middle age file color:" +msgstr "Color de los archivos intermedios:" + +#: optiondialog.cpp:658 +msgid "Color for missing files:" +msgstr "Color de los archivos que faltan:" + +#: optiondialog.cpp:670 +msgid "Editor" +msgstr "Editor" + +#: optiondialog.cpp:670 +msgid "Editor Behavior" +msgstr "Comportamiento del editor" + +#: optiondialog.cpp:680 +msgid "Tab inserts spaces" +msgstr "El tabulador inserta espacios" + +#: optiondialog.cpp:683 +msgid "" +"On: Pressing tab generates the appropriate number of spaces.\n" +"Off: A Tab-character will be inserted." +msgstr "" +"On: Pulsando el tabulador genera el número apropiado de espacios.\n" +"Off: Se insertará un carácter de tabulador." + +#: optiondialog.cpp:689 +msgid "Tab size:" +msgstr "Tamaño del tabulador:" + +#: optiondialog.cpp:694 +msgid "Auto indentation" +msgstr "Auto identación" + +#: optiondialog.cpp:697 +msgid "" +"On: The indentation of the previous line is used for a new line.\n" +msgstr "" +"On: Se usará la identación de la línea anterior para una nueva línea.\n" + +#: optiondialog.cpp:701 +msgid "Auto copy selection" +msgstr "Auto-copiar selección" + +#: optiondialog.cpp:704 +msgid "" +"On: Any selection is immediately written to the clipboard.\n" +"Off: You must explicitely copy e.g. via Ctrl-C." +msgstr "" +"On: Se copiará inmediátamente cualquier selección al portapapeles.\n" +"Off: Debe copiar explícitamente p.e. via Ctrl-C." + +#: optiondialog.cpp:709 +msgid "Line end style:" +msgstr "Estilo linea final:" + +#: optiondialog.cpp:721 +msgid "" +"Sets the line endings for when an edited file is saved.\n" +"DOS/Windows: CR+LF; UNIX: LF; with CR=0D, LF=0A" +msgstr "" +"Establece los finales de linea para cuando un archivo editado se guarde.\n" +"DOS/Windows: CR+LF; Unix: LF; con CR=0D, LF=0A" + +#: optiondialog.cpp:732 +msgid "Diff" +msgstr "Diff" + +#: optiondialog.cpp:732 +msgid "Diff Settings" +msgstr "Preferencias de Diff" + +#: optiondialog.cpp:743 +msgid "Preserve carriage return" +msgstr "Conservar retorno de carro" + +#: optiondialog.cpp:746 +msgid "" +"Show carriage return characters '\\r' if they exist.\n" +"Helps to compare files that were modified under different operating systems." +msgstr "" +"Mostrar carácteres de retorno de caro '\\r' si existen.\n" +"Ayuda a comparar archivos que fueron modificados bajo diferentes sistemas " +"operativos." + +#: optiondialog.cpp:751 +msgid "Ignore numbers" +msgstr "Ignorar números" + +#: optiondialog.cpp:754 +msgid "" +"Ignore number characters during line matching phase. (Similar to Ignore white " +"space.)\n" +"Might help to compare files with numeric data." +msgstr "" +"Ignorar carácteres numéricos durante la fase combinación de linea. (Similar a " +"ignorar espacios en blanco.)\n" +"Puede ayudar a comparar archivos con datos numéricos." + +#: optiondialog.cpp:759 +msgid "Ignore C/C++ comments" +msgstr "Ignorar comentarios de C/C++" + +#: optiondialog.cpp:761 +msgid "Treat C/C++ comments like white space." +msgstr "Trata los comentarios de C/C++ como espacios en blanco." + +#: optiondialog.cpp:765 +msgid "Ignore case" +msgstr "Ignorar mayúsculas" + +#: optiondialog.cpp:768 +msgid "Treat case differences like white space changes. ('a'<=>'A')" +msgstr "" +"Tratar las diferencias de mayúsculas como cambios de espacios en blanco ('a'<=>" +"'A')" + +#: optiondialog.cpp:772 +msgid "Preprocessor command:" +msgstr "Orden del preprocesador:" + +#: optiondialog.cpp:776 +msgid "User defined pre-processing. (See the docs for details.)" +msgstr "" +"Usar pre-procesamiento definido. (Ver los documentos para mas detalles.)" + +#: optiondialog.cpp:779 +msgid "Line-matching preprocessor command:" +msgstr "Orden de preprocesador de coincidencia de línea:" + +#: optiondialog.cpp:783 +msgid "" +"This pre-processor is only used during line matching.\n" +"(See the docs for details.)" +msgstr "" +"Este pre-procesador sólo se usa durante la combinación de línea.\n" +"(Ver documentos para mas detalles.)" + +#: optiondialog.cpp:786 +msgid "Try hard (slower)" +msgstr "Intentar mas a fondo (mas lento)" + +#: optiondialog.cpp:789 +msgid "" +"Enables the --minimal option for the external diff.\n" +"The analysis of big files will be much slower." +msgstr "" +"Activa la --opción mínima para el diff externo.\n" +"El análisis de archivos grandos será mas lento." + +#: optiondialog.cpp:794 +msgid "Auto advance delay (ms):" +msgstr "Retardo auto avanzado (ms):" + +#: optiondialog.cpp:799 +msgid "" +"When in Auto-Advance mode the result of the current selection is shown \n" +"for the specified time, before jumping to the next conflict. Range: 0-2000 ms" +msgstr "" +"Cuando en modo auto-avanzado el resultado de la selección actual se muestran " +"para el tiempo especificado, antes de saltar al siguiente conflicto. Rango: " +"0-2000 ms" + +#: optiondialog.cpp:809 +msgid "Merge Settings" +msgstr "Preferencias de fusión" + +#: optiondialog.cpp:822 +msgid "White space 2-file merge default:" +msgstr "Fusionar espacios en blanco de dos archivos de forma predeterminada:" + +#: optiondialog.cpp:826 optiondialog.cpp:839 +msgid "Manual Choice" +msgstr "Elección manual" + +#: optiondialog.cpp:830 optiondialog.cpp:844 +msgid "" +"Allow the merge algorithm to automatically select an input for white-space-only " +"changes." +msgstr "" +"Permitir el algoritmo de fusión para seleccionar automáticamente una entrada " +"para sólo los cambios de espacios en blanco." + +#: optiondialog.cpp:835 +msgid "White space 3-file merge default:" +msgstr "Fusionar espacios en blanco de tres archivos de forma predeterminada:" + +#: optiondialog.cpp:849 +msgid "Automatic Merge Regular Expression" +msgstr "Expresión regular de fusión automática" + +#: optiondialog.cpp:858 smalldialogs.cpp:397 +msgid "Auto merge regular expression:" +msgstr "Expresión regular de fusión automática:" + +#: optiondialog.cpp:862 +msgid "" +"Regular expression for lines where KDiff3 should automatically choose one " +"source.\n" +"When a line with a conflict matches the regular expression then\n" +"- if available - C, otherwise B will be chosen." +msgstr "" +"Expresión regular para las líneas en las que KDiff3 debería seleccionar una " +"fuente de forma automática.\n" +"Cuando una línea con un conflicto coincide con la expresión regular se elegirá\n" +"- si está disponible - C, sino B." + +#: optiondialog.cpp:868 +msgid "Run regular expression auto merge on merge start" +msgstr "" +"Ejecutar la expresión regular de fusión automática al iniciar la fusión" + +#: optiondialog.cpp:870 +msgid "" +"Run the merge for auto merge regular expressions\n" +"immediately when a merge starts.\n" +msgstr "" +"Ejecuta la fusión para las expresiones regulares de fusión automática\n" +"de forma inmediata cuando se inicia la fusión.\n" + +#: optiondialog.cpp:875 +msgid "Version Control History Merging" +msgstr "Fusionado del historial de control de versiones" + +#: optiondialog.cpp:884 smalldialogs.cpp:424 +msgid "History start regular expression:" +msgstr "Expresión regular de inicio del historial:" + +#: optiondialog.cpp:888 +msgid "" +"Regular expression for the start of the version control history entry.\n" +"Usually this line contains the \"$Log$\"-keyword.\n" +"Default value: \".*\\$Log.*\\$.*\"" +msgstr "" +"Expresión regular para el inicio de la entrada del historial del control de " +"versión.\n" +"Esta línea suele contener la palabra clave «$Log$».\n" +"El valor predeterminado es: «.*\\$Log.*\\$.*»" + +#: optiondialog.cpp:894 smalldialogs.cpp:453 +msgid "History entry start regular expression:" +msgstr "Expresión regular de inicio de la entrada del historial:" + +#: optiondialog.cpp:906 +msgid "" +"A version control history entry consists of several lines.\n" +"Specify the regular expression to detect the first line (without the leading " +"comment).\n" +"Use parentheses to group the keys you want to use for sorting.\n" +"If left empty, then KDiff3 assumes that empty lines separate history entries.\n" +"See the documentation for details." +msgstr "" +"Una entrada del historial de control de versión está formada por varias " +"líneas.\n" +"Especifique la expresión regular utilizada para detectar la primera línea (sin " +"el comentario inicial).\n" +"Utilice paréntesis para agrupar las claves de ordenación que desee utilizar.\n" +"Si lo deja vacío, KDiff3 asumirá que las líneas vacías separan las entradas del " +"historial.\n" +"Consulte la documentación para obtener más detalles." + +#: optiondialog.cpp:914 +msgid "History merge sorting" +msgstr "Ordenación de fusión del historial" + +#: optiondialog.cpp:916 +msgid "Sort version control history by a key." +msgstr "Ordenar el historial del control de versiones con una clave." + +#: optiondialog.cpp:926 +msgid "History entry start sort key order:" +msgstr "" +"Orden de la clave de ordenación del inicio de la entrada del historial:" + +#: optiondialog.cpp:930 +msgid "" +"Each parentheses used in the regular expression for the history start entry\n" +"groups a key that can be used for sorting.\n" +"Specify the list of keys (that are numbered in order of occurrence\n" +"starting with 1) using ',' as separator (e.g. \"4,5,6,1,2,3,7\").\n" +"If left empty, then no sorting will be done.\n" +"See the documentation for details." +msgstr "" +"Cada paréntesis utilizado en la expresión regular para la entrada de inicio del " +"historial\n" +"agrupa una clave que podrá utilizarse para la ordenación.\n" +"Especifique la lista de claves (están numeradas por orden de aparición\n" +"comenzando en 1) utilizando «,» como separador (p.ej. «4,5,6,1,2,3,7»).\n" +"Si se deja vacío, no se realizará ordenación.\n" +"Consulte la documentación para obtener más detalles." + +#: optiondialog.cpp:941 +msgid "Merge version control history on merge start" +msgstr "Fusionar el historial de control de versiones al iniciar la fusión" + +#: optiondialog.cpp:943 +msgid "Run version control history automerge on merge start." +msgstr "" +"Ejecuta la fusión automática del historial del control de versiones al iniciar " +"el fusionado." + +#: optiondialog.cpp:947 +msgid "Test your regular expressions" +msgstr "Verificar sus expresiones regulares" + +#: optiondialog.cpp:952 +msgid "Irrelevant merge command:" +msgstr "Orden de fusión irrelevante:" + +#: optiondialog.cpp:956 +msgid "" +"If specified this script is run after automerge\n" +"when no other relevant changes were detected.\n" +"Called with the parameters: filename1 filename2 filename3" +msgstr "" +"Si se especifica, este script se ejecutará después de la fusión automática\n" +"cuando no se hayan detectado otros cambios relevantes.\n" +"Se llama con los parámetros: nombrearchivo1 nombrearchivo2 nombrearchivo3" + +#: optiondialog.cpp:966 +msgid "Directory Merge" +msgstr "Fusión de directorio" + +#: optiondialog.cpp:975 +msgid "Recursive directories" +msgstr "Introducirse en los directorios" + +#: optiondialog.cpp:977 +msgid "Whether to analyze subdirectories or not." +msgstr "Analizar los subdirectorios o no." + +#: optiondialog.cpp:979 +msgid "File pattern(s):" +msgstr "Patron(es) de archivo(s):" + +#: optiondialog.cpp:984 +msgid "" +"Pattern(s) of files to be analyzed. \n" +"Wildcards: '*' and '?'\n" +"Several Patterns can be specified by using the separator: ';'" +msgstr "" +"Patron(es) de archivos a analizar.\n" +"Comodines: '*' y '?'\n" +"Se pueden especificar muchos patrones usando el separador: ';'" + +#: optiondialog.cpp:990 +msgid "File-anti-pattern(s):" +msgstr "Patron(es) anti-archivo(s):" + +#: optiondialog.cpp:995 +msgid "" +"Pattern(s) of files to be excluded from analysis. \n" +"Wildcards: '*' and '?'\n" +"Several Patterns can be specified by using the separator: ';'" +msgstr "" +"Patron(es) de archivos a excluir del análisis.\n" +"Comodines: '*' y '?'\n" +"Se pueden especificar muchos patrones usando el separador: ';'" + +#: optiondialog.cpp:1001 +msgid "Dir-anti-pattern(s):" +msgstr "Patron(es) anti-directorio(s):" + +#: optiondialog.cpp:1006 +msgid "" +"Pattern(s) of directories to be excluded from analysis. \n" +"Wildcards: '*' and '?'\n" +"Several Patterns can be specified by using the separator: ';'" +msgstr "" +"Patron(es) de directorios a excluir del análisis.\n" +"Comodines: '*' y '?'\n" +"Se pueden especificar muchos patrones usando el separador: ';'" + +#: optiondialog.cpp:1012 +msgid "Use .cvsignore" +msgstr "Usar .cvsignore" + +#: optiondialog.cpp:1015 +msgid "" +"Extends the antipattern to anything that would be ignored by CVS.\n" +"Via local \".cvsignore\"-files this can be directory specific." +msgstr "" +"Extiende el antipatrón para todo lo que sería ignorado por CVS.\n" +"Esto puede ser especificado por directorios via archivos locales «.cvsignore»." + +#: optiondialog.cpp:1020 +msgid "Find hidden files and directories" +msgstr "Buscar archivos y directorios ocultos" + +#: optiondialog.cpp:1023 +msgid "Finds files and directories with the hidden attribute." +msgstr "Busca archivos de directorios con el atributo de oculto." + +#: optiondialog.cpp:1025 +msgid "Finds files and directories starting with '.'." +msgstr "Busca archivos y directorios que comiencen por '.'." + +#: optiondialog.cpp:1029 +msgid "Follow file links" +msgstr "Seguir enlaces de archivos" + +#: optiondialog.cpp:1032 +msgid "" +"On: Compare the file the link points to.\n" +"Off: Compare the links." +msgstr "" +"On: Comparar el archivo que al que apunta el enlace.\n" +"Off: Comparar los enlaces." + +#: optiondialog.cpp:1037 +msgid "Follow directory links" +msgstr "Seguir enlaces de directorios" + +#: optiondialog.cpp:1040 +msgid "" +"On: Compare the directory the link points to.\n" +"Off: Compare the links." +msgstr "" +"On: Comparar el directorio al que apunta el enlace.\n" +"Off: Comparar los enlaces." + +#: optiondialog.cpp:1056 +msgid "Case sensitive filename comparison" +msgstr "Comparación de nombres de archivo sensible a mayúsculas y minúsculas" + +#: optiondialog.cpp:1059 +msgid "" +"The directory comparison will compare files or directories when their names " +"match.\n" +"Set this option if the case of the names must match. (Default for Windows is " +"off, otherwise on.)" +msgstr "" +"La comparación de directorios comparará archivos o directorios cuando sus " +"nombre coincidan.\n" +"Active esta opción si deben compararse los nombres teniendo en cuenta " +"mayúsculas y minúsculas (para Windows el valor predeterminado es desactivado, " +"en otro caso, estará activado)" + +#: optiondialog.cpp:1063 +msgid "File Comparison Mode" +msgstr "Modo de comparación de archivos" + +#: optiondialog.cpp:1067 +msgid "Binary comparison" +msgstr "Comparación binaria" + +#: optiondialog.cpp:1068 +msgid "Binary comparison of each file. (Default)" +msgstr "Comparación binaria de cada archivo (predeterminado)" + +#: optiondialog.cpp:1070 +msgid "Full analysis" +msgstr "Análisis completo" + +#: optiondialog.cpp:1071 +msgid "" +"Do a full analysis and show statistics information in extra columns.\n" +"(Slower than a binary comparison, much slower for binary files.)" +msgstr "" +"Hacer un análisis completo y mostrar información de las estadísticas en " +"columnas extras.\n" +"(Mas lento que una comparación binara, mucho mas lento para archivos binarios.)" + +#: optiondialog.cpp:1074 +msgid "Trust the modification date (unsafe)" +msgstr "Validar la fecha de modificación (inseguro)" + +#: optiondialog.cpp:1075 +msgid "" +"Assume that files are equal if the modification date and file length are " +"equal.\n" +"Useful for big directories or slow networks." +msgstr "" +"Asumir que los archivos son iguales si la fecha de modificación y la longitud " +"del archivos son iguales.\n" +"Útil para directorios grandes y redes lentas." + +#: optiondialog.cpp:1078 +msgid "Trust the size (unsafe)" +msgstr "Validar el tamaño (inseguro)" + +#: optiondialog.cpp:1079 +msgid "" +"Assume that files are equal if their file lengths are equal.\n" +"Useful for big directories or slow networks when the date is modified during " +"download." +msgstr "" +"Asumir que los archivos son iguales sus longitudes son iguales.\n" +"Útil para directorios grandes y redes lentas cuando la fecha se modifica " +"durante la descarga." + +#: optiondialog.cpp:1083 +msgid "Synchronize directories" +msgstr "Sincronizar directorios" + +#: optiondialog.cpp:1086 +msgid "" +"Offers to store files in both directories so that\n" +"both directories are the same afterwards.\n" +"Works only when comparing two directories without specifying a destination." +msgstr "" +"Ofrece almacenar los archivos en ambos directorios para que\n" +"ambios directorios sean después el mismo.\n" +"Sólo funciona cuando se compara dos directorios sin especificar un destino." + +#: optiondialog.cpp:1092 +msgid "White space differences considered equal" +msgstr "Las diferencias de espacios en blanco se consideran igual" + +#: optiondialog.cpp:1095 +msgid "" +"If files differ only by white space consider them equal.\n" +"This is only active when full analysis is chosen." +msgstr "" +"Si el archivo se diferencia sólo por espacios en blanco, considerarlo igual.\n" +"Esto sólamente está activo cuando se elije análisis completo." + +#: optiondialog.cpp:1101 +msgid "Copy newer instead of merging (unsafe)" +msgstr "Copiar el mas nuevo en vez de fusionar (inseguro)" + +#: optiondialog.cpp:1104 +msgid "" +"Don't look inside, just take the newer file.\n" +"(Use this only if you know what you are doing!)\n" +"Only effective when comparing two directories." +msgstr "" +"No mirar dentro, sólo coger el archivo mas nuevo.\n" +"(¡Utilice esto sólo si sabe qué está haciendo!)\n" +"Sólo es efectivo cuando se compara dos directorios." + +#: optiondialog.cpp:1109 +msgid "Backup files (.orig)" +msgstr "Archivos de copias de seguridad (.orig)" + +#: optiondialog.cpp:1112 +msgid "" +"When a file would be saved over an old file, then the old file\n" +"will be renamed with a '.orig'-extension instead of being deleted." +msgstr "" +"Cuando un archivo se graba sobre otro mas antiguo, el archivo antiguo\n" +"se renombrará con extensión '.orig' en vez de ser borrado." + +#: optiondialog.cpp:1176 +msgid "Regional Settings" +msgstr "Configuraciones regionales" + +#: optiondialog.cpp:1272 +msgid "Language (restart required)" +msgstr "Idioma (requiere reiniciar)" + +#: optiondialog.cpp:1304 +msgid "" +"Choose the language of the GUI-strings or \"Auto\".\n" +"For a change of language to take place, quit and restart KDiff3." +msgstr "" +"Elija el idioma para las cadenas de la interfaz o «Auto».\n" +"Para que ocurra el cambio de lenguaje, salga y reinicie KDiff3." + +#: optiondialog.cpp:1322 +msgid "Use the same encoding for everything:" +msgstr "Usar la misma codificación para todo:" + +#: optiondialog.cpp:1325 +msgid "" +"Enable this allows to change all encodings by changing the first only.\n" +"Disable this if different individual settings are needed." +msgstr "" +"Activar esto permite cambiar todas las codificaciónes cambiando sólo la " +"primera.\n" +"Desactivar esto si se necesitan configuración individuales diferentes." + +#: optiondialog.cpp:1330 +msgid "Note: Local Encoding is " +msgstr "Nota: Codificación local es" + +#: optiondialog.cpp:1334 +msgid "File Encoding for A:" +msgstr "Codificación de archivo para A:" + +#: optiondialog.cpp:1340 +msgid "" +"If enabled then Unicode (UTF-16 or UTF-8) encoding will be detected.\n" +"If the file encoding is not detected then the selected encoding will be used as " +"fallback.\n" +"(Unicode detection depends on the first bytes of a file - the byte order mark " +"\"BOM\".)" +msgstr "" +"Si está activada la codificación Unicode (UTF-16 ó UTF-8) se detectará.\n" +"Sino se detecta la codificación del archivo se utilizará la codificación " +"seleccionada como alternativa.\n" +"(La detección Unicode depende de los primeros bytes de un archivo - la marca de " +"orden de byte «BOM»)." + +#: optiondialog.cpp:1344 optiondialog.cpp:1353 optiondialog.cpp:1362 +msgid "Auto Detect Unicode" +msgstr "Detección automática de Unicode" + +#: optiondialog.cpp:1349 +msgid "File Encoding for B:" +msgstr "Codificación de archivo para B:" + +#: optiondialog.cpp:1358 +msgid "File Encoding for C:" +msgstr "Codificación de archivo para C:" + +#: optiondialog.cpp:1367 +msgid "File Encoding for Merge Output and Saving:" +msgstr "Codificación de archivo para la salida de la fusión y guardar:" + +#: optiondialog.cpp:1371 +msgid "Auto Select" +msgstr "Selección automática" + +#: optiondialog.cpp:1374 +msgid "" +"If enabled then the encoding from the input files is used.\n" +"In ambiguous cases a dialog will ask the user to choose the encoding for " +"saving." +msgstr "" +"Si está activada se utilizará la codificación de los archivos de entrada.\n" +"En los casos dudosos un diálogo pedirá al usuario que elija la codificación " +"para el guardado." + +#: optiondialog.cpp:1378 +msgid "File Encoding for Preprocessor Files:" +msgstr "Codificación de archivo para los archivos del preprocesador:" + +#: optiondialog.cpp:1389 +msgid "Right To Left Language" +msgstr "Lenguaje de derecha a izquierda" + +#: optiondialog.cpp:1392 +msgid "" +"Some languages are read from right to left.\n" +"This setting will change the viewer and editor accordingly." +msgstr "" +"Algunos lenguajes se leen de derecha a izquierda.\n" +"Esta configuración cambiará el visor y el editor adaptándolo." + +#: optiondialog.cpp:1402 +msgid "Integration" +msgstr "Integración" + +#: optiondialog.cpp:1402 +msgid "Integration Settings" +msgstr "Preferencias de integración" + +#: optiondialog.cpp:1412 +msgid "Command line options to ignore:" +msgstr "Opciones de la línea de órdenes que se ignorarán:" + +#: optiondialog.cpp:1417 +msgid "" +"List of command line options that should be ignored when KDiff3 is used by " +"other tools.\n" +"Several values can be specified if separated via ';'\n" +"This will suppress the \"Unknown option\"-error." +msgstr "" +"Lista de las opciones de la línea de órdenes que se ignorarán cuando KDiff3 se " +"utiliza con otras herramientas.\n" +"Se pueden especificar varios valores separados por «;»\n" +"Eliminará el error «Error desconocido»." + +#: optiondialog.cpp:1480 +msgid "" +"You selected a variable width font.\n" +"\n" +"Because this program doesn't handle variable width fonts\n" +"correctly, you might experience problems while editing.\n" +"\n" +"Do you want to continue or do you want to select another font." +msgstr "" +"Seleccionó una fuente de ancho variable.\n" +"\n" +"Debido a que este programa no maneja fuentes de ancho variables\n" +"correctamente, podrá experimentar problemas durante la edición.\n" +"\n" +"¿Desea continuar o desea seleccionar otra fuente?" + +#: optiondialog.cpp:1484 +msgid "Incompatible Font" +msgstr "Fuente incompatible" + +#: optiondialog.cpp:1485 +msgid "Continue at Own Risk" +msgstr "Continuar bajo nuestro riesgo" + +#: optiondialog.cpp:1485 +msgid "Select Another Font" +msgstr "Seleccionar otra fuente" + +#: optiondialog.cpp:1521 +msgid "This resets all options. Not only those of the current topic." +msgstr "Esto reestablece todas las opciones. No sólo las de tema actual." + +#: pdiff.cpp:258 +msgid "PreprocessorCmd: " +msgstr "Orden del preprocesador: " + +#: pdiff.cpp:263 +msgid "" +"The following option(s) you selected might change data:\n" +msgstr "" +"La(s) siguiente(s) opcion(es) que ha seleccionado pueden cambiar datos:\n" + +#: pdiff.cpp:264 +msgid "" +"\n" +"Most likely this is not wanted during a merge.\n" +"Do you want to disable these settings or continue with these settings active?" +msgstr "" +"\n" +"Most likely this is not wanted during a merge.\n" +"Do you want to disable these settings or continue with these settings active?" + +#: pdiff.cpp:266 +msgid "Option Unsafe for Merging" +msgstr "Opción insegura para la fusión" + +#: pdiff.cpp:267 +msgid "Use These Options During Merge" +msgstr "Utilizar estas opciones durante la fusión" + +#: pdiff.cpp:267 +msgid "Disable Unsafe Options" +msgstr "Desactivar opciones inseguras" + +#: pdiff.cpp:297 +msgid "Loading A" +msgstr "Cargando A" + +#: pdiff.cpp:301 +msgid "Loading B" +msgstr "Cargando B" + +#: pdiff.cpp:318 pdiff.cpp:344 +msgid "Diff: A <-> B" +msgstr "Dif: A <-> B" + +#: pdiff.cpp:324 pdiff.cpp:366 +msgid "Linediff: A <-> B" +msgstr "Lineadiff: A <-> B" + +#: pdiff.cpp:335 +msgid "Loading C" +msgstr "Cargando C" + +#: pdiff.cpp:347 +msgid "Diff: B <-> C" +msgstr "Dif: B <-> C" + +#: pdiff.cpp:350 +msgid "Diff: A <-> C" +msgstr "Dif: A <-> C" + +#: pdiff.cpp:369 +msgid "Linediff: B <-> C" +msgstr "Lineadiff: B <-> C" + +#: pdiff.cpp:372 +msgid "Linediff: A <-> C" +msgstr "Lineadiff: A <-> C" + +#: pdiff.cpp:513 +msgid "All input files contain the same text, but are not binary equal." +msgstr "" +"Todos los archivos de entrada contienen el mismo texto, pero no son " +"binariamente iguales." + +#: pdiff.cpp:515 pdiff.cpp:517 pdiff.cpp:519 +msgid "" +"Files %1 and %2 are binary equal.\n" +msgstr "" +"Los archivos %1 y %2 son binariamente iguales.\n" + +#: pdiff.cpp:516 pdiff.cpp:518 pdiff.cpp:520 +msgid "" +"Files %1 and %2 have equal text, but are not binary equal. \n" +msgstr "" +"Los archivos %1 y %2 tienen el mismo texto, pero no son binariamente iguales. \n" + +#: pdiff.cpp:530 +msgid "" +"Some inputfiles don't seem to be pure textfiles.\n" +"Note that the KDiff3-merge was not meant for binary data.\n" +"Continue at your own risk." +msgstr "" +"Algunos archivos de entrada no parecen ser archivos de texto puro.\n" +"Tenga en cuenta que la fusión de KDiff3 no se creó para datos binarios.\n" +"Continúe bajo su propia cuenta." + +#: pdiff.cpp:979 +msgid "Abort" +msgstr "Abandonar" + +#: pdiff.cpp:985 pdiff.cpp:1073 +msgid "Opening files..." +msgstr "Abriendo archivos..." + +#: pdiff.cpp:1050 pdiff.cpp:1121 +msgid "File open error" +msgstr "Error al abrir el archivo" + +#: pdiff.cpp:1153 +msgid "Cutting selection..." +msgstr "Cortando selección..." + +#: pdiff.cpp:1174 +msgid "Copying selection to clipboard..." +msgstr "Copiando la selección al portapapeles..." + +#: pdiff.cpp:1190 +msgid "Inserting clipboard contents..." +msgstr "Insertando el contenido del portapapeles..." + +#: pdiff.cpp:1713 +msgid "Save && Continue" +msgstr "Guardar y continuar" + +#: pdiff.cpp:1713 +msgid "Continue Without Saving" +msgstr "Continuar sin guardar" + +#: pdiff.cpp:1920 +msgid "Search complete." +msgstr "Búsqueda completada." + +#: pdiff.cpp:1920 +msgid "Search Complete" +msgstr "Búsqueda completada" + +#: pdiff.cpp:2144 +msgid "Nothing is selected in either diff input window." +msgstr "" +"No hay nada seleccionado en ninguna de las ventanas de entradas de diferencias." + +#: pdiff.cpp:2144 +msgid "Error while adding manual diff range" +msgstr "Error al añadir un rango de diferencia manual" + +#. i18n: file kdiff3_part.rc line 4 +#: rc.cpp:3 +#, no-c-format +msgid "&KDiff3" +msgstr "&KDiff3" + +#. i18n: file kdiff3_part.rc line 13 +#: rc.cpp:6 +#, no-c-format +msgid "Configure KDiff3" +msgstr "Configurar KDiff3" + +#. i18n: file kdiff3_shell.rc line 7 +#: rc.cpp:15 +#, no-c-format +msgid "&Directory" +msgstr "&Directorio" + +#. i18n: file kdiff3_shell.rc line 30 +#: rc.cpp:18 +#, no-c-format +msgid "Current Item Merge Operation" +msgstr "Elemento actual de operación de fusión" + +#. i18n: file kdiff3_shell.rc line 38 +#: rc.cpp:21 +#, no-c-format +msgid "Current Item Sync Operation" +msgstr "Elemento actual de operación de sincronización" + +#. i18n: file kdiff3_shell.rc line 50 +#: rc.cpp:24 +#, no-c-format +msgid "&Movement" +msgstr "&Movimiento" + +#. i18n: file kdiff3_shell.rc line 61 +#: rc.cpp:27 +#, no-c-format +msgid "D&iffview" +msgstr "D&iffview" + +#. i18n: file kdiff3_shell.rc line 73 +#: rc.cpp:30 +#, no-c-format +msgid "&Merge" +msgstr "&Fusionar" + +#. i18n: file kdiff3_shell.rc line 95 +#: rc.cpp:33 +#, no-c-format +msgid "&Window" +msgstr "&Ventana" + +#: smalldialogs.cpp:53 +msgid "A (Base):" +msgstr "A (Base):" + +#: smalldialogs.cpp:59 smalldialogs.cpp:75 smalldialogs.cpp:91 +#: smalldialogs.cpp:134 +msgid "File..." +msgstr "Archivo..." + +#: smalldialogs.cpp:61 smalldialogs.cpp:77 smalldialogs.cpp:93 +#: smalldialogs.cpp:136 +msgid "Dir..." +msgstr "Dir..." + +#: smalldialogs.cpp:86 +msgid "C (Optional):" +msgstr "C (Opcional):" + +#: smalldialogs.cpp:108 +msgid "Swap/Copy Names ..." +msgstr "Intercambiar/copiar nombres..." + +#: smalldialogs.cpp:114 smalldialogs.cpp:115 smalldialogs.cpp:116 +msgid "Swap %1<->%2" +msgstr "Intercambiar %1<->%2" + +#: smalldialogs.cpp:117 smalldialogs.cpp:118 smalldialogs.cpp:119 +msgid "Copy %1->Output" +msgstr "Copiar %1->Salida" + +#: smalldialogs.cpp:120 smalldialogs.cpp:121 smalldialogs.cpp:122 +msgid "Swap %1<->Output" +msgstr "Intercambiar %1<->Salida" + +#: smalldialogs.cpp:129 +msgid "Output (optional):" +msgstr "Salida (opcional):" + +#: smalldialogs.cpp:158 +msgid "Configure..." +msgstr "Configurar..." + +#: smalldialogs.cpp:347 +msgid "Search text:" +msgstr "Buscar texto:" + +#: smalldialogs.cpp:354 +msgid "Case sensitive" +msgstr "Distinción de mayúsculas" + +#: smalldialogs.cpp:357 +msgid "Search A" +msgstr "Buscar A" + +#: smalldialogs.cpp:362 +msgid "Search B" +msgstr "Buscar B" + +#: smalldialogs.cpp:367 +msgid "Search C" +msgstr "Buscar C" + +#: smalldialogs.cpp:372 +msgid "Search output" +msgstr "Buscar salida" + +#: smalldialogs.cpp:377 +msgid "&Search" +msgstr "Bu&scar" + +#: smalldialogs.cpp:394 +msgid "Regular Expression Tester" +msgstr "Verificar expresión regular" + +#: smalldialogs.cpp:405 +msgid "Example auto merge line:" +msgstr "Ejemplo de línea de fusión automática:" + +#: smalldialogs.cpp:407 +msgid "For auto merge test copy a line as used in your files." +msgstr "" +"Para la copia de una prueba de fusión automática tal y como se utiliza en sus " +"archivos." + +#: smalldialogs.cpp:413 smalldialogs.cpp:442 smalldialogs.cpp:479 +msgid "Match result:" +msgstr "Resultado coincidente:" + +#: smalldialogs.cpp:432 +msgid "Example history start line (with leading comment):" +msgstr "" +"Ejemplo de la línea de inicio del historial (con comentarios importantes):" + +#: smalldialogs.cpp:435 +msgid "" +"Copy a history start line as used in your files,\n" +"including the leading comment." +msgstr "" +"Copia una línea de inicio de historial tal y como se utiliza en sus archivos,\n" +"incluyendo los comentarios importantes." + +#: smalldialogs.cpp:461 +msgid "History sort key order:" +msgstr "Orden de la clave de ordenación del historial:" + +#: smalldialogs.cpp:469 +msgid "Example history entry start line (without leading comment):" +msgstr "" +"Ejemplo de la línea de inicio de la entrada del historial (sin comentarios " +"importantes):" + +#: smalldialogs.cpp:471 +msgid "" +"Copy a history entry start line as used in your files,\n" +"but omit the leading comment." +msgstr "" +"Copia una línea de inicio de la entrada del historial tal y como se utiliza en " +"sus archivos,\n" +"pero omite los comentarios importantes." + +#: smalldialogs.cpp:486 +msgid "Sort key result:" +msgstr "Resultado de la clave de ordenación:" + +#: smalldialogs.cpp:537 smalldialogs.cpp:547 smalldialogs.cpp:568 +msgid "Match success." +msgstr "Coincidencia correcta." + +#: smalldialogs.cpp:541 smalldialogs.cpp:551 smalldialogs.cpp:574 +msgid "Match failed." +msgstr "Coincidencia fallida." + +#: smalldialogs.cpp:559 +msgid "Opening and closing parentheses don't match in regular expression." +msgstr "" +"Apertura y cierre de paréntesis que no coinciden en la expresión regular." diff --git a/po/et.po b/po/et.po new file mode 100644 index 0000000..62f56cb --- /dev/null +++ b/po/et.po @@ -0,0 +1,2519 @@ +# translation of kdiff3.po to Estonian +# Copyright (C) 2003 Free Software Foundation, Inc. +# Marek Laane , 2003-2006. +# +msgid "" +msgstr "" +"Project-Id-Version: kdiff3\n" +"POT-Creation-Date: 2006-11-05 08:45+0100\n" +"PO-Revision-Date: 2006-12-07 00:29+0300\n" +"Last-Translator: Marek Laane \n" +"Language-Team: Estonian \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: KBabel 1.0.2\n" + +#: _translatorinfo.cpp:1 +msgid "" +"_: NAME OF TRANSLATORS\n" +"Your names" +msgstr "Marek Laane" + +#: _translatorinfo.cpp:3 +msgid "" +"_: EMAIL OF TRANSLATORS\n" +"Your emails" +msgstr "bald@starman.ee" + +#: diff.cpp:246 +msgid "Writing clipboard data to temp file failed." +msgstr "Lõikepuhvri andmete kirjutamine ajutisse faili ebaõnnestus." + +#: diff.cpp:250 +msgid "From Clipboard" +msgstr "Lõikepuhvrist" + +#: diff.cpp:491 +msgid "" +"Preprocessing possibly failed. Check this command:\n" +"\n" +" %1\n" +"\n" +"The preprocessing command will be disabled now." +msgstr "" +"Eeltöötlus ilmselt ebaõnnestus. Kontrolli käsku:\n" +"\n" +" %1\n" +"\n" +"Praegu lülitatakse eeltöötluse käsu rakendamine välja." + +#: diff.cpp:526 +msgid "" +"The line-matching-preprocessing possibly failed. Check this command:\n" +"\n" +" %1\n" +"\n" +"The line-matching-preprocessing command will be disabled now." +msgstr "" +"Reasobivuse eeltöötlus ilmselt ebaõnnestus. Kontrolli käsku:\n" +"\n" +" %1\n" +"\n" +"Praegu lülitatakse reasobivuse eeltöötluse käsu rakendamine välja." + +#: diff.cpp:1631 diff.cpp:1645 +msgid "" +"Data loss error:\n" +"If it is reproducable please contact the author.\n" +msgstr "" +"Andmekaotuse viga:\n" +"Kui see on korratav, võta palun ühendust autoriga.\n" + +#: diff.cpp:1633 diff.cpp:1647 +msgid "Severe Internal Error" +msgstr "Tõsine seesmine viga" + +#: difftextwindow.cpp:1643 kdiff3.cpp:753 +msgid "Top line" +msgstr "Ãœlarida" + +#: difftextwindow.cpp:1653 +msgid "End" +msgstr "Lõpp" + +#: directorymergewindow.cpp:142 +msgid "Mix of links and normal files." +msgstr "Viitade ja tavafailide segu." + +#: directorymergewindow.cpp:149 +msgid "Link: " +msgstr "Viit: " + +#: directorymergewindow.cpp:157 +msgid "Size. " +msgstr "Suurus. " + +#: directorymergewindow.cpp:170 +msgid "Date & Size: " +msgstr "Kuupäev ja suurus: " + +#: directorymergewindow.cpp:179 directorymergewindow.cpp:185 +msgid "Creating temp copy of %1 failed." +msgstr "%1 ajutise koopia loomine ebaõnnestus-" + +#: directorymergewindow.cpp:196 directorymergewindow.cpp:204 +msgid "Opening %1 failed." +msgstr "%1 avamine ebaõnnestus." + +#: directorymergewindow.cpp:208 +msgid "Comparing file..." +msgstr "Faili võrdlemine..." + +#: directorymergewindow.cpp:218 directorymergewindow.cpp:224 +#, c-format +msgid "Error reading from %1" +msgstr "Viga %1 lugemisel" + +#: directorymergewindow.cpp:282 +msgid "Name" +msgstr "Nimi" + +#: directorymergewindow.cpp:286 +msgid "Operation" +msgstr "Operatsioon" + +#: directorymergewindow.cpp:287 +msgid "Status" +msgstr "Staatus" + +#: directorymergewindow.cpp:288 +msgid "Unsolved" +msgstr "Lahendamata" + +#: directorymergewindow.cpp:289 +msgid "Solved" +msgstr "Lahendatud" + +#: directorymergewindow.cpp:290 +msgid "Nonwhite" +msgstr "Mitte-tühimärk" + +#: directorymergewindow.cpp:291 +msgid "White" +msgstr "Tühimärk" + +#: directorymergewindow.cpp:319 +msgid "" +"You are currently doing a directory merge. Are you sure, you want to abort the " +"merge and rescan the directory?" +msgstr "" +"Sul on parajasti käsil kataloogi ühendamine. Kas tõesti ühendamine katkestada " +"ja kataloog uuesti läbi uurida?" + +#: directorymergewindow.cpp:320 directorymergewindow.cpp:2868 +msgid "Rescan" +msgstr "Uuri uuesti läbi" + +#: directorymergewindow.cpp:320 kdiff3.cpp:603 pdiff.cpp:979 +msgid "Continue Merging" +msgstr "Jätka ühendamist" + +#: directorymergewindow.cpp:462 +msgid "Opening of directories failed:" +msgstr "Kataloogide avamine ebaõnnestus:" + +#: directorymergewindow.cpp:465 +msgid "" +"Dir A \"%1\" does not exist or is not a directory.\n" +msgstr "" +"Kataloogi A \"%1\" ei ole olemas või ei ole see kataloog.\n" + +#: directorymergewindow.cpp:468 +msgid "" +"Dir B \"%1\" does not exist or is not a directory.\n" +msgstr "" +"Kataloogi B \"%1\" ei ole olemas või ei ole see kataloog.\n" + +#: directorymergewindow.cpp:471 +msgid "" +"Dir C \"%1\" does not exist or is not a directory.\n" +msgstr "" +"Kataloogi C \"%1\" ei ole olemas või ei ole see kataloog.\n" + +#: directorymergewindow.cpp:473 +msgid "Directory Open Error" +msgstr "Kataloogi avamise viga" + +#: directorymergewindow.cpp:481 +msgid "" +"The destination directory must not be the same as A or B when three directories " +"are merged.\n" +"Check again before continuing." +msgstr "" +"Sihtkataloog ei saa kolme kataloogi ühendamisel olla sama, mis A või B.\n" +"Kontrolli seda asja enne jätkamist." + +#: directorymergewindow.cpp:483 +msgid "Parameter Warning" +msgstr "Parameetri hoiatus" + +#: directorymergewindow.cpp:488 +msgid "Scanning directories..." +msgstr "Kataloogide läbiuurimine..." + +#: directorymergewindow.cpp:537 +msgid "Reading Directory A" +msgstr "Kataloogi A lugemine" + +#: directorymergewindow.cpp:559 +msgid "Reading Directory B" +msgstr "Kataloogi B lugemine" + +#: directorymergewindow.cpp:581 +msgid "Reading Directory C" +msgstr "Kataloogi C lugemine" + +#: directorymergewindow.cpp:607 +msgid "Some subdirectories were not readable in" +msgstr "Mõned alamkataloogid ei olnud loetavad:" + +#: directorymergewindow.cpp:612 +msgid "Check the permissions of the subdirectories." +msgstr "Kontrolli alamkataloogide õigusi." + +#: directorymergewindow.cpp:646 kdiff3.cpp:552 kdiff3.cpp:636 kdiff3.cpp:661 +#: kdiff3.cpp:934 kdiff3.cpp:955 pdiff.cpp:1059 pdiff.cpp:1131 pdiff.cpp:1169 +#: pdiff.cpp:1185 pdiff.cpp:1215 pdiff.cpp:1226 +msgid "Ready." +msgstr "Valmis." + +#: directorymergewindow.cpp:660 +msgid "Directory Comparison Status" +msgstr "Kataloogi võrdlemise olek" + +#: directorymergewindow.cpp:661 +msgid "Number of subdirectories:" +msgstr "Alamkataloogide arv:" + +#: directorymergewindow.cpp:662 +msgid "Number of equal files:" +msgstr "Võrdsete failide arv:" + +#: directorymergewindow.cpp:663 +msgid "Number of different files:" +msgstr "Erinevate failide arv:" + +#: directorymergewindow.cpp:666 +msgid "Number of manual merges:" +msgstr "Käsitsiühendamiste arv:" + +#: directorymergewindow.cpp:802 +msgid "This affects all merge operations." +msgstr "See mõjutab kõiki ühendamisoperatsioone." + +#: directorymergewindow.cpp:803 +msgid "Changing All Merge Operations" +msgstr "Kõigi ühendamisoperatsioonide muutmine" + +#: directorymergewindow.cpp:803 mergeresultwindow.cpp:287 +msgid "C&ontinue" +msgstr "&Jätka" + +#: directorymergewindow.cpp:1169 +msgid "Processing " +msgstr "Töödeldakse " + +#: directorymergewindow.cpp:1647 directorymergewindow.cpp:1653 +msgid "To do." +msgstr "Veel tegemata." + +#: directorymergewindow.cpp:1756 directorymergewindow.cpp:2899 +msgid "Copy A to B" +msgstr "Kopeeri A->B" + +#: directorymergewindow.cpp:1757 directorymergewindow.cpp:2900 +msgid "Copy B to A" +msgstr "Kopeeri B->A" + +#: directorymergewindow.cpp:1758 directorymergewindow.cpp:2901 +msgid "Delete A" +msgstr "Kustuta A" + +#: directorymergewindow.cpp:1759 directorymergewindow.cpp:2902 +msgid "Delete B" +msgstr "Kustuta B" + +#: directorymergewindow.cpp:1760 +msgid "Delete A & B" +msgstr "Kustuta A ja B" + +#: directorymergewindow.cpp:1761 directorymergewindow.cpp:2904 +msgid "Merge to A" +msgstr "Ãœhenda A-sse" + +#: directorymergewindow.cpp:1762 directorymergewindow.cpp:2905 +msgid "Merge to B" +msgstr "Ãœhenda B-sse" + +#: directorymergewindow.cpp:1763 +msgid "Merge to A & B" +msgstr "Ãœhenda A-sse ja B-sse" + +#: directorymergewindow.cpp:1767 directorymergewindow.cpp:2896 +msgid "Delete (if exists)" +msgstr "Kustuta (kui on olemas)" + +#: directorymergewindow.cpp:1768 directorymergewindow.cpp:1769 +#: directorymergewindow.cpp:2895 optiondialog.cpp:809 smalldialogs.cpp:102 +msgid "Merge" +msgstr "Ãœhenda" + +#: directorymergewindow.cpp:1768 directorymergewindow.cpp:1769 +msgid "Merge (manual)" +msgstr "Ãœhenda (käsitsi)" + +#: directorymergewindow.cpp:1770 +msgid "Error: Conflicting File Types" +msgstr "Viga: failitüüpide vastuolu" + +#: directorymergewindow.cpp:1771 +msgid "Error: Dates are equal but files are not." +msgstr "Viga: kuupäevad on samad, aga mitte failid." + +#: directorymergewindow.cpp:1795 directorymergewindow.cpp:1824 +#: directorymergewindow.cpp:1849 +msgid "This operation is currently not possible." +msgstr "See operatsioon ei ole praegu võimalik." + +#: directorymergewindow.cpp:1795 directorymergewindow.cpp:1824 +#: directorymergewindow.cpp:1849 directorymergewindow.cpp:2106 +msgid "Operation Not Possible" +msgstr "Operatsioon ei ole võimalik" + +#: directorymergewindow.cpp:1888 +msgid "" +"This should never happen: \n" +"\n" +"mergeResultSaved: m_pMFI=0\n" +"\n" +"If you know how to reproduce this, please contact the program author." +msgstr "" +"Seda ei peaks kunagi juhtuma: \n" +"\n" +"mergeResultSaved: m_pMFI=0\n" +"\n" +"Kui sa tead, kuidas seda korrata, anna sellest teada rakenduse autorile." + +#: directorymergewindow.cpp:1888 +msgid "Program Error" +msgstr "Rakenduse viga" + +#: directorymergewindow.cpp:1899 +msgid "" +"An error occurred while copying.\n" +msgstr "" +"Kopeerimisel tekkis viga.\n" + +#: directorymergewindow.cpp:1900 directorymergewindow.cpp:2306 +msgid "Merge Error" +msgstr "Ãœhendamise viga" + +#: directorymergewindow.cpp:1905 directorymergewindow.cpp:2311 +msgid "Error." +msgstr "Viga." + +#: directorymergewindow.cpp:1910 directorymergewindow.cpp:2202 +#: directorymergewindow.cpp:2242 +msgid "Done." +msgstr "Tehtud." + +#: directorymergewindow.cpp:1933 +msgid "Not saved." +msgstr "Ei salvestatud." + +#: directorymergewindow.cpp:1968 +msgid "Unknown merge operation. (This must never happen!)" +msgstr "Tundmatu ühendamisoperatsioon. (Seda ei peaks kunagi ette tulema!)" + +#: directorymergewindow.cpp:2000 +msgid "Unknown merge operation." +msgstr "Tundmatu ühendamisoperatsioon." + +#: directorymergewindow.cpp:2015 +msgid "" +"The merge is about to begin.\n" +"\n" +"Choose \"Do it\" if you have read the instructions and know what you are " +"doing.\n" +"Choosing \"Simulate it\" will tell you what would happen.\n" +"\n" +"Be aware that this program still has beta status and there is NO WARRANTY " +"whatsoever! Make backups of your vital data!" +msgstr "" +"Kohe algab ühendamine.\n" +"\n" +"Vali \"Tee seda\", kui oled lugenud juhiseid ja tead täpselt, mida ette võtad.\n" +"Vali \"Simuleeri\", kui soovid näha, mis juhtub.\n" +"\n" +"Arvesta, et rakendus on endiselt arendusjärgus ja pole MINGIT GARANTIID, et " +"üldse midagi juhtub või et kõik õigesti juhtub! Tee kindlasti tähtsatest " +"andmetest varukoopia!" + +#: directorymergewindow.cpp:2020 +msgid "Starting Merge" +msgstr "Ãœhendamise alustamine" + +#: directorymergewindow.cpp:2020 +msgid "Do It" +msgstr "Tee ära" + +#: directorymergewindow.cpp:2020 +msgid "Simulate It" +msgstr "Simuleeri" + +#: directorymergewindow.cpp:2046 +msgid "" +"The highlighted item has a different type in the different directories. Select " +"what to do." +msgstr "" +"Esiletõstetud element on erinevates kataloogides erineva tüübiga. Otsusta, mida " +"teha." + +#: directorymergewindow.cpp:2055 +msgid "" +"The modification dates of the file are equal but the files are not. Select what " +"to do." +msgstr "" +"Failide muutmise aeg on sama, aga failid ise mitte. Otsusta, mida teha." + +#: directorymergewindow.cpp:2106 +msgid "" +"This operation is currently not possible because directory merge is currently " +"running." +msgstr "" +"See operatsioon ei ole praegu võimalik, sest käib kataloogide ühendamine." + +#: directorymergewindow.cpp:2166 +msgid "" +"There was an error in the last step.\n" +"Do you want to continue with the item that caused the error or do you want to " +"skip this item?" +msgstr "" +"Viimasel sammul tekkis viga.\n" +"Kas soovid jätkata elemendiga, mis vea põhjustas, või selle vahele jätta?" + +#: directorymergewindow.cpp:2168 +msgid "Continue merge after an error" +msgstr "Jätka ühendamist pärast viga" + +#: directorymergewindow.cpp:2168 +msgid "Continue With Last Item" +msgstr "Jätka viimase elemendiga" + +#: directorymergewindow.cpp:2168 +msgid "Skip Item" +msgstr "Jäta vahele" + +#: directorymergewindow.cpp:2202 +msgid "Skipped." +msgstr "Vahele jäetud." + +#: directorymergewindow.cpp:2209 directorymergewindow.cpp:2435 +msgid "In progress..." +msgstr "Töös..." + +#: directorymergewindow.cpp:2257 +msgid "Merge operation complete." +msgstr "Ãœhendamisoperatsioon lõpetatud." + +#: directorymergewindow.cpp:2257 directorymergewindow.cpp:2260 +msgid "Merge Complete" +msgstr "Ãœhendamine lõpetatud" + +#: directorymergewindow.cpp:2269 +msgid "" +"Simulated merge complete: Check if you agree with the proposed operations." +msgstr "" +"Ãœhendamise simulatsioon lõpetatud: märgi, kui oled pakutavate operatsioonidega " +"nõus." + +#: directorymergewindow.cpp:2305 +msgid "" +"An error occurred. Press OK to see detailed information.\n" +msgstr "" +"Tekkis viga. Lähema info saamiseks klõpsa 'OK'.\n" + +#: directorymergewindow.cpp:2348 +msgid "Error: While deleting %1: Creating backup failed." +msgstr "Viga %1 kustutamisel: varukoopia loomine ebaõnnestus." + +#: directorymergewindow.cpp:2355 +msgid "delete directory recursively( %1 )" +msgstr "kustuta kataloog rekursiivselt( %1 )" + +#: directorymergewindow.cpp:2357 +msgid "delete( %1 )" +msgstr "kustuta( %1 )" + +#: directorymergewindow.cpp:2372 +msgid "Error: delete dir operation failed while trying to read the directory." +msgstr "" +"Viga: kataloogi kustutamine ebaõnnestus juba kataloogi lugemise katsel." + +#: directorymergewindow.cpp:2391 +msgid "Error: rmdir( %1 ) operation failed." +msgstr "Viga: operatsioon rmdir( %1 ) ebaõnnestus." + +#: directorymergewindow.cpp:2401 +msgid "Error: delete operation failed." +msgstr "Viga: kustutamisoperatsioon ebaõnnestus." + +#: directorymergewindow.cpp:2427 +msgid "manual merge( %1, %2, %3 -> %4)" +msgstr "käsitsi ühendamine( %1, %2, %3 -> %4)" + +#: directorymergewindow.cpp:2430 +msgid "" +" Note: After a manual merge the user should continue by pressing F7." +msgstr " Märkus: pärast käsitsi ühendamist tuleks jätkata klahviga F7." + +#: directorymergewindow.cpp:2453 +msgid "Error: copy( %1 -> %2 ) failed.Deleting existing destination failed." +msgstr "" +"Viga: kopeeri( %1 -> %2) ebaõnnestus, sest olemasoleva sihtkoha kustutamine " +"ebaõnnestus." + +#: directorymergewindow.cpp:2463 +msgid "copyLink( %1 -> %2 )" +msgstr "kopeeri viit( %1 -> %2)" + +#: directorymergewindow.cpp:2474 +msgid "Error: copyLink failed: Remote links are not yet supported." +msgstr "" +"Viga: viida kopeerimine ebaõnnestus, sest kaugviidad ei ole veel toetatud." + +#: directorymergewindow.cpp:2480 +msgid "Error: copyLink failed." +msgstr "Viga: viida kopeerimine ebaõnnestus." + +#: directorymergewindow.cpp:2500 +msgid "copy( %1 -> %2 )" +msgstr "kopeeri( %1 -> %2)" + +#: directorymergewindow.cpp:2526 +msgid "Error during rename( %1 -> %2 ): Cannot delete existing destination." +msgstr "" +"Viga operatsioonil 'nimeta ümber( %1 -> %2)': olemasoleva sihtkoha kustutamine " +"ebaõnnestus." + +#: directorymergewindow.cpp:2532 +msgid "rename( %1 -> %2 )" +msgstr "nimeta ümber( %1 -> %2)" + +#: directorymergewindow.cpp:2541 +msgid "Error: Rename failed." +msgstr "Viga: ümbernimetamine ebaõnnestus." + +#: directorymergewindow.cpp:2559 +msgid "Error during makeDir of %1. Cannot delete existing file." +msgstr "Viga kataloogi %1 loomisel: olemasoleva faili kustutamine ebaõnnestus." + +#: directorymergewindow.cpp:2575 +msgid "makeDir( %1 )" +msgstr "loo kataloog( %1 )" + +#: directorymergewindow.cpp:2585 +msgid "Error while creating directory." +msgstr "Viga kataloogi loomisel." + +#: directorymergewindow.cpp:2608 directorymergewindow.cpp:2725 +msgid "Dest" +msgstr "Sihtkoht" + +#: directorymergewindow.cpp:2612 directorymergewindow.cpp:2650 +msgid "Dir" +msgstr "Kataloog" + +#: directorymergewindow.cpp:2613 +msgid "Type" +msgstr "Tüüp" + +#: directorymergewindow.cpp:2614 +msgid "Size" +msgstr "Suurus" + +#: directorymergewindow.cpp:2615 +msgid "Attr" +msgstr "Atribuut" + +#: directorymergewindow.cpp:2616 +msgid "Last Modification" +msgstr "Viimase muutmise aeg" + +#: directorymergewindow.cpp:2617 +msgid "Link-Destination" +msgstr "Viit-sihtkoht" + +#: directorymergewindow.cpp:2667 +msgid "not available" +msgstr "pole kättesaadav" + +#: directorymergewindow.cpp:2687 +msgid "A (Dest): " +msgstr "A (sihtkoht): " + +#: directorymergewindow.cpp:2690 +msgid "A (Base): " +msgstr "A (baas): " + +#: directorymergewindow.cpp:2696 +msgid "B (Dest): " +msgstr "B (sihtkoht): " + +#: directorymergewindow.cpp:2704 +msgid "C (Dest): " +msgstr "C (sihtkoht): " + +#: directorymergewindow.cpp:2710 +msgid "Dest: " +msgstr "Sihtkoht: " + +#: directorymergewindow.cpp:2775 +msgid "Save Directory Merge State As..." +msgstr "Kataloogi ühendamisoleku salvestamine..." + +#: directorymergewindow.cpp:2862 +msgid "Start/Continue Directory Merge" +msgstr "Alusta/jätka kataloogi ühendamist" + +#: directorymergewindow.cpp:2863 +msgid "Run Operation for Current Item" +msgstr "Käivita operatsioon käesoleva elemendiga" + +#: directorymergewindow.cpp:2864 +msgid "Compare Selected File" +msgstr "Võrdle valitud faili" + +#: directorymergewindow.cpp:2865 +msgid "Merge Current File" +msgstr "Ãœhenda praegune fail" + +#: directorymergewindow.cpp:2866 +msgid "Fold All Subdirs" +msgstr "Ava kõik alamkataloogid" + +#: directorymergewindow.cpp:2867 +msgid "Unfold All Subdirs" +msgstr "Sule kõik alamkataloogid" + +#: directorymergewindow.cpp:2871 +msgid "Choose A for All Items" +msgstr "Vali A kõigile elementidele" + +#: directorymergewindow.cpp:2872 +msgid "Choose B for All Items" +msgstr "Vali B kõigile elementidele" + +#: directorymergewindow.cpp:2873 +msgid "Choose C for All Items" +msgstr "Vali C kõigile elementidele" + +#: directorymergewindow.cpp:2874 +msgid "Auto-Choose Operation for All Items" +msgstr "Automaatne valik kõigile elementidele" + +#: directorymergewindow.cpp:2875 +msgid "No Operation for All Items" +msgstr "Ei ühtki operatsiooni kõigile elementidele" + +#: directorymergewindow.cpp:2880 +msgid "Show Identical Files" +msgstr "Näita identseid faile" + +#: directorymergewindow.cpp:2881 +msgid "Show Different Files" +msgstr "Näita erinevaid faile" + +#: directorymergewindow.cpp:2882 +msgid "Show Files only in A" +msgstr "Näita ainult A faile" + +#: directorymergewindow.cpp:2883 +msgid "Show Files only in B" +msgstr "Näita ainult B faile" + +#: directorymergewindow.cpp:2884 +msgid "Show Files only in C" +msgstr "Näita ainult C faile" + +#: directorymergewindow.cpp:2888 +msgid "Compare Explicitly Selected Files" +msgstr "Võrdle valitud faile" + +#: directorymergewindow.cpp:2889 +msgid "Merge Explicitly Selected Files" +msgstr "Ãœhenda valitud failid" + +#: directorymergewindow.cpp:2891 directorymergewindow.cpp:2898 +msgid "Do Nothing" +msgstr "Ära tee midagi" + +#: directorymergewindow.cpp:2892 +msgid "A" +msgstr "A" + +#: directorymergewindow.cpp:2893 +msgid "B" +msgstr "B" + +#: directorymergewindow.cpp:2894 +msgid "C" +msgstr "C" + +#: directorymergewindow.cpp:2903 +msgid "Delete A && B" +msgstr "Kustuta A ja B" + +#: directorymergewindow.cpp:2906 +msgid "Merge to A && B" +msgstr "Ãœhenda A-sse ja B-sse" + +#: fileaccess.cpp:595 +msgid "" +"While trying to make a backup, deleting an older backup failed. \n" +"Filename: " +msgstr "" +"Varukoopia tegemisel ebaõnnestus vanema varukoopia kustutamine. \n" +"Faili nimi: " + +#: fileaccess.cpp:602 +msgid "" +"While trying to make a backup, renaming failed. \n" +"Filenames: " +msgstr "" +"Varukoopia tegemisel ebaõnnestus ümbernimetamine. \n" +"Failide nimed: " + +#: fileaccess.cpp:624 +#, c-format +msgid "Getting file status: %1" +msgstr "Faili staatuse hankimine: %1" + +#: fileaccess.cpp:667 +#, c-format +msgid "Reading file: %1" +msgstr "Faili lugemine: %1" + +#: fileaccess.cpp:703 +#, c-format +msgid "Writing file: %1" +msgstr "Faili kirjutamine: %1" + +#: fileaccess.cpp:731 +msgid "Out of memory" +msgstr "Mälu napib" + +#: fileaccess.cpp:766 +#, c-format +msgid "Making directory: %1" +msgstr "Kataloogi loomine: %1" + +#: fileaccess.cpp:786 +#, c-format +msgid "Removing directory: %1" +msgstr "Kataloogi eemaldamine: %1" + +#: fileaccess.cpp:801 +#, c-format +msgid "Removing file: %1" +msgstr "Faili eemaldamine: %1" + +#: fileaccess.cpp:817 +msgid "Creating symbolic link: %1 -> %2" +msgstr "Nimeviida loomine: %1 -> %2" + +#: fileaccess.cpp:843 +msgid "Renaming file: %1 -> %2" +msgstr "Faili ümbernimetamine: %1 -> %2" + +#: fileaccess.cpp:879 +msgid "Copying file: %1 -> %2" +msgstr "Faili kopeerimine: %1 -> %2" + +#: fileaccess.cpp:893 +#, c-format +msgid "" +"Error during file copy operation: Opening file for reading failed. Filename: %1" +msgstr "" +"Viga faili kopeerimise operatsioonil: faili avamine lugemiseks ebaõnnestus. " +"Failinimi: %1" + +#: fileaccess.cpp:899 +#, c-format +msgid "" +"Error during file copy operation: Opening file for writing failed. Filename: %1" +msgstr "" +"Viga faili kopeerimise operatsioonil: faili avamine kirjutamiseks ebaõnnestus. " +"Failinimi: %1" + +#: fileaccess.cpp:914 +#, c-format +msgid "Error during file copy operation: Reading failed. Filename: %1" +msgstr "" +"Viga faili kopeerimise operatsioonil: lugemine ebaõnnestus. Failinimi: %1" + +#: fileaccess.cpp:923 +#, c-format +msgid "Error during file copy operation: Writing failed. Filename: %1" +msgstr "" +"Viga faili kopeerimise operatsioonil: kirjutamine ebaõnnestus. Failinimi: %1" + +#: fileaccess.cpp:1219 +msgid "Reading directory: " +msgstr "Kataloogi lugemine: " + +#: fileaccess.cpp:1348 +#, c-format +msgid "Listing directory: %1" +msgstr "Kataloogi uurimine: %1" + +#: kdiff3.cpp:142 +msgid "Current Configuration:" +msgstr "Aktiivne seadistus:" + +#: kdiff3.cpp:147 +msgid "Config Option Error:" +msgstr "Seadistusvõtme viga:" + +#: kdiff3.cpp:187 +msgid "Option --auto used, but no output file specified." +msgstr "Kasutati võtit --atuo, kuid väljundfail pole määratud." + +#: kdiff3.cpp:323 +msgid "Option --auto ignored for directory comparison." +msgstr "Kataloogide võrdlemisel ignoreeriti võtit --auto." + +#: kdiff3.cpp:359 +msgid "Saving failed." +msgstr "Salvestamine ebaõnnestus." + +#: kdiff3.cpp:386 pdiff.cpp:1041 pdiff.cpp:1112 +msgid "Opening of these files failed:" +msgstr "Nende failide avamine ebaõnnestus:" + +#: kdiff3.cpp:395 +msgid "File Open Error" +msgstr "Viga faili avamisel" + +#: kdiff3.cpp:418 +msgid "Opens documents for comparison..." +msgstr "Avab dokumendid võrdlemiseks..." + +#: kdiff3.cpp:423 +msgid "Saves the merge result. All conflicts must be solved!" +msgstr "" +"Salvestab ühendamise tulemuse. Kõik konfliktid peavad olema lahendatud!" + +#: kdiff3.cpp:425 +msgid "Saves the current document as..." +msgstr "Salvestab käesoleva dokumendi nimega..." + +#: kdiff3.cpp:427 +msgid "Print the differences" +msgstr "Trükib erinevused" + +#: kdiff3.cpp:429 +msgid "Quits the application" +msgstr "Väljub rakendusest" + +#: kdiff3.cpp:431 +msgid "Cuts the selected section and puts it to the clipboard" +msgstr "Valitud teksti lõikamine ja asetamine lõikepuhvrisse" + +#: kdiff3.cpp:433 +msgid "Copies the selected section to the clipboard" +msgstr "Kopeerib valitud lõigu lõikepuhvrisse" + +#: kdiff3.cpp:435 +msgid "Pastes the clipboard contents to actual position" +msgstr "Lõikepuhvri sisu asetamine praegusesse asukohta" + +#: kdiff3.cpp:437 +msgid "Select everything in current window" +msgstr "Kogu aktiivse akna sisu valimine" + +#: kdiff3.cpp:439 +msgid "Search for a string" +msgstr "Otsib stringi" + +#: kdiff3.cpp:441 +msgid "Search again for the string" +msgstr "Otsib uuesti stringi" + +#: kdiff3.cpp:443 +msgid "Enables/disables the toolbar" +msgstr "Lülitab tööriistariba sisse/välja" + +#: kdiff3.cpp:445 +msgid "Enables/disables the statusbar" +msgstr "Lülitab staatusriba sisse/välja" + +#: kdiff3.cpp:449 +msgid "Configure KDiff3..." +msgstr "KDiff3 seadistamine..." + +#: kdiff3.cpp:470 +msgid "Go to Current Delta" +msgstr "Liigu praegusele erinevusele" + +#: kdiff3.cpp:471 +msgid "Go to First Delta" +msgstr "Liigu esimesele erinevusele" + +#: kdiff3.cpp:472 +msgid "Go to Last Delta" +msgstr "Liigu viimasele erinevusele" + +#: kdiff3.cpp:473 +msgid "(Skips white space differences when \"Show White Space\" is disabled.)" +msgstr "" +"(Jätab tühimärkide erinevused vahele, kui \"Tühimärkide näitamine\" ei ole " +"sees.)" + +#: kdiff3.cpp:474 +msgid "" +"(Does not skip white space differences even when \"Show White Space\" is " +"disabled.)" +msgstr "" +"(Tühimärkide erinevusi näidatakse isegi siis, kui \"Tühimärkide näitamine\" ei " +"ole sees.)" + +#: kdiff3.cpp:475 +msgid "Go to Previous Delta" +msgstr "Liigu eelmisele erinevusele" + +#: kdiff3.cpp:477 +msgid "Go to Next Delta" +msgstr "Liigu järgmisele erinevusele" + +#: kdiff3.cpp:479 +msgid "Go to Previous Conflict" +msgstr "Liigu eelmisele konfliktile" + +#: kdiff3.cpp:481 +msgid "Go to Next Conflict" +msgstr "Liigu järgmisele konfliktile" + +#: kdiff3.cpp:483 +msgid "Go to Previous Unsolved Conflict" +msgstr "Liigu eelmisele lahendamata konfliktile" + +#: kdiff3.cpp:485 +msgid "Go to Next Unsolved Conflict" +msgstr "Liigu järgmisele lahendamata konfliktile" + +#: kdiff3.cpp:487 +msgid "Select Line(s) From A" +msgstr "Vali rida/read A-st" + +#: kdiff3.cpp:488 +msgid "Select Line(s) From B" +msgstr "Vali rida/read B-st" + +#: kdiff3.cpp:489 +msgid "Select Line(s) From C" +msgstr "Vali rida/read C-st" + +#: kdiff3.cpp:490 +msgid "Automatically Go to Next Unsolved Conflict After Source Selection" +msgstr "" +"Pärast allikavalikut liigu automaatselt järgmisele lahendamata konfliktile" + +#: kdiff3.cpp:492 +msgid "Show Space && Tabulator Characters for Differences" +msgstr "Näita erinevusi tühiku- ja tabeldusmärkides" + +#: kdiff3.cpp:493 +msgid "Show White Space" +msgstr "Näita tühimärke" + +#: kdiff3.cpp:495 +msgid "Show Line Numbers" +msgstr "Näita reanumbreid" + +#: kdiff3.cpp:496 +msgid "Choose A Everywhere" +msgstr "Vali A kõikjal" + +#: kdiff3.cpp:497 +msgid "Choose B Everywhere" +msgstr "Vali B kõikjal" + +#: kdiff3.cpp:498 +msgid "Choose C Everywhere" +msgstr "Vali C kõikjal" + +#: kdiff3.cpp:499 +msgid "Choose A for All Unsolved Conflicts" +msgstr "Vali A kõigi lahendamata konfliktide korral" + +#: kdiff3.cpp:500 +msgid "Choose B for All Unsolved Conflicts" +msgstr "Vali B kõigi lahendamata konfliktide korral" + +#: kdiff3.cpp:501 +msgid "Choose C for All Unsolved Conflicts" +msgstr "Vali C kõigi lahendamata konfliktide korral" + +#: kdiff3.cpp:502 +msgid "Choose A for All Unsolved Whitespace Conflicts" +msgstr "Vali A kõigi lahendamata tühimärgikonkfliktide korral" + +#: kdiff3.cpp:503 +msgid "Choose B for All Unsolved Whitespace Conflicts" +msgstr "Vali B kõigi lahendamata tühimärgikonkfliktide korral" + +#: kdiff3.cpp:504 +msgid "Choose C for All Unsolved Whitespace Conflicts" +msgstr "Vali C kõigi lahendamata tühimärgikonkfliktide korral" + +#: kdiff3.cpp:505 +msgid "Automatically Solve Simple Conflicts" +msgstr "Lahenda automaatselt lihtsad konfliktid" + +#: kdiff3.cpp:506 +msgid "Set Deltas to Conflicts" +msgstr "Määra erinevused konfliktideks" + +#: kdiff3.cpp:507 +msgid "Run Regular Expression Auto Merge" +msgstr "Käivita regulaaravaldis automaatühendamisel" + +#: kdiff3.cpp:508 +msgid "Automatically Solve History Conflicts" +msgstr "Lahenda automaatselt ajalookonfliktid" + +#: kdiff3.cpp:509 +msgid "Split Diff At Selection" +msgstr "Jaga erinevused valiku juures" + +#: kdiff3.cpp:510 +msgid "Join Selected Diffs" +msgstr "Ãœhenda valitud erinevused" + +#: kdiff3.cpp:512 +msgid "Show Window A" +msgstr "Näita akent A" + +#: kdiff3.cpp:513 +msgid "Show Window B" +msgstr "Näita akent B" + +#: kdiff3.cpp:514 +msgid "Show Window C" +msgstr "Näita akent C" + +#: kdiff3.cpp:515 kdiff3.cpp:526 +msgid "Focus Next Window" +msgstr "Fokuseeri järgmisele aknale" + +#: kdiff3.cpp:517 +msgid "Normal Overview" +msgstr "Normaalne ülevaade" + +#: kdiff3.cpp:518 +msgid "A vs. B Overview" +msgstr "A-B ülevaade" + +#: kdiff3.cpp:519 +msgid "A vs. C Overview" +msgstr "A-C ülevaade" + +#: kdiff3.cpp:520 +msgid "B vs. C Overview" +msgstr "B-C ülevaade" + +#: kdiff3.cpp:521 +msgid "Word Wrap Diff Windows" +msgstr "Reamurdmine võrdlusakendes" + +#: kdiff3.cpp:522 +msgid "Add Manual Diff Alignment" +msgstr "Lisa käsitsi samasus" + +#: kdiff3.cpp:523 +msgid "Clear All Manual Diff Alignments" +msgstr "Eemalda kõik käsitsi määratud samasused" + +#: kdiff3.cpp:528 +msgid "Focus Prev Window" +msgstr "Fokuseeri eelmisele aknale" + +#: kdiff3.cpp:529 +msgid "Toggle Split Orientation" +msgstr "Lülita poolitamissuund" + +#: kdiff3.cpp:531 +msgid "Dir && Text Split Screen View" +msgstr "Kataloogi ja teksti poolitamisvaade" + +#: kdiff3.cpp:533 +msgid "Toggle Between Dir && Text View" +msgstr "Lülita kataloogi- ja tekstivaadet" + +#: kdiff3.cpp:582 pdiff.cpp:1712 +msgid "The merge result hasn't been saved." +msgstr "Ãœhendamise tulemust pole salvestatud." + +#: kdiff3.cpp:583 +msgid "Save && Quit" +msgstr "Salvesta ja välju" + +#: kdiff3.cpp:583 +msgid "Quit Without Saving" +msgstr "Välju salvestamata" + +#: kdiff3.cpp:591 pdiff.cpp:1721 +msgid "Saving the merge result failed." +msgstr "Ãœhendamise tulemuse salvestamine ebaõnnestus." + +#: kdiff3.cpp:602 pdiff.cpp:978 +msgid "" +"You are currently doing a directory merge. Are you sure, you want to abort?" +msgstr "Sul on parajasti käsil kataloogide ühendamine. Kas tõesti katkestada?" + +#: kdiff3.cpp:625 +msgid "Saving file..." +msgstr "Faili salvestamine..." + +#: kdiff3.cpp:642 +msgid "Saving file with a new filename..." +msgstr "Faili salvestamine uue nimega..." + +#: kdiff3.cpp:732 +msgid "Printing..." +msgstr "Trükkimine..." + +#: kdiff3.cpp:738 kdiff3.cpp:900 +msgid "Printing aborted." +msgstr "Trükkimine katkestati" + +#: kdiff3.cpp:870 +msgid "Selection" +msgstr "Valik" + +#: kdiff3.cpp:896 +msgid "Printing completed." +msgstr "Trükkimine lõpetatud." + +#: kdiff3.cpp:906 +msgid "Exiting..." +msgstr "Väljumine..." + +#: kdiff3.cpp:918 +msgid "Toggling toolbar..." +msgstr "Tööriistariba lülitamine..." + +#: kdiff3.cpp:939 +msgid "Toggle the statusbar..." +msgstr "Olekuriba lülitamine..." + +#: kdiff3_part.cpp:155 kdiff3_part.cpp:224 +msgid "Couldn't find files for comparison." +msgstr "Faile võrdlemiseks ei leitud." + +#: kdiff3_part.cpp:291 +msgid "KDiff3Part" +msgstr "KDiff3 komponent" + +#: kdiff3_shell.cpp:78 +msgid "" +"Could not find our part!\n" +"This usually happens due to an installation problem. Please read the " +"README-file in the source package for details." +msgstr "" +"KDiff3 komponenti ei õnnestunud leida!\n" +"Tavaliselt tähendab see paigaldusprobleemi. Palun loe lähtepaketi faili README." + +#: main.cpp:35 +msgid "Tool for Comparison and Merge of Files and Directories" +msgstr "Failide ja kataloogide võrdlemise ning ühendamise vahend" + +#: main.cpp:40 +msgid "Merge the input." +msgstr "Liidab sisendi." + +#: main.cpp:42 +msgid "Explicit base file. For compatibility with certain tools." +msgstr "Konkreetne põhifail (ühilduvuseks teatud tööriistadega)." + +#: main.cpp:44 +msgid "Output file. Implies -m. E.g.: -o newfile.txt" +msgstr "Väljundfail. Eeldab -m. Nt. -o usfail.txt" + +#: main.cpp:45 +msgid "Output file, again. (For compatibility with certain tools.)" +msgstr "Taas väljundfail (ühilduvuseks teatud tööriistadega)" + +#: main.cpp:46 +msgid "No GUI if all conflicts are auto-solvable. (Needs -o file)" +msgstr "GUI puudub, kui kõik konfliktid lahenevad ise (vajalik on -o fail)" + +#: main.cpp:47 +msgid "Don't solve conflicts automatically. (For compatibility...)" +msgstr "Konflikte ei lahendata automaatselt (jälle ühilduvuse nimel...)" + +#: main.cpp:48 +msgid "Visible name replacement for input file 1 (base)." +msgstr "Nähtava nime asendus sisendfailile 1 (baas)." + +#: main.cpp:49 +msgid "Visible name replacement for input file 2." +msgstr "Nähtava nime asendus sisendfailile 2." + +#: main.cpp:50 +msgid "Visible name replacement for input file 3." +msgstr "Nähtava nime asendus sisendfailile 3." + +#: main.cpp:52 +msgid "Alternative visible name replacement. Supply this once for every input." +msgstr "" +"Nähtava nime alternatiivne asendus. See tuleb anda kord iga sisendi jaoks." + +#: main.cpp:53 +msgid "" +"Override a config setting. Use once for every setting. E.g.: --cs " +"\"AutoAdvance=1\"" +msgstr "" +"Seadistusvõtme tühistamine. Tuleb kasutada iga võtme jaoks eraldi, nt. --cs " +"\"AutoAdvance=1\"" + +#: main.cpp:54 +msgid "Show list of config settings and current values." +msgstr "Seadistuste nimekirja ja võtmete kehtivate väärtuste näitamine." + +#: main.cpp:55 +msgid "Use a different config file." +msgstr "Muu seadistustefaili kasutamine." + +#: main.cpp:59 +msgid "file1 to open (base, if not specified via --base)" +msgstr "avatav fail1 (põhifail, kui --base teisiti ei määra)" + +#: main.cpp:60 +msgid "file2 to open" +msgstr "avatav fail2" + +#: main.cpp:61 +msgid "file3 to open" +msgstr "avatav fail3" + +#: main.cpp:93 +msgid "Ignored. (User defined.)" +msgstr "Ignoreeritakse (kasutaja määratud)" + +#. i18n: file kdiff3_part.rc line 16 +#: main.cpp:173 rc.cpp:9 +#, no-c-format +msgid "KDiff3" +msgstr "KDiff3" + +#: main.cpp:186 +msgid "+ Many thanks to those who reported bugs and contributed ideas!" +msgstr "" +"+ palju tänu kõigile, kes andsid teada vigadest ja pakkusid välja uusi mõtteid!" + +#: mergeresultwindow.cpp:136 mergeresultwindow.cpp:939 +#: mergeresultwindow.cpp:953 mergeresultwindow.cpp:965 +#: mergeresultwindow.cpp:977 +msgid "Number of remaining unsolved conflicts: %1 (of which %2 are whitespace)" +msgstr "Lahendamata konfliktide arv: %1 (neist %2 on tühimärgierinevused)" + +#: mergeresultwindow.cpp:285 +msgid "" +"The output has been modified.\n" +"If you continue your changes will be lost." +msgstr "" +"Väljundit on muudetud.\n" +"Kui jätkad, lähevad sinu muudatused kaotsi." + +#: mergeresultwindow.cpp:797 pdiff.cpp:511 +msgid "All input files are binary equal." +msgstr "Kõik sisendfailid on binaarselt võrdsed." + +#: mergeresultwindow.cpp:799 +msgid "All input files contain the same text." +msgstr "Kõik sisendfailid sisaldavad ühesugust teksti." + +#: mergeresultwindow.cpp:801 +msgid "" +"Files A and B are binary equal.\n" +msgstr "" +"Failid A ja B on binaarselt võrdsed.\n" + +#: mergeresultwindow.cpp:802 +msgid "" +"Files A and B have equal text. \n" +msgstr "" +"Failid A ja B on ühesuguse tekstiga. \n" + +#: mergeresultwindow.cpp:803 +msgid "" +"Files A and C are binary equal.\n" +msgstr "" +"Failid A ja C on binaarselt võrdsed.\n" + +#: mergeresultwindow.cpp:804 +msgid "" +"Files A and C have equal text. \n" +msgstr "" +"Failid A ja C on ühesuguse tekstiga. \n" + +#: mergeresultwindow.cpp:805 +msgid "" +"Files B and C are binary equal.\n" +msgstr "" +"Failid B ja C on binaarselt võrdsed.\n" + +#: mergeresultwindow.cpp:806 +msgid "" +"Files B and C have equal text. \n" +msgstr "" +"Failid B ja C on ühesuguse tekstiga. \n" + +#: mergeresultwindow.cpp:812 +msgid "Total number of conflicts: " +msgstr "Konfliktide koguarv: " + +#: mergeresultwindow.cpp:813 +msgid "" +"\n" +"Nr of automatically solved conflicts: " +msgstr "" +"\n" +"Automaatselt lahendatud konfliktide arv: " + +#: mergeresultwindow.cpp:814 +msgid "" +"\n" +"Nr of unsolved conflicts: " +msgstr "" +"\n" +"Lahendamata konfliktide arv: " + +#: mergeresultwindow.cpp:816 +msgid "Conflicts" +msgstr "Konfliktid" + +#: mergeresultwindow.cpp:1652 +msgid "" +msgstr "" + +#: mergeresultwindow.cpp:1660 +msgid "" +msgstr "<Ãœhendamise konflikt (ainult tühimärgid)>" + +#: mergeresultwindow.cpp:1662 mergeresultwindow.cpp:2427 +msgid "" +msgstr "<Ãœhendamise konflikt>" + +#: mergeresultwindow.cpp:2635 +msgid "" +"Not all conflicts are solved yet.\n" +"File not saved.\n" +msgstr "" +"Kõik konfliktid pole veel lahendatud.\n" +"Faili ei salvestatud.\n" + +#: mergeresultwindow.cpp:2637 +msgid "Conflicts Left" +msgstr "Järelejäänud konfliktid" + +#: mergeresultwindow.cpp:2649 +msgid "" +"\n" +"\n" +"Creating backup failed. File not saved." +msgstr "" +"\n" +"\n" +"Varukoopia loomine ebaõnnestus. Faili ei salvestatud." + +#: mergeresultwindow.cpp:2649 mergeresultwindow.cpp:2689 +msgid "File Save Error" +msgstr "Faili salvestamise viga" + +#: mergeresultwindow.cpp:2689 +msgid "Error while writing." +msgstr "Kirjutamise viga." + +#: mergeresultwindow.cpp:3020 +msgid "Output" +msgstr "Väljund" + +#: mergeresultwindow.cpp:3032 mergeresultwindow.cpp:3139 +msgid "[Modified]" +msgstr "[Muudetud]" + +#: mergeresultwindow.cpp:3039 +msgid "Encoding for saving" +msgstr "Kodeering salvestamisel" + +#: mergeresultwindow.cpp:3075 mergeresultwindow.cpp:3081 +#: mergeresultwindow.cpp:3087 +msgid "Codec from" +msgstr "Koodek" + +#: optiondialog.cpp:362 +msgid "Unicode, 8 bit" +msgstr "Unicode (8-bitine)" + +#: optiondialog.cpp:363 +msgid "Unicode" +msgstr "Unicode" + +#: optiondialog.cpp:364 +msgid "Latin1" +msgstr "Latin1" + +#: optiondialog.cpp:383 +msgid "Change this if non-ASCII characters are not displayed correctly." +msgstr "Muuda, kui mitte-ASCII sümboleid ei näidata korrektselt." + +#: optiondialog.cpp:510 +msgid "Editor & Diff Output Font" +msgstr "Redaktori ja erinevuse väljundi font" + +#: optiondialog.cpp:531 +msgid "Italic font for deltas" +msgstr "Kaldkiri erinevustele" + +#: optiondialog.cpp:534 +msgid "" +"Selects the italic version of the font for differences.\n" +"If the font doesn't support italic characters, then this does nothing." +msgstr "" +"Valib fondi kaldkirjaversiooni erinevuste näitamiseks.\n" +"Kui font ei toeta kaldkirja, ei tee midagi." + +#: optiondialog.cpp:542 +msgid "Color" +msgstr "Värv" + +#: optiondialog.cpp:542 +msgid "Colors Settings" +msgstr "Värviseadistused" + +#: optiondialog.cpp:556 +msgid "Editor and Diff Views:" +msgstr "Redaktori ja erinevuse vaated:" + +#: optiondialog.cpp:564 +msgid "Foreground color:" +msgstr "Esiplaani värv:" + +#: optiondialog.cpp:570 +msgid "Background color:" +msgstr "Tausta värv:" + +#: optiondialog.cpp:578 +msgid "Diff background color:" +msgstr "Erinevuse tausta värv:" + +#: optiondialog.cpp:585 +msgid "Color A:" +msgstr "Värv A:" + +#: optiondialog.cpp:592 +msgid "Color B:" +msgstr "Värv B:" + +#: optiondialog.cpp:599 +msgid "Color C:" +msgstr "Värv C:" + +#: optiondialog.cpp:605 +msgid "Conflict color:" +msgstr "Konflikti värv:" + +#: optiondialog.cpp:612 +msgid "Current range background color:" +msgstr "Praeguse vahemiku tausta värv:" + +#: optiondialog.cpp:619 +msgid "Current range diff background color:" +msgstr "Praeguse vahemiku erinevuse tausta värv:" + +#: optiondialog.cpp:625 +msgid "Color for manually aligned difference ranges:" +msgstr "Käsitsi määratud samasuse vahemiku värv:" + +#: optiondialog.cpp:630 +msgid "Directory Comparison View:" +msgstr "Kataloogi võrdlemise vaade:" + +#: optiondialog.cpp:636 +msgid "Newest file color:" +msgstr "Uusima faili värv:" + +#: optiondialog.cpp:639 +msgid "" +"Changing this color will only be effective when starting the next directory " +"comparison." +msgstr "" +"Seda värvi muudetakse alles siis, kui alustad järgmist kataloogide võrdlemist." + +#: optiondialog.cpp:644 +msgid "Oldest file color:" +msgstr "Vanima faili värv:" + +#: optiondialog.cpp:651 +msgid "Middle age file color:" +msgstr "Keskmise vanusega faili värv:" + +#: optiondialog.cpp:658 +msgid "Color for missing files:" +msgstr "Puuduvate failide värv:" + +#: optiondialog.cpp:670 +msgid "Editor" +msgstr "Redaktor" + +#: optiondialog.cpp:670 +msgid "Editor Behavior" +msgstr "Redaktori käitumine" + +#: optiondialog.cpp:680 +msgid "Tab inserts spaces" +msgstr "TAB lisab tühikud" + +#: optiondialog.cpp:683 +msgid "" +"On: Pressing tab generates the appropriate number of spaces.\n" +"Off: A Tab-character will be inserted." +msgstr "" +"Sees: TAB klahvi vajutamine tekitab sobiva hulga tühikuid.\n" +"Väljas: lisatakse tabeldusmärk." + +#: optiondialog.cpp:689 +msgid "Tab size:" +msgstr "TABi suurus:" + +#: optiondialog.cpp:694 +msgid "Auto indentation" +msgstr "Automaatne taandus" + +#: optiondialog.cpp:697 +msgid "" +"On: The indentation of the previous line is used for a new line.\n" +msgstr "" +"Sees: uuel real kasutatakse eelmise rea taandust.\n" + +#: optiondialog.cpp:701 +msgid "Auto copy selection" +msgstr "Valiku automaatne kopeerimine" + +#: optiondialog.cpp:704 +msgid "" +"On: Any selection is immediately written to the clipboard.\n" +"Off: You must explicitely copy e.g. via Ctrl-C." +msgstr "" +"Sees: iga valik asetatakse otsekohe lõikepuhvrisse.\n" +"Väljas: kopeerimiseks tuleb anda selge käsk, nt. CTRL+C." + +#: optiondialog.cpp:709 +msgid "Line end style:" +msgstr "Realõpu stiil:" + +#: optiondialog.cpp:721 +msgid "" +"Sets the line endings for when an edited file is saved.\n" +"DOS/Windows: CR+LF; UNIX: LF; with CR=0D, LF=0A" +msgstr "" +"Määrab realõpu stiili redigeeritud faili salvestamisel.\n" +"DOS/Windows: CR+LF; Unix: LF; sealjuures CR=0D, LF=0A" + +#: optiondialog.cpp:732 +msgid "Diff" +msgstr "ERinevused" + +#: optiondialog.cpp:732 +msgid "Diff Settings" +msgstr "Erinevuse seadistused" + +#: optiondialog.cpp:743 +msgid "Preserve carriage return" +msgstr "Säilitatakse reavahetus" + +#: optiondialog.cpp:746 +msgid "" +"Show carriage return characters '\\r' if they exist.\n" +"Helps to compare files that were modified under different operating systems." +msgstr "" +"Näidatakse kelgutagastusmärke '\\r', kui neid on.\n" +"See on abiks erinevatest operatsioonisüsteemidest pärit failide võrdlemisel." + +#: optiondialog.cpp:751 +msgid "Ignore numbers" +msgstr "Numbreid ignoreeritakse" + +#: optiondialog.cpp:754 +msgid "" +"Ignore number characters during line matching phase. (Similar to Ignore white " +"space.)\n" +"Might help to compare files with numeric data." +msgstr "" +"Reasobivuse juures ignoreeritakse numbreid (sarnane tühimärkide " +"ignoreerimisega).\n" +"Võib olla abiks numbrilisi andmeid sisaldavate failide võrdlemisel." + +#: optiondialog.cpp:759 +msgid "Ignore C/C++ comments" +msgstr "C/C++ kommentaare ignoreeritakse" + +#: optiondialog.cpp:761 +msgid "Treat C/C++ comments like white space." +msgstr "C/C++ kommentaare käsitletakse tühimärkidena." + +#: optiondialog.cpp:765 +msgid "Ignore case" +msgstr "Tõstu ignoreeritakse" + +#: optiondialog.cpp:768 +msgid "Treat case differences like white space changes. ('a'<=>'A')" +msgstr "Tõstuerinevusi käsitletakse tühimärgimuutustena. ('a'<=>'A')" + +#: optiondialog.cpp:772 +msgid "Preprocessor command:" +msgstr "Eeltöötluse käsk" + +#: optiondialog.cpp:776 +msgid "User defined pre-processing. (See the docs for details.)" +msgstr "Kasutaja määratud eeltöötlus (vaata lähemalt käsiraamatust)." + +#: optiondialog.cpp:779 +msgid "Line-matching preprocessor command:" +msgstr "Ridade sobivuse eeltöötluse käsk:" + +#: optiondialog.cpp:783 +msgid "" +"This pre-processor is only used during line matching.\n" +"(See the docs for details.)" +msgstr "" +"Seda eeltöötlusvahendit kasutatakse ainult ridade sobivuse leidmisel\n" +"(vaata lähemalt käsiraamatust)." + +#: optiondialog.cpp:786 +msgid "Try hard (slower)" +msgstr "Karm uurimine (aeglane)" + +#: optiondialog.cpp:789 +msgid "" +"Enables the --minimal option for the external diff.\n" +"The analysis of big files will be much slower." +msgstr "" +"Lubab välise diff-rakenduse korral võtme --minimal.\n" +"Suurte failide analüüs muutub palju aeglasemaks." + +#: optiondialog.cpp:794 +msgid "Auto advance delay (ms):" +msgstr "Automaatse edasiliikumise viivitus (ms):" + +#: optiondialog.cpp:799 +msgid "" +"When in Auto-Advance mode the result of the current selection is shown \n" +"for the specified time, before jumping to the next conflict. Range: 0-2000 ms" +msgstr "" +"Automaatse edasiliikumise režiimis näidatakse tulemust määratud aeg ning \n" +"siis hüpatakse järgmisele konfliktile. Vahemik: 0-2000 ms" + +#: optiondialog.cpp:809 +msgid "Merge Settings" +msgstr "Ãœhendamise seadistused" + +#: optiondialog.cpp:822 +msgid "White space 2-file merge default:" +msgstr "Tühimärkide käsitlemine kahe faili ühendamisel:" + +#: optiondialog.cpp:826 optiondialog.cpp:839 +msgid "Manual Choice" +msgstr "Käsitsivalik" + +#: optiondialog.cpp:830 optiondialog.cpp:844 +msgid "" +"Allow the merge algorithm to automatically select an input for white-space-only " +"changes." +msgstr "" +"Lubab ühendamisalgoritmil ainult tühimärkides seisneva erinevuse korral " +"automaatselt valida sisendi." + +#: optiondialog.cpp:835 +msgid "White space 3-file merge default:" +msgstr "Tühimärkide käsitlemine kolme faili ühendamisel:" + +#: optiondialog.cpp:849 +msgid "Automatic Merge Regular Expression" +msgstr "Automaatühendamise regulaaravaldis" + +#: optiondialog.cpp:858 smalldialogs.cpp:397 +msgid "Auto merge regular expression:" +msgstr "Automaatühendamise regulaaravaldis:" + +#: optiondialog.cpp:862 +msgid "" +"Regular expression for lines where KDiff3 should automatically choose one " +"source.\n" +"When a line with a conflict matches the regular expression then\n" +"- if available - C, otherwise B will be chosen." +msgstr "" +"Regulaaravaldis ridadele, kus KDiff3 peab automaatselt valima ühe allika.\n" +"Kui konflikti sisaldav rida sobib regulaaravaldisega, siis\n" +"valitakse - kui võimalik - C, vastasel juhul B." + +#: optiondialog.cpp:868 +msgid "Run regular expression auto merge on merge start" +msgstr "" +"Regulaarühendusega automaatühendamise käivitamine ühendamise alustamisel" + +#: optiondialog.cpp:870 +msgid "" +"Run the merge for auto merge regular expressions\n" +"immediately when a merge starts.\n" +msgstr "" +"Regulaarühendusega automaatühendamine käivitatakse\n" +"kohe ühendamise alustamisel.\n" + +#: optiondialog.cpp:875 +msgid "Version Control History Merging" +msgstr "Versioonikonrolli ajaloo ühendamine" + +#: optiondialog.cpp:884 smalldialogs.cpp:424 +msgid "History start regular expression:" +msgstr "Ajaloo alguse regulaaravaldis:" + +#: optiondialog.cpp:888 +msgid "" +"Regular expression for the start of the version control history entry.\n" +"Usually this line contains the \"$Log$\"-keyword.\n" +"Default value: \".*\\$Log.*\\$.*\"" +msgstr "" +"Regulaaravaldis versioonikontrolli ajaloo kirje alguse jaoks.\n" +"Tavaliselt leidub seal real võtmesõna \"$Log$\".\n" +"Vaikimisi: \".*\\$Log.*\\$.*\"" + +#: optiondialog.cpp:894 smalldialogs.cpp:453 +msgid "History entry start regular expression:" +msgstr "Ajaloo kirje alguse regulaaravaldis:" + +#: optiondialog.cpp:906 +msgid "" +"A version control history entry consists of several lines.\n" +"Specify the regular expression to detect the first line (without the leading " +"comment).\n" +"Use parentheses to group the keys you want to use for sorting.\n" +"If left empty, then KDiff3 assumes that empty lines separate history entries.\n" +"See the documentation for details." +msgstr "" +"Versioonikontrolli ajaloo kirje koosneb mitmest reast.\n" +"Siin saab määrata esimese rea (ilma alustava kommentaarita) tuvastamiseks " +"mõeldud regulaaravaldise.\n" +"Sulgudega saab rühmitada võtmeid, mida tahad kasutada sortimiseks.\n" +"Kui see tühjaks jätta, eeldab KDiff3, et ajaloo kirjeid eraldavad tühjad read.\n" +"Täpsemalt räägib sellest käsiraamat." + +#: optiondialog.cpp:914 +msgid "History merge sorting" +msgstr "Ajaloo ühendamise sortimine" + +#: optiondialog.cpp:916 +msgid "Sort version control history by a key." +msgstr "Versioonikontrolli ajaloo sortimine võtmete järgi." + +#: optiondialog.cpp:926 +msgid "History entry start sort key order:" +msgstr "Ajaloo sortimisvõtmete järjekord:" + +#: optiondialog.cpp:930 +msgid "" +"Each parentheses used in the regular expression for the history start entry\n" +"groups a key that can be used for sorting.\n" +"Specify the list of keys (that are numbered in order of occurrence\n" +"starting with 1) using ',' as separator (e.g. \"4,5,6,1,2,3,7\").\n" +"If left empty, then no sorting will be done.\n" +"See the documentation for details." +msgstr "" +"Kõik ajalookirjete alguse määramiseks mõeldud regulaaravaldistes\n" +"kasutatud sulud rühmitavad võtmed, mida saab tarvitada sortimiseks.\n" +"Määra siin võtmete järjekord (need on siin järjekorras alates 1),\n" +"kasutades eraldajana koma ',' (nt. \"4,5,6,1,2,3,7\").\n" +"Kui see tühjaks jätta, siis midagi ei sordita.\n" +"Täpsemalt räägib sellest käsiraamat." + +#: optiondialog.cpp:941 +msgid "Merge version control history on merge start" +msgstr "Versioonikontrolli ajaloo ühendamine ühendamise alustamisel" + +#: optiondialog.cpp:943 +msgid "Run version control history automerge on merge start." +msgstr "" +"Versioonikontrolli ajaloo automaatühendamise käivitamine kohe ühendamise " +"alustamisel." + +#: optiondialog.cpp:947 +msgid "Test your regular expressions" +msgstr "Regulaaravaldiste test" + +#: optiondialog.cpp:952 +msgid "Irrelevant merge command:" +msgstr "Ebaolulise ühendamise käsk:" + +#: optiondialog.cpp:956 +msgid "" +"If specified this script is run after automerge\n" +"when no other relevant changes were detected.\n" +"Called with the parameters: filename1 filename2 filename3" +msgstr "" +"Määramise korral käivitatakse see skript\n" +"pärast automaatühendamist, kui muid muudatusi ei avastada.\n" +"See kutsutakse välja parameetritega: failinimi1 failinimi2 failinimi3" + +#: optiondialog.cpp:966 +msgid "Directory Merge" +msgstr "Kataloogi ühendamine" + +#: optiondialog.cpp:975 +msgid "Recursive directories" +msgstr "Rekursiivsed kataloogid" + +#: optiondialog.cpp:977 +msgid "Whether to analyze subdirectories or not." +msgstr "Kas analüüsida alamkatalooge või mitte." + +#: optiondialog.cpp:979 +msgid "File pattern(s):" +msgstr "Failimustrid:" + +#: optiondialog.cpp:984 +msgid "" +"Pattern(s) of files to be analyzed. \n" +"Wildcards: '*' and '?'\n" +"Several Patterns can be specified by using the separator: ';'" +msgstr "" +"Failide mustrid, mida analüüsida. \n" +"Metamärgid: '*' ja '?'\n" +"Mitme mustri määramisel kasuta eraldajana semikoolonit (;)" + +#: optiondialog.cpp:990 +msgid "File-anti-pattern(s):" +msgstr "Anti-failimustrid:" + +#: optiondialog.cpp:995 +msgid "" +"Pattern(s) of files to be excluded from analysis. \n" +"Wildcards: '*' and '?'\n" +"Several Patterns can be specified by using the separator: ';'" +msgstr "" +"Failide mustrid, mida analüüsil välja jätta. \n" +"Metamärgid: '*' ja '?'\n" +"Mitme mustri määramisel kasuta eraldajana semikoolonit (;)" + +#: optiondialog.cpp:1001 +msgid "Dir-anti-pattern(s):" +msgstr "Anti-kataloogimustrid:" + +#: optiondialog.cpp:1006 +msgid "" +"Pattern(s) of directories to be excluded from analysis. \n" +"Wildcards: '*' and '?'\n" +"Several Patterns can be specified by using the separator: ';'" +msgstr "" +"Kataloogide mustrid, mida analüüsil välja jätta. \n" +"Metamärgid: '*' ja '?'\n" +"Mitme mustri määramisel kasuta eraldajana semikoolonit (;)" + +#: optiondialog.cpp:1012 +msgid "Use .cvsignore" +msgstr ".cvsignore kasutamine" + +#: optiondialog.cpp:1015 +msgid "" +"Extends the antipattern to anything that would be ignored by CVS.\n" +"Via local \".cvsignore\"-files this can be directory specific." +msgstr "" +"Laiendab antimustrit kõigele, mida eiraks CVS.\n" +"Kohalike \".cvsignore\" failide abil võib see olla kataloogipõhine." + +#: optiondialog.cpp:1020 +msgid "Find hidden files and directories" +msgstr "Peidetud failide ja kataloogide otsimine" + +#: optiondialog.cpp:1023 +msgid "Finds files and directories with the hidden attribute." +msgstr "Otsitakse peidetud faile ja katalooge." + +#: optiondialog.cpp:1025 +msgid "Finds files and directories starting with '.'." +msgstr "Failide ja kataloogide otsimine, mille alguses seisab '.'." + +#: optiondialog.cpp:1029 +msgid "Follow file links" +msgstr "Failiviitade järgimine" + +#: optiondialog.cpp:1032 +msgid "" +"On: Compare the file the link points to.\n" +"Off: Compare the links." +msgstr "" +"Sees: võrreldakse faili, mille viit osutab.\n" +"Väljas: võrreldakse viitu." + +#: optiondialog.cpp:1037 +msgid "Follow directory links" +msgstr "Kataloogiviitade järgimine" + +#: optiondialog.cpp:1040 +msgid "" +"On: Compare the directory the link points to.\n" +"Off: Compare the links." +msgstr "" +"Sees: võrreldakse kataloogi, mille viit osutab.\n" +"Väljas: võrreldakse viitu." + +#: optiondialog.cpp:1056 +msgid "Case sensitive filename comparison" +msgstr "Tõstutundlik failinimede võrdlemine" + +#: optiondialog.cpp:1059 +msgid "" +"The directory comparison will compare files or directories when their names " +"match.\n" +"Set this option if the case of the names must match. (Default for Windows is " +"off, otherwise on.)" +msgstr "" +"Kataloogide võrdlemisel võrreldakse failide või kataloogide nimesid.\n" +"Selle valiku sisselülitamisel peab sobima ka nimede tähesuurus (Windowsis on " +"see vaikimisi välja lülitatud, muidu sees)." + +#: optiondialog.cpp:1063 +msgid "File Comparison Mode" +msgstr "Faili võrdlemise režiim" + +#: optiondialog.cpp:1067 +msgid "Binary comparison" +msgstr "Binaarvõrdlus" + +#: optiondialog.cpp:1068 +msgid "Binary comparison of each file. (Default)" +msgstr "Iga faili binaarvõrdlus. (vaikimisi)" + +#: optiondialog.cpp:1070 +msgid "Full analysis" +msgstr "Täielik analüüs" + +#: optiondialog.cpp:1071 +msgid "" +"Do a full analysis and show statistics information in extra columns.\n" +"(Slower than a binary comparison, much slower for binary files.)" +msgstr "" +"Tehakse täielik analüüs, statistikat näidatakse lisaveergudes.\n" +"(Aeglasem kui binaarvõrdlus ja eriti aeglane binaarfailide korral.)" + +#: optiondialog.cpp:1074 +msgid "Trust the modification date (unsafe)" +msgstr "Muutmiskuupäeva usaldamine (ebaturvaline)" + +#: optiondialog.cpp:1075 +msgid "" +"Assume that files are equal if the modification date and file length are " +"equal.\n" +"Useful for big directories or slow networks." +msgstr "" +"Eeldatakse, et failid on võrdsed, kui muutmiskuupäev ja failipikkus on " +"võrdsed.\n" +"Mõttekas suurte kataloogide või aeglase võrgu korral." + +#: optiondialog.cpp:1078 +msgid "Trust the size (unsafe)" +msgstr "Suuruse usaldamine (ebaturvaline)" + +#: optiondialog.cpp:1079 +msgid "" +"Assume that files are equal if their file lengths are equal.\n" +"Useful for big directories or slow networks when the date is modified during " +"download." +msgstr "" +"Eeldatakse, et failid on võrdsed, kui failipikkus on võrdne.\n" +"Mõttekas suurte kataloogide või aeglase võrgu korral, kui kuupäev võib " +"allalaadimise käigus olla muutunud." + +#: optiondialog.cpp:1083 +msgid "Synchronize directories" +msgstr "Kataloogide sünkroniseerimine" + +#: optiondialog.cpp:1086 +msgid "" +"Offers to store files in both directories so that\n" +"both directories are the same afterwards.\n" +"Works only when comparing two directories without specifying a destination." +msgstr "" +"Võimaldab salvestada failid mõlemasse kataloogi,\n" +"nii et need näevad pärast seda välja ühesugused.\n" +"Toimib ainult kahe kataloogi võrdlemisel ilma sihtkohta määramata." + +#: optiondialog.cpp:1092 +msgid "White space differences considered equal" +msgstr "Tühimärkide erinevust ei arvestata" + +#: optiondialog.cpp:1095 +msgid "" +"If files differ only by white space consider them equal.\n" +"This is only active when full analysis is chosen." +msgstr "" +"Kui failid erinevad ainult tühimärkide poolest, peetakse neid võrdseks.\n" +"See valik on aktiivne ainult täieliku analüüsi korral." + +#: optiondialog.cpp:1101 +msgid "Copy newer instead of merging (unsafe)" +msgstr "Ãœhendamise asemel kopeeritakse uuem (ebaturvaline)" + +#: optiondialog.cpp:1104 +msgid "" +"Don't look inside, just take the newer file.\n" +"(Use this only if you know what you are doing!)\n" +"Only effective when comparing two directories." +msgstr "" +"Sisse ei vaadata, võetakse lihtsalt uuem fail.\n" +"(Kasuta ainult siis, kui tead, mida teed!)\n" +"Toimib ainult kahe kataloogi võrdlemisel." + +#: optiondialog.cpp:1109 +msgid "Backup files (.orig)" +msgstr "Failidest tehakse varukoopia (.orig)" + +#: optiondialog.cpp:1112 +msgid "" +"When a file would be saved over an old file, then the old file\n" +"will be renamed with a '.orig'-extension instead of being deleted." +msgstr "" +"Kui fail salvestatakse vana faili asemele, ei kustutata vana faili,\n" +"vaid sellele antakse uus nimi laiendiga '.orig'." + +#: optiondialog.cpp:1176 +msgid "Regional Settings" +msgstr "Lokaale seadistused" + +#: optiondialog.cpp:1272 +msgid "Language (restart required)" +msgstr "Keel (vajalik taaskäivitus)" + +#: optiondialog.cpp:1304 +msgid "" +"Choose the language of the GUI-strings or \"Auto\".\n" +"For a change of language to take place, quit and restart KDiff3." +msgstr "" +"Vali GUI stringide keel või \"Auto\".\n" +"Keele tegelikuks muutmiseks tuleb KDiff3 sulgeda ja uuesti käivitada." + +#: optiondialog.cpp:1322 +msgid "Use the same encoding for everything:" +msgstr "Kõikjal kasutatakse kodeeringut:" + +#: optiondialog.cpp:1325 +msgid "" +"Enable this allows to change all encodings by changing the first only.\n" +"Disable this if different individual settings are needed." +msgstr "" +"Lubab muuta kõiki kodeeringuid ainult esimest kodeeringut muutes.\n" +"Kui vaja on erinevaid määratlusi, lülita välja." + +#: optiondialog.cpp:1330 +msgid "Note: Local Encoding is " +msgstr "Märkus: kohalik kodeering on " + +#: optiondialog.cpp:1334 +msgid "File Encoding for A:" +msgstr "A kodeering:" + +#: optiondialog.cpp:1340 +msgid "" +"If enabled then Unicode (UTF-16 or UTF-8) encoding will be detected.\n" +"If the file encoding is not detected then the selected encoding will be used as " +"fallback.\n" +"(Unicode detection depends on the first bytes of a file - the byte order mark " +"\"BOM\".)" +msgstr "" +"Sisselülitamisel tuvastatakse Unicode (UTF-16 või UTF-8) kodeering.\n" +"Kui faili kodeeringut ei tuvastata, kasutatakse selle asemel valitud " +"kodeeringut.\n" +"(Unicode tuvastamine sõltub faili esimestest baitidest - baidijärjrekorra " +"tähisest \"BOM\".)" + +#: optiondialog.cpp:1344 optiondialog.cpp:1353 optiondialog.cpp:1362 +msgid "Auto Detect Unicode" +msgstr "Unicode automaatne tuvastamine" + +#: optiondialog.cpp:1349 +msgid "File Encoding for B:" +msgstr "B kodeering:" + +#: optiondialog.cpp:1358 +msgid "File Encoding for C:" +msgstr "C kodeering:" + +#: optiondialog.cpp:1367 +msgid "File Encoding for Merge Output and Saving:" +msgstr "Kodeering ühendamisväljundil ja salvestamisel:" + +#: optiondialog.cpp:1371 +msgid "Auto Select" +msgstr "Automaatne valik" + +#: optiondialog.cpp:1374 +msgid "" +"If enabled then the encoding from the input files is used.\n" +"In ambiguous cases a dialog will ask the user to choose the encoding for " +"saving." +msgstr "" +"Sisselülitamisel kasutatakse sisendfailide kodeeringut.\n" +"Kahtluse korral ilmub dialoog, mis laseb kasutajal valida salvestamisel " +"kasutatava kodeeringu." + +#: optiondialog.cpp:1378 +msgid "File Encoding for Preprocessor Files:" +msgstr "Eelprotsessori failide kodeering:" + +#: optiondialog.cpp:1389 +msgid "Right To Left Language" +msgstr "Paremalt-vasakule keeled" + +#: optiondialog.cpp:1392 +msgid "" +"Some languages are read from right to left.\n" +"This setting will change the viewer and editor accordingly." +msgstr "" +"Mõningaid keeli loetakse ja kirjutatakse paremalt vasakule.\n" +"Selle valikuga saab vastavalt muuta näitajat ja redaktorit." + +#: optiondialog.cpp:1402 +msgid "Integration" +msgstr "Integreerimine" + +#: optiondialog.cpp:1402 +msgid "Integration Settings" +msgstr "Integreerimisseadistused" + +#: optiondialog.cpp:1412 +msgid "Command line options to ignore:" +msgstr "Ignoreeritavad käsurea võtmed:" + +#: optiondialog.cpp:1417 +msgid "" +"List of command line options that should be ignored when KDiff3 is used by " +"other tools.\n" +"Several values can be specified if separated via ';'\n" +"This will suppress the \"Unknown option\"-error." +msgstr "" +"Käsurea võtmete nimekiri, mida ignoreeritakse, kui KDiff3 kasutavad teised " +"tööriistad.\n" +"Mitme väärtuse andmisel tuleb need eraldada semikooloniga (;).\n" +"See väldib vigu \"Tundmatu võti\"." + +#: optiondialog.cpp:1480 +msgid "" +"You selected a variable width font.\n" +"\n" +"Because this program doesn't handle variable width fonts\n" +"correctly, you might experience problems while editing.\n" +"\n" +"Do you want to continue or do you want to select another font." +msgstr "" +"Valisid muutuva laiusega fondi.\n" +"\n" +"Kuna see rakendus ei käitle muutuva laiusega fonte\n" +"korrektselt, võib redigeerimisel esineda probleeme.\n" +"\n" +"Kas soovid jätkata või valid uue fondi?" + +#: optiondialog.cpp:1484 +msgid "Incompatible Font" +msgstr "Sobimatu font" + +#: optiondialog.cpp:1485 +msgid "Continue at Own Risk" +msgstr "Jätkan oma riskil" + +#: optiondialog.cpp:1485 +msgid "Select Another Font" +msgstr "Valin uue fondi" + +#: optiondialog.cpp:1521 +msgid "This resets all options. Not only those of the current topic." +msgstr "See lähtestab kõik valikud, mitte ainult praeguse teema omad." + +#: pdiff.cpp:258 +msgid "PreprocessorCmd: " +msgstr "Eeltöötluse käsk: " + +#: pdiff.cpp:263 +msgid "" +"The following option(s) you selected might change data:\n" +msgstr "" +"Järgmised valitud võimalused võivad muuta andmeid:\n" + +#: pdiff.cpp:264 +msgid "" +"\n" +"Most likely this is not wanted during a merge.\n" +"Do you want to disable these settings or continue with these settings active?" +msgstr "" +"\n" +"Peaaegu kindlasti ei ole see ühendamisel soovitav.\n" +"Kas soovid need seadistused tühistada või siiski nendega jätkata?" + +#: pdiff.cpp:266 +msgid "Option Unsafe for Merging" +msgstr "Ebaturvaline valik ühendamisel" + +#: pdiff.cpp:267 +msgid "Use These Options During Merge" +msgstr "Kasuta neid valikuid ühendamisel" + +#: pdiff.cpp:267 +msgid "Disable Unsafe Options" +msgstr "Keela ebaturvalised valikud" + +#: pdiff.cpp:297 +msgid "Loading A" +msgstr "A laadimine" + +#: pdiff.cpp:301 +msgid "Loading B" +msgstr "B laadimine" + +#: pdiff.cpp:318 pdiff.cpp:344 +msgid "Diff: A <-> B" +msgstr "Erinevus: A <-> B" + +#: pdiff.cpp:324 pdiff.cpp:366 +msgid "Linediff: A <-> B" +msgstr "Reaerinevus: A <-> B" + +#: pdiff.cpp:335 +msgid "Loading C" +msgstr "C laadimine" + +#: pdiff.cpp:347 +msgid "Diff: B <-> C" +msgstr "Erinevus: B <-> C" + +#: pdiff.cpp:350 +msgid "Diff: A <-> C" +msgstr "Erinevus: A <-> C" + +#: pdiff.cpp:369 +msgid "Linediff: B <-> C" +msgstr "Reaerinevus: B <-> C" + +#: pdiff.cpp:372 +msgid "Linediff: A <-> C" +msgstr "Reaerinevus: A <-> C" + +#: pdiff.cpp:513 +msgid "All input files contain the same text, but are not binary equal." +msgstr "" +"Kõik sisendfailid sisaldavad ühesugust teksti, aga pole binaarselt võrdsed." + +#: pdiff.cpp:515 pdiff.cpp:517 pdiff.cpp:519 +msgid "" +"Files %1 and %2 are binary equal.\n" +msgstr "" +"Failid %1 ja %2 on binaarselt võrdsed.\n" + +#: pdiff.cpp:516 pdiff.cpp:518 pdiff.cpp:520 +msgid "" +"Files %1 and %2 have equal text, but are not binary equal. \n" +msgstr "" +"Failid %1 ja %2 sisaldavad ühesugust teksti, aga pole binaarselt võrdsed. \n" + +#: pdiff.cpp:530 +msgid "" +"Some inputfiles don't seem to be pure textfiles.\n" +"Note that the KDiff3-merge was not meant for binary data.\n" +"Continue at your own risk." +msgstr "" +"Paistab, et mõned sisendfailid ei ole puhtad tekstifailid.\n" +"Arvesta, et KDiff3 ühendamine ei ole mõeldud binaarfailidele.\n" +"Jätka oma riskil." + +#: pdiff.cpp:979 +msgid "Abort" +msgstr "Katkesta" + +#: pdiff.cpp:985 pdiff.cpp:1073 +msgid "Opening files..." +msgstr "Failide avamine..." + +#: pdiff.cpp:1050 pdiff.cpp:1121 +msgid "File open error" +msgstr "Viga faili avamisel" + +#: pdiff.cpp:1153 +msgid "Cutting selection..." +msgstr "Valitud teksti lõikamine..." + +#: pdiff.cpp:1174 +msgid "Copying selection to clipboard..." +msgstr "Valitud teksti kopeerimine lõikepuhvrisse..." + +#: pdiff.cpp:1190 +msgid "Inserting clipboard contents..." +msgstr "Lõikepuhvri sisu sisestamine..." + +#: pdiff.cpp:1713 +msgid "Save && Continue" +msgstr "Salvesta ja jätka" + +#: pdiff.cpp:1713 +msgid "Continue Without Saving" +msgstr "Jätka salvestamata" + +#: pdiff.cpp:1920 +msgid "Search complete." +msgstr "Otsing lõpetatud." + +#: pdiff.cpp:1920 +msgid "Search Complete" +msgstr "Otsing lõpetatud" + +#: pdiff.cpp:2144 +msgid "Nothing is selected in either diff input window." +msgstr "Erinevuste sisendakendes pole midagi valitud." + +#: pdiff.cpp:2144 +msgid "Error while adding manual diff range" +msgstr "Viga käsitsi määratud samasuse vahemiku lisamisel" + +#. i18n: file kdiff3_part.rc line 4 +#: rc.cpp:3 +#, no-c-format +msgid "&KDiff3" +msgstr "KDiff&3" + +#. i18n: file kdiff3_part.rc line 13 +#: rc.cpp:6 +#, no-c-format +msgid "Configure KDiff3" +msgstr "KDiff3 seadistamine" + +#. i18n: file kdiff3_shell.rc line 7 +#: rc.cpp:15 +#, no-c-format +msgid "&Directory" +msgstr "&Kataloog" + +#. i18n: file kdiff3_shell.rc line 30 +#: rc.cpp:18 +#, no-c-format +msgid "Current Item Merge Operation" +msgstr "Käesoleva elemendi ühendamisoperatsioon" + +#. i18n: file kdiff3_shell.rc line 38 +#: rc.cpp:21 +#, no-c-format +msgid "Current Item Sync Operation" +msgstr "Käesoleva elemendi sünkroniseerimisoperatsioon" + +#. i18n: file kdiff3_shell.rc line 50 +#: rc.cpp:24 +#, no-c-format +msgid "&Movement" +msgstr "&Liikumine" + +#. i18n: file kdiff3_shell.rc line 61 +#: rc.cpp:27 +#, no-c-format +msgid "D&iffview" +msgstr "Võrdlus&evaade" + +#. i18n: file kdiff3_shell.rc line 73 +#: rc.cpp:30 +#, no-c-format +msgid "&Merge" +msgstr "Ãœ&hendamine" + +#. i18n: file kdiff3_shell.rc line 95 +#: rc.cpp:33 +#, no-c-format +msgid "&Window" +msgstr "Ake&n" + +#: smalldialogs.cpp:53 +msgid "A (Base):" +msgstr "A (baas):" + +#: smalldialogs.cpp:59 smalldialogs.cpp:75 smalldialogs.cpp:91 +#: smalldialogs.cpp:134 +msgid "File..." +msgstr "Fail..." + +#: smalldialogs.cpp:61 smalldialogs.cpp:77 smalldialogs.cpp:93 +#: smalldialogs.cpp:136 +msgid "Dir..." +msgstr "Kataloog..." + +#: smalldialogs.cpp:86 +msgid "C (Optional):" +msgstr "C (lisavõimalus):" + +#: smalldialogs.cpp:108 +msgid "Swap/Copy Names ..." +msgstr "Vaheta/kopeeri nimed..." + +#: smalldialogs.cpp:114 smalldialogs.cpp:115 smalldialogs.cpp:116 +msgid "Swap %1<->%2" +msgstr "Vaheta %1<->%2" + +#: smalldialogs.cpp:117 smalldialogs.cpp:118 smalldialogs.cpp:119 +msgid "Copy %1->Output" +msgstr "Kopeeri %1->väljund" + +#: smalldialogs.cpp:120 smalldialogs.cpp:121 smalldialogs.cpp:122 +msgid "Swap %1<->Output" +msgstr "Vaheta %1<->väljund" + +#: smalldialogs.cpp:129 +msgid "Output (optional):" +msgstr "Väljund (lisavõimalus):" + +#: smalldialogs.cpp:158 +msgid "Configure..." +msgstr "Seadista..." + +#: smalldialogs.cpp:347 +msgid "Search text:" +msgstr "Otsitav tekst:" + +#: smalldialogs.cpp:354 +msgid "Case sensitive" +msgstr "Tõstutundlik" + +#: smalldialogs.cpp:357 +msgid "Search A" +msgstr "Otsi A" + +#: smalldialogs.cpp:362 +msgid "Search B" +msgstr "Otsi B" + +#: smalldialogs.cpp:367 +msgid "Search C" +msgstr "Otsi C" + +#: smalldialogs.cpp:372 +msgid "Search output" +msgstr "Otsingu väljund" + +#: smalldialogs.cpp:377 +msgid "&Search" +msgstr "&Otsi" + +#: smalldialogs.cpp:394 +msgid "Regular Expression Tester" +msgstr "Regulaaravaldise test" + +#: smalldialogs.cpp:405 +msgid "Example auto merge line:" +msgstr "Automaatühendamise näidisrida:" + +#: smalldialogs.cpp:407 +msgid "For auto merge test copy a line as used in your files." +msgstr "Kopeeri automaatühendamise testimiseks rida oma failist." + +#: smalldialogs.cpp:413 smalldialogs.cpp:442 smalldialogs.cpp:479 +msgid "Match result:" +msgstr "Sobivuse tulemus:" + +#: smalldialogs.cpp:432 +msgid "Example history start line (with leading comment):" +msgstr "Ajaloo alguse näidisrida (alustava kommentaariga):" + +#: smalldialogs.cpp:435 +msgid "" +"Copy a history start line as used in your files,\n" +"including the leading comment." +msgstr "" +"Kopeeri oma failist ajaloo alguse rida,\n" +"kaasa arvatud alustav kommentaar." + +#: smalldialogs.cpp:461 +msgid "History sort key order:" +msgstr "Ajaloo sortimisvõtme järjekord:" + +#: smalldialogs.cpp:469 +msgid "Example history entry start line (without leading comment):" +msgstr "Ajalookirje alguse näidisrida (alustava kommentaarita):" + +#: smalldialogs.cpp:471 +msgid "" +"Copy a history entry start line as used in your files,\n" +"but omit the leading comment." +msgstr "" +"Kopeeri oma failist ajalookirje alguse rida,\n" +"kuid ilma alustava kommentaarita." + +#: smalldialogs.cpp:486 +msgid "Sort key result:" +msgstr "Sorteerimisvõtme tulemus:" + +#: smalldialogs.cpp:537 smalldialogs.cpp:547 smalldialogs.cpp:568 +msgid "Match success." +msgstr "Leiti sobivus." + +#: smalldialogs.cpp:541 smalldialogs.cpp:551 smalldialogs.cpp:574 +msgid "Match failed." +msgstr "Sobivust ei leitud." + +#: smalldialogs.cpp:559 +msgid "Opening and closing parentheses don't match in regular expression." +msgstr "Regulaaravaldises ei sobi alustavad ja lõpetavad sulud." diff --git a/po/fr.po b/po/fr.po new file mode 100644 index 0000000..f799286 --- /dev/null +++ b/po/fr.po @@ -0,0 +1,2578 @@ +# traduction de kdiff3.po vers le Français +# Copyright (C) 2004, 2005 Free Software Foundation, Inc. +# Simon Depiets <2df@tuxfamily.org>, 2005. +# +msgid "" +msgstr "" +"Project-Id-Version: kdiff3\n" +"POT-Creation-Date: 2006-11-05 08:45+0100\n" +"PO-Revision-Date: 2005-02-03 21:34+0100\n" +"Last-Translator: Simon Depiets <2df@tuxfamily.org>\n" +"Language-Team: Français \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: KBabel 1.3\n" + +#: _translatorinfo.cpp:1 +msgid "" +"_: NAME OF TRANSLATORS\n" +"Your names" +msgstr "Simon Depiets" + +#: _translatorinfo.cpp:3 +msgid "" +"_: EMAIL OF TRANSLATORS\n" +"Your emails" +msgstr "2df@tuxfamily.org" + +#: diff.cpp:246 +msgid "Writing clipboard data to temp file failed." +msgstr "" +"L'écriture des données du presse-papiers vers un fichier temporaire a échoué." + +#: diff.cpp:250 +msgid "From Clipboard" +msgstr "Depuis le Presse-papiers" + +#: diff.cpp:491 +msgid "" +"Preprocessing possibly failed. Check this command:\n" +"\n" +" %1\n" +"\n" +"The preprocessing command will be disabled now." +msgstr "" +"La commande préprocesseur a peut-être échoué. Vérifiez cette commande :\n" +"\n" +" %1\n" +"\n" +"La commande préprocesseur sera désactivée désormais." + +#: diff.cpp:526 +msgid "" +"The line-matching-preprocessing possibly failed. Check this command:\n" +"\n" +" %1\n" +"\n" +"The line-matching-preprocessing command will be disabled now." +msgstr "" +"Le préprocessus de comparaison de lignes a échoué. Vérifiez cette commande :\n" +"\n" +" %1\n" +"\n" +"Le préprocessus de comparaison de lignes sera désormais désactivé." + +#: diff.cpp:1631 diff.cpp:1645 +msgid "" +"Data loss error:\n" +"If it is reproducable please contact the author.\n" +msgstr "" +"Données perdues :\n" +"Si cela se reproduit, contactez l'auteur.\n" + +#: diff.cpp:1633 diff.cpp:1647 +msgid "Severe Internal Error" +msgstr "Erreur interne sévère" + +#: difftextwindow.cpp:1643 kdiff3.cpp:753 +#, fuzzy +msgid "Top line" +msgstr "Première Ligne %1" + +#: difftextwindow.cpp:1653 +msgid "End" +msgstr "Fin" + +#: directorymergewindow.cpp:142 +msgid "Mix of links and normal files." +msgstr "Mélange de liens et de fichiers normaux." + +#: directorymergewindow.cpp:149 +msgid "Link: " +msgstr "Lien : " + +#: directorymergewindow.cpp:157 +msgid "Size. " +msgstr "Taille. " + +#: directorymergewindow.cpp:170 +msgid "Date & Size: " +msgstr "Date et Taille : " + +#: directorymergewindow.cpp:179 directorymergewindow.cpp:185 +msgid "Creating temp copy of %1 failed." +msgstr "La création de la copie temporaire de %1 a échoué." + +#: directorymergewindow.cpp:196 directorymergewindow.cpp:204 +msgid "Opening %1 failed." +msgstr "L'ouverture de %1 a échoué." + +#: directorymergewindow.cpp:208 +msgid "Comparing file..." +msgstr "Comparaison du fichier..." + +#: directorymergewindow.cpp:218 directorymergewindow.cpp:224 +#, c-format +msgid "Error reading from %1" +msgstr "Erreur de lecture de %1" + +#: directorymergewindow.cpp:282 +msgid "Name" +msgstr "Nom" + +#: directorymergewindow.cpp:286 +msgid "Operation" +msgstr "Opération" + +#: directorymergewindow.cpp:287 +msgid "Status" +msgstr "État" + +#: directorymergewindow.cpp:288 +msgid "Unsolved" +msgstr "Non résolu" + +#: directorymergewindow.cpp:289 +msgid "Solved" +msgstr "Résolu" + +#: directorymergewindow.cpp:290 +msgid "Nonwhite" +msgstr "Non blanc" + +#: directorymergewindow.cpp:291 +msgid "White" +msgstr "Blanc" + +#: directorymergewindow.cpp:319 +msgid "" +"You are currently doing a directory merge. Are you sure, you want to abort the " +"merge and rescan the directory?" +msgstr "" +"Vous procédez à une fusion. Confirmez-vous l'abandon de la fusion et le " +"rafraîchissement du dossier ?" + +#: directorymergewindow.cpp:320 directorymergewindow.cpp:2868 +msgid "Rescan" +msgstr "Rafraîchissement" + +#: directorymergewindow.cpp:320 kdiff3.cpp:603 pdiff.cpp:979 +msgid "Continue Merging" +msgstr "La fusion continue" + +#: directorymergewindow.cpp:462 +msgid "Opening of directories failed:" +msgstr "L'ouverture des dossiers a échoué :" + +#: directorymergewindow.cpp:465 +msgid "" +"Dir A \"%1\" does not exist or is not a directory.\n" +msgstr "" +"Le dossier A « %1 » n'existe pas ou n'est pas un dossier.\n" + +#: directorymergewindow.cpp:468 +msgid "" +"Dir B \"%1\" does not exist or is not a directory.\n" +msgstr "" +"Le dossier B « %1 » n'existe pas ou n'est pas un dossier.\n" + +#: directorymergewindow.cpp:471 +msgid "" +"Dir C \"%1\" does not exist or is not a directory.\n" +msgstr "" +"Le dossier B « %1 » n'existe pas ou n'est pas un dossier.\n" + +#: directorymergewindow.cpp:473 +msgid "Directory Open Error" +msgstr "Erreur lors de l'ouverture du dossier" + +#: directorymergewindow.cpp:481 +msgid "" +"The destination directory must not be the same as A or B when three directories " +"are merged.\n" +"Check again before continuing." +msgstr "" +"Le dossier de destination ne doit pas être le même que A ou B quand trois " +"fichiers sont fusionnés.\n" +"Vérifiez avant de continuer." + +#: directorymergewindow.cpp:483 +msgid "Parameter Warning" +msgstr "Avertissement pour les paramètres" + +#: directorymergewindow.cpp:488 +msgid "Scanning directories..." +msgstr "Scan des dossiers..." + +#: directorymergewindow.cpp:537 +msgid "Reading Directory A" +msgstr "Lecture du dossier A" + +#: directorymergewindow.cpp:559 +msgid "Reading Directory B" +msgstr "Lecture du dossier B" + +#: directorymergewindow.cpp:581 +msgid "Reading Directory C" +msgstr "Lecture du dossier C" + +#: directorymergewindow.cpp:607 +msgid "Some subdirectories were not readable in" +msgstr "Certains sous-dossiers ne sont pas lisibles" + +#: directorymergewindow.cpp:612 +msgid "Check the permissions of the subdirectories." +msgstr "Vérifiez les permissions des sous-dossiers." + +#: directorymergewindow.cpp:646 kdiff3.cpp:552 kdiff3.cpp:636 kdiff3.cpp:661 +#: kdiff3.cpp:934 kdiff3.cpp:955 pdiff.cpp:1059 pdiff.cpp:1131 pdiff.cpp:1169 +#: pdiff.cpp:1185 pdiff.cpp:1215 pdiff.cpp:1226 +msgid "Ready." +msgstr "Prêt." + +#: directorymergewindow.cpp:660 +msgid "Directory Comparison Status" +msgstr "État de la comparaison des dossiers." + +#: directorymergewindow.cpp:661 +msgid "Number of subdirectories:" +msgstr "Nombre de sous-dossiers :" + +#: directorymergewindow.cpp:662 +msgid "Number of equal files:" +msgstr "Nombre de fichiers identiques :" + +#: directorymergewindow.cpp:663 +msgid "Number of different files:" +msgstr "Nombre de fichiers différents :" + +#: directorymergewindow.cpp:666 +msgid "Number of manual merges:" +msgstr "Nombre de fusions manuelles :" + +#: directorymergewindow.cpp:802 +msgid "This affects all merge operations." +msgstr "Cela affecte toutes les opérations de fusion" + +#: directorymergewindow.cpp:803 +msgid "Changing All Merge Operations" +msgstr "Changement de toutes les opérations de fusion" + +#: directorymergewindow.cpp:803 mergeresultwindow.cpp:287 +msgid "C&ontinue" +msgstr "C&ontinuer" + +#: directorymergewindow.cpp:1169 +msgid "Processing " +msgstr "En cours " + +#: directorymergewindow.cpp:1647 directorymergewindow.cpp:1653 +msgid "To do." +msgstr "A faire." + +#: directorymergewindow.cpp:1756 directorymergewindow.cpp:2899 +msgid "Copy A to B" +msgstr "Copier A vers B" + +#: directorymergewindow.cpp:1757 directorymergewindow.cpp:2900 +msgid "Copy B to A" +msgstr "Copier B vers A" + +#: directorymergewindow.cpp:1758 directorymergewindow.cpp:2901 +msgid "Delete A" +msgstr "Supprimer A" + +#: directorymergewindow.cpp:1759 directorymergewindow.cpp:2902 +msgid "Delete B" +msgstr "Supprimer B" + +#: directorymergewindow.cpp:1760 +msgid "Delete A & B" +msgstr "Supprimer A et B" + +#: directorymergewindow.cpp:1761 directorymergewindow.cpp:2904 +msgid "Merge to A" +msgstr "Fusionner vers A" + +#: directorymergewindow.cpp:1762 directorymergewindow.cpp:2905 +msgid "Merge to B" +msgstr "Fusionner vers B" + +#: directorymergewindow.cpp:1763 +msgid "Merge to A & B" +msgstr "Fusionner vers A et B" + +#: directorymergewindow.cpp:1767 directorymergewindow.cpp:2896 +msgid "Delete (if exists)" +msgstr "Supprimer (si existant)" + +#: directorymergewindow.cpp:1768 directorymergewindow.cpp:1769 +#: directorymergewindow.cpp:2895 optiondialog.cpp:809 smalldialogs.cpp:102 +msgid "Merge" +msgstr "Fusion" + +#: directorymergewindow.cpp:1768 directorymergewindow.cpp:1769 +msgid "Merge (manual)" +msgstr "Fusion (Manuelle)" + +#: directorymergewindow.cpp:1770 +msgid "Error: Conflicting File Types" +msgstr "Erreur : conflit de types de fichiers" + +#: directorymergewindow.cpp:1771 +msgid "Error: Dates are equal but files are not." +msgstr "Erreur : les dates sont les mêmes, mais pas les fichiers." + +#: directorymergewindow.cpp:1795 directorymergewindow.cpp:1824 +#: directorymergewindow.cpp:1849 +msgid "This operation is currently not possible." +msgstr "Cette opération n'est pas possible actuellement." + +#: directorymergewindow.cpp:1795 directorymergewindow.cpp:1824 +#: directorymergewindow.cpp:1849 directorymergewindow.cpp:2106 +msgid "Operation Not Possible" +msgstr "Opération impossible" + +#: directorymergewindow.cpp:1888 +msgid "" +"This should never happen: \n" +"\n" +"mergeResultSaved: m_pMFI=0\n" +"\n" +"If you know how to reproduce this, please contact the program author." +msgstr "" +"Cela ne devrait jamais arriver : \n" +"\n" +"mergeResultSaved : m_pMFI=0\n" +"\n" +"Si vous savez comment reproduire cela, veuillez contacter l'auteur." + +#: directorymergewindow.cpp:1888 +msgid "Program Error" +msgstr "Erreur du programme" + +#: directorymergewindow.cpp:1899 +msgid "" +"An error occurred while copying.\n" +msgstr "" +"Une erreur est survenue lors de la copie.\n" + +#: directorymergewindow.cpp:1900 directorymergewindow.cpp:2306 +msgid "Merge Error" +msgstr "Erreur de fusion" + +#: directorymergewindow.cpp:1905 directorymergewindow.cpp:2311 +msgid "Error." +msgstr "Erreur." + +#: directorymergewindow.cpp:1910 directorymergewindow.cpp:2202 +#: directorymergewindow.cpp:2242 +msgid "Done." +msgstr "Fait." + +#: directorymergewindow.cpp:1933 +msgid "Not saved." +msgstr "Non enregistré." + +#: directorymergewindow.cpp:1968 +msgid "Unknown merge operation. (This must never happen!)" +msgstr "Opération de fusion inconnue. (Ceci ne devrait jamais arriver !)" + +#: directorymergewindow.cpp:2000 +msgid "Unknown merge operation." +msgstr "Opération de fusion inconnue." + +#: directorymergewindow.cpp:2015 +msgid "" +"The merge is about to begin.\n" +"\n" +"Choose \"Do it\" if you have read the instructions and know what you are " +"doing.\n" +"Choosing \"Simulate it\" will tell you what would happen.\n" +"\n" +"Be aware that this program still has beta status and there is NO WARRANTY " +"whatsoever! Make backups of your vital data!" +msgstr "" +"La fusion est sur le point de commencer\n" +"\n" +"Choisissez « Faire » si vous avez lu les instructions et savez ce que vous " +"faites.\n" +"Choisissez « Simuler » pour simuler ce qui arrivera.\n" +"\n" +"Sachez que ce programme est toujours en phase bêta et qu'il n'y a AUCUNE " +"GARANTIE en aucun cas ! Enregistrez vos données vitales !" + +#: directorymergewindow.cpp:2020 +msgid "Starting Merge" +msgstr "Lancement de la fusion" + +#: directorymergewindow.cpp:2020 +msgid "Do It" +msgstr "Faire" + +#: directorymergewindow.cpp:2020 +msgid "Simulate It" +msgstr "Simuler" + +#: directorymergewindow.cpp:2046 +msgid "" +"The highlighted item has a different type in the different directories. Select " +"what to do." +msgstr "" +"L'objet surligné a un format différent dans les différents dossiers. Choisissez " +"que faire." + +#: directorymergewindow.cpp:2055 +msgid "" +"The modification dates of the file are equal but the files are not. Select what " +"to do." +msgstr "" +"Les dates de modification du fichier sont égales, mais pas les fichiers. " +"Sélectionnez que faire." + +#: directorymergewindow.cpp:2106 +msgid "" +"This operation is currently not possible because directory merge is currently " +"running." +msgstr "" +"Cette opération n'est actuellement pas possible car une fusion de dossiers est " +"en cours." + +#: directorymergewindow.cpp:2166 +msgid "" +"There was an error in the last step.\n" +"Do you want to continue with the item that caused the error or do you want to " +"skip this item?" +msgstr "" +"Il y a eu une erreur à la dernière étape.\n" +"Voulez-vous continuer avec l'élément ayant causé l'erreur ou voulez-vous le " +"sauter ?" + +#: directorymergewindow.cpp:2168 +msgid "Continue merge after an error" +msgstr "Continuer la fusion après une erreur" + +#: directorymergewindow.cpp:2168 +msgid "Continue With Last Item" +msgstr "Continuer avec le dernier élément" + +#: directorymergewindow.cpp:2168 +msgid "Skip Item" +msgstr "Sauter l'élément" + +#: directorymergewindow.cpp:2202 +msgid "Skipped." +msgstr "Elément sauté." + +#: directorymergewindow.cpp:2209 directorymergewindow.cpp:2435 +msgid "In progress..." +msgstr "En cours..." + +#: directorymergewindow.cpp:2257 +msgid "Merge operation complete." +msgstr "Opération de fusion complète." + +#: directorymergewindow.cpp:2257 directorymergewindow.cpp:2260 +msgid "Merge Complete" +msgstr "Fusion complète." + +#: directorymergewindow.cpp:2269 +msgid "" +"Simulated merge complete: Check if you agree with the proposed operations." +msgstr "" +"Simulation de fusion complète : vérifiez si vous êtes d'accord avec les " +"opérations proposées." + +#: directorymergewindow.cpp:2305 +msgid "" +"An error occurred. Press OK to see detailed information.\n" +msgstr "" +"Une erreur s'est produite. Appuyez sur OK pour les informations détaillées.\n" + +#: directorymergewindow.cpp:2348 +msgid "Error: While deleting %1: Creating backup failed." +msgstr "" +"Erreur : durant la suppression de %1 : échec de la création de sauvegarde." + +#: directorymergewindow.cpp:2355 +msgid "delete directory recursively( %1 )" +msgstr "supprimer le dossier récursivement (%1)" + +#: directorymergewindow.cpp:2357 +msgid "delete( %1 )" +msgstr "supprimer (%1)" + +#: directorymergewindow.cpp:2372 +msgid "Error: delete dir operation failed while trying to read the directory." +msgstr "" +"Erreur : échec de la suppression d'un dossier durant la tentative de lecture du " +"dossier." + +#: directorymergewindow.cpp:2391 +msgid "Error: rmdir( %1 ) operation failed." +msgstr "Erreur : échec de la suppression du dossier (%1)" + +#: directorymergewindow.cpp:2401 +msgid "Error: delete operation failed." +msgstr "Erreur : échec de l'opération de suppression." + +#: directorymergewindow.cpp:2427 +msgid "manual merge( %1, %2, %3 -> %4)" +msgstr "Fusion manuelle (%1, %2, %3 vers %4)" + +#: directorymergewindow.cpp:2430 +msgid "" +" Note: After a manual merge the user should continue by pressing F7." +msgstr "" +" Note : après une fusion manuelle, l'utilisateur peut continuer avec F7." + +#: directorymergewindow.cpp:2453 +msgid "Error: copy( %1 -> %2 ) failed.Deleting existing destination failed." +msgstr "" +"Erreur : la copie de %1 vers %2 a échoué. La suppression de la destination " +"existante a échoué." + +#: directorymergewindow.cpp:2463 +msgid "copyLink( %1 -> %2 )" +msgstr "copier le lien (%1 vers %2)" + +#: directorymergewindow.cpp:2474 +msgid "Error: copyLink failed: Remote links are not yet supported." +msgstr "" +"Erreur : la copie des liens à échoué : les liens distants ne sont pas encore " +"gérés." + +#: directorymergewindow.cpp:2480 +msgid "Error: copyLink failed." +msgstr "Erreur : échec de la copie du lien" + +#: directorymergewindow.cpp:2500 +msgid "copy( %1 -> %2 )" +msgstr "copie (%1 vers %2)" + +#: directorymergewindow.cpp:2526 +msgid "Error during rename( %1 -> %2 ): Cannot delete existing destination." +msgstr "" +"Erreur lors du changement de nom du fichier (%1 vers %2) : impossible de " +"supprimer la destination." + +#: directorymergewindow.cpp:2532 +msgid "rename( %1 -> %2 )" +msgstr "changement de nom (%1 vers %2)" + +#: directorymergewindow.cpp:2541 +msgid "Error: Rename failed." +msgstr "Erreur : échec du changement de nom." + +#: directorymergewindow.cpp:2559 +msgid "Error during makeDir of %1. Cannot delete existing file." +msgstr "" +"Erreur durant la création du dossier %1. Impossible de supprimer le fichier " +"existant." + +#: directorymergewindow.cpp:2575 +msgid "makeDir( %1 )" +msgstr "Création du Dossier (%1)" + +#: directorymergewindow.cpp:2585 +msgid "Error while creating directory." +msgstr "Erreur durant la création du dossier" + +#: directorymergewindow.cpp:2608 directorymergewindow.cpp:2725 +msgid "Dest" +msgstr "Destination" + +#: directorymergewindow.cpp:2612 directorymergewindow.cpp:2650 +msgid "Dir" +msgstr "Dossier" + +#: directorymergewindow.cpp:2613 +msgid "Type" +msgstr "Type" + +#: directorymergewindow.cpp:2614 +msgid "Size" +msgstr "Taille" + +#: directorymergewindow.cpp:2615 +msgid "Attr" +msgstr "Attributs" + +#: directorymergewindow.cpp:2616 +msgid "Last Modification" +msgstr "Dernière modification" + +#: directorymergewindow.cpp:2617 +msgid "Link-Destination" +msgstr "Destination du lien" + +#: directorymergewindow.cpp:2667 +msgid "not available" +msgstr "non disponible" + +#: directorymergewindow.cpp:2687 +msgid "A (Dest): " +msgstr "A (Destination) : " + +#: directorymergewindow.cpp:2690 +msgid "A (Base): " +msgstr "A (Base) : " + +#: directorymergewindow.cpp:2696 +msgid "B (Dest): " +msgstr "B (Destination) : " + +#: directorymergewindow.cpp:2704 +msgid "C (Dest): " +msgstr "C (Destination) : " + +#: directorymergewindow.cpp:2710 +msgid "Dest: " +msgstr "Destination : " + +#: directorymergewindow.cpp:2775 +#, fuzzy +msgid "Save Directory Merge State As..." +msgstr "Fusion de dossiers" + +#: directorymergewindow.cpp:2862 +msgid "Start/Continue Directory Merge" +msgstr "Commencer/Continuer la fusion des dossiers" + +#: directorymergewindow.cpp:2863 +msgid "Run Operation for Current Item" +msgstr "Lancer l'opération pour l'élément courant" + +#: directorymergewindow.cpp:2864 +msgid "Compare Selected File" +msgstr "Comparer le fichier sélectionné" + +#: directorymergewindow.cpp:2865 +msgid "Merge Current File" +msgstr "Fusionner le fichier en cours" + +#: directorymergewindow.cpp:2866 +msgid "Fold All Subdirs" +msgstr "Inclure tous les sous-dossiers" + +#: directorymergewindow.cpp:2867 +msgid "Unfold All Subdirs" +msgstr "Ne pas suivre les sous-dossiers" + +#: directorymergewindow.cpp:2871 +msgid "Choose A for All Items" +msgstr "Choisir A pour tous les éléments" + +#: directorymergewindow.cpp:2872 +msgid "Choose B for All Items" +msgstr "Choisir B pour tous les éléments" + +#: directorymergewindow.cpp:2873 +msgid "Choose C for All Items" +msgstr "Choisir C pour tous les éléments" + +#: directorymergewindow.cpp:2874 +msgid "Auto-Choose Operation for All Items" +msgstr "Choisir automatiquement l'opération pour tous les éléments" + +#: directorymergewindow.cpp:2875 +msgid "No Operation for All Items" +msgstr "Pas d'opérations pour tous les éléments" + +#: directorymergewindow.cpp:2880 +msgid "Show Identical Files" +msgstr "" + +#: directorymergewindow.cpp:2881 +#, fuzzy +msgid "Show Different Files" +msgstr "Nombre de fichiers différents :" + +#: directorymergewindow.cpp:2882 +msgid "Show Files only in A" +msgstr "" + +#: directorymergewindow.cpp:2883 +msgid "Show Files only in B" +msgstr "" + +#: directorymergewindow.cpp:2884 +msgid "Show Files only in C" +msgstr "" + +#: directorymergewindow.cpp:2888 +#, fuzzy +msgid "Compare Explicitly Selected Files" +msgstr "Comparer le fichier sélectionné" + +#: directorymergewindow.cpp:2889 +#, fuzzy +msgid "Merge Explicitly Selected Files" +msgstr "Comparer le fichier sélectionné" + +#: directorymergewindow.cpp:2891 directorymergewindow.cpp:2898 +msgid "Do Nothing" +msgstr "Ne rien faire" + +#: directorymergewindow.cpp:2892 +msgid "A" +msgstr "A" + +#: directorymergewindow.cpp:2893 +msgid "B" +msgstr "B" + +#: directorymergewindow.cpp:2894 +msgid "C" +msgstr "C" + +#: directorymergewindow.cpp:2903 +msgid "Delete A && B" +msgstr "Supprimer A && B" + +#: directorymergewindow.cpp:2906 +msgid "Merge to A && B" +msgstr "Fusionner vers A && B" + +#: fileaccess.cpp:595 +msgid "" +"While trying to make a backup, deleting an older backup failed. \n" +"Filename: " +msgstr "" +"Pendant le tentative d'enregistrement, la suppression d'un enregistrement " +"précédent a échoué.\n" +"Nom du fichier :" + +#: fileaccess.cpp:602 +msgid "" +"While trying to make a backup, renaming failed. \n" +"Filenames: " +msgstr "" +"Pendant le tentative d'enregistrement, le changement de nom a échoué.\n" +"Noms des fichiers :" + +#: fileaccess.cpp:624 +#, c-format +msgid "Getting file status: %1" +msgstr "Recherche de l'état du fichier : %1" + +#: fileaccess.cpp:667 +#, c-format +msgid "Reading file: %1" +msgstr "Lecture du fichier : %1" + +#: fileaccess.cpp:703 +#, c-format +msgid "Writing file: %1" +msgstr "Écriture du fichier : %1" + +#: fileaccess.cpp:731 +msgid "Out of memory" +msgstr "Plus de mémoire" + +#: fileaccess.cpp:766 +#, c-format +msgid "Making directory: %1" +msgstr "Création du dossier : %1" + +#: fileaccess.cpp:786 +#, c-format +msgid "Removing directory: %1" +msgstr "Suppression du dossier  %1" + +#: fileaccess.cpp:801 +#, c-format +msgid "Removing file: %1" +msgstr "Suppression du fichier : %1" + +#: fileaccess.cpp:817 +msgid "Creating symbolic link: %1 -> %2" +msgstr "Création d'un lien symbolique : %1 vers %2" + +#: fileaccess.cpp:843 +msgid "Renaming file: %1 -> %2" +msgstr "Changement de nom du fichier : %1 vers %2" + +#: fileaccess.cpp:879 +msgid "Copying file: %1 -> %2" +msgstr "Copie du fichier : %1 vers %2" + +#: fileaccess.cpp:893 +#, c-format +msgid "" +"Error during file copy operation: Opening file for reading failed. Filename: %1" +msgstr "" +"Erreur durant la copie : l'ouverture du fichier pour la lecture a échoué. Nom " +"du Fichier : %1" + +#: fileaccess.cpp:899 +#, c-format +msgid "" +"Error during file copy operation: Opening file for writing failed. Filename: %1" +msgstr "" +"Erreur durant la copie : l'ouverture du fichier pour l'écriture a échoué. Nom " +"du Fichier : %1" + +#: fileaccess.cpp:914 +#, c-format +msgid "Error during file copy operation: Reading failed. Filename: %1" +msgstr "" +"Erreur durant la copie d'un fichier : échec de la lecture. Nom du fichier : %1" + +#: fileaccess.cpp:923 +#, c-format +msgid "Error during file copy operation: Writing failed. Filename: %1" +msgstr "" +"Erreur durant la copie d'un fichier : échec de l'écriture. Nom du fichier : %1" + +#: fileaccess.cpp:1219 +msgid "Reading directory: " +msgstr "Lecture du dossier : " + +#: fileaccess.cpp:1348 +#, c-format +msgid "Listing directory: %1" +msgstr "Listage du dossier : %1" + +#: kdiff3.cpp:142 +#, fuzzy +msgid "Current Configuration:" +msgstr "Synchronisation de l'élément actuel" + +#: kdiff3.cpp:147 +#, fuzzy +msgid "Config Option Error:" +msgstr "Erreur d'ouverture d'un Fichier" + +#: kdiff3.cpp:187 +msgid "Option --auto used, but no output file specified." +msgstr "Option --auto-utilisée, mais pas de fichier résultat spécifié." + +#: kdiff3.cpp:323 +msgid "Option --auto ignored for directory comparison." +msgstr "Option --auto-ignorée pour la comparaison de dossiers." + +#: kdiff3.cpp:359 +msgid "Saving failed." +msgstr "Échec de l'enregistrement." + +#: kdiff3.cpp:386 pdiff.cpp:1041 pdiff.cpp:1112 +msgid "Opening of these files failed:" +msgstr "L'ouverture de ces fichiers a échoué :" + +#: kdiff3.cpp:395 +msgid "File Open Error" +msgstr "Erreur d'ouverture d'un Fichier" + +#: kdiff3.cpp:418 +msgid "Opens documents for comparison..." +msgstr "Ouvre les documents pour comparaison..." + +#: kdiff3.cpp:423 +msgid "Saves the merge result. All conflicts must be solved!" +msgstr "" +"Enregistre le résultat de la fusion. Tous les conflits doivent être résolus !" + +#: kdiff3.cpp:425 +msgid "Saves the current document as..." +msgstr "Enregistre le document courant sous..." + +#: kdiff3.cpp:427 +msgid "Print the differences" +msgstr "" + +#: kdiff3.cpp:429 +msgid "Quits the application" +msgstr "Quitte l'application" + +#: kdiff3.cpp:431 +msgid "Cuts the selected section and puts it to the clipboard" +msgstr "Coupe la sélection et la met dans le presse-papiers" + +#: kdiff3.cpp:433 +msgid "Copies the selected section to the clipboard" +msgstr "Copie la sélection vers le presse-papiers" + +#: kdiff3.cpp:435 +msgid "Pastes the clipboard contents to actual position" +msgstr "Colle le contenu du presse-papiers à la position actuelle" + +#: kdiff3.cpp:437 +msgid "Select everything in current window" +msgstr "" + +#: kdiff3.cpp:439 +msgid "Search for a string" +msgstr "Cherche un passage" + +#: kdiff3.cpp:441 +msgid "Search again for the string" +msgstr "Cherche de nouveau le passage" + +#: kdiff3.cpp:443 +msgid "Enables/disables the toolbar" +msgstr "Active/désactive la barre d'outils" + +#: kdiff3.cpp:445 +msgid "Enables/disables the statusbar" +msgstr "Active/désactive la barre de état" + +#: kdiff3.cpp:449 +msgid "Configure KDiff3..." +msgstr "Configurer KDiff3..." + +#: kdiff3.cpp:470 +msgid "Go to Current Delta" +msgstr "Aller à la différence actuelle" + +#: kdiff3.cpp:471 +msgid "Go to First Delta" +msgstr "Aller à la première différence" + +#: kdiff3.cpp:472 +msgid "Go to Last Delta" +msgstr "Aller à la dernière différence" + +#: kdiff3.cpp:473 +msgid "(Skips white space differences when \"Show White Space\" is disabled.)" +msgstr "" +"(Saute les différences d'espaces lorsqu'\"Afficher les différences d'espaces\" " +"est désactivé.)" + +#: kdiff3.cpp:474 +msgid "" +"(Does not skip white space differences even when \"Show White Space\" is " +"disabled.)" +msgstr "" +"(Ne saute pas les différences d'espaces lorsqu'\"Afficher les espaces\" est " +"désactivé.)" + +#: kdiff3.cpp:475 +msgid "Go to Previous Delta" +msgstr "Aller à la prochaine différence" + +#: kdiff3.cpp:477 +msgid "Go to Next Delta" +msgstr "Aller à la différence suivante" + +#: kdiff3.cpp:479 +msgid "Go to Previous Conflict" +msgstr "Aller au conflit précédent" + +#: kdiff3.cpp:481 +msgid "Go to Next Conflict" +msgstr "Aller au conflit suivant" + +#: kdiff3.cpp:483 +msgid "Go to Previous Unsolved Conflict" +msgstr "Aller au conflit conflit non résolu précédent" + +#: kdiff3.cpp:485 +msgid "Go to Next Unsolved Conflict" +msgstr "Aller au conflit non résolu suivant" + +#: kdiff3.cpp:487 +msgid "Select Line(s) From A" +msgstr "Sélectionner la source depuis A" + +#: kdiff3.cpp:488 +msgid "Select Line(s) From B" +msgstr "Sélectionner la source depuis B" + +#: kdiff3.cpp:489 +msgid "Select Line(s) From C" +msgstr "Sélectionner la source depuis C" + +#: kdiff3.cpp:490 +msgid "Automatically Go to Next Unsolved Conflict After Source Selection" +msgstr "Aller automatiquement au conflit suivant après sélection de la source" + +#: kdiff3.cpp:492 +msgid "Show Space && Tabulator Characters for Differences" +msgstr "Montrer les espaces et les alinéas en tant que différences" + +#: kdiff3.cpp:493 +msgid "Show White Space" +msgstr "Montrer les espaces" + +#: kdiff3.cpp:495 +msgid "Show Line Numbers" +msgstr "Montrer les numéros de Ligne" + +#: kdiff3.cpp:496 +msgid "Choose A Everywhere" +msgstr "Choisir A partout" + +#: kdiff3.cpp:497 +msgid "Choose B Everywhere" +msgstr "Choisir B Partout" + +#: kdiff3.cpp:498 +msgid "Choose C Everywhere" +msgstr "Choisir C Partout" + +#: kdiff3.cpp:499 +msgid "Choose A for All Unsolved Conflicts" +msgstr "Choisir A pour tous les conflits non résolus" + +#: kdiff3.cpp:500 +msgid "Choose B for All Unsolved Conflicts" +msgstr "Choisir B pour tous les conflits non résolus" + +#: kdiff3.cpp:501 +msgid "Choose C for All Unsolved Conflicts" +msgstr "Choisir C pour tous les conflits non résolus" + +#: kdiff3.cpp:502 +msgid "Choose A for All Unsolved Whitespace Conflicts" +msgstr "Choisir A pour tous les conflits d'espaces non résolus" + +#: kdiff3.cpp:503 +msgid "Choose B for All Unsolved Whitespace Conflicts" +msgstr "Choisir B pour tous les conflits d'espaces non résolus" + +#: kdiff3.cpp:504 +msgid "Choose C for All Unsolved Whitespace Conflicts" +msgstr "Choisir C pour tous les conflits d'espaces non résolus" + +#: kdiff3.cpp:505 +msgid "Automatically Solve Simple Conflicts" +msgstr "Résoudre automatiquement les conflits simples" + +#: kdiff3.cpp:506 +msgid "Set Deltas to Conflicts" +msgstr "Rendre les différences comme conflits" + +#: kdiff3.cpp:507 +msgid "Run Regular Expression Auto Merge" +msgstr "" + +#: kdiff3.cpp:508 +#, fuzzy +msgid "Automatically Solve History Conflicts" +msgstr "Résoudre automatiquement les conflits simples" + +#: kdiff3.cpp:509 +msgid "Split Diff At Selection" +msgstr "" + +#: kdiff3.cpp:510 +#, fuzzy +msgid "Join Selected Diffs" +msgstr "Comparer le fichier sélectionné" + +#: kdiff3.cpp:512 +msgid "Show Window A" +msgstr "Montrer la fenêtre A" + +#: kdiff3.cpp:513 +msgid "Show Window B" +msgstr "Montrer la fenêtre B" + +#: kdiff3.cpp:514 +msgid "Show Window C" +msgstr "Montrer la fenêtre C" + +#: kdiff3.cpp:515 kdiff3.cpp:526 +msgid "Focus Next Window" +msgstr "S'aligner sur la fenêtre suivante" + +#: kdiff3.cpp:517 +msgid "Normal Overview" +msgstr "Aperçu normal" + +#: kdiff3.cpp:518 +msgid "A vs. B Overview" +msgstr "Aperçu A contre B" + +#: kdiff3.cpp:519 +msgid "A vs. C Overview" +msgstr "Aperçu A contre C" + +#: kdiff3.cpp:520 +msgid "B vs. C Overview" +msgstr "Aperçu B contre C" + +#: kdiff3.cpp:521 +msgid "Word Wrap Diff Windows" +msgstr "Fenêtre de diff de la mise en page" + +#: kdiff3.cpp:522 +msgid "Add Manual Diff Alignment" +msgstr "" + +#: kdiff3.cpp:523 +msgid "Clear All Manual Diff Alignments" +msgstr "" + +#: kdiff3.cpp:528 +msgid "Focus Prev Window" +msgstr "S'aligner sur la fenêtre précédente" + +#: kdiff3.cpp:529 +msgid "Toggle Split Orientation" +msgstr "Partage et cadrage de l'écran" + +#: kdiff3.cpp:531 +msgid "Dir && Text Split Screen View" +msgstr "Vue partagée entre dossier et texte" + +#: kdiff3.cpp:533 +msgid "Toggle Between Dir && Text View" +msgstr "Inverser entre vue dossier et texte" + +#: kdiff3.cpp:582 pdiff.cpp:1712 +msgid "The merge result hasn't been saved." +msgstr "Le résultat de la fusion n'a pas été enregistré." + +#: kdiff3.cpp:583 +msgid "Save && Quit" +msgstr "Enregistrer et Quitter" + +#: kdiff3.cpp:583 +msgid "Quit Without Saving" +msgstr "Quitter sans enregistrer" + +#: kdiff3.cpp:591 pdiff.cpp:1721 +msgid "Saving the merge result failed." +msgstr "L'enregistrement du résultat de la fusion a échoué." + +#: kdiff3.cpp:602 pdiff.cpp:978 +msgid "" +"You are currently doing a directory merge. Are you sure, you want to abort?" +msgstr "" +"Vous faites actuellement une fusion de dossiers. Voulez-vous vraiment annuler ?" + +#: kdiff3.cpp:625 +msgid "Saving file..." +msgstr "Enregistrement du fichier..." + +#: kdiff3.cpp:642 +msgid "Saving file with a new filename..." +msgstr "Enregistrement du fichier avec un nouveau nom..." + +#: kdiff3.cpp:732 +#, fuzzy +msgid "Printing..." +msgstr "Fermeture..." + +#: kdiff3.cpp:738 kdiff3.cpp:900 +msgid "Printing aborted." +msgstr "" + +#: kdiff3.cpp:870 +msgid "Selection" +msgstr "" + +#: kdiff3.cpp:896 +#, fuzzy +msgid "Printing completed." +msgstr "Opération de fusion complète." + +#: kdiff3.cpp:906 +msgid "Exiting..." +msgstr "Fermeture..." + +#: kdiff3.cpp:918 +msgid "Toggling toolbar..." +msgstr "Cadrage de la barre d'outils..." + +#: kdiff3.cpp:939 +msgid "Toggle the statusbar..." +msgstr "Cadrage de la barre de état..." + +#: kdiff3_part.cpp:155 kdiff3_part.cpp:224 +msgid "Couldn't find files for comparison." +msgstr "Impossible de trouver les fichiers pour la comparaison" + +#: kdiff3_part.cpp:291 +msgid "KDiff3Part" +msgstr "KDiff3Part" + +#: kdiff3_shell.cpp:78 +msgid "" +"Could not find our part!\n" +"This usually happens due to an installation problem. Please read the " +"README-file in the source package for details." +msgstr "" +"Impossible de trouver le fichier part !\n" +"Cela est dû la plupart du temps a un problème d'installation. Veuillez lire le " +"fichier README dans le paquetage source pour plus de détails." + +#: main.cpp:35 +msgid "Tool for Comparison and Merge of Files and Directories" +msgstr "Outil de comparaison et de fusion de fichiers et répertoires" + +#: main.cpp:40 +msgid "Merge the input." +msgstr "Fusionner les entrées." + +#: main.cpp:42 +msgid "Explicit base file. For compatibility with certain tools." +msgstr "Fichier de base explicite. Pour compatibilité avec certains outils." + +#: main.cpp:44 +msgid "Output file. Implies -m. E.g.: -o newfile.txt" +msgstr "Fichier de résultat. Implique -m. Ex : -o nouveaufichier.txt" + +#: main.cpp:45 +msgid "Output file, again. (For compatibility with certain tools.)" +msgstr "" +"Fichier de résultat, encore. (Pour raison de compatibilité avec certains " +"outils)." + +#: main.cpp:46 +msgid "No GUI if all conflicts are auto-solvable. (Needs -o file)" +msgstr "" +"Pas de GUI si tous les conflits se résolvent automatiquement. (Besoin d'un " +"fichier -o)" + +#: main.cpp:47 +msgid "Don't solve conflicts automatically. (For compatibility...)" +msgstr "Ne pas résoudre les conflits automatiquement. (Par compatibilité...)." + +#: main.cpp:48 +msgid "Visible name replacement for input file 1 (base)." +msgstr "Remplacement visible pour le fichier d'entrée 1 (base)." + +#: main.cpp:49 +msgid "Visible name replacement for input file 2." +msgstr "Remplacement visible pour le fichier d'entrée 2." + +#: main.cpp:50 +msgid "Visible name replacement for input file 3." +msgstr "Remplacement visible pour le fichier d'entrée 3." + +#: main.cpp:52 +msgid "Alternative visible name replacement. Supply this once for every input." +msgstr "" +"Remplacement du nom visible alternativement. Faire cela une fois pour chaque " +"fichier d'entrée." + +#: main.cpp:53 +msgid "" +"Override a config setting. Use once for every setting. E.g.: --cs " +"\"AutoAdvance=1\"" +msgstr "" + +#: main.cpp:54 +msgid "Show list of config settings and current values." +msgstr "" + +#: main.cpp:55 +#, fuzzy +msgid "Use a different config file." +msgstr "Nombre de fichiers différents :" + +#: main.cpp:59 +msgid "file1 to open (base, if not specified via --base)" +msgstr "fichier 1 à ouvrir (base, si non spécifié, via --base)" + +#: main.cpp:60 +msgid "file2 to open" +msgstr "fichier 2 à ouvrir" + +#: main.cpp:61 +msgid "file3 to open" +msgstr "fichier 3 à ouvrir" + +#: main.cpp:93 +msgid "Ignored. (User defined.)" +msgstr "" + +#. i18n: file kdiff3_part.rc line 16 +#: main.cpp:173 rc.cpp:9 +#, no-c-format +msgid "KDiff3" +msgstr "KDiff3" + +#: main.cpp:186 +msgid "+ Many thanks to those who reported bugs and contributed ideas!" +msgstr "" +"+ Beaucoup de remerciements à ceux qui ont rapporté des bogues et contriibué a " +"des idées !" + +#: mergeresultwindow.cpp:136 mergeresultwindow.cpp:939 +#: mergeresultwindow.cpp:953 mergeresultwindow.cpp:965 +#: mergeresultwindow.cpp:977 +msgid "Number of remaining unsolved conflicts: %1 (of which %2 are whitespace)" +msgstr "" +"Nombre de conflits non résolus restants : %1 (dont %2 sont des conflits " +"d'espaces)" + +#: mergeresultwindow.cpp:285 +msgid "" +"The output has been modified.\n" +"If you continue your changes will be lost." +msgstr "" +"Le résultat a été modifié.\n" +"Si vous continuez, vos changement seront perdus." + +#: mergeresultwindow.cpp:797 pdiff.cpp:511 +msgid "All input files are binary equal." +msgstr "Tous les fichiers d'entrées sont égaux binairement." + +#: mergeresultwindow.cpp:799 +msgid "All input files contain the same text." +msgstr "Tous les fichiers d'entrées contiennent le même texte." + +#: mergeresultwindow.cpp:801 +msgid "" +"Files A and B are binary equal.\n" +msgstr "" +"Les fichiers A et B sont égaux binairement.\n" + +#: mergeresultwindow.cpp:802 +msgid "" +"Files A and B have equal text. \n" +msgstr "" +"Les fichiers A et B ont le même texte.\n" + +#: mergeresultwindow.cpp:803 +msgid "" +"Files A and C are binary equal.\n" +msgstr "" +"Les fichiers A et C sont égaux binairement.\n" + +#: mergeresultwindow.cpp:804 +msgid "" +"Files A and C have equal text. \n" +msgstr "" +"Les fichiers A et C ont le même texte.\n" + +#: mergeresultwindow.cpp:805 +msgid "" +"Files B and C are binary equal.\n" +msgstr "" +"Les fichiers B et C sont égaux binairement.\n" + +#: mergeresultwindow.cpp:806 +msgid "" +"Files B and C have equal text. \n" +msgstr "" +"Les fichiers B et C ont le même texte.\n" + +#: mergeresultwindow.cpp:812 +msgid "Total number of conflicts: " +msgstr "Nombre total de conflits : " + +#: mergeresultwindow.cpp:813 +msgid "" +"\n" +"Nr of automatically solved conflicts: " +msgstr "" +"\n" +"Nombre de conflits résolus automatiquement : " + +#: mergeresultwindow.cpp:814 +msgid "" +"\n" +"Nr of unsolved conflicts: " +msgstr "" +"\n" +"Nombre de conflits non résolus : " + +#: mergeresultwindow.cpp:816 +msgid "Conflicts" +msgstr "Conflits" + +#: mergeresultwindow.cpp:1652 +msgid "" +msgstr "" + +#: mergeresultwindow.cpp:1660 +msgid "" +msgstr "" + +#: mergeresultwindow.cpp:1662 mergeresultwindow.cpp:2427 +msgid "" +msgstr "" + +#: mergeresultwindow.cpp:2635 +msgid "" +"Not all conflicts are solved yet.\n" +"File not saved.\n" +msgstr "" +"Tous les conflits ne sont pas encore résolus.\n" +"Fichier non enregistré.\n" + +#: mergeresultwindow.cpp:2637 +msgid "Conflicts Left" +msgstr "Il reste des conflits" + +#: mergeresultwindow.cpp:2649 +msgid "" +"\n" +"\n" +"Creating backup failed. File not saved." +msgstr "" +"\n" +"\n" +"La création de la sauvegarde a échoué. Fichier non enregistré." + +#: mergeresultwindow.cpp:2649 mergeresultwindow.cpp:2689 +msgid "File Save Error" +msgstr "Erreur d'enregistrement du fichier" + +#: mergeresultwindow.cpp:2689 +msgid "Error while writing." +msgstr "Erreur durant l'écriture." + +#: mergeresultwindow.cpp:3020 +msgid "Output" +msgstr "Sortie" + +#: mergeresultwindow.cpp:3032 mergeresultwindow.cpp:3139 +msgid "[Modified]" +msgstr "[Modifié]" + +#: mergeresultwindow.cpp:3039 +#, fuzzy +msgid "Encoding for saving" +msgstr "Encodage du fichier pour C :" + +#: mergeresultwindow.cpp:3075 mergeresultwindow.cpp:3081 +#: mergeresultwindow.cpp:3087 +msgid "Codec from" +msgstr "" + +#: optiondialog.cpp:362 +msgid "Unicode, 8 bit" +msgstr "Unicode, 8 bit" + +#: optiondialog.cpp:363 +msgid "Unicode" +msgstr "Unicode" + +#: optiondialog.cpp:364 +msgid "Latin1" +msgstr "Latin1" + +#: optiondialog.cpp:383 +msgid "Change this if non-ASCII characters are not displayed correctly." +msgstr "" +"Changez cela si les caractères non-ASCII ne sont pas affichés correctement." + +#: optiondialog.cpp:510 +msgid "Editor & Diff Output Font" +msgstr "Police de l'éditeur et du résultat de Diff" + +#: optiondialog.cpp:531 +msgid "Italic font for deltas" +msgstr "Police en italique pour les différences" + +#: optiondialog.cpp:534 +msgid "" +"Selects the italic version of the font for differences.\n" +"If the font doesn't support italic characters, then this does nothing." +msgstr "" +"Sélectionne la version italique pour les différences.\n" +"Si la police ne gère pas les caractères en italique, cela ne fait rien." + +#: optiondialog.cpp:542 +msgid "Color" +msgstr "Couleur" + +#: optiondialog.cpp:542 +#, fuzzy +msgid "Colors Settings" +msgstr "Options régionales" + +#: optiondialog.cpp:556 +msgid "Editor and Diff Views:" +msgstr "" + +#: optiondialog.cpp:564 +msgid "Foreground color:" +msgstr "Couleur du premier plan :" + +#: optiondialog.cpp:570 +msgid "Background color:" +msgstr "Couleur de l'arrière plan :" + +#: optiondialog.cpp:578 +msgid "Diff background color:" +msgstr "Couleur de l'arrière plan d'un Diff :" + +#: optiondialog.cpp:585 +msgid "Color A:" +msgstr "Couleur A :" + +#: optiondialog.cpp:592 +msgid "Color B:" +msgstr "Couleur B :" + +#: optiondialog.cpp:599 +msgid "Color C:" +msgstr "Couleur C :" + +#: optiondialog.cpp:605 +msgid "Conflict color:" +msgstr "Couleur des conflits :" + +#: optiondialog.cpp:612 +msgid "Current range background color:" +msgstr "Couleur de l'arrière plan de la sélection :" + +#: optiondialog.cpp:619 +msgid "Current range diff background color:" +msgstr "Couleur de l'arrière plan de la sélection diff courante :" + +#: optiondialog.cpp:625 +msgid "Color for manually aligned difference ranges:" +msgstr "" + +#: optiondialog.cpp:630 +#, fuzzy +msgid "Directory Comparison View:" +msgstr "État de la comparaison des dossiers." + +#: optiondialog.cpp:636 +msgid "Newest file color:" +msgstr "" + +#: optiondialog.cpp:639 +msgid "" +"Changing this color will only be effective when starting the next directory " +"comparison." +msgstr "" + +#: optiondialog.cpp:644 +msgid "Oldest file color:" +msgstr "" + +#: optiondialog.cpp:651 +msgid "Middle age file color:" +msgstr "" + +#: optiondialog.cpp:658 +msgid "Color for missing files:" +msgstr "" + +#: optiondialog.cpp:670 +msgid "Editor" +msgstr "Éditeur" + +#: optiondialog.cpp:670 +msgid "Editor Behavior" +msgstr "Comportement de l'éditeur" + +#: optiondialog.cpp:680 +msgid "Tab inserts spaces" +msgstr "La tabulation insère des espaces" + +#: optiondialog.cpp:683 +msgid "" +"On: Pressing tab generates the appropriate number of spaces.\n" +"Off: A Tab-character will be inserted." +msgstr "" +"Activé : actionner Tab génère le nombre approprié d'espaces.\n" +"Désactivé : Un caractère de tabulation sera inséré." + +#: optiondialog.cpp:689 +msgid "Tab size:" +msgstr "Taille d'une tabulation :" + +#: optiondialog.cpp:694 +msgid "Auto indentation" +msgstr "Indentation automatique" + +#: optiondialog.cpp:697 +msgid "" +"On: The indentation of the previous line is used for a new line.\n" +msgstr "" +"Activé : l'indentation de la ligne précédente est utilisée pour une nouvelle " +"ligne.\n" + +#: optiondialog.cpp:701 +msgid "Auto copy selection" +msgstr "Copie de la sélection automatique" + +#: optiondialog.cpp:704 +msgid "" +"On: Any selection is immediately written to the clipboard.\n" +"Off: You must explicitely copy e.g. via Ctrl-C." +msgstr "" +"Activé : toute sélection sera automatiquement copiée vers le presse-papiers.\n" +"Désactivé : vous devrez copier explicitement l'élément (ex : via Ctrl+C)." + +#: optiondialog.cpp:709 +msgid "Line end style:" +msgstr "Mode de fin de ligne :" + +#: optiondialog.cpp:721 +msgid "" +"Sets the line endings for when an edited file is saved.\n" +"DOS/Windows: CR+LF; UNIX: LF; with CR=0D, LF=0A" +msgstr "" +"Configure la fin de ligne quand un fichier édité est enregistré.\n" +"DOS/Windows : CR+LF ; Unix : LF ; avec CR=0D, LF=0A" + +#: optiondialog.cpp:732 +#, fuzzy +msgid "Diff" +msgstr "KDiff3" + +#: optiondialog.cpp:732 +#, fuzzy +msgid "Diff Settings" +msgstr "Options de diff et fusion" + +#: optiondialog.cpp:743 +msgid "Preserve carriage return" +msgstr "Préserver des les retours à la ligne" + +#: optiondialog.cpp:746 +msgid "" +"Show carriage return characters '\\r' if they exist.\n" +"Helps to compare files that were modified under different operating systems." +msgstr "" +"Montre les retours à la ligne « \\r » s'ils existent.\n" +"Aide à comparer les fichiers s'ils ont été modifiées sous des OS différents." + +#: optiondialog.cpp:751 +msgid "Ignore numbers" +msgstr "Ignorer les nombres" + +#: optiondialog.cpp:754 +msgid "" +"Ignore number characters during line matching phase. (Similar to Ignore white " +"space.)\n" +"Might help to compare files with numeric data." +msgstr "" +"Ignorer les nombres durant une diff ou une fusion. (Similaire à ignorer les " +"espaces).\n" +"Peut vous aider à comparer les fichiers ayant des données numériques." + +#: optiondialog.cpp:759 +msgid "Ignore C/C++ comments" +msgstr "Ignorer les Commentaires C/C++" + +#: optiondialog.cpp:761 +msgid "Treat C/C++ comments like white space." +msgstr "Traiter les commentaires C/C++ comme des espaces." + +#: optiondialog.cpp:765 +msgid "Ignore case" +msgstr "Ignorer la case" + +#: optiondialog.cpp:768 +msgid "Treat case differences like white space changes. ('a'<=>'A')" +msgstr "" +"Traiter les différences de casse comme les changements d'espaces. (\"a\"<=>" +"\"A\")" + +#: optiondialog.cpp:772 +msgid "Preprocessor command:" +msgstr "Commande de précompilation :" + +#: optiondialog.cpp:776 +msgid "User defined pre-processing. (See the docs for details.)" +msgstr "" +"Précompilation définie par l'utilisateur. (Voir les documentations pour les " +"détails)." + +#: optiondialog.cpp:779 +msgid "Line-matching preprocessor command:" +msgstr "Commande de précompilation sur la comparaison de lignes :" + +#: optiondialog.cpp:783 +msgid "" +"This pre-processor is only used during line matching.\n" +"(See the docs for details.)" +msgstr "" +"Cette commande de précompilation n'est utilisée que durant la comparaison de " +"lignes.\n" +"(Voir les documentations pour les détails)." + +#: optiondialog.cpp:786 +msgid "Try hard (slower)" +msgstr "Essayer avec moins de mémoire (plus lent)" + +#: optiondialog.cpp:789 +msgid "" +"Enables the --minimal option for the external diff.\n" +"The analysis of big files will be much slower." +msgstr "" +"Active l'option -minimal pour une diff externe.\n" +"L'analyse de gros fichiers sera plus lente." + +#: optiondialog.cpp:794 +msgid "Auto advance delay (ms):" +msgstr "Délai d'avance automatique (en ms) :" + +#: optiondialog.cpp:799 +msgid "" +"When in Auto-Advance mode the result of the current selection is shown \n" +"for the specified time, before jumping to the next conflict. Range: 0-2000 ms" +msgstr "" +"La durée, dans le mode Avancée automatique, ou le résultat de la sélection est " +"montré \n" +" pour la période spécifiée, avant d'aller au conflit suivant. Étendue : 0-2000 " +"ms" + +#: optiondialog.cpp:809 +#, fuzzy +msgid "Merge Settings" +msgstr "Options de diff et fusion" + +#: optiondialog.cpp:822 +msgid "White space 2-file merge default:" +msgstr "Option par défaut pour les espaces lors de la fusion de 2 fichiers :" + +#: optiondialog.cpp:826 optiondialog.cpp:839 +msgid "Manual Choice" +msgstr "Choix manuel" + +#: optiondialog.cpp:830 optiondialog.cpp:844 +msgid "" +"Allow the merge algorithm to automatically select an input for white-space-only " +"changes." +msgstr "" +"Autoriser l'algorithme de fusion à sélectionner une entrée pour les changements " +"d'espaces seulement." + +#: optiondialog.cpp:835 +msgid "White space 3-file merge default:" +msgstr "Option par défaut pour les espaces lors de la fusion de 3 fichiers :" + +#: optiondialog.cpp:849 +msgid "Automatic Merge Regular Expression" +msgstr "" + +#: optiondialog.cpp:858 smalldialogs.cpp:397 +msgid "Auto merge regular expression:" +msgstr "" + +#: optiondialog.cpp:862 +msgid "" +"Regular expression for lines where KDiff3 should automatically choose one " +"source.\n" +"When a line with a conflict matches the regular expression then\n" +"- if available - C, otherwise B will be chosen." +msgstr "" + +#: optiondialog.cpp:868 +msgid "Run regular expression auto merge on merge start" +msgstr "" + +#: optiondialog.cpp:870 +msgid "" +"Run the merge for auto merge regular expressions\n" +"immediately when a merge starts.\n" +msgstr "" + +#: optiondialog.cpp:875 +msgid "Version Control History Merging" +msgstr "" + +#: optiondialog.cpp:884 smalldialogs.cpp:424 +msgid "History start regular expression:" +msgstr "" + +#: optiondialog.cpp:888 +msgid "" +"Regular expression for the start of the version control history entry.\n" +"Usually this line contains the \"$Log$\"-keyword.\n" +"Default value: \".*\\$Log.*\\$.*\"" +msgstr "" + +#: optiondialog.cpp:894 smalldialogs.cpp:453 +msgid "History entry start regular expression:" +msgstr "" + +#: optiondialog.cpp:906 +msgid "" +"A version control history entry consists of several lines.\n" +"Specify the regular expression to detect the first line (without the leading " +"comment).\n" +"Use parentheses to group the keys you want to use for sorting.\n" +"If left empty, then KDiff3 assumes that empty lines separate history entries.\n" +"See the documentation for details." +msgstr "" + +#: optiondialog.cpp:914 +msgid "History merge sorting" +msgstr "" + +#: optiondialog.cpp:916 +msgid "Sort version control history by a key." +msgstr "" + +#: optiondialog.cpp:926 +msgid "History entry start sort key order:" +msgstr "" + +#: optiondialog.cpp:930 +msgid "" +"Each parentheses used in the regular expression for the history start entry\n" +"groups a key that can be used for sorting.\n" +"Specify the list of keys (that are numbered in order of occurrence\n" +"starting with 1) using ',' as separator (e.g. \"4,5,6,1,2,3,7\").\n" +"If left empty, then no sorting will be done.\n" +"See the documentation for details." +msgstr "" + +#: optiondialog.cpp:941 +msgid "Merge version control history on merge start" +msgstr "" + +#: optiondialog.cpp:943 +msgid "Run version control history automerge on merge start." +msgstr "" + +#: optiondialog.cpp:947 +msgid "Test your regular expressions" +msgstr "" + +#: optiondialog.cpp:952 +msgid "Irrelevant merge command:" +msgstr "" + +#: optiondialog.cpp:956 +msgid "" +"If specified this script is run after automerge\n" +"when no other relevant changes were detected.\n" +"Called with the parameters: filename1 filename2 filename3" +msgstr "" + +#: optiondialog.cpp:966 +msgid "Directory Merge" +msgstr "Fusion de dossiers" + +#: optiondialog.cpp:975 +msgid "Recursive directories" +msgstr "Fusionner les sous-dossiers" + +#: optiondialog.cpp:977 +msgid "Whether to analyze subdirectories or not." +msgstr "Si vous voulez analyser les sous-dossiers ou non." + +#: optiondialog.cpp:979 +msgid "File pattern(s):" +msgstr "Formats acceptés :" + +#: optiondialog.cpp:984 +msgid "" +"Pattern(s) of files to be analyzed. \n" +"Wildcards: '*' and '?'\n" +"Several Patterns can be specified by using the separator: ';'" +msgstr "" +"Format(s) des fichiers devant être analysés. \n" +"Inconnues : « * » et «  ? » \n" +"Les formats peuvent être spécifiés en utilisant le séparateur : « ; »" + +#: optiondialog.cpp:990 +msgid "File-anti-pattern(s):" +msgstr "Formats refusés(s) :" + +#: optiondialog.cpp:995 +msgid "" +"Pattern(s) of files to be excluded from analysis. \n" +"Wildcards: '*' and '?'\n" +"Several Patterns can be specified by using the separator: ';'" +msgstr "" +"Format(s) des fichiers devant être exclus des analyses. \n" +"Inconnues : « * » et  « ? »\n" +"Les formats peuvent être spécifiés en utilisant le séparateur : « ; »" + +#: optiondialog.cpp:1001 +msgid "Dir-anti-pattern(s):" +msgstr "Formats de dossiers refusés :" + +#: optiondialog.cpp:1006 +msgid "" +"Pattern(s) of directories to be excluded from analysis. \n" +"Wildcards: '*' and '?'\n" +"Several Patterns can be specified by using the separator: ';'" +msgstr "" +"Format(s) des dossiers devant être exclus des analyses. \n" +"Inconnues : « * » et « ? »\n" +"Les formats peuvent être spécifiés en utilisant le séparateur : « ; »" + +#: optiondialog.cpp:1012 +msgid "Use .cvsignore" +msgstr "Utiliser .cvsignore" + +#: optiondialog.cpp:1015 +msgid "" +"Extends the antipattern to anything that would be ignored by CVS.\n" +"Via local \".cvsignore\"-files this can be directory specific." +msgstr "" +"Étendre l'exlusion de format à tout ce qui pourrait être ignoré par CVS.\n" +" Via un « .cvsignore »-files local, cela pourra être le dossier spécifiquement." + +#: optiondialog.cpp:1020 +msgid "Find hidden files and directories" +msgstr "Trouver les fichiers et les dossiers cachés" + +#: optiondialog.cpp:1023 +msgid "Finds files and directories with the hidden attribute." +msgstr "Trouver les fichiers et dossiers ayant l'attribut « caché »." + +#: optiondialog.cpp:1025 +msgid "Finds files and directories starting with '.'." +msgstr "Trouver les fichiers et dossiers commençant par « . »." + +#: optiondialog.cpp:1029 +msgid "Follow file links" +msgstr "Trouver les fichiers liens" + +#: optiondialog.cpp:1032 +msgid "" +"On: Compare the file the link points to.\n" +"Off: Compare the links." +msgstr "" +"Activé : compare les fichiers derrières les liens.\n" +"Désactivé : compare les liens." + +#: optiondialog.cpp:1037 +msgid "Follow directory links" +msgstr "Suivre les liens vers un dossier" + +#: optiondialog.cpp:1040 +msgid "" +"On: Compare the directory the link points to.\n" +"Off: Compare the links." +msgstr "" +"Activé : compare les dossiers derrière les liens.\n" +"Désactivé : compare les liens." + +#: optiondialog.cpp:1056 +msgid "Case sensitive filename comparison" +msgstr "" + +#: optiondialog.cpp:1059 +msgid "" +"The directory comparison will compare files or directories when their names " +"match.\n" +"Set this option if the case of the names must match. (Default for Windows is " +"off, otherwise on.)" +msgstr "" + +#: optiondialog.cpp:1063 +msgid "File Comparison Mode" +msgstr "Mode de comparaison de fichiers" + +#: optiondialog.cpp:1067 +msgid "Binary comparison" +msgstr "Comparaison binaire" + +#: optiondialog.cpp:1068 +msgid "Binary comparison of each file. (Default)" +msgstr "Comparaison binaire de chaque fichier. (Par défaut)" + +#: optiondialog.cpp:1070 +msgid "Full analysis" +msgstr "Analyse complète" + +#: optiondialog.cpp:1071 +msgid "" +"Do a full analysis and show statistics information in extra columns.\n" +"(Slower than a binary comparison, much slower for binary files.)" +msgstr "" +"Effectuer une analyse complète et afficher les informations statistiques dans " +"des colonnes supplémentaires.\n" +"Cela est plus lent qu'une comparaison binaire, particulièrement pour les " +"fichiers binaires." + +#: optiondialog.cpp:1074 +msgid "Trust the modification date (unsafe)" +msgstr "Se fier à la date de modification (peu sûr)" + +#: optiondialog.cpp:1075 +msgid "" +"Assume that files are equal if the modification date and file length are " +"equal.\n" +"Useful for big directories or slow networks." +msgstr "" +"Dire que les fichiers sont égaux si la dernière date de modification et la " +"taille du fichier sont égales.\n" +"Utile pour les gros dossiers ou les réseaux lents." + +#: optiondialog.cpp:1078 +msgid "Trust the size (unsafe)" +msgstr "Se fier à la taille (peu sûr)" + +#: optiondialog.cpp:1079 +msgid "" +"Assume that files are equal if their file lengths are equal.\n" +"Useful for big directories or slow networks when the date is modified during " +"download." +msgstr "" +"Suppose que tous les fichiers sont égaux si leur taille est égale.\n" +"Utile pour les gros dossiers ou les réseaux lents, quand la taille est modifiée " +"durant le téléchargement." + +#: optiondialog.cpp:1083 +msgid "Synchronize directories" +msgstr "Synchroniser les dossiers" + +#: optiondialog.cpp:1086 +msgid "" +"Offers to store files in both directories so that\n" +"both directories are the same afterwards.\n" +"Works only when comparing two directories without specifying a destination." +msgstr "" +"Stocker les fichiers dans les deux dossiers pour que les deux dossiers soient " +"égaux après.\n" +"Ne fonctionne que lors de la comparaison de dossiers sans spécification de " +"destination." + +#: optiondialog.cpp:1092 +msgid "White space differences considered equal" +msgstr "Les différences d'espaces sont considérées comme égales" + +#: optiondialog.cpp:1095 +msgid "" +"If files differ only by white space consider them equal.\n" +"This is only active when full analysis is chosen." +msgstr "" +"Si les fichiers ne diffèrent que par des espaces ils sont considérés comme " +"égaux.\n" +"Ceci n'est actif que si l'analyse complète est choisie." + +#: optiondialog.cpp:1101 +msgid "Copy newer instead of merging (unsafe)" +msgstr "Copier le plus récent au lieu de fusionner (peu sûr)" + +#: optiondialog.cpp:1104 +msgid "" +"Don't look inside, just take the newer file.\n" +"(Use this only if you know what you are doing!)\n" +"Only effective when comparing two directories." +msgstr "" +"Ne pas ouvrir le fichier, prendre juste le plus récent.\n" +"(Ne faites cela que si vous savez ce que vous faites !)\n" +"Effectif seulement lors de la comparaison de dossiers." + +#: optiondialog.cpp:1109 +msgid "Backup files (.orig)" +msgstr "Copie de sauvegarde (.orig)" + +#: optiondialog.cpp:1112 +msgid "" +"When a file would be saved over an old file, then the old file\n" +"will be renamed with a '.orig'-extension instead of being deleted." +msgstr "" +"Quand le fichier doit être enregistré sur un fichier plus ancien, le vieux " +"fichier sera renommé avec une extension « .orig » au lieu d'être supprimé." + +#: optiondialog.cpp:1176 +msgid "Regional Settings" +msgstr "Options régionales" + +#: optiondialog.cpp:1272 +msgid "Language (restart required)" +msgstr "Langue (redémarrage nécessaire)" + +#: optiondialog.cpp:1304 +msgid "" +"Choose the language of the GUI-strings or \"Auto\".\n" +"For a change of language to take place, quit and restart KDiff3." +msgstr "" +"Choisissez la langue de l'interface graphique ou \"Auto\".\n" +"Pour que le changement de langue prenne effet, quittez puis redémarrez KDiff3." + +#: optiondialog.cpp:1322 +msgid "Use the same encoding for everything:" +msgstr "Utiliser le même encodage pour tout :" + +#: optiondialog.cpp:1325 +msgid "" +"Enable this allows to change all encodings by changing the first only.\n" +"Disable this if different individual settings are needed." +msgstr "" +"Activer ceci vous permet de changer tous les encodages en ne changeant que le " +"premier.\n" +"Désactivez ceci si des configurations individuelles différentes sont " +"nécessaires." + +#: optiondialog.cpp:1330 +msgid "Note: Local Encoding is " +msgstr "Note : L'encodage local est" + +#: optiondialog.cpp:1334 +msgid "File Encoding for A:" +msgstr "Encodage du fichier pour A :" + +#: optiondialog.cpp:1340 +msgid "" +"If enabled then Unicode (UTF-16 or UTF-8) encoding will be detected.\n" +"If the file encoding is not detected then the selected encoding will be used as " +"fallback.\n" +"(Unicode detection depends on the first bytes of a file - the byte order mark " +"\"BOM\".)" +msgstr "" + +#: optiondialog.cpp:1344 optiondialog.cpp:1353 optiondialog.cpp:1362 +msgid "Auto Detect Unicode" +msgstr "" + +#: optiondialog.cpp:1349 +msgid "File Encoding for B:" +msgstr "Encodage du fichier pour B :" + +#: optiondialog.cpp:1358 +msgid "File Encoding for C:" +msgstr "Encodage du fichier pour C :" + +#: optiondialog.cpp:1367 +msgid "File Encoding for Merge Output and Saving:" +msgstr "" +"Encodage du fichier pour le résultat de la fusion et l'enregistrement :" + +#: optiondialog.cpp:1371 +#, fuzzy +msgid "Auto Select" +msgstr "Copie de la sélection automatique" + +#: optiondialog.cpp:1374 +msgid "" +"If enabled then the encoding from the input files is used.\n" +"In ambiguous cases a dialog will ask the user to choose the encoding for " +"saving." +msgstr "" + +#: optiondialog.cpp:1378 +msgid "File Encoding for Preprocessor Files:" +msgstr "Encodage du fichier pour les fichiers préprocesseurs :" + +#: optiondialog.cpp:1389 +msgid "Right To Left Language" +msgstr "Encodage de droite à gauche" + +#: optiondialog.cpp:1392 +msgid "" +"Some languages are read from right to left.\n" +"This setting will change the viewer and editor accordingly." +msgstr "" +"Certains langages sont lus de droite à gauche.\n" +"Cette option changera le visionneur et l'éditeur." + +#: optiondialog.cpp:1402 +#, fuzzy +msgid "Integration" +msgstr "Opération" + +#: optiondialog.cpp:1402 +#, fuzzy +msgid "Integration Settings" +msgstr "Options régionales" + +#: optiondialog.cpp:1412 +msgid "Command line options to ignore:" +msgstr "" + +#: optiondialog.cpp:1417 +msgid "" +"List of command line options that should be ignored when KDiff3 is used by " +"other tools.\n" +"Several values can be specified if separated via ';'\n" +"This will suppress the \"Unknown option\"-error." +msgstr "" + +#: optiondialog.cpp:1480 +msgid "" +"You selected a variable width font.\n" +"\n" +"Because this program doesn't handle variable width fonts\n" +"correctly, you might experience problems while editing.\n" +"\n" +"Do you want to continue or do you want to select another font." +msgstr "" +"Vous avez sélectionné une hauteur de police variable.\n" +"\n" +"Étant donné que ce programme ne gère pas correctement les hauteurs de police " +"variables, vous pourriez rencontrer des problèmes lors de l'édition.\n" +"\n" +"Voulez-vous continuer ou voulez-vous sélectionner une autre police." + +#: optiondialog.cpp:1484 +msgid "Incompatible Font" +msgstr "Police incompatible" + +#: optiondialog.cpp:1485 +msgid "Continue at Own Risk" +msgstr "Continuez à vos risques et périls" + +#: optiondialog.cpp:1485 +msgid "Select Another Font" +msgstr "Sélectionnez une autre police" + +#: optiondialog.cpp:1521 +msgid "This resets all options. Not only those of the current topic." +msgstr "" +"Cela remet à zéro toutes les options. Pas seulement celles de la rubrique " +"actuelle." + +#: pdiff.cpp:258 +msgid "PreprocessorCmd: " +msgstr "Commande de préprocessus :" + +#: pdiff.cpp:263 +msgid "" +"The following option(s) you selected might change data:\n" +msgstr "" +"Les options suivantes que vous avez sélectionné peuvent changer vos données :\n" + +#: pdiff.cpp:264 +msgid "" +"\n" +"Most likely this is not wanted during a merge.\n" +"Do you want to disable these settings or continue with these settings active?" +msgstr "" +"\n" +"Il y a beaucoup de chances que ceci ne soit pas voulu durant une fusion.\n" +"Voulez-vous désactiver ces options ou continuer avec ces options actives ?" + +#: pdiff.cpp:266 +msgid "Option Unsafe for Merging" +msgstr "Option non-sûre pour une fusion" + +#: pdiff.cpp:267 +msgid "Use These Options During Merge" +msgstr "Utiliser ces options durant la fusion" + +#: pdiff.cpp:267 +msgid "Disable Unsafe Options" +msgstr "Désactiver les options non-sûres" + +#: pdiff.cpp:297 +msgid "Loading A" +msgstr "Chargement de A" + +#: pdiff.cpp:301 +msgid "Loading B" +msgstr "Chargement de B" + +#: pdiff.cpp:318 pdiff.cpp:344 +msgid "Diff: A <-> B" +msgstr "Différence entre A et B" + +#: pdiff.cpp:324 pdiff.cpp:366 +msgid "Linediff: A <-> B" +msgstr "Différence de ligne entre A et B" + +#: pdiff.cpp:335 +msgid "Loading C" +msgstr "Chargement de C" + +#: pdiff.cpp:347 +msgid "Diff: B <-> C" +msgstr "Différence entre B et C" + +#: pdiff.cpp:350 +msgid "Diff: A <-> C" +msgstr "Différence entre A et C" + +#: pdiff.cpp:369 +msgid "Linediff: B <-> C" +msgstr "Différence de ligne entre B et C" + +#: pdiff.cpp:372 +msgid "Linediff: A <-> C" +msgstr "Différence de ligne entre A et C" + +#: pdiff.cpp:513 +#, fuzzy +msgid "All input files contain the same text, but are not binary equal." +msgstr "Tous les fichiers d'entrées contiennent le même texte." + +#: pdiff.cpp:515 pdiff.cpp:517 pdiff.cpp:519 +#, fuzzy +msgid "" +"Files %1 and %2 are binary equal.\n" +msgstr "" +"Les fichiers B et C sont égaux binairement.\n" + +#: pdiff.cpp:516 pdiff.cpp:518 pdiff.cpp:520 +#, fuzzy +msgid "" +"Files %1 and %2 have equal text, but are not binary equal. \n" +msgstr "" +"Les fichiers A et B sont égaux binairement.\n" + +#: pdiff.cpp:530 +msgid "" +"Some inputfiles don't seem to be pure textfiles.\n" +"Note that the KDiff3-merge was not meant for binary data.\n" +"Continue at your own risk." +msgstr "" +"Certains fichiers d'entrée ne semblent pas être des fichiers texte purs.\n" +"Notez que la fusion KDiff3 n'est pas prévue pour les données binaires.\n" +"Continuez à vos risques et périls." + +#: pdiff.cpp:979 +msgid "Abort" +msgstr "Abandonner" + +#: pdiff.cpp:985 pdiff.cpp:1073 +msgid "Opening files..." +msgstr "Ouverture des fichiers..." + +#: pdiff.cpp:1050 pdiff.cpp:1121 +msgid "File open error" +msgstr "Erreur d'ouverture du fichier" + +#: pdiff.cpp:1153 +msgid "Cutting selection..." +msgstr "Coupe de la sélection..." + +#: pdiff.cpp:1174 +msgid "Copying selection to clipboard..." +msgstr "Copie de la sélection vers le presse-papiers..." + +#: pdiff.cpp:1190 +msgid "Inserting clipboard contents..." +msgstr "Insertion du contenu du presse-papiers..." + +#: pdiff.cpp:1713 +msgid "Save && Continue" +msgstr "Enregistrer et continuer" + +#: pdiff.cpp:1713 +msgid "Continue Without Saving" +msgstr "Continuer sans enregistrer" + +#: pdiff.cpp:1920 +msgid "Search complete." +msgstr "Recherche terminée." + +#: pdiff.cpp:1920 +msgid "Search Complete" +msgstr "Recherche terminée." + +#: pdiff.cpp:2144 +msgid "Nothing is selected in either diff input window." +msgstr "" + +#: pdiff.cpp:2144 +#, fuzzy +msgid "Error while adding manual diff range" +msgstr "Erreur durant la création du dossier" + +#. i18n: file kdiff3_part.rc line 4 +#: rc.cpp:3 +#, no-c-format +msgid "&KDiff3" +msgstr "&KDiff3" + +#. i18n: file kdiff3_part.rc line 13 +#: rc.cpp:6 +#, no-c-format +msgid "Configure KDiff3" +msgstr "Configurer KDiff3" + +#. i18n: file kdiff3_shell.rc line 7 +#: rc.cpp:15 +#, no-c-format +msgid "&Directory" +msgstr "&Dossier" + +#. i18n: file kdiff3_shell.rc line 30 +#: rc.cpp:18 +#, no-c-format +msgid "Current Item Merge Operation" +msgstr "Fusion de l'élément actuel" + +#. i18n: file kdiff3_shell.rc line 38 +#: rc.cpp:21 +#, no-c-format +msgid "Current Item Sync Operation" +msgstr "Synchronisation de l'élément actuel" + +#. i18n: file kdiff3_shell.rc line 50 +#: rc.cpp:24 +#, no-c-format +msgid "&Movement" +msgstr "&Mouvement" + +#. i18n: file kdiff3_shell.rc line 61 +#: rc.cpp:27 +#, no-c-format +msgid "D&iffview" +msgstr "Vue de D&iff" + +#. i18n: file kdiff3_shell.rc line 73 +#: rc.cpp:30 +#, no-c-format +msgid "&Merge" +msgstr "&Fusion" + +#. i18n: file kdiff3_shell.rc line 95 +#: rc.cpp:33 +#, no-c-format +msgid "&Window" +msgstr "&Fenêtre" + +#: smalldialogs.cpp:53 +msgid "A (Base):" +msgstr "A (Base) :" + +#: smalldialogs.cpp:59 smalldialogs.cpp:75 smalldialogs.cpp:91 +#: smalldialogs.cpp:134 +msgid "File..." +msgstr "Fichier..." + +#: smalldialogs.cpp:61 smalldialogs.cpp:77 smalldialogs.cpp:93 +#: smalldialogs.cpp:136 +msgid "Dir..." +msgstr "Dossier..." + +#: smalldialogs.cpp:86 +msgid "C (Optional):" +msgstr "C (Optionnel) :" + +#: smalldialogs.cpp:108 +msgid "Swap/Copy Names ..." +msgstr "" + +#: smalldialogs.cpp:114 smalldialogs.cpp:115 smalldialogs.cpp:116 +msgid "Swap %1<->%2" +msgstr "" + +#: smalldialogs.cpp:117 smalldialogs.cpp:118 smalldialogs.cpp:119 +msgid "Copy %1->Output" +msgstr "" + +#: smalldialogs.cpp:120 smalldialogs.cpp:121 smalldialogs.cpp:122 +msgid "Swap %1<->Output" +msgstr "" + +#: smalldialogs.cpp:129 +msgid "Output (optional):" +msgstr "Fichier de résultat (optionnel) :" + +#: smalldialogs.cpp:158 +msgid "Configure..." +msgstr "Configurer..." + +#: smalldialogs.cpp:347 +msgid "Search text:" +msgstr "Chercher la chaîne :" + +#: smalldialogs.cpp:354 +msgid "Case sensitive" +msgstr "Sensible à la casse" + +#: smalldialogs.cpp:357 +msgid "Search A" +msgstr "Chercher dans A" + +#: smalldialogs.cpp:362 +msgid "Search B" +msgstr "Chercher dans B" + +#: smalldialogs.cpp:367 +msgid "Search C" +msgstr "Chercher dans C" + +#: smalldialogs.cpp:372 +msgid "Search output" +msgstr "Chercher dans le résultat" + +#: smalldialogs.cpp:377 +msgid "&Search" +msgstr "&Chercher" + +#: smalldialogs.cpp:394 +msgid "Regular Expression Tester" +msgstr "" + +#: smalldialogs.cpp:405 +msgid "Example auto merge line:" +msgstr "" + +#: smalldialogs.cpp:407 +msgid "For auto merge test copy a line as used in your files." +msgstr "" + +#: smalldialogs.cpp:413 smalldialogs.cpp:442 smalldialogs.cpp:479 +msgid "Match result:" +msgstr "" + +#: smalldialogs.cpp:432 +msgid "Example history start line (with leading comment):" +msgstr "" + +#: smalldialogs.cpp:435 +msgid "" +"Copy a history start line as used in your files,\n" +"including the leading comment." +msgstr "" + +#: smalldialogs.cpp:461 +msgid "History sort key order:" +msgstr "" + +#: smalldialogs.cpp:469 +msgid "Example history entry start line (without leading comment):" +msgstr "" + +#: smalldialogs.cpp:471 +msgid "" +"Copy a history entry start line as used in your files,\n" +"but omit the leading comment." +msgstr "" + +#: smalldialogs.cpp:486 +msgid "Sort key result:" +msgstr "" + +#: smalldialogs.cpp:537 smalldialogs.cpp:547 smalldialogs.cpp:568 +msgid "Match success." +msgstr "" + +#: smalldialogs.cpp:541 smalldialogs.cpp:551 smalldialogs.cpp:574 +#, fuzzy +msgid "Match failed." +msgstr "Échec de l'enregistrement." + +#: smalldialogs.cpp:559 +msgid "Opening and closing parentheses don't match in regular expression." +msgstr "" + +#, fuzzy +#~ msgid "Diff and Merge" +#~ msgstr "Différences et fusion" + +#, fuzzy +#~ msgid "Save Directory Merge State ..." +#~ msgstr "Fusion de dossiers" + +#, fuzzy +#~ msgid "Load Directory Merge State ..." +#~ msgstr "Fusion de dossiers" + +#, fuzzy +#~ msgid "Synchronize Directories" +#~ msgstr "Synchroniser les dossiers" + +#, fuzzy +#~ msgid "Copy Newer Files Instead of Merging" +#~ msgstr "Copier le plus récent au lieu de fusionner (peu sûr)" + +#~ msgid "List only deltas" +#~ msgstr "Lister seulement les différences" + +#~ msgid "Files and directories without change will not appear in the list." +#~ msgstr "Fichiers et dossiers sans différences n'apparaîtront pas dans la liste." + +#, fuzzy +#~ msgid "no selection" +#~ msgstr "Copie de la sélection automatique" + +#, fuzzy +#~ msgid "Manually match lines" +#~ msgstr "Choix manuel" + +#~ msgid "Has no effect. For compatibility with certain tools." +#~ msgstr "N'a pas d'effet. Pour la compatibilité avec certains outils." + +#~ msgid "For compatibility with certain tools." +#~ msgstr "Pour la compatibilité avec certains outils." + +#~ msgid "Colors in Editor & Diff Output" +#~ msgstr "Couleur dans l'éditeur et le résultat d'une Diff" diff --git a/po/ga.po b/po/ga.po new file mode 100644 index 0000000..9b1bf0a --- /dev/null +++ b/po/ga.po @@ -0,0 +1,2314 @@ +msgid "" +msgstr "" +"Project-Id-Version: kdeextragear-1/kdiff3.po\n" +"POT-Creation-Date: 2006-11-05 08:45+0100\n" +"PO-Revision-Date: 2004-12-03 14:52-0500\n" +"Last-Translator: Kevin Patrick Scannell \n" +"Language-Team: ga \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: _translatorinfo.cpp:1 +msgid "" +"_: NAME OF TRANSLATORS\n" +"Your names" +msgstr "Séamus Ó Ciardhuáin,Kevin Scannell" + +#: _translatorinfo.cpp:3 +msgid "" +"_: EMAIL OF TRANSLATORS\n" +"Your emails" +msgstr "seoc at iolfree dot ie,scannell at slu dot edu" + +#: diff.cpp:246 +msgid "Writing clipboard data to temp file failed." +msgstr "" + +#: diff.cpp:250 +msgid "From Clipboard" +msgstr "Ón nGearrthaisce" + +#: diff.cpp:491 +msgid "" +"Preprocessing possibly failed. Check this command:\n" +"\n" +" %1\n" +"\n" +"The preprocessing command will be disabled now." +msgstr "" + +#: diff.cpp:526 +msgid "" +"The line-matching-preprocessing possibly failed. Check this command:\n" +"\n" +" %1\n" +"\n" +"The line-matching-preprocessing command will be disabled now." +msgstr "" + +#: diff.cpp:1631 diff.cpp:1645 +msgid "" +"Data loss error:\n" +"If it is reproducable please contact the author.\n" +msgstr "" + +#: diff.cpp:1633 diff.cpp:1647 +msgid "Severe Internal Error" +msgstr "Earráid Throm Inmheánach" + +#: difftextwindow.cpp:1643 kdiff3.cpp:753 +msgid "Top line" +msgstr "" + +#: difftextwindow.cpp:1653 +msgid "End" +msgstr "Deireadh" + +#: directorymergewindow.cpp:142 +msgid "Mix of links and normal files." +msgstr "" + +#: directorymergewindow.cpp:149 +msgid "Link: " +msgstr "Nasc: " + +#: directorymergewindow.cpp:157 +msgid "Size. " +msgstr "Méid. " + +#: directorymergewindow.cpp:170 +msgid "Date & Size: " +msgstr "Dáta & Méid: " + +#: directorymergewindow.cpp:179 directorymergewindow.cpp:185 +msgid "Creating temp copy of %1 failed." +msgstr "" + +#: directorymergewindow.cpp:196 directorymergewindow.cpp:204 +msgid "Opening %1 failed." +msgstr "Theip ar oscailt %1." + +#: directorymergewindow.cpp:208 +msgid "Comparing file..." +msgstr "Ag cur comhad i gcomparáid..." + +#: directorymergewindow.cpp:218 directorymergewindow.cpp:224 +#, c-format +msgid "Error reading from %1" +msgstr "" + +#: directorymergewindow.cpp:282 +msgid "Name" +msgstr "Ainm" + +#: directorymergewindow.cpp:286 +msgid "Operation" +msgstr "Oibríocht" + +#: directorymergewindow.cpp:287 +msgid "Status" +msgstr "Stádas" + +#: directorymergewindow.cpp:288 +msgid "Unsolved" +msgstr "Gan réiteach" + +#: directorymergewindow.cpp:289 +msgid "Solved" +msgstr "Réitithe" + +#: directorymergewindow.cpp:290 +msgid "Nonwhite" +msgstr "" + +#: directorymergewindow.cpp:291 +msgid "White" +msgstr "Bán" + +#: directorymergewindow.cpp:319 +msgid "" +"You are currently doing a directory merge. Are you sure, you want to abort the " +"merge and rescan the directory?" +msgstr "" + +#: directorymergewindow.cpp:320 directorymergewindow.cpp:2868 +msgid "Rescan" +msgstr "Athscan" + +#: directorymergewindow.cpp:320 kdiff3.cpp:603 pdiff.cpp:979 +msgid "Continue Merging" +msgstr "" + +#: directorymergewindow.cpp:462 +msgid "Opening of directories failed:" +msgstr "Theip ar oscailt na gcomhadlann:" + +#: directorymergewindow.cpp:465 +msgid "" +"Dir A \"%1\" does not exist or is not a directory.\n" +msgstr "" + +#: directorymergewindow.cpp:468 +msgid "" +"Dir B \"%1\" does not exist or is not a directory.\n" +msgstr "" + +#: directorymergewindow.cpp:471 +msgid "" +"Dir C \"%1\" does not exist or is not a directory.\n" +msgstr "" + +#: directorymergewindow.cpp:473 +msgid "Directory Open Error" +msgstr "" + +#: directorymergewindow.cpp:481 +msgid "" +"The destination directory must not be the same as A or B when three directories " +"are merged.\n" +"Check again before continuing." +msgstr "" + +#: directorymergewindow.cpp:483 +msgid "Parameter Warning" +msgstr "" + +#: directorymergewindow.cpp:488 +msgid "Scanning directories..." +msgstr "Comhadlanna á scanadh..." + +#: directorymergewindow.cpp:537 +msgid "Reading Directory A" +msgstr "Comhadlann A á Léamh" + +#: directorymergewindow.cpp:559 +msgid "Reading Directory B" +msgstr "Comhadlann B á Léamh" + +#: directorymergewindow.cpp:581 +msgid "Reading Directory C" +msgstr "Comhadlann C á Léamh" + +#: directorymergewindow.cpp:607 +msgid "Some subdirectories were not readable in" +msgstr "" + +#: directorymergewindow.cpp:612 +msgid "Check the permissions of the subdirectories." +msgstr "" + +#: directorymergewindow.cpp:646 kdiff3.cpp:552 kdiff3.cpp:636 kdiff3.cpp:661 +#: kdiff3.cpp:934 kdiff3.cpp:955 pdiff.cpp:1059 pdiff.cpp:1131 pdiff.cpp:1169 +#: pdiff.cpp:1185 pdiff.cpp:1215 pdiff.cpp:1226 +msgid "Ready." +msgstr "Réidh." + +#: directorymergewindow.cpp:660 +msgid "Directory Comparison Status" +msgstr "" + +#: directorymergewindow.cpp:661 +msgid "Number of subdirectories:" +msgstr "Líon na bhFochomhadlann:" + +#: directorymergewindow.cpp:662 +msgid "Number of equal files:" +msgstr "" + +#: directorymergewindow.cpp:663 +msgid "Number of different files:" +msgstr "Líon na gcomhad difriúil:" + +#: directorymergewindow.cpp:666 +msgid "Number of manual merges:" +msgstr "" + +#: directorymergewindow.cpp:802 +msgid "This affects all merge operations." +msgstr "" + +#: directorymergewindow.cpp:803 +msgid "Changing All Merge Operations" +msgstr "" + +#: directorymergewindow.cpp:803 mergeresultwindow.cpp:287 +msgid "C&ontinue" +msgstr "&Lean ar aghaidh" + +#: directorymergewindow.cpp:1169 +msgid "Processing " +msgstr "Ag próiseáil " + +#: directorymergewindow.cpp:1647 directorymergewindow.cpp:1653 +msgid "To do." +msgstr "Le déanamh." + +#: directorymergewindow.cpp:1756 directorymergewindow.cpp:2899 +msgid "Copy A to B" +msgstr "Cóipeáil A go B" + +#: directorymergewindow.cpp:1757 directorymergewindow.cpp:2900 +msgid "Copy B to A" +msgstr "Cóipeáil B go A" + +#: directorymergewindow.cpp:1758 directorymergewindow.cpp:2901 +msgid "Delete A" +msgstr "Scrios A" + +#: directorymergewindow.cpp:1759 directorymergewindow.cpp:2902 +msgid "Delete B" +msgstr "Scrios B" + +#: directorymergewindow.cpp:1760 +msgid "Delete A & B" +msgstr "Scrios A & B" + +#: directorymergewindow.cpp:1761 directorymergewindow.cpp:2904 +msgid "Merge to A" +msgstr "" + +#: directorymergewindow.cpp:1762 directorymergewindow.cpp:2905 +msgid "Merge to B" +msgstr "" + +#: directorymergewindow.cpp:1763 +msgid "Merge to A & B" +msgstr "" + +#: directorymergewindow.cpp:1767 directorymergewindow.cpp:2896 +msgid "Delete (if exists)" +msgstr "Scrios (má tá sé ann)" + +#: directorymergewindow.cpp:1768 directorymergewindow.cpp:1769 +#: directorymergewindow.cpp:2895 optiondialog.cpp:809 smalldialogs.cpp:102 +msgid "Merge" +msgstr "Cumaisc" + +#: directorymergewindow.cpp:1768 directorymergewindow.cpp:1769 +msgid "Merge (manual)" +msgstr "Cumaisc (de láimh)" + +#: directorymergewindow.cpp:1770 +msgid "Error: Conflicting File Types" +msgstr "Earráid: Cineálacha Comhaid Contrártha" + +#: directorymergewindow.cpp:1771 +msgid "Error: Dates are equal but files are not." +msgstr "" + +#: directorymergewindow.cpp:1795 directorymergewindow.cpp:1824 +#: directorymergewindow.cpp:1849 +msgid "This operation is currently not possible." +msgstr "" + +#: directorymergewindow.cpp:1795 directorymergewindow.cpp:1824 +#: directorymergewindow.cpp:1849 directorymergewindow.cpp:2106 +msgid "Operation Not Possible" +msgstr "" + +#: directorymergewindow.cpp:1888 +msgid "" +"This should never happen: \n" +"\n" +"mergeResultSaved: m_pMFI=0\n" +"\n" +"If you know how to reproduce this, please contact the program author." +msgstr "" + +#: directorymergewindow.cpp:1888 +msgid "Program Error" +msgstr "Earráid Chláir" + +#: directorymergewindow.cpp:1899 +msgid "" +"An error occurred while copying.\n" +msgstr "" +"Tharla earráid le linn cóipeála.\n" + +#: directorymergewindow.cpp:1900 directorymergewindow.cpp:2306 +msgid "Merge Error" +msgstr "" + +#: directorymergewindow.cpp:1905 directorymergewindow.cpp:2311 +msgid "Error." +msgstr "Earráid." + +#: directorymergewindow.cpp:1910 directorymergewindow.cpp:2202 +#: directorymergewindow.cpp:2242 +msgid "Done." +msgstr "Críochnaithe." + +#: directorymergewindow.cpp:1933 +msgid "Not saved." +msgstr "Gan sábháil." + +#: directorymergewindow.cpp:1968 +msgid "Unknown merge operation. (This must never happen!)" +msgstr "" + +#: directorymergewindow.cpp:2000 +msgid "Unknown merge operation." +msgstr "" + +#: directorymergewindow.cpp:2015 +msgid "" +"The merge is about to begin.\n" +"\n" +"Choose \"Do it\" if you have read the instructions and know what you are " +"doing.\n" +"Choosing \"Simulate it\" will tell you what would happen.\n" +"\n" +"Be aware that this program still has beta status and there is NO WARRANTY " +"whatsoever! Make backups of your vital data!" +msgstr "" + +#: directorymergewindow.cpp:2020 +msgid "Starting Merge" +msgstr "" + +#: directorymergewindow.cpp:2020 +msgid "Do It" +msgstr "Déan" + +#: directorymergewindow.cpp:2020 +msgid "Simulate It" +msgstr "" + +#: directorymergewindow.cpp:2046 +msgid "" +"The highlighted item has a different type in the different directories. Select " +"what to do." +msgstr "" + +#: directorymergewindow.cpp:2055 +msgid "" +"The modification dates of the file are equal but the files are not. Select what " +"to do." +msgstr "" + +#: directorymergewindow.cpp:2106 +msgid "" +"This operation is currently not possible because directory merge is currently " +"running." +msgstr "" + +#: directorymergewindow.cpp:2166 +msgid "" +"There was an error in the last step.\n" +"Do you want to continue with the item that caused the error or do you want to " +"skip this item?" +msgstr "" + +#: directorymergewindow.cpp:2168 +msgid "Continue merge after an error" +msgstr "" + +#: directorymergewindow.cpp:2168 +msgid "Continue With Last Item" +msgstr "" + +#: directorymergewindow.cpp:2168 +msgid "Skip Item" +msgstr "Ná Bac Le Mír" + +#: directorymergewindow.cpp:2202 +msgid "Skipped." +msgstr "" + +#: directorymergewindow.cpp:2209 directorymergewindow.cpp:2435 +msgid "In progress..." +msgstr "Ar siúl..." + +#: directorymergewindow.cpp:2257 +msgid "Merge operation complete." +msgstr "" + +#: directorymergewindow.cpp:2257 directorymergewindow.cpp:2260 +msgid "Merge Complete" +msgstr "" + +#: directorymergewindow.cpp:2269 +msgid "" +"Simulated merge complete: Check if you agree with the proposed operations." +msgstr "" + +#: directorymergewindow.cpp:2305 +msgid "" +"An error occurred. Press OK to see detailed information.\n" +msgstr "" + +#: directorymergewindow.cpp:2348 +msgid "Error: While deleting %1: Creating backup failed." +msgstr "Earráid agus %1 á scriosadh: Theip ar chruthú cúltaca." + +#: directorymergewindow.cpp:2355 +msgid "delete directory recursively( %1 )" +msgstr "scrios comhadlann go hathchúrsach( %1 )" + +#: directorymergewindow.cpp:2357 +msgid "delete( %1 )" +msgstr "scrios( %1 )" + +#: directorymergewindow.cpp:2372 +msgid "Error: delete dir operation failed while trying to read the directory." +msgstr "" + +#: directorymergewindow.cpp:2391 +msgid "Error: rmdir( %1 ) operation failed." +msgstr "Earráid: theip ar rmdir( %1 )." + +#: directorymergewindow.cpp:2401 +msgid "Error: delete operation failed." +msgstr "Earráid: theip ar scriosadh." + +#: directorymergewindow.cpp:2427 +msgid "manual merge( %1, %2, %3 -> %4)" +msgstr "cumaisc de láimh( %1, %2, %3 -> %4)" + +#: directorymergewindow.cpp:2430 +msgid "" +" Note: After a manual merge the user should continue by pressing F7." +msgstr "" + +#: directorymergewindow.cpp:2453 +msgid "Error: copy( %1 -> %2 ) failed.Deleting existing destination failed." +msgstr "" + +#: directorymergewindow.cpp:2463 +msgid "copyLink( %1 -> %2 )" +msgstr "" + +#: directorymergewindow.cpp:2474 +msgid "Error: copyLink failed: Remote links are not yet supported." +msgstr "" + +#: directorymergewindow.cpp:2480 +msgid "Error: copyLink failed." +msgstr "" + +#: directorymergewindow.cpp:2500 +msgid "copy( %1 -> %2 )" +msgstr "cóipeáil( %1 -> %2 )" + +#: directorymergewindow.cpp:2526 +msgid "Error during rename( %1 -> %2 ): Cannot delete existing destination." +msgstr "" + +#: directorymergewindow.cpp:2532 +msgid "rename( %1 -> %2 )" +msgstr "athainmnigh( %1 -> %2 )" + +#: directorymergewindow.cpp:2541 +msgid "Error: Rename failed." +msgstr "Earráid: theip ar athainmniú." + +#: directorymergewindow.cpp:2559 +msgid "Error during makeDir of %1. Cannot delete existing file." +msgstr "" + +#: directorymergewindow.cpp:2575 +msgid "makeDir( %1 )" +msgstr "makeDir( %1 )" + +#: directorymergewindow.cpp:2585 +msgid "Error while creating directory." +msgstr "Earráid agus comhadlann á cruthú." + +#: directorymergewindow.cpp:2608 directorymergewindow.cpp:2725 +msgid "Dest" +msgstr "Sprioc" + +#: directorymergewindow.cpp:2612 directorymergewindow.cpp:2650 +msgid "Dir" +msgstr "Cmhdlnn" + +#: directorymergewindow.cpp:2613 +msgid "Type" +msgstr "Cineál" + +#: directorymergewindow.cpp:2614 +msgid "Size" +msgstr "Méid" + +#: directorymergewindow.cpp:2615 +msgid "Attr" +msgstr "" + +#: directorymergewindow.cpp:2616 +msgid "Last Modification" +msgstr "Athrú Is Déanaí" + +#: directorymergewindow.cpp:2617 +msgid "Link-Destination" +msgstr "" + +#: directorymergewindow.cpp:2667 +msgid "not available" +msgstr "níl ar fáil" + +#: directorymergewindow.cpp:2687 +msgid "A (Dest): " +msgstr "A (Sprioc): " + +#: directorymergewindow.cpp:2690 +msgid "A (Base): " +msgstr "A (Bun): " + +#: directorymergewindow.cpp:2696 +msgid "B (Dest): " +msgstr "B (Sprioc): " + +#: directorymergewindow.cpp:2704 +msgid "C (Dest): " +msgstr "C (Sprioc): " + +#: directorymergewindow.cpp:2710 +msgid "Dest: " +msgstr "Sprioc: " + +#: directorymergewindow.cpp:2775 +msgid "Save Directory Merge State As..." +msgstr "" + +#: directorymergewindow.cpp:2862 +msgid "Start/Continue Directory Merge" +msgstr "" + +#: directorymergewindow.cpp:2863 +msgid "Run Operation for Current Item" +msgstr "" + +#: directorymergewindow.cpp:2864 +msgid "Compare Selected File" +msgstr "Cuir Comhad Roghnaithe i gComparáid" + +#: directorymergewindow.cpp:2865 +msgid "Merge Current File" +msgstr "Cumaisc an Comhad Reatha" + +#: directorymergewindow.cpp:2866 +msgid "Fold All Subdirs" +msgstr "" + +#: directorymergewindow.cpp:2867 +msgid "Unfold All Subdirs" +msgstr "" + +#: directorymergewindow.cpp:2871 +msgid "Choose A for All Items" +msgstr "" + +#: directorymergewindow.cpp:2872 +msgid "Choose B for All Items" +msgstr "" + +#: directorymergewindow.cpp:2873 +msgid "Choose C for All Items" +msgstr "" + +#: directorymergewindow.cpp:2874 +msgid "Auto-Choose Operation for All Items" +msgstr "" + +#: directorymergewindow.cpp:2875 +msgid "No Operation for All Items" +msgstr "" + +#: directorymergewindow.cpp:2880 +msgid "Show Identical Files" +msgstr "" + +#: directorymergewindow.cpp:2881 +msgid "Show Different Files" +msgstr "Taispeáin Comhaid Difriúla" + +#: directorymergewindow.cpp:2882 +msgid "Show Files only in A" +msgstr "Taispeáin Comhaid i A amháin" + +#: directorymergewindow.cpp:2883 +msgid "Show Files only in B" +msgstr "Taispeáin Comhaid i B amháin" + +#: directorymergewindow.cpp:2884 +msgid "Show Files only in C" +msgstr "Taispeáin Comhaid i C amháin" + +#: directorymergewindow.cpp:2888 +msgid "Compare Explicitly Selected Files" +msgstr "" + +#: directorymergewindow.cpp:2889 +msgid "Merge Explicitly Selected Files" +msgstr "" + +#: directorymergewindow.cpp:2891 directorymergewindow.cpp:2898 +msgid "Do Nothing" +msgstr "Ná déan faic" + +#: directorymergewindow.cpp:2892 +msgid "A" +msgstr "A" + +#: directorymergewindow.cpp:2893 +msgid "B" +msgstr "B" + +#: directorymergewindow.cpp:2894 +msgid "C" +msgstr "C" + +#: directorymergewindow.cpp:2903 +msgid "Delete A && B" +msgstr "Scrios A && B" + +#: directorymergewindow.cpp:2906 +msgid "Merge to A && B" +msgstr "" + +#: fileaccess.cpp:595 +msgid "" +"While trying to make a backup, deleting an older backup failed. \n" +"Filename: " +msgstr "" + +#: fileaccess.cpp:602 +msgid "" +"While trying to make a backup, renaming failed. \n" +"Filenames: " +msgstr "" + +#: fileaccess.cpp:624 +#, c-format +msgid "Getting file status: %1" +msgstr "" + +#: fileaccess.cpp:667 +#, c-format +msgid "Reading file: %1" +msgstr "Comhad á léamh: %1" + +#: fileaccess.cpp:703 +#, c-format +msgid "Writing file: %1" +msgstr "Comhad á scríobh: %1" + +#: fileaccess.cpp:731 +msgid "Out of memory" +msgstr "Cuimhne ídithe" + +#: fileaccess.cpp:766 +#, c-format +msgid "Making directory: %1" +msgstr "Comhadlann á déanamh: %1" + +#: fileaccess.cpp:786 +#, c-format +msgid "Removing directory: %1" +msgstr "Comhadlann á baint: %1" + +#: fileaccess.cpp:801 +#, c-format +msgid "Removing file: %1" +msgstr "Comhad á bhaint: %1" + +#: fileaccess.cpp:817 +msgid "Creating symbolic link: %1 -> %2" +msgstr "Nasc siombalach á chruthú: %1 -> %2" + +#: fileaccess.cpp:843 +msgid "Renaming file: %1 -> %2" +msgstr "Comhad á athainmniú: %1 -> %2" + +#: fileaccess.cpp:879 +msgid "Copying file: %1 -> %2" +msgstr "Comhad á chóipeáil: %1 -> %2" + +#: fileaccess.cpp:893 +#, c-format +msgid "" +"Error during file copy operation: Opening file for reading failed. Filename: %1" +msgstr "" + +#: fileaccess.cpp:899 +#, c-format +msgid "" +"Error during file copy operation: Opening file for writing failed. Filename: %1" +msgstr "" + +#: fileaccess.cpp:914 +#, c-format +msgid "Error during file copy operation: Reading failed. Filename: %1" +msgstr "" + +#: fileaccess.cpp:923 +#, c-format +msgid "Error during file copy operation: Writing failed. Filename: %1" +msgstr "" + +#: fileaccess.cpp:1219 +msgid "Reading directory: " +msgstr "Comhadlann á léamh: " + +#: fileaccess.cpp:1348 +#, c-format +msgid "Listing directory: %1" +msgstr "" + +#: kdiff3.cpp:142 +msgid "Current Configuration:" +msgstr "Cumraíocht Reatha:" + +#: kdiff3.cpp:147 +msgid "Config Option Error:" +msgstr "" + +#: kdiff3.cpp:187 +msgid "Option --auto used, but no output file specified." +msgstr "Rogha --auto in úsáid, ach níor sonraíodh aon aschomhad." + +#: kdiff3.cpp:323 +msgid "Option --auto ignored for directory comparison." +msgstr "" + +#: kdiff3.cpp:359 +msgid "Saving failed." +msgstr "Theip ar shábháil." + +#: kdiff3.cpp:386 pdiff.cpp:1041 pdiff.cpp:1112 +msgid "Opening of these files failed:" +msgstr "Theip ar oscailt na comhad seo:" + +#: kdiff3.cpp:395 +msgid "File Open Error" +msgstr "Earráid agus Comhad á Oscailt" + +#: kdiff3.cpp:418 +msgid "Opens documents for comparison..." +msgstr "" + +#: kdiff3.cpp:423 +msgid "Saves the merge result. All conflicts must be solved!" +msgstr "" + +#: kdiff3.cpp:425 +msgid "Saves the current document as..." +msgstr "" + +#: kdiff3.cpp:427 +msgid "Print the differences" +msgstr "" + +#: kdiff3.cpp:429 +msgid "Quits the application" +msgstr "Éirigh as an bhfeidhmchlár" + +#: kdiff3.cpp:431 +msgid "Cuts the selected section and puts it to the clipboard" +msgstr "" + +#: kdiff3.cpp:433 +msgid "Copies the selected section to the clipboard" +msgstr "" + +#: kdiff3.cpp:435 +msgid "Pastes the clipboard contents to actual position" +msgstr "" + +#: kdiff3.cpp:437 +msgid "Select everything in current window" +msgstr "" + +#: kdiff3.cpp:439 +msgid "Search for a string" +msgstr "" + +#: kdiff3.cpp:441 +msgid "Search again for the string" +msgstr "" + +#: kdiff3.cpp:443 +msgid "Enables/disables the toolbar" +msgstr "Cumasaigh/díchumasaigh barra na n-uirlisí" + +#: kdiff3.cpp:445 +msgid "Enables/disables the statusbar" +msgstr "Cumasaigh/díchumasaigh an barra stádais" + +#: kdiff3.cpp:449 +msgid "Configure KDiff3..." +msgstr "Cumraigh KDiff3..." + +#: kdiff3.cpp:470 +msgid "Go to Current Delta" +msgstr "" + +#: kdiff3.cpp:471 +msgid "Go to First Delta" +msgstr "" + +#: kdiff3.cpp:472 +msgid "Go to Last Delta" +msgstr "" + +#: kdiff3.cpp:473 +msgid "(Skips white space differences when \"Show White Space\" is disabled.)" +msgstr "" + +#: kdiff3.cpp:474 +msgid "" +"(Does not skip white space differences even when \"Show White Space\" is " +"disabled.)" +msgstr "" + +#: kdiff3.cpp:475 +msgid "Go to Previous Delta" +msgstr "" + +#: kdiff3.cpp:477 +msgid "Go to Next Delta" +msgstr "" + +#: kdiff3.cpp:479 +msgid "Go to Previous Conflict" +msgstr "" + +#: kdiff3.cpp:481 +msgid "Go to Next Conflict" +msgstr "" + +#: kdiff3.cpp:483 +msgid "Go to Previous Unsolved Conflict" +msgstr "" + +#: kdiff3.cpp:485 +msgid "Go to Next Unsolved Conflict" +msgstr "" + +#: kdiff3.cpp:487 +msgid "Select Line(s) From A" +msgstr "Roghnaigh Lín(t)e Ó A" + +#: kdiff3.cpp:488 +msgid "Select Line(s) From B" +msgstr "Roghnaigh Lín(t)e Ó B" + +#: kdiff3.cpp:489 +msgid "Select Line(s) From C" +msgstr "Roghnaigh Lín(t)e Ó C" + +#: kdiff3.cpp:490 +msgid "Automatically Go to Next Unsolved Conflict After Source Selection" +msgstr "" + +#: kdiff3.cpp:492 +msgid "Show Space && Tabulator Characters for Differences" +msgstr "" + +#: kdiff3.cpp:493 +msgid "Show White Space" +msgstr "Taispeáin Spás Bán" + +#: kdiff3.cpp:495 +msgid "Show Line Numbers" +msgstr "Taispeáin Líne-Uimhreacha" + +#: kdiff3.cpp:496 +msgid "Choose A Everywhere" +msgstr "" + +#: kdiff3.cpp:497 +msgid "Choose B Everywhere" +msgstr "" + +#: kdiff3.cpp:498 +msgid "Choose C Everywhere" +msgstr "" + +#: kdiff3.cpp:499 +msgid "Choose A for All Unsolved Conflicts" +msgstr "" + +#: kdiff3.cpp:500 +msgid "Choose B for All Unsolved Conflicts" +msgstr "" + +#: kdiff3.cpp:501 +msgid "Choose C for All Unsolved Conflicts" +msgstr "" + +#: kdiff3.cpp:502 +msgid "Choose A for All Unsolved Whitespace Conflicts" +msgstr "" + +#: kdiff3.cpp:503 +msgid "Choose B for All Unsolved Whitespace Conflicts" +msgstr "" + +#: kdiff3.cpp:504 +msgid "Choose C for All Unsolved Whitespace Conflicts" +msgstr "" + +#: kdiff3.cpp:505 +msgid "Automatically Solve Simple Conflicts" +msgstr "" + +#: kdiff3.cpp:506 +msgid "Set Deltas to Conflicts" +msgstr "" + +#: kdiff3.cpp:507 +msgid "Run Regular Expression Auto Merge" +msgstr "" + +#: kdiff3.cpp:508 +msgid "Automatically Solve History Conflicts" +msgstr "" + +#: kdiff3.cpp:509 +msgid "Split Diff At Selection" +msgstr "" + +#: kdiff3.cpp:510 +msgid "Join Selected Diffs" +msgstr "" + +#: kdiff3.cpp:512 +msgid "Show Window A" +msgstr "Taispeáin Fuinneog A" + +#: kdiff3.cpp:513 +msgid "Show Window B" +msgstr "Taispeáin Fuinneog B" + +#: kdiff3.cpp:514 +msgid "Show Window C" +msgstr "Taispeáin Fuinneog C" + +#: kdiff3.cpp:515 kdiff3.cpp:526 +msgid "Focus Next Window" +msgstr "" + +#: kdiff3.cpp:517 +msgid "Normal Overview" +msgstr "Foramharc Coitianta" + +#: kdiff3.cpp:518 +msgid "A vs. B Overview" +msgstr "Foramharc A vs. B" + +#: kdiff3.cpp:519 +msgid "A vs. C Overview" +msgstr "Foramharc A vs. C" + +#: kdiff3.cpp:520 +msgid "B vs. C Overview" +msgstr "Foramharc B vs. C" + +#: kdiff3.cpp:521 +msgid "Word Wrap Diff Windows" +msgstr "" + +#: kdiff3.cpp:522 +msgid "Add Manual Diff Alignment" +msgstr "" + +#: kdiff3.cpp:523 +msgid "Clear All Manual Diff Alignments" +msgstr "" + +#: kdiff3.cpp:528 +msgid "Focus Prev Window" +msgstr "" + +#: kdiff3.cpp:529 +msgid "Toggle Split Orientation" +msgstr "" + +#: kdiff3.cpp:531 +msgid "Dir && Text Split Screen View" +msgstr "" + +#: kdiff3.cpp:533 +msgid "Toggle Between Dir && Text View" +msgstr "" + +#: kdiff3.cpp:582 pdiff.cpp:1712 +msgid "The merge result hasn't been saved." +msgstr "" + +#: kdiff3.cpp:583 +msgid "Save && Quit" +msgstr "Sábháil && Scoir" + +#: kdiff3.cpp:583 +msgid "Quit Without Saving" +msgstr "Scoir Gan Sábháil" + +#: kdiff3.cpp:591 pdiff.cpp:1721 +msgid "Saving the merge result failed." +msgstr "Theip ar shábháil na torthaí an chumaisc." + +#: kdiff3.cpp:602 pdiff.cpp:978 +msgid "" +"You are currently doing a directory merge. Are you sure, you want to abort?" +msgstr "" + +#: kdiff3.cpp:625 +msgid "Saving file..." +msgstr "Comhad á shábháil..." + +#: kdiff3.cpp:642 +msgid "Saving file with a new filename..." +msgstr "Comhad á shábháil le hainm comhaid nua..." + +#: kdiff3.cpp:732 +msgid "Printing..." +msgstr "à Phriontáil..." + +#: kdiff3.cpp:738 kdiff3.cpp:900 +msgid "Printing aborted." +msgstr "Priontáil tobscortha." + +#: kdiff3.cpp:870 +msgid "Selection" +msgstr "Roghnúchán" + +#: kdiff3.cpp:896 +msgid "Printing completed." +msgstr "" + +#: kdiff3.cpp:906 +msgid "Exiting..." +msgstr "Ag scor..." + +#: kdiff3.cpp:918 +msgid "Toggling toolbar..." +msgstr "Barra uirlisí á scoránú..." + +#: kdiff3.cpp:939 +msgid "Toggle the statusbar..." +msgstr "Scoránaigh an barra stádais..." + +#: kdiff3_part.cpp:155 kdiff3_part.cpp:224 +msgid "Couldn't find files for comparison." +msgstr "" + +#: kdiff3_part.cpp:291 +msgid "KDiff3Part" +msgstr "KDiff3Part" + +#: kdiff3_shell.cpp:78 +msgid "" +"Could not find our part!\n" +"This usually happens due to an installation problem. Please read the " +"README-file in the source package for details." +msgstr "" + +#: main.cpp:35 +msgid "Tool for Comparison and Merge of Files and Directories" +msgstr "" + +#: main.cpp:40 +msgid "Merge the input." +msgstr "" + +#: main.cpp:42 +msgid "Explicit base file. For compatibility with certain tools." +msgstr "" + +#: main.cpp:44 +msgid "Output file. Implies -m. E.g.: -o newfile.txt" +msgstr "" + +#: main.cpp:45 +msgid "Output file, again. (For compatibility with certain tools.)" +msgstr "" + +#: main.cpp:46 +msgid "No GUI if all conflicts are auto-solvable. (Needs -o file)" +msgstr "" + +#: main.cpp:47 +msgid "Don't solve conflicts automatically. (For compatibility...)" +msgstr "" + +#: main.cpp:48 +msgid "Visible name replacement for input file 1 (base)." +msgstr "" + +#: main.cpp:49 +msgid "Visible name replacement for input file 2." +msgstr "" + +#: main.cpp:50 +msgid "Visible name replacement for input file 3." +msgstr "" + +#: main.cpp:52 +msgid "Alternative visible name replacement. Supply this once for every input." +msgstr "" + +#: main.cpp:53 +msgid "" +"Override a config setting. Use once for every setting. E.g.: --cs " +"\"AutoAdvance=1\"" +msgstr "" + +#: main.cpp:54 +msgid "Show list of config settings and current values." +msgstr "" + +#: main.cpp:55 +msgid "Use a different config file." +msgstr "Úsáid comhad cumraíochta eile." + +#: main.cpp:59 +msgid "file1 to open (base, if not specified via --base)" +msgstr "" + +#: main.cpp:60 +msgid "file2 to open" +msgstr "" + +#: main.cpp:61 +msgid "file3 to open" +msgstr "" + +#: main.cpp:93 +msgid "Ignored. (User defined.)" +msgstr "" + +#. i18n: file kdiff3_part.rc line 16 +#: main.cpp:173 rc.cpp:9 +#, no-c-format +msgid "KDiff3" +msgstr "KDiff3" + +#: main.cpp:186 +msgid "+ Many thanks to those who reported bugs and contributed ideas!" +msgstr "" + +#: mergeresultwindow.cpp:136 mergeresultwindow.cpp:939 +#: mergeresultwindow.cpp:953 mergeresultwindow.cpp:965 +#: mergeresultwindow.cpp:977 +msgid "Number of remaining unsolved conflicts: %1 (of which %2 are whitespace)" +msgstr "" + +#: mergeresultwindow.cpp:285 +msgid "" +"The output has been modified.\n" +"If you continue your changes will be lost." +msgstr "" + +#: mergeresultwindow.cpp:797 pdiff.cpp:511 +msgid "All input files are binary equal." +msgstr "" + +#: mergeresultwindow.cpp:799 +msgid "All input files contain the same text." +msgstr "" + +#: mergeresultwindow.cpp:801 +msgid "" +"Files A and B are binary equal.\n" +msgstr "" + +#: mergeresultwindow.cpp:802 +msgid "" +"Files A and B have equal text. \n" +msgstr "" + +#: mergeresultwindow.cpp:803 +msgid "" +"Files A and C are binary equal.\n" +msgstr "" + +#: mergeresultwindow.cpp:804 +msgid "" +"Files A and C have equal text. \n" +msgstr "" + +#: mergeresultwindow.cpp:805 +msgid "" +"Files B and C are binary equal.\n" +msgstr "" + +#: mergeresultwindow.cpp:806 +msgid "" +"Files B and C have equal text. \n" +msgstr "" + +#: mergeresultwindow.cpp:812 +msgid "Total number of conflicts: " +msgstr "" + +#: mergeresultwindow.cpp:813 +msgid "" +"\n" +"Nr of automatically solved conflicts: " +msgstr "" + +#: mergeresultwindow.cpp:814 +msgid "" +"\n" +"Nr of unsolved conflicts: " +msgstr "" + +#: mergeresultwindow.cpp:816 +msgid "Conflicts" +msgstr "Coinbhleachtaí" + +#: mergeresultwindow.cpp:1652 +msgid "" +msgstr "" + +#: mergeresultwindow.cpp:1660 +msgid "" +msgstr "" + +#: mergeresultwindow.cpp:1662 mergeresultwindow.cpp:2427 +msgid "" +msgstr "" + +#: mergeresultwindow.cpp:2635 +msgid "" +"Not all conflicts are solved yet.\n" +"File not saved.\n" +msgstr "" + +#: mergeresultwindow.cpp:2637 +msgid "Conflicts Left" +msgstr "" + +#: mergeresultwindow.cpp:2649 +msgid "" +"\n" +"\n" +"Creating backup failed. File not saved." +msgstr "" + +#: mergeresultwindow.cpp:2649 mergeresultwindow.cpp:2689 +msgid "File Save Error" +msgstr "" + +#: mergeresultwindow.cpp:2689 +msgid "Error while writing." +msgstr "" + +#: mergeresultwindow.cpp:3020 +msgid "Output" +msgstr "Aschur" + +#: mergeresultwindow.cpp:3032 mergeresultwindow.cpp:3139 +msgid "[Modified]" +msgstr "[Athraithe]" + +#: mergeresultwindow.cpp:3039 +msgid "Encoding for saving" +msgstr "" + +#: mergeresultwindow.cpp:3075 mergeresultwindow.cpp:3081 +#: mergeresultwindow.cpp:3087 +msgid "Codec from" +msgstr "" + +#: optiondialog.cpp:362 +msgid "Unicode, 8 bit" +msgstr "Unicode, 8 bit" + +#: optiondialog.cpp:363 +msgid "Unicode" +msgstr "Unicode" + +#: optiondialog.cpp:364 +msgid "Latin1" +msgstr "Laidin1" + +#: optiondialog.cpp:383 +msgid "Change this if non-ASCII characters are not displayed correctly." +msgstr "" + +#: optiondialog.cpp:510 +msgid "Editor & Diff Output Font" +msgstr "" + +#: optiondialog.cpp:531 +msgid "Italic font for deltas" +msgstr "" + +#: optiondialog.cpp:534 +msgid "" +"Selects the italic version of the font for differences.\n" +"If the font doesn't support italic characters, then this does nothing." +msgstr "" + +#: optiondialog.cpp:542 +msgid "Color" +msgstr "Dath" + +#: optiondialog.cpp:542 +msgid "Colors Settings" +msgstr "Socruithe Datha" + +#: optiondialog.cpp:556 +msgid "Editor and Diff Views:" +msgstr "" + +#: optiondialog.cpp:564 +msgid "Foreground color:" +msgstr "Dath an tulra:" + +#: optiondialog.cpp:570 +msgid "Background color:" +msgstr "Dath an chúlra:" + +#: optiondialog.cpp:578 +msgid "Diff background color:" +msgstr "" + +#: optiondialog.cpp:585 +msgid "Color A:" +msgstr "Dath A:" + +#: optiondialog.cpp:592 +msgid "Color B:" +msgstr "Dath B:" + +#: optiondialog.cpp:599 +msgid "Color C:" +msgstr "Dath C:" + +#: optiondialog.cpp:605 +msgid "Conflict color:" +msgstr "Dath na gCoinbhleachtaí:" + +#: optiondialog.cpp:612 +msgid "Current range background color:" +msgstr "" + +#: optiondialog.cpp:619 +msgid "Current range diff background color:" +msgstr "" + +#: optiondialog.cpp:625 +msgid "Color for manually aligned difference ranges:" +msgstr "" + +#: optiondialog.cpp:630 +msgid "Directory Comparison View:" +msgstr "" + +#: optiondialog.cpp:636 +msgid "Newest file color:" +msgstr "" + +#: optiondialog.cpp:639 +msgid "" +"Changing this color will only be effective when starting the next directory " +"comparison." +msgstr "" + +#: optiondialog.cpp:644 +msgid "Oldest file color:" +msgstr "" + +#: optiondialog.cpp:651 +msgid "Middle age file color:" +msgstr "" + +#: optiondialog.cpp:658 +msgid "Color for missing files:" +msgstr "" + +#: optiondialog.cpp:670 +msgid "Editor" +msgstr "Eagarthóir" + +#: optiondialog.cpp:670 +msgid "Editor Behavior" +msgstr "" + +#: optiondialog.cpp:680 +msgid "Tab inserts spaces" +msgstr "" + +#: optiondialog.cpp:683 +msgid "" +"On: Pressing tab generates the appropriate number of spaces.\n" +"Off: A Tab-character will be inserted." +msgstr "" + +#: optiondialog.cpp:689 +msgid "Tab size:" +msgstr "Méid táib:" + +#: optiondialog.cpp:694 +msgid "Auto indentation" +msgstr "UathEangú" + +#: optiondialog.cpp:697 +msgid "" +"On: The indentation of the previous line is used for a new line.\n" +msgstr "" + +#: optiondialog.cpp:701 +msgid "Auto copy selection" +msgstr "" + +#: optiondialog.cpp:704 +msgid "" +"On: Any selection is immediately written to the clipboard.\n" +"Off: You must explicitely copy e.g. via Ctrl-C." +msgstr "" + +#: optiondialog.cpp:709 +msgid "Line end style:" +msgstr "" + +#: optiondialog.cpp:721 +msgid "" +"Sets the line endings for when an edited file is saved.\n" +"DOS/Windows: CR+LF; UNIX: LF; with CR=0D, LF=0A" +msgstr "" + +#: optiondialog.cpp:732 +msgid "Diff" +msgstr "Difríochtaí" + +#: optiondialog.cpp:732 +msgid "Diff Settings" +msgstr "Socruithe: Difríochtaí" + +#: optiondialog.cpp:743 +msgid "Preserve carriage return" +msgstr "Caomhnaigh aisfhilleadh carráiste" + +#: optiondialog.cpp:746 +msgid "" +"Show carriage return characters '\\r' if they exist.\n" +"Helps to compare files that were modified under different operating systems." +msgstr "" + +#: optiondialog.cpp:751 +msgid "Ignore numbers" +msgstr "" + +#: optiondialog.cpp:754 +msgid "" +"Ignore number characters during line matching phase. (Similar to Ignore white " +"space.)\n" +"Might help to compare files with numeric data." +msgstr "" + +#: optiondialog.cpp:759 +msgid "Ignore C/C++ comments" +msgstr "Déan neamhaird de nótaí C/C++" + +#: optiondialog.cpp:761 +msgid "Treat C/C++ comments like white space." +msgstr "" + +#: optiondialog.cpp:765 +msgid "Ignore case" +msgstr "" + +#: optiondialog.cpp:768 +msgid "Treat case differences like white space changes. ('a'<=>'A')" +msgstr "" + +#: optiondialog.cpp:772 +msgid "Preprocessor command:" +msgstr "Ordú réamhphróiseálaí:" + +#: optiondialog.cpp:776 +msgid "User defined pre-processing. (See the docs for details.)" +msgstr "" + +#: optiondialog.cpp:779 +msgid "Line-matching preprocessor command:" +msgstr "" + +#: optiondialog.cpp:783 +msgid "" +"This pre-processor is only used during line matching.\n" +"(See the docs for details.)" +msgstr "" + +#: optiondialog.cpp:786 +msgid "Try hard (slower)" +msgstr "" + +#: optiondialog.cpp:789 +msgid "" +"Enables the --minimal option for the external diff.\n" +"The analysis of big files will be much slower." +msgstr "" + +#: optiondialog.cpp:794 +msgid "Auto advance delay (ms):" +msgstr "" + +#: optiondialog.cpp:799 +msgid "" +"When in Auto-Advance mode the result of the current selection is shown \n" +"for the specified time, before jumping to the next conflict. Range: 0-2000 ms" +msgstr "" + +#: optiondialog.cpp:809 +msgid "Merge Settings" +msgstr "Socruithe: Cumasc" + +#: optiondialog.cpp:822 +msgid "White space 2-file merge default:" +msgstr "" + +#: optiondialog.cpp:826 optiondialog.cpp:839 +msgid "Manual Choice" +msgstr "Rogha Láimhe" + +#: optiondialog.cpp:830 optiondialog.cpp:844 +msgid "" +"Allow the merge algorithm to automatically select an input for white-space-only " +"changes." +msgstr "" + +#: optiondialog.cpp:835 +msgid "White space 3-file merge default:" +msgstr "" + +#: optiondialog.cpp:849 +msgid "Automatic Merge Regular Expression" +msgstr "" + +#: optiondialog.cpp:858 smalldialogs.cpp:397 +msgid "Auto merge regular expression:" +msgstr "" + +#: optiondialog.cpp:862 +msgid "" +"Regular expression for lines where KDiff3 should automatically choose one " +"source.\n" +"When a line with a conflict matches the regular expression then\n" +"- if available - C, otherwise B will be chosen." +msgstr "" + +#: optiondialog.cpp:868 +msgid "Run regular expression auto merge on merge start" +msgstr "" + +#: optiondialog.cpp:870 +msgid "" +"Run the merge for auto merge regular expressions\n" +"immediately when a merge starts.\n" +msgstr "" + +#: optiondialog.cpp:875 +msgid "Version Control History Merging" +msgstr "" + +#: optiondialog.cpp:884 smalldialogs.cpp:424 +msgid "History start regular expression:" +msgstr "" + +#: optiondialog.cpp:888 +msgid "" +"Regular expression for the start of the version control history entry.\n" +"Usually this line contains the \"$Log$\"-keyword.\n" +"Default value: \".*\\$Log.*\\$.*\"" +msgstr "" + +#: optiondialog.cpp:894 smalldialogs.cpp:453 +msgid "History entry start regular expression:" +msgstr "" + +#: optiondialog.cpp:906 +msgid "" +"A version control history entry consists of several lines.\n" +"Specify the regular expression to detect the first line (without the leading " +"comment).\n" +"Use parentheses to group the keys you want to use for sorting.\n" +"If left empty, then KDiff3 assumes that empty lines separate history entries.\n" +"See the documentation for details." +msgstr "" + +#: optiondialog.cpp:914 +msgid "History merge sorting" +msgstr "" + +#: optiondialog.cpp:916 +msgid "Sort version control history by a key." +msgstr "" + +#: optiondialog.cpp:926 +msgid "History entry start sort key order:" +msgstr "" + +#: optiondialog.cpp:930 +msgid "" +"Each parentheses used in the regular expression for the history start entry\n" +"groups a key that can be used for sorting.\n" +"Specify the list of keys (that are numbered in order of occurrence\n" +"starting with 1) using ',' as separator (e.g. \"4,5,6,1,2,3,7\").\n" +"If left empty, then no sorting will be done.\n" +"See the documentation for details." +msgstr "" + +#: optiondialog.cpp:941 +msgid "Merge version control history on merge start" +msgstr "" + +#: optiondialog.cpp:943 +msgid "Run version control history automerge on merge start." +msgstr "" + +#: optiondialog.cpp:947 +msgid "Test your regular expressions" +msgstr "" + +#: optiondialog.cpp:952 +msgid "Irrelevant merge command:" +msgstr "" + +#: optiondialog.cpp:956 +msgid "" +"If specified this script is run after automerge\n" +"when no other relevant changes were detected.\n" +"Called with the parameters: filename1 filename2 filename3" +msgstr "" + +#: optiondialog.cpp:966 +msgid "Directory Merge" +msgstr "Cumasc Comhadlann" + +#: optiondialog.cpp:975 +msgid "Recursive directories" +msgstr "Comhadlanna athchúrsacha" + +#: optiondialog.cpp:977 +msgid "Whether to analyze subdirectories or not." +msgstr "" + +#: optiondialog.cpp:979 +msgid "File pattern(s):" +msgstr "" + +#: optiondialog.cpp:984 +msgid "" +"Pattern(s) of files to be analyzed. \n" +"Wildcards: '*' and '?'\n" +"Several Patterns can be specified by using the separator: ';'" +msgstr "" + +#: optiondialog.cpp:990 +msgid "File-anti-pattern(s):" +msgstr "" + +#: optiondialog.cpp:995 +msgid "" +"Pattern(s) of files to be excluded from analysis. \n" +"Wildcards: '*' and '?'\n" +"Several Patterns can be specified by using the separator: ';'" +msgstr "" + +#: optiondialog.cpp:1001 +msgid "Dir-anti-pattern(s):" +msgstr "" + +#: optiondialog.cpp:1006 +msgid "" +"Pattern(s) of directories to be excluded from analysis. \n" +"Wildcards: '*' and '?'\n" +"Several Patterns can be specified by using the separator: ';'" +msgstr "" + +#: optiondialog.cpp:1012 +msgid "Use .cvsignore" +msgstr "Úsáid .cvsignore" + +#: optiondialog.cpp:1015 +msgid "" +"Extends the antipattern to anything that would be ignored by CVS.\n" +"Via local \".cvsignore\"-files this can be directory specific." +msgstr "" + +#: optiondialog.cpp:1020 +msgid "Find hidden files and directories" +msgstr "Aimsigh comhaid agus comhadlanna folaithe" + +#: optiondialog.cpp:1023 +msgid "Finds files and directories with the hidden attribute." +msgstr "" + +#: optiondialog.cpp:1025 +msgid "Finds files and directories starting with '.'." +msgstr "" + +#: optiondialog.cpp:1029 +msgid "Follow file links" +msgstr "" + +#: optiondialog.cpp:1032 +msgid "" +"On: Compare the file the link points to.\n" +"Off: Compare the links." +msgstr "" + +#: optiondialog.cpp:1037 +msgid "Follow directory links" +msgstr "" + +#: optiondialog.cpp:1040 +msgid "" +"On: Compare the directory the link points to.\n" +"Off: Compare the links." +msgstr "" + +#: optiondialog.cpp:1056 +msgid "Case sensitive filename comparison" +msgstr "" + +#: optiondialog.cpp:1059 +msgid "" +"The directory comparison will compare files or directories when their names " +"match.\n" +"Set this option if the case of the names must match. (Default for Windows is " +"off, otherwise on.)" +msgstr "" + +#: optiondialog.cpp:1063 +msgid "File Comparison Mode" +msgstr "" + +#: optiondialog.cpp:1067 +msgid "Binary comparison" +msgstr "Comparáid dénártha" + +#: optiondialog.cpp:1068 +msgid "Binary comparison of each file. (Default)" +msgstr "Comparáid dénártha de gach comhad. (Réamhshocrú)" + +#: optiondialog.cpp:1070 +msgid "Full analysis" +msgstr "Anailís iomlán" + +#: optiondialog.cpp:1071 +msgid "" +"Do a full analysis and show statistics information in extra columns.\n" +"(Slower than a binary comparison, much slower for binary files.)" +msgstr "" + +#: optiondialog.cpp:1074 +msgid "Trust the modification date (unsafe)" +msgstr "" + +#: optiondialog.cpp:1075 +msgid "" +"Assume that files are equal if the modification date and file length are " +"equal.\n" +"Useful for big directories or slow networks." +msgstr "" + +#: optiondialog.cpp:1078 +msgid "Trust the size (unsafe)" +msgstr "" + +#: optiondialog.cpp:1079 +msgid "" +"Assume that files are equal if their file lengths are equal.\n" +"Useful for big directories or slow networks when the date is modified during " +"download." +msgstr "" + +#: optiondialog.cpp:1083 +msgid "Synchronize directories" +msgstr "Sioncrónaigh comhadlanna" + +#: optiondialog.cpp:1086 +msgid "" +"Offers to store files in both directories so that\n" +"both directories are the same afterwards.\n" +"Works only when comparing two directories without specifying a destination." +msgstr "" + +#: optiondialog.cpp:1092 +msgid "White space differences considered equal" +msgstr "" + +#: optiondialog.cpp:1095 +msgid "" +"If files differ only by white space consider them equal.\n" +"This is only active when full analysis is chosen." +msgstr "" + +#: optiondialog.cpp:1101 +msgid "Copy newer instead of merging (unsafe)" +msgstr "" + +#: optiondialog.cpp:1104 +msgid "" +"Don't look inside, just take the newer file.\n" +"(Use this only if you know what you are doing!)\n" +"Only effective when comparing two directories." +msgstr "" + +#: optiondialog.cpp:1109 +msgid "Backup files (.orig)" +msgstr "Comhaid chúltaca (.orig)" + +#: optiondialog.cpp:1112 +msgid "" +"When a file would be saved over an old file, then the old file\n" +"will be renamed with a '.orig'-extension instead of being deleted." +msgstr "" + +#: optiondialog.cpp:1176 +msgid "Regional Settings" +msgstr "Socruithe Réigiúnda" + +#: optiondialog.cpp:1272 +msgid "Language (restart required)" +msgstr "Teanga (atosú de dhíth)" + +#: optiondialog.cpp:1304 +msgid "" +"Choose the language of the GUI-strings or \"Auto\".\n" +"For a change of language to take place, quit and restart KDiff3." +msgstr "" + +#: optiondialog.cpp:1322 +msgid "Use the same encoding for everything:" +msgstr "" + +#: optiondialog.cpp:1325 +msgid "" +"Enable this allows to change all encodings by changing the first only.\n" +"Disable this if different individual settings are needed." +msgstr "" + +#: optiondialog.cpp:1330 +msgid "Note: Local Encoding is " +msgstr "" + +#: optiondialog.cpp:1334 +msgid "File Encoding for A:" +msgstr "" + +#: optiondialog.cpp:1340 +msgid "" +"If enabled then Unicode (UTF-16 or UTF-8) encoding will be detected.\n" +"If the file encoding is not detected then the selected encoding will be used as " +"fallback.\n" +"(Unicode detection depends on the first bytes of a file - the byte order mark " +"\"BOM\".)" +msgstr "" + +#: optiondialog.cpp:1344 optiondialog.cpp:1353 optiondialog.cpp:1362 +msgid "Auto Detect Unicode" +msgstr "" + +#: optiondialog.cpp:1349 +msgid "File Encoding for B:" +msgstr "" + +#: optiondialog.cpp:1358 +msgid "File Encoding for C:" +msgstr "" + +#: optiondialog.cpp:1367 +msgid "File Encoding for Merge Output and Saving:" +msgstr "" + +#: optiondialog.cpp:1371 +msgid "Auto Select" +msgstr "Uathroghnú" + +#: optiondialog.cpp:1374 +msgid "" +"If enabled then the encoding from the input files is used.\n" +"In ambiguous cases a dialog will ask the user to choose the encoding for " +"saving." +msgstr "" + +#: optiondialog.cpp:1378 +msgid "File Encoding for Preprocessor Files:" +msgstr "" + +#: optiondialog.cpp:1389 +msgid "Right To Left Language" +msgstr "" + +#: optiondialog.cpp:1392 +msgid "" +"Some languages are read from right to left.\n" +"This setting will change the viewer and editor accordingly." +msgstr "" + +#: optiondialog.cpp:1402 +msgid "Integration" +msgstr "Comhtháthú" + +#: optiondialog.cpp:1402 +msgid "Integration Settings" +msgstr "Socruithe Comhtháthaithe" + +#: optiondialog.cpp:1412 +msgid "Command line options to ignore:" +msgstr "" + +#: optiondialog.cpp:1417 +msgid "" +"List of command line options that should be ignored when KDiff3 is used by " +"other tools.\n" +"Several values can be specified if separated via ';'\n" +"This will suppress the \"Unknown option\"-error." +msgstr "" + +#: optiondialog.cpp:1480 +msgid "" +"You selected a variable width font.\n" +"\n" +"Because this program doesn't handle variable width fonts\n" +"correctly, you might experience problems while editing.\n" +"\n" +"Do you want to continue or do you want to select another font." +msgstr "" + +#: optiondialog.cpp:1484 +msgid "Incompatible Font" +msgstr "Cló Neamh-chomhoiriúnach" + +#: optiondialog.cpp:1485 +msgid "Continue at Own Risk" +msgstr "Lean ort ar do phriacal féin" + +#: optiondialog.cpp:1485 +msgid "Select Another Font" +msgstr "Roghnaigh Cló Eile" + +#: optiondialog.cpp:1521 +msgid "This resets all options. Not only those of the current topic." +msgstr "" + +#: pdiff.cpp:258 +msgid "PreprocessorCmd: " +msgstr "" + +#: pdiff.cpp:263 +msgid "" +"The following option(s) you selected might change data:\n" +msgstr "" + +#: pdiff.cpp:264 +msgid "" +"\n" +"Most likely this is not wanted during a merge.\n" +"Do you want to disable these settings or continue with these settings active?" +msgstr "" + +#: pdiff.cpp:266 +msgid "Option Unsafe for Merging" +msgstr "" + +#: pdiff.cpp:267 +msgid "Use These Options During Merge" +msgstr "" + +#: pdiff.cpp:267 +msgid "Disable Unsafe Options" +msgstr "" + +#: pdiff.cpp:297 +msgid "Loading A" +msgstr "A á Luchtú" + +#: pdiff.cpp:301 +msgid "Loading B" +msgstr "B á Luchtú" + +#: pdiff.cpp:318 pdiff.cpp:344 +msgid "Diff: A <-> B" +msgstr "Diff: A <-> B" + +#: pdiff.cpp:324 pdiff.cpp:366 +msgid "Linediff: A <-> B" +msgstr "" + +#: pdiff.cpp:335 +msgid "Loading C" +msgstr "C á Luchtú" + +#: pdiff.cpp:347 +msgid "Diff: B <-> C" +msgstr "Diff: B <-> C" + +#: pdiff.cpp:350 +msgid "Diff: A <-> C" +msgstr "Diff: A <-> C" + +#: pdiff.cpp:369 +msgid "Linediff: B <-> C" +msgstr "" + +#: pdiff.cpp:372 +msgid "Linediff: A <-> C" +msgstr "" + +#: pdiff.cpp:513 +msgid "All input files contain the same text, but are not binary equal." +msgstr "" + +#: pdiff.cpp:515 pdiff.cpp:517 pdiff.cpp:519 +msgid "" +"Files %1 and %2 are binary equal.\n" +msgstr "" + +#: pdiff.cpp:516 pdiff.cpp:518 pdiff.cpp:520 +msgid "" +"Files %1 and %2 have equal text, but are not binary equal. \n" +msgstr "" + +#: pdiff.cpp:530 +msgid "" +"Some inputfiles don't seem to be pure textfiles.\n" +"Note that the KDiff3-merge was not meant for binary data.\n" +"Continue at your own risk." +msgstr "" + +#: pdiff.cpp:979 +msgid "Abort" +msgstr "Tobscoir" + +#: pdiff.cpp:985 pdiff.cpp:1073 +msgid "Opening files..." +msgstr "Comhaid á n-oscailt..." + +#: pdiff.cpp:1050 pdiff.cpp:1121 +msgid "File open error" +msgstr "Earráid agus comhad á oscailt" + +#: pdiff.cpp:1153 +msgid "Cutting selection..." +msgstr "Roghnúchán á ghearradh..." + +#: pdiff.cpp:1174 +msgid "Copying selection to clipboard..." +msgstr "Roghnúchán á chóipeáil go dtí an gearrthaisce..." + +#: pdiff.cpp:1190 +msgid "Inserting clipboard contents..." +msgstr "" + +#: pdiff.cpp:1713 +msgid "Save && Continue" +msgstr "Sábháil && Lean" + +#: pdiff.cpp:1713 +msgid "Continue Without Saving" +msgstr "Lean Gan Sábháil" + +#: pdiff.cpp:1920 +msgid "Search complete." +msgstr "" + +#: pdiff.cpp:1920 +msgid "Search Complete" +msgstr "" + +#: pdiff.cpp:2144 +msgid "Nothing is selected in either diff input window." +msgstr "" + +#: pdiff.cpp:2144 +msgid "Error while adding manual diff range" +msgstr "" + +#. i18n: file kdiff3_part.rc line 4 +#: rc.cpp:3 +#, no-c-format +msgid "&KDiff3" +msgstr "&KDiff3" + +#. i18n: file kdiff3_part.rc line 13 +#: rc.cpp:6 +#, no-c-format +msgid "Configure KDiff3" +msgstr "Cumraigh KDiff3" + +#. i18n: file kdiff3_shell.rc line 7 +#: rc.cpp:15 +#, no-c-format +msgid "&Directory" +msgstr "&Comhadlann" + +#. i18n: file kdiff3_shell.rc line 30 +#: rc.cpp:18 +#, no-c-format +msgid "Current Item Merge Operation" +msgstr "" + +#. i18n: file kdiff3_shell.rc line 38 +#: rc.cpp:21 +#, no-c-format +msgid "Current Item Sync Operation" +msgstr "" + +#. i18n: file kdiff3_shell.rc line 50 +#: rc.cpp:24 +#, no-c-format +msgid "&Movement" +msgstr "&Gluaiseacht" + +#. i18n: file kdiff3_shell.rc line 61 +#: rc.cpp:27 +#, no-c-format +msgid "D&iffview" +msgstr "" + +#. i18n: file kdiff3_shell.rc line 73 +#: rc.cpp:30 +#, no-c-format +msgid "&Merge" +msgstr "Cu&maisc" + +#. i18n: file kdiff3_shell.rc line 95 +#: rc.cpp:33 +#, no-c-format +msgid "&Window" +msgstr "&Fuinneog" + +#: smalldialogs.cpp:53 +msgid "A (Base):" +msgstr "A (Bun):" + +#: smalldialogs.cpp:59 smalldialogs.cpp:75 smalldialogs.cpp:91 +#: smalldialogs.cpp:134 +msgid "File..." +msgstr "Comhad..." + +#: smalldialogs.cpp:61 smalldialogs.cpp:77 smalldialogs.cpp:93 +#: smalldialogs.cpp:136 +msgid "Dir..." +msgstr "Cmhdlnn..." + +#: smalldialogs.cpp:86 +msgid "C (Optional):" +msgstr "C (Roghnach):" + +#: smalldialogs.cpp:108 +msgid "Swap/Copy Names ..." +msgstr "" + +#: smalldialogs.cpp:114 smalldialogs.cpp:115 smalldialogs.cpp:116 +msgid "Swap %1<->%2" +msgstr "" + +#: smalldialogs.cpp:117 smalldialogs.cpp:118 smalldialogs.cpp:119 +msgid "Copy %1->Output" +msgstr "" + +#: smalldialogs.cpp:120 smalldialogs.cpp:121 smalldialogs.cpp:122 +msgid "Swap %1<->Output" +msgstr "" + +#: smalldialogs.cpp:129 +msgid "Output (optional):" +msgstr "Aschur (roghnach):" + +#: smalldialogs.cpp:158 +msgid "Configure..." +msgstr "Cumraigh..." + +#: smalldialogs.cpp:347 +msgid "Search text:" +msgstr "" + +#: smalldialogs.cpp:354 +msgid "Case sensitive" +msgstr "Cásíogair" + +#: smalldialogs.cpp:357 +msgid "Search A" +msgstr "Cuardach A" + +#: smalldialogs.cpp:362 +msgid "Search B" +msgstr "Cuardach B" + +#: smalldialogs.cpp:367 +msgid "Search C" +msgstr "Cuardach C" + +#: smalldialogs.cpp:372 +msgid "Search output" +msgstr "" + +#: smalldialogs.cpp:377 +msgid "&Search" +msgstr "&Cuardach" + +#: smalldialogs.cpp:394 +msgid "Regular Expression Tester" +msgstr "" + +#: smalldialogs.cpp:405 +msgid "Example auto merge line:" +msgstr "" + +#: smalldialogs.cpp:407 +msgid "For auto merge test copy a line as used in your files." +msgstr "" + +#: smalldialogs.cpp:413 smalldialogs.cpp:442 smalldialogs.cpp:479 +msgid "Match result:" +msgstr "" + +#: smalldialogs.cpp:432 +msgid "Example history start line (with leading comment):" +msgstr "" + +#: smalldialogs.cpp:435 +msgid "" +"Copy a history start line as used in your files,\n" +"including the leading comment." +msgstr "" + +#: smalldialogs.cpp:461 +msgid "History sort key order:" +msgstr "" + +#: smalldialogs.cpp:469 +msgid "Example history entry start line (without leading comment):" +msgstr "" + +#: smalldialogs.cpp:471 +msgid "" +"Copy a history entry start line as used in your files,\n" +"but omit the leading comment." +msgstr "" + +#: smalldialogs.cpp:486 +msgid "Sort key result:" +msgstr "" + +#: smalldialogs.cpp:537 smalldialogs.cpp:547 smalldialogs.cpp:568 +msgid "Match success." +msgstr "D'éirigh le meaitseáil." + +#: smalldialogs.cpp:541 smalldialogs.cpp:551 smalldialogs.cpp:574 +msgid "Match failed." +msgstr "Theip ar mheaitseáil." + +#: smalldialogs.cpp:559 +msgid "Opening and closing parentheses don't match in regular expression." +msgstr "" + +#~ msgid "Diff and Merge" +#~ msgstr "Difríochtaí & Cumaisc" + +#~ msgid "Synchronize Directories" +#~ msgstr "Sioncrónaigh Comhadlanna" + +#~ msgid "Ok" +#~ msgstr "OK" diff --git a/po/gl.po b/po/gl.po new file mode 100644 index 0000000..50d7c7e --- /dev/null +++ b/po/gl.po @@ -0,0 +1,2309 @@ +# translation of kdiff3.po to Galician +# mvillarino , 2006. +# +msgid "" +msgstr "" +"Project-Id-Version: kdiff3\n" +"POT-Creation-Date: 2006-11-05 08:45+0100\n" +"PO-Revision-Date: 2006-06-03 21:54+0200\n" +"Last-Translator: mvillarino \n" +"Language-Team: Galician \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: KBabel 1.10\n" + +#: _translatorinfo.cpp:1 +msgid "" +"_: NAME OF TRANSLATORS\n" +"Your names" +msgstr "mvillarino" + +#: _translatorinfo.cpp:3 +msgid "" +"_: EMAIL OF TRANSLATORS\n" +"Your emails" +msgstr "mvillarino@users.sourceforge.net" + +#: diff.cpp:246 +msgid "Writing clipboard data to temp file failed." +msgstr "" + +#: diff.cpp:250 +msgid "From Clipboard" +msgstr "" + +#: diff.cpp:491 +msgid "" +"Preprocessing possibly failed. Check this command:\n" +"\n" +" %1\n" +"\n" +"The preprocessing command will be disabled now." +msgstr "" + +#: diff.cpp:526 +msgid "" +"The line-matching-preprocessing possibly failed. Check this command:\n" +"\n" +" %1\n" +"\n" +"The line-matching-preprocessing command will be disabled now." +msgstr "" + +#: diff.cpp:1631 diff.cpp:1645 +msgid "" +"Data loss error:\n" +"If it is reproducable please contact the author.\n" +msgstr "" + +#: diff.cpp:1633 diff.cpp:1647 +msgid "Severe Internal Error" +msgstr "" + +#: difftextwindow.cpp:1643 kdiff3.cpp:753 +msgid "Top line" +msgstr "" + +#: difftextwindow.cpp:1653 +msgid "End" +msgstr "Fin" + +#: directorymergewindow.cpp:142 +msgid "Mix of links and normal files." +msgstr "" + +#: directorymergewindow.cpp:149 +msgid "Link: " +msgstr "" + +#: directorymergewindow.cpp:157 +msgid "Size. " +msgstr "" + +#: directorymergewindow.cpp:170 +msgid "Date & Size: " +msgstr "" + +#: directorymergewindow.cpp:179 directorymergewindow.cpp:185 +msgid "Creating temp copy of %1 failed." +msgstr "" + +#: directorymergewindow.cpp:196 directorymergewindow.cpp:204 +msgid "Opening %1 failed." +msgstr "" + +#: directorymergewindow.cpp:208 +msgid "Comparing file..." +msgstr "" + +#: directorymergewindow.cpp:218 directorymergewindow.cpp:224 +#, c-format +msgid "Error reading from %1" +msgstr "" + +#: directorymergewindow.cpp:282 +msgid "Name" +msgstr "Nome" + +#: directorymergewindow.cpp:286 +msgid "Operation" +msgstr "" + +#: directorymergewindow.cpp:287 +msgid "Status" +msgstr "Estado" + +#: directorymergewindow.cpp:288 +msgid "Unsolved" +msgstr "" + +#: directorymergewindow.cpp:289 +msgid "Solved" +msgstr "" + +#: directorymergewindow.cpp:290 +msgid "Nonwhite" +msgstr "" + +#: directorymergewindow.cpp:291 +msgid "White" +msgstr "" + +#: directorymergewindow.cpp:319 +msgid "" +"You are currently doing a directory merge. Are you sure, you want to abort the " +"merge and rescan the directory?" +msgstr "" + +#: directorymergewindow.cpp:320 directorymergewindow.cpp:2868 +msgid "Rescan" +msgstr "Analisar de Novo" + +#: directorymergewindow.cpp:320 kdiff3.cpp:603 pdiff.cpp:979 +msgid "Continue Merging" +msgstr "" + +#: directorymergewindow.cpp:462 +msgid "Opening of directories failed:" +msgstr "" + +#: directorymergewindow.cpp:465 +msgid "" +"Dir A \"%1\" does not exist or is not a directory.\n" +msgstr "" + +#: directorymergewindow.cpp:468 +msgid "" +"Dir B \"%1\" does not exist or is not a directory.\n" +msgstr "" + +#: directorymergewindow.cpp:471 +msgid "" +"Dir C \"%1\" does not exist or is not a directory.\n" +msgstr "" + +#: directorymergewindow.cpp:473 +msgid "Directory Open Error" +msgstr "" + +#: directorymergewindow.cpp:481 +msgid "" +"The destination directory must not be the same as A or B when three directories " +"are merged.\n" +"Check again before continuing." +msgstr "" + +#: directorymergewindow.cpp:483 +msgid "Parameter Warning" +msgstr "" + +#: directorymergewindow.cpp:488 +msgid "Scanning directories..." +msgstr "" + +#: directorymergewindow.cpp:537 +msgid "Reading Directory A" +msgstr "" + +#: directorymergewindow.cpp:559 +msgid "Reading Directory B" +msgstr "" + +#: directorymergewindow.cpp:581 +msgid "Reading Directory C" +msgstr "" + +#: directorymergewindow.cpp:607 +msgid "Some subdirectories were not readable in" +msgstr "" + +#: directorymergewindow.cpp:612 +msgid "Check the permissions of the subdirectories." +msgstr "" + +#: directorymergewindow.cpp:646 kdiff3.cpp:552 kdiff3.cpp:636 kdiff3.cpp:661 +#: kdiff3.cpp:934 kdiff3.cpp:955 pdiff.cpp:1059 pdiff.cpp:1131 pdiff.cpp:1169 +#: pdiff.cpp:1185 pdiff.cpp:1215 pdiff.cpp:1226 +msgid "Ready." +msgstr "Listo." + +#: directorymergewindow.cpp:660 +msgid "Directory Comparison Status" +msgstr "" + +#: directorymergewindow.cpp:661 +msgid "Number of subdirectories:" +msgstr "" + +#: directorymergewindow.cpp:662 +msgid "Number of equal files:" +msgstr "" + +#: directorymergewindow.cpp:663 +msgid "Number of different files:" +msgstr "" + +#: directorymergewindow.cpp:666 +msgid "Number of manual merges:" +msgstr "" + +#: directorymergewindow.cpp:802 +msgid "This affects all merge operations." +msgstr "" + +#: directorymergewindow.cpp:803 +msgid "Changing All Merge Operations" +msgstr "" + +#: directorymergewindow.cpp:803 mergeresultwindow.cpp:287 +msgid "C&ontinue" +msgstr "" + +#: directorymergewindow.cpp:1169 +msgid "Processing " +msgstr "" + +#: directorymergewindow.cpp:1647 directorymergewindow.cpp:1653 +msgid "To do." +msgstr "" + +#: directorymergewindow.cpp:1756 directorymergewindow.cpp:2899 +msgid "Copy A to B" +msgstr "" + +#: directorymergewindow.cpp:1757 directorymergewindow.cpp:2900 +msgid "Copy B to A" +msgstr "" + +#: directorymergewindow.cpp:1758 directorymergewindow.cpp:2901 +msgid "Delete A" +msgstr "" + +#: directorymergewindow.cpp:1759 directorymergewindow.cpp:2902 +msgid "Delete B" +msgstr "" + +#: directorymergewindow.cpp:1760 +msgid "Delete A & B" +msgstr "" + +#: directorymergewindow.cpp:1761 directorymergewindow.cpp:2904 +msgid "Merge to A" +msgstr "" + +#: directorymergewindow.cpp:1762 directorymergewindow.cpp:2905 +msgid "Merge to B" +msgstr "" + +#: directorymergewindow.cpp:1763 +msgid "Merge to A & B" +msgstr "" + +#: directorymergewindow.cpp:1767 directorymergewindow.cpp:2896 +msgid "Delete (if exists)" +msgstr "" + +#: directorymergewindow.cpp:1768 directorymergewindow.cpp:1769 +#: directorymergewindow.cpp:2895 optiondialog.cpp:809 smalldialogs.cpp:102 +msgid "Merge" +msgstr "" + +#: directorymergewindow.cpp:1768 directorymergewindow.cpp:1769 +msgid "Merge (manual)" +msgstr "" + +#: directorymergewindow.cpp:1770 +msgid "Error: Conflicting File Types" +msgstr "" + +#: directorymergewindow.cpp:1771 +msgid "Error: Dates are equal but files are not." +msgstr "" + +#: directorymergewindow.cpp:1795 directorymergewindow.cpp:1824 +#: directorymergewindow.cpp:1849 +msgid "This operation is currently not possible." +msgstr "" + +#: directorymergewindow.cpp:1795 directorymergewindow.cpp:1824 +#: directorymergewindow.cpp:1849 directorymergewindow.cpp:2106 +msgid "Operation Not Possible" +msgstr "" + +#: directorymergewindow.cpp:1888 +msgid "" +"This should never happen: \n" +"\n" +"mergeResultSaved: m_pMFI=0\n" +"\n" +"If you know how to reproduce this, please contact the program author." +msgstr "" + +#: directorymergewindow.cpp:1888 +msgid "Program Error" +msgstr "" + +#: directorymergewindow.cpp:1899 +msgid "" +"An error occurred while copying.\n" +msgstr "" + +#: directorymergewindow.cpp:1900 directorymergewindow.cpp:2306 +msgid "Merge Error" +msgstr "" + +#: directorymergewindow.cpp:1905 directorymergewindow.cpp:2311 +msgid "Error." +msgstr "" + +#: directorymergewindow.cpp:1910 directorymergewindow.cpp:2202 +#: directorymergewindow.cpp:2242 +msgid "Done." +msgstr "" + +#: directorymergewindow.cpp:1933 +msgid "Not saved." +msgstr "" + +#: directorymergewindow.cpp:1968 +msgid "Unknown merge operation. (This must never happen!)" +msgstr "" + +#: directorymergewindow.cpp:2000 +msgid "Unknown merge operation." +msgstr "" + +#: directorymergewindow.cpp:2015 +msgid "" +"The merge is about to begin.\n" +"\n" +"Choose \"Do it\" if you have read the instructions and know what you are " +"doing.\n" +"Choosing \"Simulate it\" will tell you what would happen.\n" +"\n" +"Be aware that this program still has beta status and there is NO WARRANTY " +"whatsoever! Make backups of your vital data!" +msgstr "" + +#: directorymergewindow.cpp:2020 +msgid "Starting Merge" +msgstr "" + +#: directorymergewindow.cpp:2020 +msgid "Do It" +msgstr "" + +#: directorymergewindow.cpp:2020 +msgid "Simulate It" +msgstr "" + +#: directorymergewindow.cpp:2046 +msgid "" +"The highlighted item has a different type in the different directories. Select " +"what to do." +msgstr "" + +#: directorymergewindow.cpp:2055 +msgid "" +"The modification dates of the file are equal but the files are not. Select what " +"to do." +msgstr "" + +#: directorymergewindow.cpp:2106 +msgid "" +"This operation is currently not possible because directory merge is currently " +"running." +msgstr "" + +#: directorymergewindow.cpp:2166 +msgid "" +"There was an error in the last step.\n" +"Do you want to continue with the item that caused the error or do you want to " +"skip this item?" +msgstr "" + +#: directorymergewindow.cpp:2168 +msgid "Continue merge after an error" +msgstr "" + +#: directorymergewindow.cpp:2168 +msgid "Continue With Last Item" +msgstr "" + +#: directorymergewindow.cpp:2168 +msgid "Skip Item" +msgstr "" + +#: directorymergewindow.cpp:2202 +msgid "Skipped." +msgstr "" + +#: directorymergewindow.cpp:2209 directorymergewindow.cpp:2435 +msgid "In progress..." +msgstr "" + +#: directorymergewindow.cpp:2257 +msgid "Merge operation complete." +msgstr "" + +#: directorymergewindow.cpp:2257 directorymergewindow.cpp:2260 +msgid "Merge Complete" +msgstr "" + +#: directorymergewindow.cpp:2269 +msgid "" +"Simulated merge complete: Check if you agree with the proposed operations." +msgstr "" + +#: directorymergewindow.cpp:2305 +msgid "" +"An error occurred. Press OK to see detailed information.\n" +msgstr "" + +#: directorymergewindow.cpp:2348 +msgid "Error: While deleting %1: Creating backup failed." +msgstr "" + +#: directorymergewindow.cpp:2355 +msgid "delete directory recursively( %1 )" +msgstr "" + +#: directorymergewindow.cpp:2357 +msgid "delete( %1 )" +msgstr "" + +#: directorymergewindow.cpp:2372 +msgid "Error: delete dir operation failed while trying to read the directory." +msgstr "" + +#: directorymergewindow.cpp:2391 +msgid "Error: rmdir( %1 ) operation failed." +msgstr "" + +#: directorymergewindow.cpp:2401 +msgid "Error: delete operation failed." +msgstr "" + +#: directorymergewindow.cpp:2427 +msgid "manual merge( %1, %2, %3 -> %4)" +msgstr "" + +#: directorymergewindow.cpp:2430 +msgid "" +" Note: After a manual merge the user should continue by pressing F7." +msgstr "" + +#: directorymergewindow.cpp:2453 +msgid "Error: copy( %1 -> %2 ) failed.Deleting existing destination failed." +msgstr "" + +#: directorymergewindow.cpp:2463 +msgid "copyLink( %1 -> %2 )" +msgstr "" + +#: directorymergewindow.cpp:2474 +msgid "Error: copyLink failed: Remote links are not yet supported." +msgstr "" + +#: directorymergewindow.cpp:2480 +msgid "Error: copyLink failed." +msgstr "" + +#: directorymergewindow.cpp:2500 +msgid "copy( %1 -> %2 )" +msgstr "" + +#: directorymergewindow.cpp:2526 +msgid "Error during rename( %1 -> %2 ): Cannot delete existing destination." +msgstr "" + +#: directorymergewindow.cpp:2532 +msgid "rename( %1 -> %2 )" +msgstr "" + +#: directorymergewindow.cpp:2541 +msgid "Error: Rename failed." +msgstr "" + +#: directorymergewindow.cpp:2559 +msgid "Error during makeDir of %1. Cannot delete existing file." +msgstr "" + +#: directorymergewindow.cpp:2575 +msgid "makeDir( %1 )" +msgstr "" + +#: directorymergewindow.cpp:2585 +msgid "Error while creating directory." +msgstr "" + +#: directorymergewindow.cpp:2608 directorymergewindow.cpp:2725 +msgid "Dest" +msgstr "" + +#: directorymergewindow.cpp:2612 directorymergewindow.cpp:2650 +msgid "Dir" +msgstr "" + +#: directorymergewindow.cpp:2613 +msgid "Type" +msgstr "Tipo" + +#: directorymergewindow.cpp:2614 +msgid "Size" +msgstr "Tamaño" + +#: directorymergewindow.cpp:2615 +msgid "Attr" +msgstr "" + +#: directorymergewindow.cpp:2616 +msgid "Last Modification" +msgstr "" + +#: directorymergewindow.cpp:2617 +msgid "Link-Destination" +msgstr "" + +#: directorymergewindow.cpp:2667 +msgid "not available" +msgstr "non disponíbel" + +#: directorymergewindow.cpp:2687 +msgid "A (Dest): " +msgstr "" + +#: directorymergewindow.cpp:2690 +msgid "A (Base): " +msgstr "" + +#: directorymergewindow.cpp:2696 +msgid "B (Dest): " +msgstr "" + +#: directorymergewindow.cpp:2704 +msgid "C (Dest): " +msgstr "" + +#: directorymergewindow.cpp:2710 +msgid "Dest: " +msgstr "" + +#: directorymergewindow.cpp:2775 +msgid "Save Directory Merge State As..." +msgstr "" + +#: directorymergewindow.cpp:2862 +msgid "Start/Continue Directory Merge" +msgstr "" + +#: directorymergewindow.cpp:2863 +msgid "Run Operation for Current Item" +msgstr "" + +#: directorymergewindow.cpp:2864 +msgid "Compare Selected File" +msgstr "" + +#: directorymergewindow.cpp:2865 +msgid "Merge Current File" +msgstr "" + +#: directorymergewindow.cpp:2866 +msgid "Fold All Subdirs" +msgstr "" + +#: directorymergewindow.cpp:2867 +msgid "Unfold All Subdirs" +msgstr "" + +#: directorymergewindow.cpp:2871 +msgid "Choose A for All Items" +msgstr "" + +#: directorymergewindow.cpp:2872 +msgid "Choose B for All Items" +msgstr "" + +#: directorymergewindow.cpp:2873 +msgid "Choose C for All Items" +msgstr "" + +#: directorymergewindow.cpp:2874 +msgid "Auto-Choose Operation for All Items" +msgstr "" + +#: directorymergewindow.cpp:2875 +msgid "No Operation for All Items" +msgstr "" + +#: directorymergewindow.cpp:2880 +msgid "Show Identical Files" +msgstr "" + +#: directorymergewindow.cpp:2881 +msgid "Show Different Files" +msgstr "" + +#: directorymergewindow.cpp:2882 +msgid "Show Files only in A" +msgstr "" + +#: directorymergewindow.cpp:2883 +msgid "Show Files only in B" +msgstr "" + +#: directorymergewindow.cpp:2884 +msgid "Show Files only in C" +msgstr "" + +#: directorymergewindow.cpp:2888 +msgid "Compare Explicitly Selected Files" +msgstr "" + +#: directorymergewindow.cpp:2889 +msgid "Merge Explicitly Selected Files" +msgstr "" + +#: directorymergewindow.cpp:2891 directorymergewindow.cpp:2898 +msgid "Do Nothing" +msgstr "Non facer Nada" + +#: directorymergewindow.cpp:2892 +msgid "A" +msgstr "" + +#: directorymergewindow.cpp:2893 +msgid "B" +msgstr "" + +#: directorymergewindow.cpp:2894 +msgid "C" +msgstr "C" + +#: directorymergewindow.cpp:2903 +msgid "Delete A && B" +msgstr "" + +#: directorymergewindow.cpp:2906 +msgid "Merge to A && B" +msgstr "" + +#: fileaccess.cpp:595 +msgid "" +"While trying to make a backup, deleting an older backup failed. \n" +"Filename: " +msgstr "" + +#: fileaccess.cpp:602 +msgid "" +"While trying to make a backup, renaming failed. \n" +"Filenames: " +msgstr "" + +#: fileaccess.cpp:624 +#, c-format +msgid "Getting file status: %1" +msgstr "" + +#: fileaccess.cpp:667 +#, c-format +msgid "Reading file: %1" +msgstr "" + +#: fileaccess.cpp:703 +#, c-format +msgid "Writing file: %1" +msgstr "" + +#: fileaccess.cpp:731 +msgid "Out of memory" +msgstr "" + +#: fileaccess.cpp:766 +#, c-format +msgid "Making directory: %1" +msgstr "" + +#: fileaccess.cpp:786 +#, c-format +msgid "Removing directory: %1" +msgstr "" + +#: fileaccess.cpp:801 +#, c-format +msgid "Removing file: %1" +msgstr "" + +#: fileaccess.cpp:817 +msgid "Creating symbolic link: %1 -> %2" +msgstr "" + +#: fileaccess.cpp:843 +msgid "Renaming file: %1 -> %2" +msgstr "" + +#: fileaccess.cpp:879 +msgid "Copying file: %1 -> %2" +msgstr "" + +#: fileaccess.cpp:893 +#, c-format +msgid "" +"Error during file copy operation: Opening file for reading failed. Filename: %1" +msgstr "" + +#: fileaccess.cpp:899 +#, c-format +msgid "" +"Error during file copy operation: Opening file for writing failed. Filename: %1" +msgstr "" + +#: fileaccess.cpp:914 +#, c-format +msgid "Error during file copy operation: Reading failed. Filename: %1" +msgstr "" + +#: fileaccess.cpp:923 +#, c-format +msgid "Error during file copy operation: Writing failed. Filename: %1" +msgstr "" + +#: fileaccess.cpp:1219 +msgid "Reading directory: " +msgstr "" + +#: fileaccess.cpp:1348 +#, c-format +msgid "Listing directory: %1" +msgstr "" + +#: kdiff3.cpp:142 +msgid "Current Configuration:" +msgstr "" + +#: kdiff3.cpp:147 +msgid "Config Option Error:" +msgstr "" + +#: kdiff3.cpp:187 +msgid "Option --auto used, but no output file specified." +msgstr "" + +#: kdiff3.cpp:323 +msgid "Option --auto ignored for directory comparison." +msgstr "" + +#: kdiff3.cpp:359 +msgid "Saving failed." +msgstr "" + +#: kdiff3.cpp:386 pdiff.cpp:1041 pdiff.cpp:1112 +msgid "Opening of these files failed:" +msgstr "" + +#: kdiff3.cpp:395 +msgid "File Open Error" +msgstr "" + +#: kdiff3.cpp:418 +msgid "Opens documents for comparison..." +msgstr "" + +#: kdiff3.cpp:423 +msgid "Saves the merge result. All conflicts must be solved!" +msgstr "" + +#: kdiff3.cpp:425 +msgid "Saves the current document as..." +msgstr "" + +#: kdiff3.cpp:427 +msgid "Print the differences" +msgstr "" + +#: kdiff3.cpp:429 +msgid "Quits the application" +msgstr "Sai da aplicazón" + +#: kdiff3.cpp:431 +msgid "Cuts the selected section and puts it to the clipboard" +msgstr "Corta a seczón seleccionada e coloca-a no porta-retallos" + +#: kdiff3.cpp:433 +msgid "Copies the selected section to the clipboard" +msgstr "Copia a seczón seleccionada no porta-retallos" + +#: kdiff3.cpp:435 +msgid "Pastes the clipboard contents to actual position" +msgstr "Apega o contido do porta-retallos na posizón actual" + +#: kdiff3.cpp:437 +msgid "Select everything in current window" +msgstr "" + +#: kdiff3.cpp:439 +msgid "Search for a string" +msgstr "" + +#: kdiff3.cpp:441 +msgid "Search again for the string" +msgstr "" + +#: kdiff3.cpp:443 +msgid "Enables/disables the toolbar" +msgstr "Activa/desactiva a barra de ferramentas" + +#: kdiff3.cpp:445 +msgid "Enables/disables the statusbar" +msgstr "Activa/desactiva a barra de estado" + +#: kdiff3.cpp:449 +msgid "Configure KDiff3..." +msgstr "" + +#: kdiff3.cpp:470 +msgid "Go to Current Delta" +msgstr "" + +#: kdiff3.cpp:471 +msgid "Go to First Delta" +msgstr "" + +#: kdiff3.cpp:472 +msgid "Go to Last Delta" +msgstr "" + +#: kdiff3.cpp:473 +msgid "(Skips white space differences when \"Show White Space\" is disabled.)" +msgstr "" + +#: kdiff3.cpp:474 +msgid "" +"(Does not skip white space differences even when \"Show White Space\" is " +"disabled.)" +msgstr "" + +#: kdiff3.cpp:475 +msgid "Go to Previous Delta" +msgstr "" + +#: kdiff3.cpp:477 +msgid "Go to Next Delta" +msgstr "" + +#: kdiff3.cpp:479 +msgid "Go to Previous Conflict" +msgstr "" + +#: kdiff3.cpp:481 +msgid "Go to Next Conflict" +msgstr "" + +#: kdiff3.cpp:483 +msgid "Go to Previous Unsolved Conflict" +msgstr "" + +#: kdiff3.cpp:485 +msgid "Go to Next Unsolved Conflict" +msgstr "" + +#: kdiff3.cpp:487 +msgid "Select Line(s) From A" +msgstr "" + +#: kdiff3.cpp:488 +msgid "Select Line(s) From B" +msgstr "" + +#: kdiff3.cpp:489 +msgid "Select Line(s) From C" +msgstr "" + +#: kdiff3.cpp:490 +msgid "Automatically Go to Next Unsolved Conflict After Source Selection" +msgstr "" + +#: kdiff3.cpp:492 +msgid "Show Space && Tabulator Characters for Differences" +msgstr "" + +#: kdiff3.cpp:493 +msgid "Show White Space" +msgstr "" + +#: kdiff3.cpp:495 +msgid "Show Line Numbers" +msgstr "" + +#: kdiff3.cpp:496 +msgid "Choose A Everywhere" +msgstr "" + +#: kdiff3.cpp:497 +msgid "Choose B Everywhere" +msgstr "" + +#: kdiff3.cpp:498 +msgid "Choose C Everywhere" +msgstr "" + +#: kdiff3.cpp:499 +msgid "Choose A for All Unsolved Conflicts" +msgstr "" + +#: kdiff3.cpp:500 +msgid "Choose B for All Unsolved Conflicts" +msgstr "" + +#: kdiff3.cpp:501 +msgid "Choose C for All Unsolved Conflicts" +msgstr "" + +#: kdiff3.cpp:502 +msgid "Choose A for All Unsolved Whitespace Conflicts" +msgstr "" + +#: kdiff3.cpp:503 +msgid "Choose B for All Unsolved Whitespace Conflicts" +msgstr "" + +#: kdiff3.cpp:504 +msgid "Choose C for All Unsolved Whitespace Conflicts" +msgstr "" + +#: kdiff3.cpp:505 +msgid "Automatically Solve Simple Conflicts" +msgstr "" + +#: kdiff3.cpp:506 +msgid "Set Deltas to Conflicts" +msgstr "" + +#: kdiff3.cpp:507 +msgid "Run Regular Expression Auto Merge" +msgstr "" + +#: kdiff3.cpp:508 +msgid "Automatically Solve History Conflicts" +msgstr "" + +#: kdiff3.cpp:509 +msgid "Split Diff At Selection" +msgstr "" + +#: kdiff3.cpp:510 +msgid "Join Selected Diffs" +msgstr "" + +#: kdiff3.cpp:512 +msgid "Show Window A" +msgstr "" + +#: kdiff3.cpp:513 +msgid "Show Window B" +msgstr "" + +#: kdiff3.cpp:514 +msgid "Show Window C" +msgstr "" + +#: kdiff3.cpp:515 kdiff3.cpp:526 +msgid "Focus Next Window" +msgstr "" + +#: kdiff3.cpp:517 +msgid "Normal Overview" +msgstr "" + +#: kdiff3.cpp:518 +msgid "A vs. B Overview" +msgstr "" + +#: kdiff3.cpp:519 +msgid "A vs. C Overview" +msgstr "" + +#: kdiff3.cpp:520 +msgid "B vs. C Overview" +msgstr "" + +#: kdiff3.cpp:521 +msgid "Word Wrap Diff Windows" +msgstr "" + +#: kdiff3.cpp:522 +msgid "Add Manual Diff Alignment" +msgstr "" + +#: kdiff3.cpp:523 +msgid "Clear All Manual Diff Alignments" +msgstr "" + +#: kdiff3.cpp:528 +msgid "Focus Prev Window" +msgstr "" + +#: kdiff3.cpp:529 +msgid "Toggle Split Orientation" +msgstr "" + +#: kdiff3.cpp:531 +msgid "Dir && Text Split Screen View" +msgstr "" + +#: kdiff3.cpp:533 +msgid "Toggle Between Dir && Text View" +msgstr "" + +#: kdiff3.cpp:582 pdiff.cpp:1712 +msgid "The merge result hasn't been saved." +msgstr "" + +#: kdiff3.cpp:583 +msgid "Save && Quit" +msgstr "" + +#: kdiff3.cpp:583 +msgid "Quit Without Saving" +msgstr "" + +#: kdiff3.cpp:591 pdiff.cpp:1721 +msgid "Saving the merge result failed." +msgstr "" + +#: kdiff3.cpp:602 pdiff.cpp:978 +msgid "" +"You are currently doing a directory merge. Are you sure, you want to abort?" +msgstr "" + +#: kdiff3.cpp:625 +msgid "Saving file..." +msgstr "" + +#: kdiff3.cpp:642 +msgid "Saving file with a new filename..." +msgstr "" + +#: kdiff3.cpp:732 +msgid "Printing..." +msgstr "A imprimir..." + +#: kdiff3.cpp:738 kdiff3.cpp:900 +msgid "Printing aborted." +msgstr "" + +#: kdiff3.cpp:870 +msgid "Selection" +msgstr "Seleczón" + +#: kdiff3.cpp:896 +msgid "Printing completed." +msgstr "" + +#: kdiff3.cpp:906 +msgid "Exiting..." +msgstr "A sair..." + +#: kdiff3.cpp:918 +msgid "Toggling toolbar..." +msgstr "A comutar a barra de ferramentas..." + +#: kdiff3.cpp:939 +msgid "Toggle the statusbar..." +msgstr "Comutar a barra de estado..." + +#: kdiff3_part.cpp:155 kdiff3_part.cpp:224 +msgid "Couldn't find files for comparison." +msgstr "" + +#: kdiff3_part.cpp:291 +msgid "KDiff3Part" +msgstr "" + +#: kdiff3_shell.cpp:78 +msgid "" +"Could not find our part!\n" +"This usually happens due to an installation problem. Please read the " +"README-file in the source package for details." +msgstr "" + +#: main.cpp:35 +msgid "Tool for Comparison and Merge of Files and Directories" +msgstr "" + +#: main.cpp:40 +msgid "Merge the input." +msgstr "" + +#: main.cpp:42 +msgid "Explicit base file. For compatibility with certain tools." +msgstr "" + +#: main.cpp:44 +msgid "Output file. Implies -m. E.g.: -o newfile.txt" +msgstr "" + +#: main.cpp:45 +msgid "Output file, again. (For compatibility with certain tools.)" +msgstr "" + +#: main.cpp:46 +msgid "No GUI if all conflicts are auto-solvable. (Needs -o file)" +msgstr "" + +#: main.cpp:47 +msgid "Don't solve conflicts automatically. (For compatibility...)" +msgstr "" + +#: main.cpp:48 +msgid "Visible name replacement for input file 1 (base)." +msgstr "" + +#: main.cpp:49 +msgid "Visible name replacement for input file 2." +msgstr "" + +#: main.cpp:50 +msgid "Visible name replacement for input file 3." +msgstr "" + +#: main.cpp:52 +msgid "Alternative visible name replacement. Supply this once for every input." +msgstr "" + +#: main.cpp:53 +msgid "" +"Override a config setting. Use once for every setting. E.g.: --cs " +"\"AutoAdvance=1\"" +msgstr "" + +#: main.cpp:54 +msgid "Show list of config settings and current values." +msgstr "" + +#: main.cpp:55 +msgid "Use a different config file." +msgstr "" + +#: main.cpp:59 +msgid "file1 to open (base, if not specified via --base)" +msgstr "" + +#: main.cpp:60 +msgid "file2 to open" +msgstr "" + +#: main.cpp:61 +msgid "file3 to open" +msgstr "" + +#: main.cpp:93 +msgid "Ignored. (User defined.)" +msgstr "" + +#. i18n: file kdiff3_part.rc line 16 +#: main.cpp:173 rc.cpp:9 +#, no-c-format +msgid "KDiff3" +msgstr "" + +#: main.cpp:186 +msgid "+ Many thanks to those who reported bugs and contributed ideas!" +msgstr "" + +#: mergeresultwindow.cpp:136 mergeresultwindow.cpp:939 +#: mergeresultwindow.cpp:953 mergeresultwindow.cpp:965 +#: mergeresultwindow.cpp:977 +msgid "Number of remaining unsolved conflicts: %1 (of which %2 are whitespace)" +msgstr "" + +#: mergeresultwindow.cpp:285 +msgid "" +"The output has been modified.\n" +"If you continue your changes will be lost." +msgstr "" + +#: mergeresultwindow.cpp:797 pdiff.cpp:511 +msgid "All input files are binary equal." +msgstr "" + +#: mergeresultwindow.cpp:799 +msgid "All input files contain the same text." +msgstr "" + +#: mergeresultwindow.cpp:801 +msgid "" +"Files A and B are binary equal.\n" +msgstr "" + +#: mergeresultwindow.cpp:802 +msgid "" +"Files A and B have equal text. \n" +msgstr "" + +#: mergeresultwindow.cpp:803 +msgid "" +"Files A and C are binary equal.\n" +msgstr "" + +#: mergeresultwindow.cpp:804 +msgid "" +"Files A and C have equal text. \n" +msgstr "" + +#: mergeresultwindow.cpp:805 +msgid "" +"Files B and C are binary equal.\n" +msgstr "" + +#: mergeresultwindow.cpp:806 +msgid "" +"Files B and C have equal text. \n" +msgstr "" + +#: mergeresultwindow.cpp:812 +msgid "Total number of conflicts: " +msgstr "" + +#: mergeresultwindow.cpp:813 +msgid "" +"\n" +"Nr of automatically solved conflicts: " +msgstr "" + +#: mergeresultwindow.cpp:814 +msgid "" +"\n" +"Nr of unsolved conflicts: " +msgstr "" + +#: mergeresultwindow.cpp:816 +msgid "Conflicts" +msgstr "Conflitos" + +#: mergeresultwindow.cpp:1652 +msgid "" +msgstr "" + +#: mergeresultwindow.cpp:1660 +msgid "" +msgstr "" + +#: mergeresultwindow.cpp:1662 mergeresultwindow.cpp:2427 +msgid "" +msgstr "" + +#: mergeresultwindow.cpp:2635 +msgid "" +"Not all conflicts are solved yet.\n" +"File not saved.\n" +msgstr "" + +#: mergeresultwindow.cpp:2637 +msgid "Conflicts Left" +msgstr "" + +#: mergeresultwindow.cpp:2649 +msgid "" +"\n" +"\n" +"Creating backup failed. File not saved." +msgstr "" + +#: mergeresultwindow.cpp:2649 mergeresultwindow.cpp:2689 +msgid "File Save Error" +msgstr "" + +#: mergeresultwindow.cpp:2689 +msgid "Error while writing." +msgstr "" + +#: mergeresultwindow.cpp:3020 +msgid "Output" +msgstr "Saída" + +#: mergeresultwindow.cpp:3032 mergeresultwindow.cpp:3139 +msgid "[Modified]" +msgstr "" + +#: mergeresultwindow.cpp:3039 +msgid "Encoding for saving" +msgstr "" + +#: mergeresultwindow.cpp:3075 mergeresultwindow.cpp:3081 +#: mergeresultwindow.cpp:3087 +msgid "Codec from" +msgstr "" + +#: optiondialog.cpp:362 +msgid "Unicode, 8 bit" +msgstr "" + +#: optiondialog.cpp:363 +msgid "Unicode" +msgstr "Unicode" + +#: optiondialog.cpp:364 +msgid "Latin1" +msgstr "Latin1" + +#: optiondialog.cpp:383 +msgid "Change this if non-ASCII characters are not displayed correctly." +msgstr "" + +#: optiondialog.cpp:510 +msgid "Editor & Diff Output Font" +msgstr "" + +#: optiondialog.cpp:531 +msgid "Italic font for deltas" +msgstr "" + +#: optiondialog.cpp:534 +msgid "" +"Selects the italic version of the font for differences.\n" +"If the font doesn't support italic characters, then this does nothing." +msgstr "" + +#: optiondialog.cpp:542 +msgid "Color" +msgstr "Cor" + +#: optiondialog.cpp:542 +msgid "Colors Settings" +msgstr "" + +#: optiondialog.cpp:556 +msgid "Editor and Diff Views:" +msgstr "" + +#: optiondialog.cpp:564 +msgid "Foreground color:" +msgstr "Cor principal:" + +#: optiondialog.cpp:570 +msgid "Background color:" +msgstr "Cor de fondo:" + +#: optiondialog.cpp:578 +msgid "Diff background color:" +msgstr "" + +#: optiondialog.cpp:585 +msgid "Color A:" +msgstr "" + +#: optiondialog.cpp:592 +msgid "Color B:" +msgstr "" + +#: optiondialog.cpp:599 +msgid "Color C:" +msgstr "" + +#: optiondialog.cpp:605 +msgid "Conflict color:" +msgstr "" + +#: optiondialog.cpp:612 +msgid "Current range background color:" +msgstr "" + +#: optiondialog.cpp:619 +msgid "Current range diff background color:" +msgstr "" + +#: optiondialog.cpp:625 +msgid "Color for manually aligned difference ranges:" +msgstr "" + +#: optiondialog.cpp:630 +msgid "Directory Comparison View:" +msgstr "" + +#: optiondialog.cpp:636 +msgid "Newest file color:" +msgstr "" + +#: optiondialog.cpp:639 +msgid "" +"Changing this color will only be effective when starting the next directory " +"comparison." +msgstr "" + +#: optiondialog.cpp:644 +msgid "Oldest file color:" +msgstr "" + +#: optiondialog.cpp:651 +msgid "Middle age file color:" +msgstr "" + +#: optiondialog.cpp:658 +msgid "Color for missing files:" +msgstr "" + +#: optiondialog.cpp:670 +msgid "Editor" +msgstr "Editor" + +#: optiondialog.cpp:670 +msgid "Editor Behavior" +msgstr "" + +#: optiondialog.cpp:680 +msgid "Tab inserts spaces" +msgstr "" + +#: optiondialog.cpp:683 +msgid "" +"On: Pressing tab generates the appropriate number of spaces.\n" +"Off: A Tab-character will be inserted." +msgstr "" + +#: optiondialog.cpp:689 +msgid "Tab size:" +msgstr "Tamaño das tabulazóns:" + +#: optiondialog.cpp:694 +msgid "Auto indentation" +msgstr "" + +#: optiondialog.cpp:697 +msgid "" +"On: The indentation of the previous line is used for a new line.\n" +msgstr "" + +#: optiondialog.cpp:701 +msgid "Auto copy selection" +msgstr "" + +#: optiondialog.cpp:704 +msgid "" +"On: Any selection is immediately written to the clipboard.\n" +"Off: You must explicitely copy e.g. via Ctrl-C." +msgstr "" + +#: optiondialog.cpp:709 +msgid "Line end style:" +msgstr "" + +#: optiondialog.cpp:721 +msgid "" +"Sets the line endings for when an edited file is saved.\n" +"DOS/Windows: CR+LF; UNIX: LF; with CR=0D, LF=0A" +msgstr "" + +#: optiondialog.cpp:732 +msgid "Diff" +msgstr "" + +#: optiondialog.cpp:732 +msgid "Diff Settings" +msgstr "" + +#: optiondialog.cpp:743 +msgid "Preserve carriage return" +msgstr "" + +#: optiondialog.cpp:746 +msgid "" +"Show carriage return characters '\\r' if they exist.\n" +"Helps to compare files that were modified under different operating systems." +msgstr "" + +#: optiondialog.cpp:751 +msgid "Ignore numbers" +msgstr "" + +#: optiondialog.cpp:754 +msgid "" +"Ignore number characters during line matching phase. (Similar to Ignore white " +"space.)\n" +"Might help to compare files with numeric data." +msgstr "" + +#: optiondialog.cpp:759 +msgid "Ignore C/C++ comments" +msgstr "" + +#: optiondialog.cpp:761 +msgid "Treat C/C++ comments like white space." +msgstr "" + +#: optiondialog.cpp:765 +msgid "Ignore case" +msgstr "" + +#: optiondialog.cpp:768 +msgid "Treat case differences like white space changes. ('a'<=>'A')" +msgstr "" + +#: optiondialog.cpp:772 +msgid "Preprocessor command:" +msgstr "" + +#: optiondialog.cpp:776 +msgid "User defined pre-processing. (See the docs for details.)" +msgstr "" + +#: optiondialog.cpp:779 +msgid "Line-matching preprocessor command:" +msgstr "" + +#: optiondialog.cpp:783 +msgid "" +"This pre-processor is only used during line matching.\n" +"(See the docs for details.)" +msgstr "" + +#: optiondialog.cpp:786 +msgid "Try hard (slower)" +msgstr "" + +#: optiondialog.cpp:789 +msgid "" +"Enables the --minimal option for the external diff.\n" +"The analysis of big files will be much slower." +msgstr "" + +#: optiondialog.cpp:794 +msgid "Auto advance delay (ms):" +msgstr "" + +#: optiondialog.cpp:799 +msgid "" +"When in Auto-Advance mode the result of the current selection is shown \n" +"for the specified time, before jumping to the next conflict. Range: 0-2000 ms" +msgstr "" + +#: optiondialog.cpp:809 +msgid "Merge Settings" +msgstr "" + +#: optiondialog.cpp:822 +msgid "White space 2-file merge default:" +msgstr "" + +#: optiondialog.cpp:826 optiondialog.cpp:839 +msgid "Manual Choice" +msgstr "" + +#: optiondialog.cpp:830 optiondialog.cpp:844 +msgid "" +"Allow the merge algorithm to automatically select an input for white-space-only " +"changes." +msgstr "" + +#: optiondialog.cpp:835 +msgid "White space 3-file merge default:" +msgstr "" + +#: optiondialog.cpp:849 +msgid "Automatic Merge Regular Expression" +msgstr "" + +#: optiondialog.cpp:858 smalldialogs.cpp:397 +msgid "Auto merge regular expression:" +msgstr "" + +#: optiondialog.cpp:862 +msgid "" +"Regular expression for lines where KDiff3 should automatically choose one " +"source.\n" +"When a line with a conflict matches the regular expression then\n" +"- if available - C, otherwise B will be chosen." +msgstr "" + +#: optiondialog.cpp:868 +msgid "Run regular expression auto merge on merge start" +msgstr "" + +#: optiondialog.cpp:870 +msgid "" +"Run the merge for auto merge regular expressions\n" +"immediately when a merge starts.\n" +msgstr "" + +#: optiondialog.cpp:875 +msgid "Version Control History Merging" +msgstr "" + +#: optiondialog.cpp:884 smalldialogs.cpp:424 +msgid "History start regular expression:" +msgstr "" + +#: optiondialog.cpp:888 +msgid "" +"Regular expression for the start of the version control history entry.\n" +"Usually this line contains the \"$Log$\"-keyword.\n" +"Default value: \".*\\$Log.*\\$.*\"" +msgstr "" + +#: optiondialog.cpp:894 smalldialogs.cpp:453 +msgid "History entry start regular expression:" +msgstr "" + +#: optiondialog.cpp:906 +msgid "" +"A version control history entry consists of several lines.\n" +"Specify the regular expression to detect the first line (without the leading " +"comment).\n" +"Use parentheses to group the keys you want to use for sorting.\n" +"If left empty, then KDiff3 assumes that empty lines separate history entries.\n" +"See the documentation for details." +msgstr "" + +#: optiondialog.cpp:914 +msgid "History merge sorting" +msgstr "" + +#: optiondialog.cpp:916 +msgid "Sort version control history by a key." +msgstr "" + +#: optiondialog.cpp:926 +msgid "History entry start sort key order:" +msgstr "" + +#: optiondialog.cpp:930 +msgid "" +"Each parentheses used in the regular expression for the history start entry\n" +"groups a key that can be used for sorting.\n" +"Specify the list of keys (that are numbered in order of occurrence\n" +"starting with 1) using ',' as separator (e.g. \"4,5,6,1,2,3,7\").\n" +"If left empty, then no sorting will be done.\n" +"See the documentation for details." +msgstr "" + +#: optiondialog.cpp:941 +msgid "Merge version control history on merge start" +msgstr "" + +#: optiondialog.cpp:943 +msgid "Run version control history automerge on merge start." +msgstr "" + +#: optiondialog.cpp:947 +msgid "Test your regular expressions" +msgstr "" + +#: optiondialog.cpp:952 +msgid "Irrelevant merge command:" +msgstr "" + +#: optiondialog.cpp:956 +msgid "" +"If specified this script is run after automerge\n" +"when no other relevant changes were detected.\n" +"Called with the parameters: filename1 filename2 filename3" +msgstr "" + +#: optiondialog.cpp:966 +msgid "Directory Merge" +msgstr "" + +#: optiondialog.cpp:975 +msgid "Recursive directories" +msgstr "" + +#: optiondialog.cpp:977 +msgid "Whether to analyze subdirectories or not." +msgstr "" + +#: optiondialog.cpp:979 +msgid "File pattern(s):" +msgstr "" + +#: optiondialog.cpp:984 +msgid "" +"Pattern(s) of files to be analyzed. \n" +"Wildcards: '*' and '?'\n" +"Several Patterns can be specified by using the separator: ';'" +msgstr "" + +#: optiondialog.cpp:990 +msgid "File-anti-pattern(s):" +msgstr "" + +#: optiondialog.cpp:995 +msgid "" +"Pattern(s) of files to be excluded from analysis. \n" +"Wildcards: '*' and '?'\n" +"Several Patterns can be specified by using the separator: ';'" +msgstr "" + +#: optiondialog.cpp:1001 +msgid "Dir-anti-pattern(s):" +msgstr "" + +#: optiondialog.cpp:1006 +msgid "" +"Pattern(s) of directories to be excluded from analysis. \n" +"Wildcards: '*' and '?'\n" +"Several Patterns can be specified by using the separator: ';'" +msgstr "" + +#: optiondialog.cpp:1012 +msgid "Use .cvsignore" +msgstr "" + +#: optiondialog.cpp:1015 +msgid "" +"Extends the antipattern to anything that would be ignored by CVS.\n" +"Via local \".cvsignore\"-files this can be directory specific." +msgstr "" + +#: optiondialog.cpp:1020 +msgid "Find hidden files and directories" +msgstr "" + +#: optiondialog.cpp:1023 +msgid "Finds files and directories with the hidden attribute." +msgstr "" + +#: optiondialog.cpp:1025 +msgid "Finds files and directories starting with '.'." +msgstr "" + +#: optiondialog.cpp:1029 +msgid "Follow file links" +msgstr "" + +#: optiondialog.cpp:1032 +msgid "" +"On: Compare the file the link points to.\n" +"Off: Compare the links." +msgstr "" + +#: optiondialog.cpp:1037 +msgid "Follow directory links" +msgstr "" + +#: optiondialog.cpp:1040 +msgid "" +"On: Compare the directory the link points to.\n" +"Off: Compare the links." +msgstr "" + +#: optiondialog.cpp:1056 +msgid "Case sensitive filename comparison" +msgstr "" + +#: optiondialog.cpp:1059 +msgid "" +"The directory comparison will compare files or directories when their names " +"match.\n" +"Set this option if the case of the names must match. (Default for Windows is " +"off, otherwise on.)" +msgstr "" + +#: optiondialog.cpp:1063 +msgid "File Comparison Mode" +msgstr "" + +#: optiondialog.cpp:1067 +msgid "Binary comparison" +msgstr "" + +#: optiondialog.cpp:1068 +msgid "Binary comparison of each file. (Default)" +msgstr "" + +#: optiondialog.cpp:1070 +msgid "Full analysis" +msgstr "" + +#: optiondialog.cpp:1071 +msgid "" +"Do a full analysis and show statistics information in extra columns.\n" +"(Slower than a binary comparison, much slower for binary files.)" +msgstr "" + +#: optiondialog.cpp:1074 +msgid "Trust the modification date (unsafe)" +msgstr "" + +#: optiondialog.cpp:1075 +msgid "" +"Assume that files are equal if the modification date and file length are " +"equal.\n" +"Useful for big directories or slow networks." +msgstr "" + +#: optiondialog.cpp:1078 +msgid "Trust the size (unsafe)" +msgstr "" + +#: optiondialog.cpp:1079 +msgid "" +"Assume that files are equal if their file lengths are equal.\n" +"Useful for big directories or slow networks when the date is modified during " +"download." +msgstr "" + +#: optiondialog.cpp:1083 +msgid "Synchronize directories" +msgstr "" + +#: optiondialog.cpp:1086 +msgid "" +"Offers to store files in both directories so that\n" +"both directories are the same afterwards.\n" +"Works only when comparing two directories without specifying a destination." +msgstr "" + +#: optiondialog.cpp:1092 +msgid "White space differences considered equal" +msgstr "" + +#: optiondialog.cpp:1095 +msgid "" +"If files differ only by white space consider them equal.\n" +"This is only active when full analysis is chosen." +msgstr "" + +#: optiondialog.cpp:1101 +msgid "Copy newer instead of merging (unsafe)" +msgstr "" + +#: optiondialog.cpp:1104 +msgid "" +"Don't look inside, just take the newer file.\n" +"(Use this only if you know what you are doing!)\n" +"Only effective when comparing two directories." +msgstr "" + +#: optiondialog.cpp:1109 +msgid "Backup files (.orig)" +msgstr "" + +#: optiondialog.cpp:1112 +msgid "" +"When a file would be saved over an old file, then the old file\n" +"will be renamed with a '.orig'-extension instead of being deleted." +msgstr "" + +#: optiondialog.cpp:1176 +msgid "Regional Settings" +msgstr "" + +#: optiondialog.cpp:1272 +msgid "Language (restart required)" +msgstr "" + +#: optiondialog.cpp:1304 +msgid "" +"Choose the language of the GUI-strings or \"Auto\".\n" +"For a change of language to take place, quit and restart KDiff3." +msgstr "" + +#: optiondialog.cpp:1322 +msgid "Use the same encoding for everything:" +msgstr "" + +#: optiondialog.cpp:1325 +msgid "" +"Enable this allows to change all encodings by changing the first only.\n" +"Disable this if different individual settings are needed." +msgstr "" + +#: optiondialog.cpp:1330 +msgid "Note: Local Encoding is " +msgstr "" + +#: optiondialog.cpp:1334 +msgid "File Encoding for A:" +msgstr "" + +#: optiondialog.cpp:1340 +msgid "" +"If enabled then Unicode (UTF-16 or UTF-8) encoding will be detected.\n" +"If the file encoding is not detected then the selected encoding will be used as " +"fallback.\n" +"(Unicode detection depends on the first bytes of a file - the byte order mark " +"\"BOM\".)" +msgstr "" + +#: optiondialog.cpp:1344 optiondialog.cpp:1353 optiondialog.cpp:1362 +msgid "Auto Detect Unicode" +msgstr "" + +#: optiondialog.cpp:1349 +msgid "File Encoding for B:" +msgstr "" + +#: optiondialog.cpp:1358 +msgid "File Encoding for C:" +msgstr "" + +#: optiondialog.cpp:1367 +msgid "File Encoding for Merge Output and Saving:" +msgstr "" + +#: optiondialog.cpp:1371 +#, fuzzy +msgid "Auto Select" +msgstr "Seleczón" + +#: optiondialog.cpp:1374 +msgid "" +"If enabled then the encoding from the input files is used.\n" +"In ambiguous cases a dialog will ask the user to choose the encoding for " +"saving." +msgstr "" + +#: optiondialog.cpp:1378 +msgid "File Encoding for Preprocessor Files:" +msgstr "" + +#: optiondialog.cpp:1389 +msgid "Right To Left Language" +msgstr "" + +#: optiondialog.cpp:1392 +msgid "" +"Some languages are read from right to left.\n" +"This setting will change the viewer and editor accordingly." +msgstr "" + +#: optiondialog.cpp:1402 +msgid "Integration" +msgstr "" + +#: optiondialog.cpp:1402 +msgid "Integration Settings" +msgstr "" + +#: optiondialog.cpp:1412 +msgid "Command line options to ignore:" +msgstr "" + +#: optiondialog.cpp:1417 +msgid "" +"List of command line options that should be ignored when KDiff3 is used by " +"other tools.\n" +"Several values can be specified if separated via ';'\n" +"This will suppress the \"Unknown option\"-error." +msgstr "" + +#: optiondialog.cpp:1480 +msgid "" +"You selected a variable width font.\n" +"\n" +"Because this program doesn't handle variable width fonts\n" +"correctly, you might experience problems while editing.\n" +"\n" +"Do you want to continue or do you want to select another font." +msgstr "" + +#: optiondialog.cpp:1484 +msgid "Incompatible Font" +msgstr "" + +#: optiondialog.cpp:1485 +msgid "Continue at Own Risk" +msgstr "" + +#: optiondialog.cpp:1485 +msgid "Select Another Font" +msgstr "" + +#: optiondialog.cpp:1521 +msgid "This resets all options. Not only those of the current topic." +msgstr "" + +#: pdiff.cpp:258 +msgid "PreprocessorCmd: " +msgstr "" + +#: pdiff.cpp:263 +msgid "" +"The following option(s) you selected might change data:\n" +msgstr "" + +#: pdiff.cpp:264 +msgid "" +"\n" +"Most likely this is not wanted during a merge.\n" +"Do you want to disable these settings or continue with these settings active?" +msgstr "" + +#: pdiff.cpp:266 +msgid "Option Unsafe for Merging" +msgstr "" + +#: pdiff.cpp:267 +msgid "Use These Options During Merge" +msgstr "" + +#: pdiff.cpp:267 +msgid "Disable Unsafe Options" +msgstr "" + +#: pdiff.cpp:297 +msgid "Loading A" +msgstr "" + +#: pdiff.cpp:301 +msgid "Loading B" +msgstr "" + +#: pdiff.cpp:318 pdiff.cpp:344 +msgid "Diff: A <-> B" +msgstr "" + +#: pdiff.cpp:324 pdiff.cpp:366 +msgid "Linediff: A <-> B" +msgstr "" + +#: pdiff.cpp:335 +msgid "Loading C" +msgstr "" + +#: pdiff.cpp:347 +msgid "Diff: B <-> C" +msgstr "" + +#: pdiff.cpp:350 +msgid "Diff: A <-> C" +msgstr "" + +#: pdiff.cpp:369 +msgid "Linediff: B <-> C" +msgstr "" + +#: pdiff.cpp:372 +msgid "Linediff: A <-> C" +msgstr "" + +#: pdiff.cpp:513 +msgid "All input files contain the same text, but are not binary equal." +msgstr "" + +#: pdiff.cpp:515 pdiff.cpp:517 pdiff.cpp:519 +msgid "" +"Files %1 and %2 are binary equal.\n" +msgstr "" + +#: pdiff.cpp:516 pdiff.cpp:518 pdiff.cpp:520 +msgid "" +"Files %1 and %2 have equal text, but are not binary equal. \n" +msgstr "" + +#: pdiff.cpp:530 +msgid "" +"Some inputfiles don't seem to be pure textfiles.\n" +"Note that the KDiff3-merge was not meant for binary data.\n" +"Continue at your own risk." +msgstr "" + +#: pdiff.cpp:979 +msgid "Abort" +msgstr "Interromper" + +#: pdiff.cpp:985 pdiff.cpp:1073 +msgid "Opening files..." +msgstr "" + +#: pdiff.cpp:1050 pdiff.cpp:1121 +msgid "File open error" +msgstr "" + +#: pdiff.cpp:1153 +msgid "Cutting selection..." +msgstr "" + +#: pdiff.cpp:1174 +msgid "Copying selection to clipboard..." +msgstr "" + +#: pdiff.cpp:1190 +msgid "Inserting clipboard contents..." +msgstr "" + +#: pdiff.cpp:1713 +msgid "Save && Continue" +msgstr "" + +#: pdiff.cpp:1713 +msgid "Continue Without Saving" +msgstr "" + +#: pdiff.cpp:1920 +msgid "Search complete." +msgstr "" + +#: pdiff.cpp:1920 +msgid "Search Complete" +msgstr "" + +#: pdiff.cpp:2144 +msgid "Nothing is selected in either diff input window." +msgstr "" + +#: pdiff.cpp:2144 +msgid "Error while adding manual diff range" +msgstr "" + +#. i18n: file kdiff3_part.rc line 4 +#: rc.cpp:3 +#, no-c-format +msgid "&KDiff3" +msgstr "" + +#. i18n: file kdiff3_part.rc line 13 +#: rc.cpp:6 +#, no-c-format +msgid "Configure KDiff3" +msgstr "" + +#. i18n: file kdiff3_shell.rc line 7 +#: rc.cpp:15 +#, no-c-format +msgid "&Directory" +msgstr "" + +#. i18n: file kdiff3_shell.rc line 30 +#: rc.cpp:18 +#, no-c-format +msgid "Current Item Merge Operation" +msgstr "" + +#. i18n: file kdiff3_shell.rc line 38 +#: rc.cpp:21 +#, no-c-format +msgid "Current Item Sync Operation" +msgstr "" + +#. i18n: file kdiff3_shell.rc line 50 +#: rc.cpp:24 +#, no-c-format +msgid "&Movement" +msgstr "" + +#. i18n: file kdiff3_shell.rc line 61 +#: rc.cpp:27 +#, no-c-format +msgid "D&iffview" +msgstr "" + +#. i18n: file kdiff3_shell.rc line 73 +#: rc.cpp:30 +#, no-c-format +msgid "&Merge" +msgstr "" + +#. i18n: file kdiff3_shell.rc line 95 +#: rc.cpp:33 +#, no-c-format +msgid "&Window" +msgstr "&Fiestra" + +#: smalldialogs.cpp:53 +msgid "A (Base):" +msgstr "" + +#: smalldialogs.cpp:59 smalldialogs.cpp:75 smalldialogs.cpp:91 +#: smalldialogs.cpp:134 +msgid "File..." +msgstr "" + +#: smalldialogs.cpp:61 smalldialogs.cpp:77 smalldialogs.cpp:93 +#: smalldialogs.cpp:136 +msgid "Dir..." +msgstr "" + +#: smalldialogs.cpp:86 +msgid "C (Optional):" +msgstr "" + +#: smalldialogs.cpp:108 +msgid "Swap/Copy Names ..." +msgstr "" + +#: smalldialogs.cpp:114 smalldialogs.cpp:115 smalldialogs.cpp:116 +msgid "Swap %1<->%2" +msgstr "" + +#: smalldialogs.cpp:117 smalldialogs.cpp:118 smalldialogs.cpp:119 +msgid "Copy %1->Output" +msgstr "" + +#: smalldialogs.cpp:120 smalldialogs.cpp:121 smalldialogs.cpp:122 +msgid "Swap %1<->Output" +msgstr "" + +#: smalldialogs.cpp:129 +msgid "Output (optional):" +msgstr "" + +#: smalldialogs.cpp:158 +msgid "Configure..." +msgstr "Configurar..." + +#: smalldialogs.cpp:347 +msgid "Search text:" +msgstr "" + +#: smalldialogs.cpp:354 +msgid "Case sensitive" +msgstr "" + +#: smalldialogs.cpp:357 +msgid "Search A" +msgstr "" + +#: smalldialogs.cpp:362 +msgid "Search B" +msgstr "" + +#: smalldialogs.cpp:367 +msgid "Search C" +msgstr "" + +#: smalldialogs.cpp:372 +msgid "Search output" +msgstr "" + +#: smalldialogs.cpp:377 +msgid "&Search" +msgstr "&Procurar" + +#: smalldialogs.cpp:394 +msgid "Regular Expression Tester" +msgstr "" + +#: smalldialogs.cpp:405 +msgid "Example auto merge line:" +msgstr "" + +#: smalldialogs.cpp:407 +msgid "For auto merge test copy a line as used in your files." +msgstr "" + +#: smalldialogs.cpp:413 smalldialogs.cpp:442 smalldialogs.cpp:479 +msgid "Match result:" +msgstr "" + +#: smalldialogs.cpp:432 +msgid "Example history start line (with leading comment):" +msgstr "" + +#: smalldialogs.cpp:435 +msgid "" +"Copy a history start line as used in your files,\n" +"including the leading comment." +msgstr "" + +#: smalldialogs.cpp:461 +msgid "History sort key order:" +msgstr "" + +#: smalldialogs.cpp:469 +msgid "Example history entry start line (without leading comment):" +msgstr "" + +#: smalldialogs.cpp:471 +msgid "" +"Copy a history entry start line as used in your files,\n" +"but omit the leading comment." +msgstr "" + +#: smalldialogs.cpp:486 +msgid "Sort key result:" +msgstr "" + +#: smalldialogs.cpp:537 smalldialogs.cpp:547 smalldialogs.cpp:568 +msgid "Match success." +msgstr "" + +#: smalldialogs.cpp:541 smalldialogs.cpp:551 smalldialogs.cpp:574 +msgid "Match failed." +msgstr "" + +#: smalldialogs.cpp:559 +msgid "Opening and closing parentheses don't match in regular expression." +msgstr "" diff --git a/po/hi.po b/po/hi.po new file mode 100644 index 0000000..e65976e --- /dev/null +++ b/po/hi.po @@ -0,0 +1,2427 @@ +# SOME DESCRIPTIVE TITLE. +# FIRST AUTHOR , YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: kdiff3\n" +"POT-Creation-Date: 2006-11-05 08:45+0100\n" +"PO-Revision-Date: 2005-01-22 16:10+0530\n" +"Last-Translator: Ravishankar Shrivastava \n" +"Language-Team: indlinux-hindi \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Poedit-Language: Hindi\n" + +#: _translatorinfo.cpp:1 +msgid "" +"_: NAME OF TRANSLATORS\n" +"Your names" +msgstr "रविशंकर शà¥à¤°à¥€à¤µà¤¾à¤¸à¥à¤¤à¤µ" + +#: _translatorinfo.cpp:3 +msgid "" +"_: EMAIL OF TRANSLATORS\n" +"Your emails" +msgstr "raviratlami@yahoo.com" + +#: diff.cpp:246 +msgid "Writing clipboard data to temp file failed." +msgstr "कà¥à¤²à¤¿à¤ªà¤¬à¥‹à¤°à¥à¤¡ डाटा को असà¥à¤¥à¤¾à¤ˆ फ़ाइल में लिखना असफल." + +#: diff.cpp:250 +msgid "From Clipboard" +msgstr "कà¥à¤²à¤¿à¤ªà¤¬à¥‹à¤°à¥à¤¡ से" + +#: diff.cpp:491 +msgid "" +"Preprocessing possibly failed. Check this command:\n" +"\n" +" %1\n" +"\n" +"The preprocessing command will be disabled now." +msgstr "" + +#: diff.cpp:526 +msgid "" +"The line-matching-preprocessing possibly failed. Check this command:\n" +"\n" +" %1\n" +"\n" +"The line-matching-preprocessing command will be disabled now." +msgstr "" + +#: diff.cpp:1631 diff.cpp:1645 +msgid "" +"Data loss error:\n" +"If it is reproducable please contact the author.\n" +msgstr "" + +#: diff.cpp:1633 diff.cpp:1647 +msgid "Severe Internal Error" +msgstr "गंभीर आंतरिक तà¥à¤°à¥à¤Ÿà¤¿" + +#: difftextwindow.cpp:1643 kdiff3.cpp:753 +#, fuzzy +msgid "Top line" +msgstr "शीरà¥à¤· पंकà¥à¤¤à¤¿ %1" + +#: difftextwindow.cpp:1653 +msgid "End" +msgstr "अंत" + +#: directorymergewindow.cpp:142 +msgid "Mix of links and normal files." +msgstr "कड़ियों की मिलावटें तथा सामानà¥à¤¯ फ़ाइलें." + +#: directorymergewindow.cpp:149 +msgid "Link: " +msgstr "कड़ी" + +#: directorymergewindow.cpp:157 +msgid "Size. " +msgstr "आकार." + +#: directorymergewindow.cpp:170 +msgid "Date & Size: " +msgstr "तारीख व आकार:" + +#: directorymergewindow.cpp:179 directorymergewindow.cpp:185 +msgid "Creating temp copy of %1 failed." +msgstr "%1 की असà¥à¤¥à¤¾à¤ˆ नक़ल बनाना असफल." + +#: directorymergewindow.cpp:196 directorymergewindow.cpp:204 +msgid "Opening %1 failed." +msgstr "%1 को खोलना असफल" + +#: directorymergewindow.cpp:208 +msgid "Comparing file..." +msgstr "फ़ाइल की तà¥à¤²à¤¨à¤¾ की जा रही है..." + +#: directorymergewindow.cpp:218 directorymergewindow.cpp:224 +#, c-format +msgid "Error reading from %1" +msgstr "%1 से पढ़ने में तà¥à¤°à¥à¤Ÿà¤¿" + +#: directorymergewindow.cpp:282 +msgid "Name" +msgstr "नाम" + +#: directorymergewindow.cpp:286 +msgid "Operation" +msgstr "ऑपरेशन" + +#: directorymergewindow.cpp:287 +msgid "Status" +msgstr "सà¥à¤¥à¤¿à¤¤à¤¿" + +#: directorymergewindow.cpp:288 +msgid "Unsolved" +msgstr "हल नहीं" + +#: directorymergewindow.cpp:289 +msgid "Solved" +msgstr "हल कर लिया गया" + +#: directorymergewindow.cpp:290 +msgid "Nonwhite" +msgstr "सफेद-नहीं" + +#: directorymergewindow.cpp:291 +msgid "White" +msgstr "सफेद" + +#: directorymergewindow.cpp:319 +msgid "" +"You are currently doing a directory merge. Are you sure, you want to abort the " +"merge and rescan the directory?" +msgstr "" + +#: directorymergewindow.cpp:320 directorymergewindow.cpp:2868 +msgid "Rescan" +msgstr "री-सà¥à¤•à¥ˆà¤¨" + +#: directorymergewindow.cpp:320 kdiff3.cpp:603 pdiff.cpp:979 +msgid "Continue Merging" +msgstr "मिलाया जाना जारी रखें" + +#: directorymergewindow.cpp:462 +msgid "Opening of directories failed:" +msgstr "डिरेकà¥à¤Ÿà¥à¤°à¥€à¤œà¤¼ खोलना असफल:" + +#: directorymergewindow.cpp:465 +msgid "" +"Dir A \"%1\" does not exist or is not a directory.\n" +msgstr "" +"डिरेकà¥à¤Ÿà¥à¤°à¥€ अ \"%1\" या तो मौजूद नहीं है या फिर वह डिरेकà¥à¤Ÿà¥à¤°à¥€ नहीं है.\n" + +#: directorymergewindow.cpp:468 +msgid "" +"Dir B \"%1\" does not exist or is not a directory.\n" +msgstr "" +"डिरेकà¥à¤Ÿà¥à¤°à¥€ ब \"%1\" या तो मौजूद नहीं है या फिर वह डिरेकà¥à¤Ÿà¥à¤°à¥€ नहीं है.\n" + +#: directorymergewindow.cpp:471 +msgid "" +"Dir C \"%1\" does not exist or is not a directory.\n" +msgstr "" +"डिरेकà¥à¤Ÿà¥à¤°à¥€ स \"%1\" या तो मौजूद नहीं है या फिर वह डिरेकà¥à¤Ÿà¥à¤°à¥€ नहीं है.\n" + +#: directorymergewindow.cpp:473 +msgid "Directory Open Error" +msgstr "डिरेकà¥à¤Ÿà¥à¤°à¥€ खोलने में तà¥à¤°à¥à¤Ÿà¤¿" + +#: directorymergewindow.cpp:481 +msgid "" +"The destination directory must not be the same as A or B when three directories " +"are merged.\n" +"Check again before continuing." +msgstr "" + +#: directorymergewindow.cpp:483 +msgid "Parameter Warning" +msgstr "पैरामीटर चेतावनी" + +#: directorymergewindow.cpp:488 +msgid "Scanning directories..." +msgstr "डिरेकà¥à¤Ÿà¥à¤°à¥€à¤œà¤¼ सà¥à¤•à¥ˆà¤¨ किया जा रहा है..." + +#: directorymergewindow.cpp:537 +msgid "Reading Directory A" +msgstr "डिरेकà¥à¤Ÿà¥à¤°à¥€ अ को पढ़ा जा रहा है" + +#: directorymergewindow.cpp:559 +msgid "Reading Directory B" +msgstr "डिरेकà¥à¤Ÿà¥à¤°à¥€ ब को पढ़ा जा रहा है" + +#: directorymergewindow.cpp:581 +msgid "Reading Directory C" +msgstr "डिरेकà¥à¤Ÿà¥à¤°à¥€ स को पढ़ा जा रहा है" + +#: directorymergewindow.cpp:607 +msgid "Some subdirectories were not readable in" +msgstr "कà¥à¤› सबडिरेकà¥à¤Ÿà¥à¤°à¥€à¤œà¤¼ इसमें पढ़े नहीं जा सकने वाले हैं" + +#: directorymergewindow.cpp:612 +msgid "Check the permissions of the subdirectories." +msgstr "सबडिरेकà¥à¤Ÿà¥à¤°à¥€à¤œà¤¼ की अनà¥à¤®à¤¤à¤¿à¤¯à¤¾à¤ जाà¤à¤šà¥‡à¤‚." + +#: directorymergewindow.cpp:646 kdiff3.cpp:552 kdiff3.cpp:636 kdiff3.cpp:661 +#: kdiff3.cpp:934 kdiff3.cpp:955 pdiff.cpp:1059 pdiff.cpp:1131 pdiff.cpp:1169 +#: pdiff.cpp:1185 pdiff.cpp:1215 pdiff.cpp:1226 +msgid "Ready." +msgstr "तैयार." + +#: directorymergewindow.cpp:660 +msgid "Directory Comparison Status" +msgstr "डिरेकà¥à¤Ÿà¥à¤°à¥€ तà¥à¤²à¤¨à¤¾ सà¥à¤¥à¤¿à¤¤à¤¿" + +#: directorymergewindow.cpp:661 +msgid "Number of subdirectories:" +msgstr "सबडिरेकà¥à¤Ÿà¥à¤°à¥€à¤œà¤¼ की संखà¥à¤¯à¤¾:" + +#: directorymergewindow.cpp:662 +msgid "Number of equal files:" +msgstr "समान फ़ाइलों की संखà¥à¤¯à¤¾:" + +#: directorymergewindow.cpp:663 +msgid "Number of different files:" +msgstr "भिनà¥à¤¨ फ़ाइलों की संखà¥à¤¯à¤¾:" + +#: directorymergewindow.cpp:666 +msgid "Number of manual merges:" +msgstr "हसà¥à¤¤à¤šà¤¾à¤²à¤¿à¤¤ समà¥à¤®à¤¿à¤²à¤¿à¤¤ करने की संखà¥à¤¯à¤¾:" + +#: directorymergewindow.cpp:802 +msgid "This affects all merge operations." +msgstr "यह सभी समà¥à¤®à¤¿à¤²à¤¿à¤¤ ऑपरेशन को पà¥à¤°à¤­à¤¾à¤µà¤¿à¤¤ करेगा" + +#: directorymergewindow.cpp:803 +msgid "Changing All Merge Operations" +msgstr "सभी समà¥à¤®à¤¿à¤²à¤¿à¤¤ करने के ऑपरेशन को बदला जा रहा है" + +#: directorymergewindow.cpp:803 mergeresultwindow.cpp:287 +msgid "C&ontinue" +msgstr "जारी रखें (&o)" + +#: directorymergewindow.cpp:1169 +msgid "Processing " +msgstr "पà¥à¤°à¥‹à¤¸à¥‡à¤¸à¤¿à¤‚ग" + +#: directorymergewindow.cpp:1647 directorymergewindow.cpp:1653 +msgid "To do." +msgstr "कारà¥à¤¯-सूची" + +#: directorymergewindow.cpp:1756 directorymergewindow.cpp:2899 +msgid "Copy A to B" +msgstr "अ की नक़ल ब में करें" + +#: directorymergewindow.cpp:1757 directorymergewindow.cpp:2900 +msgid "Copy B to A" +msgstr "ब की नक़ल अ में करें" + +#: directorymergewindow.cpp:1758 directorymergewindow.cpp:2901 +msgid "Delete A" +msgstr "अ को मिटाà¤à¤" + +#: directorymergewindow.cpp:1759 directorymergewindow.cpp:2902 +msgid "Delete B" +msgstr "ब को मिटाà¤à¤" + +#: directorymergewindow.cpp:1760 +msgid "Delete A & B" +msgstr "अ तथा ब को मिटाà¤à¤" + +#: directorymergewindow.cpp:1761 directorymergewindow.cpp:2904 +msgid "Merge to A" +msgstr "अ में समà¥à¤®à¤¿à¤²à¤¿à¤¤ करें" + +#: directorymergewindow.cpp:1762 directorymergewindow.cpp:2905 +msgid "Merge to B" +msgstr "ब में समà¥à¤®à¤¿à¤²à¤¿à¤¤ करें" + +#: directorymergewindow.cpp:1763 +msgid "Merge to A & B" +msgstr "अ तथा ब में समà¥à¤®à¤¿à¤²à¤¿à¤¤ करें" + +#: directorymergewindow.cpp:1767 directorymergewindow.cpp:2896 +msgid "Delete (if exists)" +msgstr "मिटाà¤à¤ (यदि मौजूद है)" + +#: directorymergewindow.cpp:1768 directorymergewindow.cpp:1769 +#: directorymergewindow.cpp:2895 optiondialog.cpp:809 smalldialogs.cpp:102 +msgid "Merge" +msgstr "समà¥à¤®à¤¿à¤²à¤¿à¤¤ करें" + +#: directorymergewindow.cpp:1768 directorymergewindow.cpp:1769 +msgid "Merge (manual)" +msgstr "समà¥à¤®à¤¿à¤²à¤¿à¤¤ करें (हसà¥à¤¤à¤šà¤¾à¤²à¤¿à¤¤)" + +#: directorymergewindow.cpp:1770 +msgid "Error: Conflicting File Types" +msgstr "तà¥à¤°à¥à¤Ÿà¤¿: परसà¥à¤ªà¤° विरोधी फ़ाइल क़िसà¥à¤®à¥‡à¤‚" + +#: directorymergewindow.cpp:1771 +msgid "Error: Dates are equal but files are not." +msgstr "तà¥à¤°à¥à¤Ÿà¤¿: तारीखें तो à¤à¤• समान हैं, परंतॠफ़ाइलें नहीं." + +#: directorymergewindow.cpp:1795 directorymergewindow.cpp:1824 +#: directorymergewindow.cpp:1849 +msgid "This operation is currently not possible." +msgstr "यह ऑपरेशन वरà¥à¤¤à¤®à¤¾à¤¨ में संभव नहीं है." + +#: directorymergewindow.cpp:1795 directorymergewindow.cpp:1824 +#: directorymergewindow.cpp:1849 directorymergewindow.cpp:2106 +msgid "Operation Not Possible" +msgstr "ऑपरेशन वरà¥à¤¤à¤®à¤¾à¤¨ में संभव नहीं" + +#: directorymergewindow.cpp:1888 +msgid "" +"This should never happen: \n" +"\n" +"mergeResultSaved: m_pMFI=0\n" +"\n" +"If you know how to reproduce this, please contact the program author." +msgstr "" + +#: directorymergewindow.cpp:1888 +msgid "Program Error" +msgstr "पà¥à¤°à¥‹à¤—à¥à¤°à¤¾à¤® तà¥à¤°à¥à¤Ÿà¤¿" + +#: directorymergewindow.cpp:1899 +msgid "" +"An error occurred while copying.\n" +msgstr "" +"नक़ल करने के दौरान à¤à¤• तà¥à¤°à¥à¤Ÿà¤¿ हà¥à¤ˆ.\n" + +#: directorymergewindow.cpp:1900 directorymergewindow.cpp:2306 +msgid "Merge Error" +msgstr "समà¥à¤®à¤¿à¤²à¤¿à¤¤ करने में तà¥à¤°à¥à¤Ÿà¤¿" + +#: directorymergewindow.cpp:1905 directorymergewindow.cpp:2311 +msgid "Error." +msgstr "तà¥à¤°à¥à¤Ÿà¤¿." + +#: directorymergewindow.cpp:1910 directorymergewindow.cpp:2202 +#: directorymergewindow.cpp:2242 +msgid "Done." +msgstr "समà¥à¤ªà¤¨à¥à¤¨." + +#: directorymergewindow.cpp:1933 +msgid "Not saved." +msgstr "सहेजा नहीं गया." + +#: directorymergewindow.cpp:1968 +msgid "Unknown merge operation. (This must never happen!)" +msgstr "समà¥à¤®à¤¿à¤²à¤¿à¤¤ करने का अजà¥à¤žà¤¾à¤¤ ऑपरेशन. (à¤à¤¸à¤¾ कभी नहीं होना चाहिà¤!)" + +#: directorymergewindow.cpp:2000 +msgid "Unknown merge operation." +msgstr "समà¥à¤®à¤¿à¤²à¤¿à¤¤ करने का अजà¥à¤žà¤¾à¤¤ ऑपरेशन. " + +#: directorymergewindow.cpp:2015 +msgid "" +"The merge is about to begin.\n" +"\n" +"Choose \"Do it\" if you have read the instructions and know what you are " +"doing.\n" +"Choosing \"Simulate it\" will tell you what would happen.\n" +"\n" +"Be aware that this program still has beta status and there is NO WARRANTY " +"whatsoever! Make backups of your vital data!" +msgstr "" + +#: directorymergewindow.cpp:2020 +msgid "Starting Merge" +msgstr "समà¥à¤®à¤¿à¤²à¤¿à¤¤ करना पà¥à¤°à¤¾à¤°à¤‚भ किया जा रहा है" + +#: directorymergewindow.cpp:2020 +msgid "Do It" +msgstr "इसे करें" + +#: directorymergewindow.cpp:2020 +msgid "Simulate It" +msgstr "इसे सिमà¥à¤²à¥‡à¤Ÿ करें" + +#: directorymergewindow.cpp:2046 +msgid "" +"The highlighted item has a different type in the different directories. Select " +"what to do." +msgstr "" + +#: directorymergewindow.cpp:2055 +msgid "" +"The modification dates of the file are equal but the files are not. Select what " +"to do." +msgstr "" + +#: directorymergewindow.cpp:2106 +msgid "" +"This operation is currently not possible because directory merge is currently " +"running." +msgstr "" + +#: directorymergewindow.cpp:2166 +msgid "" +"There was an error in the last step.\n" +"Do you want to continue with the item that caused the error or do you want to " +"skip this item?" +msgstr "" + +#: directorymergewindow.cpp:2168 +msgid "Continue merge after an error" +msgstr "तà¥à¤°à¥à¤Ÿà¤¿ के बाद भी समà¥à¤®à¤¿à¤²à¤¿à¤¤ करना जारी रखें" + +#: directorymergewindow.cpp:2168 +msgid "Continue With Last Item" +msgstr "पिछली वसà¥à¤¤à¥ के साथ जारी रखें" + +#: directorymergewindow.cpp:2168 +msgid "Skip Item" +msgstr "वसà¥à¤¤à¥ छोड़ें" + +#: directorymergewindow.cpp:2202 +msgid "Skipped." +msgstr "छोड़ा." + +#: directorymergewindow.cpp:2209 directorymergewindow.cpp:2435 +msgid "In progress..." +msgstr "पà¥à¤°à¤—ति पर है..." + +#: directorymergewindow.cpp:2257 +msgid "Merge operation complete." +msgstr "समà¥à¤®à¤¿à¤²à¤¿à¤¤ करने की कà¥à¤°à¤¿à¤¯à¤¾ पूरी हà¥à¤ˆ." + +#: directorymergewindow.cpp:2257 directorymergewindow.cpp:2260 +msgid "Merge Complete" +msgstr "समà¥à¤®à¤¿à¤²à¤¿à¤¤ करना समà¥à¤ªà¤¨à¥à¤¨" + +#: directorymergewindow.cpp:2269 +msgid "" +"Simulated merge complete: Check if you agree with the proposed operations." +msgstr "" + +#: directorymergewindow.cpp:2305 +msgid "" +"An error occurred. Press OK to see detailed information.\n" +msgstr "" +"à¤à¤• तà¥à¤°à¥à¤Ÿà¤¿ हà¥à¤ˆ. विसà¥à¤¤à¥ƒà¤¤ जानकारी देखने के लिठठीक को दबाà¤à¤\n" + +#: directorymergewindow.cpp:2348 +msgid "Error: While deleting %1: Creating backup failed." +msgstr "तà¥à¤°à¥à¤Ÿà¤¿: %1 को मिटाने के दौरान: बैकअप बनाने में असफल." + +#: directorymergewindow.cpp:2355 +msgid "delete directory recursively( %1 )" +msgstr "डिरेकà¥à¤Ÿà¥à¤°à¥€ ( %1 ) को रिकरà¥à¤¸à¤¿à¤µà¤²à¥€ मिटाà¤à¤" + +#: directorymergewindow.cpp:2357 +msgid "delete( %1 )" +msgstr "मिटाà¤à¤‚ (%1)" + +#: directorymergewindow.cpp:2372 +msgid "Error: delete dir operation failed while trying to read the directory." +msgstr "" +"तà¥à¤°à¥à¤Ÿà¤¿: डिरेकà¥à¤Ÿà¥à¤°à¥€ को पढ़ने की कोशिश में डिरेकà¥à¤Ÿà¥à¤°à¥€ मिटाने का कारà¥à¤¯ असफल." + +#: directorymergewindow.cpp:2391 +msgid "Error: rmdir( %1 ) operation failed." +msgstr "तà¥à¤°à¥à¤Ÿà¤¿: rmdir( %1 ) कà¥à¤°à¤¿à¤¯à¤¾ असफल." + +#: directorymergewindow.cpp:2401 +msgid "Error: delete operation failed." +msgstr "तà¥à¤°à¥à¤Ÿà¤¿: डिरेकà¥à¤Ÿà¥à¤°à¥€ मिटाने का कारà¥à¤¯ असफल." + +#: directorymergewindow.cpp:2427 +msgid "manual merge( %1, %2, %3 -> %4)" +msgstr "हसà¥à¤¤à¤šà¤¾à¤²à¤¿à¤¤ समà¥à¤®à¤¿à¤²à¤¿à¤¤ करें( %1, %2, %3 -> %4)" + +#: directorymergewindow.cpp:2430 +msgid "" +" Note: After a manual merge the user should continue by pressing F7." +msgstr "" +"टीप: हसà¥à¤¤à¤šà¤¾à¤²à¤¿à¤¤ समà¥à¤®à¤¿à¤²à¤¿à¤¤ करने के बाद उपयोकà¥à¤¤à¤¾ को F7 को दबाकर जारी रखना चाहिà¤." + +#: directorymergewindow.cpp:2453 +msgid "Error: copy( %1 -> %2 ) failed.Deleting existing destination failed." +msgstr "तà¥à¤°à¥à¤Ÿà¤¿: नक़ल ( %1 -> %2 ) असफल. मौजूदा गंतवà¥à¤¯ को मिटाना असफल." + +#: directorymergewindow.cpp:2463 +msgid "copyLink( %1 -> %2 )" +msgstr "कापीलिंक ( %1 -> %2 )" + +#: directorymergewindow.cpp:2474 +msgid "Error: copyLink failed: Remote links are not yet supported." +msgstr "तà¥à¤°à¥à¤Ÿà¤¿: कापीलिंक असफल: रिमोट कड़ियाठअभी समरà¥à¤¥à¤¿à¤¤ नहीं हैं." + +#: directorymergewindow.cpp:2480 +msgid "Error: copyLink failed." +msgstr "तà¥à¤°à¥à¤Ÿà¤¿: कापीलिंक असफल." + +#: directorymergewindow.cpp:2500 +msgid "copy( %1 -> %2 )" +msgstr "नक़ल( %1 -> %2 )" + +#: directorymergewindow.cpp:2526 +msgid "Error during rename( %1 -> %2 ): Cannot delete existing destination." +msgstr "" + +#: directorymergewindow.cpp:2532 +msgid "rename( %1 -> %2 )" +msgstr "नाम बदलें( %1 -> %2 )" + +#: directorymergewindow.cpp:2541 +msgid "Error: Rename failed." +msgstr "तà¥à¤°à¥à¤Ÿà¤¿: नाम-बदलना असफल." + +#: directorymergewindow.cpp:2559 +msgid "Error during makeDir of %1. Cannot delete existing file." +msgstr "%1 के मेकडिर के दौरान तà¥à¤°à¥à¤Ÿà¤¿. मौजूदा फ़ाइल मिटा नहीं सकते." + +#: directorymergewindow.cpp:2575 +msgid "makeDir( %1 )" +msgstr "मेकडिर( %1 )" + +#: directorymergewindow.cpp:2585 +msgid "Error while creating directory." +msgstr "डिरेकà¥à¤Ÿà¥à¤°à¥€ बनाने के दौरान तà¥à¤°à¥à¤Ÿà¤¿." + +#: directorymergewindow.cpp:2608 directorymergewindow.cpp:2725 +msgid "Dest" +msgstr "गंतवà¥à¤¯" + +#: directorymergewindow.cpp:2612 directorymergewindow.cpp:2650 +msgid "Dir" +msgstr "डिर." + +#: directorymergewindow.cpp:2613 +msgid "Type" +msgstr "क़िसà¥à¤®" + +#: directorymergewindow.cpp:2614 +msgid "Size" +msgstr "आकार" + +#: directorymergewindow.cpp:2615 +msgid "Attr" +msgstr "à¤à¤Ÿà¥à¤°à¤¿." + +#: directorymergewindow.cpp:2616 +msgid "Last Modification" +msgstr "अंतिम परिवरà¥à¤§à¤¨" + +#: directorymergewindow.cpp:2617 +msgid "Link-Destination" +msgstr "लिंक-गंतवà¥à¤¯" + +#: directorymergewindow.cpp:2667 +msgid "not available" +msgstr "उपलबà¥à¤§ नहीं" + +#: directorymergewindow.cpp:2687 +msgid "A (Dest): " +msgstr "A (गंत.): " + +#: directorymergewindow.cpp:2690 +msgid "A (Base): " +msgstr "A (आधार): " + +#: directorymergewindow.cpp:2696 +msgid "B (Dest): " +msgstr "B (गंत.): " + +#: directorymergewindow.cpp:2704 +msgid "C (Dest): " +msgstr "C (गंत.): " + +#: directorymergewindow.cpp:2710 +msgid "Dest: " +msgstr "गंतवà¥à¤¯:" + +#: directorymergewindow.cpp:2775 +#, fuzzy +msgid "Save Directory Merge State As..." +msgstr "डिरेकà¥à¤Ÿà¥à¤°à¥€ समà¥à¤®à¤¿à¤²à¤¿à¤¤ करें" + +#: directorymergewindow.cpp:2862 +msgid "Start/Continue Directory Merge" +msgstr "डिरेकà¥à¤Ÿà¥à¤°à¥€ समà¥à¤®à¤¿à¤²à¤¿à¤¤ करना पà¥à¤°à¤¾à¤°à¤‚भ करें/जारी रखें" + +#: directorymergewindow.cpp:2863 +msgid "Run Operation for Current Item" +msgstr "मौज़ूदा वसà¥à¤¤à¥ के लिठऑपरेशन चलाà¤à¤" + +#: directorymergewindow.cpp:2864 +msgid "Compare Selected File" +msgstr "चयनित फ़ाइल की तà¥à¤²à¤¨à¤¾ करें" + +#: directorymergewindow.cpp:2865 +msgid "Merge Current File" +msgstr "मौज़ूदा फ़ाइल समà¥à¤®à¤¿à¤²à¤¿à¤¤ करें" + +#: directorymergewindow.cpp:2866 +msgid "Fold All Subdirs" +msgstr "सभी सबडिरेकà¥à¤Ÿà¥à¤°à¥€à¤œ फ़ोलà¥à¤¡ करें" + +#: directorymergewindow.cpp:2867 +msgid "Unfold All Subdirs" +msgstr "सभी सबडिरेकà¥à¤Ÿà¥à¤°à¥€à¤œ अनफ़ोलà¥à¤¡ करें" + +#: directorymergewindow.cpp:2871 +msgid "Choose A for All Items" +msgstr "सभी वसà¥à¤¤à¥à¤“ं के लिठअ का चयन करें" + +#: directorymergewindow.cpp:2872 +msgid "Choose B for All Items" +msgstr "सभी वसà¥à¤¤à¥à¤“ं के लिठब का चयन करें" + +#: directorymergewindow.cpp:2873 +msgid "Choose C for All Items" +msgstr "सभी वसà¥à¤¤à¥à¤“ं के लिठस का चयन करें" + +#: directorymergewindow.cpp:2874 +msgid "Auto-Choose Operation for All Items" +msgstr "सभी वसà¥à¤¤à¥à¤“ं के लिठकà¥à¤°à¤¿à¤¯à¤¾ सà¥à¤µà¤šà¤¾à¤²à¤¿à¤¤ चयन करें" + +#: directorymergewindow.cpp:2875 +msgid "No Operation for All Items" +msgstr "सभी वसà¥à¤¤à¥à¤“ं के लिठकोई कà¥à¤°à¤¿à¤¯à¤¾ नहीं" + +#: directorymergewindow.cpp:2880 +msgid "Show Identical Files" +msgstr "" + +#: directorymergewindow.cpp:2881 +#, fuzzy +msgid "Show Different Files" +msgstr "भिनà¥à¤¨ फ़ाइलों की संखà¥à¤¯à¤¾:" + +#: directorymergewindow.cpp:2882 +msgid "Show Files only in A" +msgstr "" + +#: directorymergewindow.cpp:2883 +msgid "Show Files only in B" +msgstr "" + +#: directorymergewindow.cpp:2884 +msgid "Show Files only in C" +msgstr "" + +#: directorymergewindow.cpp:2888 +#, fuzzy +msgid "Compare Explicitly Selected Files" +msgstr "चयनित फ़ाइल की तà¥à¤²à¤¨à¤¾ करें" + +#: directorymergewindow.cpp:2889 +#, fuzzy +msgid "Merge Explicitly Selected Files" +msgstr "चयनित फ़ाइल की तà¥à¤²à¤¨à¤¾ करें" + +#: directorymergewindow.cpp:2891 directorymergewindow.cpp:2898 +msgid "Do Nothing" +msgstr "कà¥à¤› नहीं करें" + +#: directorymergewindow.cpp:2892 +msgid "A" +msgstr "अ" + +#: directorymergewindow.cpp:2893 +msgid "B" +msgstr "ब" + +#: directorymergewindow.cpp:2894 +msgid "C" +msgstr "स" + +#: directorymergewindow.cpp:2903 +msgid "Delete A && B" +msgstr "अ तथा ब को मिटाà¤à¤" + +#: directorymergewindow.cpp:2906 +msgid "Merge to A && B" +msgstr "अ तथा ब में समà¥à¤®à¤¿à¤²à¤¿à¤¤ करें" + +#: fileaccess.cpp:595 +msgid "" +"While trying to make a backup, deleting an older backup failed. \n" +"Filename: " +msgstr "" + +#: fileaccess.cpp:602 +msgid "" +"While trying to make a backup, renaming failed. \n" +"Filenames: " +msgstr "" + +#: fileaccess.cpp:624 +#, c-format +msgid "Getting file status: %1" +msgstr "फ़ाइल सà¥à¤¥à¤¿à¤¤à¤¿ पà¥à¤°à¤¾à¤ªà¥à¤¤ की जा रही है: %1" + +#: fileaccess.cpp:667 +#, c-format +msgid "Reading file: %1" +msgstr "फ़ाइल पढ़ा जा रहा है: %1" + +#: fileaccess.cpp:703 +#, c-format +msgid "Writing file: %1" +msgstr "फ़ाइल: %1 लिखा जा रहा है" + +#: fileaccess.cpp:731 +msgid "Out of memory" +msgstr "मेमोरी कम पड़ गई" + +#: fileaccess.cpp:766 +#, c-format +msgid "Making directory: %1" +msgstr "डिरेकà¥à¤Ÿà¥à¤°à¥€ बनाया जा रहा है: %1" + +#: fileaccess.cpp:786 +#, c-format +msgid "Removing directory: %1" +msgstr "डिरेकà¥à¤Ÿà¥à¤°à¥€ मिटाया जा रहा है: %1" + +#: fileaccess.cpp:801 +#, c-format +msgid "Removing file: %1" +msgstr "फ़ाइल मिटाया जा रहा है: %1" + +#: fileaccess.cpp:817 +msgid "Creating symbolic link: %1 -> %2" +msgstr "सिंबालिक कड़ी बनाई जा रही है: %1 -> %2" + +#: fileaccess.cpp:843 +msgid "Renaming file: %1 -> %2" +msgstr "फ़ाइलनाम बदला जा रहा है: %1 -> %2" + +#: fileaccess.cpp:879 +msgid "Copying file: %1 -> %2" +msgstr "फ़ाइल नक़ल की जा रही है: %1 -> %2" + +#: fileaccess.cpp:893 +#, c-format +msgid "" +"Error during file copy operation: Opening file for reading failed. Filename: %1" +msgstr "" +"फ़ाइल की नक़ल करने की कà¥à¤°à¤¿à¤¯à¤¾ के दौरान तà¥à¤°à¥à¤Ÿà¤¿: फ़ाइल को पढ़ने के लिठखोलने में " +"असफल. फ़ाइल-नाम: %1" + +#: fileaccess.cpp:899 +#, c-format +msgid "" +"Error during file copy operation: Opening file for writing failed. Filename: %1" +msgstr "" +"फ़ाइल की नक़ल करने की कà¥à¤°à¤¿à¤¯à¤¾ के दौरान तà¥à¤°à¥à¤Ÿà¤¿: फ़ाइल को लिखने के लिठखोलने में " +"असफल. फ़ाइल-नाम: %1" + +#: fileaccess.cpp:914 +#, c-format +msgid "Error during file copy operation: Reading failed. Filename: %1" +msgstr "" +"फ़ाइल की नक़ल करने की कà¥à¤°à¤¿à¤¯à¤¾ के दौरान तà¥à¤°à¥à¤Ÿà¤¿: पढ़ने में असफल. फ़ाइल-नाम: %1" + +#: fileaccess.cpp:923 +#, c-format +msgid "Error during file copy operation: Writing failed. Filename: %1" +msgstr "" +"फ़ाइल की नक़ल करने की कà¥à¤°à¤¿à¤¯à¤¾ के दौरान तà¥à¤°à¥à¤Ÿà¤¿: लिखने में असफल. फ़ाइल-नाम: %1" + +#: fileaccess.cpp:1219 +msgid "Reading directory: " +msgstr "डिरेकà¥à¤Ÿà¥à¤°à¥€ को पढ़ा जा रहा है:" + +#: fileaccess.cpp:1348 +#, c-format +msgid "Listing directory: %1" +msgstr "डिरेकà¥à¤Ÿà¥à¤°à¥€ सूचीबदà¥à¤§ की जा रही है: %1" + +#: kdiff3.cpp:142 +#, fuzzy +msgid "Current Configuration:" +msgstr "मौजूदा वसà¥à¤¤à¥ सिंक ऑपरेशन" + +#: kdiff3.cpp:147 +#, fuzzy +msgid "Config Option Error:" +msgstr "फ़ाइल खोलने में तà¥à¤°à¥à¤Ÿà¤¿" + +#: kdiff3.cpp:187 +msgid "Option --auto used, but no output file specified." +msgstr "" +"विकलà¥à¤ª --auto का उपयोग किया गया, परंतॠकोई आउटपà¥à¤Ÿ फ़ाइल निरà¥à¤¦à¤¿à¤·à¥à¤Ÿ नहीं." + +#: kdiff3.cpp:323 +msgid "Option --auto ignored for directory comparison." +msgstr "विकलà¥à¤ª --auto को डिरेकà¥à¤Ÿà¥à¤°à¥€ तà¥à¤²à¤¨à¤¾ करने में छोड़ा गया." + +#: kdiff3.cpp:359 +msgid "Saving failed." +msgstr "सहेजने में असफल." + +#: kdiff3.cpp:386 pdiff.cpp:1041 pdiff.cpp:1112 +msgid "Opening of these files failed:" +msgstr "इन फ़ाइलों को खोलना असफल:" + +#: kdiff3.cpp:395 +msgid "File Open Error" +msgstr "फ़ाइल खोलने में तà¥à¤°à¥à¤Ÿà¤¿" + +#: kdiff3.cpp:418 +msgid "Opens documents for comparison..." +msgstr "दसà¥à¤¤à¤¾à¤µà¥‡à¤œà¤¼à¥‹à¤‚ को तà¥à¤²à¤¨à¤¾ के लिठखोलता है..." + +#: kdiff3.cpp:423 +msgid "Saves the merge result. All conflicts must be solved!" +msgstr "" + +#: kdiff3.cpp:425 +msgid "Saves the current document as..." +msgstr "मौजूदा दसà¥à¤¤à¤¾à¤µà¥‡à¤œà¤¼ à¤à¤¸à¥‡ सहेजता है..." + +#: kdiff3.cpp:427 +msgid "Print the differences" +msgstr "" + +#: kdiff3.cpp:429 +msgid "Quits the application" +msgstr "अनà¥à¤ªà¥à¤°à¤¯à¥‹à¤— से बाहर होता है" + +#: kdiff3.cpp:431 +msgid "Cuts the selected section and puts it to the clipboard" +msgstr "" + +#: kdiff3.cpp:433 +msgid "Copies the selected section to the clipboard" +msgstr "चà¥à¤¨à¥‡ हà¥à¤ अंश को कà¥à¤²à¤¿à¤ªà¤¬à¥‹à¤°à¥à¤¡ पर नक़ल करता है" + +#: kdiff3.cpp:435 +msgid "Pastes the clipboard contents to actual position" +msgstr "कà¥à¤²à¤¿à¤ªà¤¬à¥‹à¤°à¥à¤¡ अवयवों को सही सà¥à¤¥à¤¾à¤¨ पर चिपकाता है" + +#: kdiff3.cpp:437 +msgid "Select everything in current window" +msgstr "" + +#: kdiff3.cpp:439 +msgid "Search for a string" +msgstr "सà¥à¤Ÿà¥à¤°à¤¿à¤‚ग के लिठढूंढें" + +#: kdiff3.cpp:441 +msgid "Search again for the string" +msgstr "सà¥à¤Ÿà¥à¤°à¤¿à¤‚ग के लिठफिर से ढूंढें" + +#: kdiff3.cpp:443 +msgid "Enables/disables the toolbar" +msgstr "औज़ार-पटà¥à¤Ÿà¥€ सकà¥à¤·à¤®/अकà¥à¤·à¤® करें" + +#: kdiff3.cpp:445 +msgid "Enables/disables the statusbar" +msgstr "सà¥à¤¥à¤¿à¤¤à¤¿-पटà¥à¤Ÿà¥€ सकà¥à¤·à¤®/अकà¥à¤·à¤® करें" + +#: kdiff3.cpp:449 +msgid "Configure KDiff3..." +msgstr "के-डिफ3 को कॉनà¥à¤«à¤¼à¤¿à¤—र करें..." + +#: kdiff3.cpp:470 +msgid "Go to Current Delta" +msgstr "मौज़ूदा डेलà¥à¤Ÿà¤¾ में जाà¤à¤" + +#: kdiff3.cpp:471 +msgid "Go to First Delta" +msgstr "पà¥à¤°à¤¥à¤® डेलà¥à¤Ÿà¤¾ में जाà¤à¤" + +#: kdiff3.cpp:472 +msgid "Go to Last Delta" +msgstr "अंतिम डेलà¥à¤Ÿà¤¾ में जाà¤à¤" + +#: kdiff3.cpp:473 +msgid "(Skips white space differences when \"Show White Space\" is disabled.)" +msgstr "" + +#: kdiff3.cpp:474 +msgid "" +"(Does not skip white space differences even when \"Show White Space\" is " +"disabled.)" +msgstr "" + +#: kdiff3.cpp:475 +msgid "Go to Previous Delta" +msgstr "पिछला डेलà¥à¤Ÿà¤¾ में जाà¤à¤" + +#: kdiff3.cpp:477 +msgid "Go to Next Delta" +msgstr "अगला डेलà¥à¤Ÿà¤¾ में जाà¤à¤" + +#: kdiff3.cpp:479 +msgid "Go to Previous Conflict" +msgstr "पिछले परसà¥à¤ªà¤° विरोधों में जाà¤à¤" + +#: kdiff3.cpp:481 +msgid "Go to Next Conflict" +msgstr "अगले परसà¥à¤ªà¤° विरोधों में जाà¤à¤" + +#: kdiff3.cpp:483 +msgid "Go to Previous Unsolved Conflict" +msgstr "पिछले समाधान-रहित परसà¥à¤ªà¤° विरोधों में जाà¤à¤" + +#: kdiff3.cpp:485 +msgid "Go to Next Unsolved Conflict" +msgstr "अगले समाधान-रहित परसà¥à¤ªà¤° विरोधों में जाà¤à¤" + +#: kdiff3.cpp:487 +msgid "Select Line(s) From A" +msgstr "अ से लाइन चà¥à¤¨à¥‡à¤‚" + +#: kdiff3.cpp:488 +msgid "Select Line(s) From B" +msgstr "ब से लाइन चà¥à¤¨à¥‡à¤‚" + +#: kdiff3.cpp:489 +msgid "Select Line(s) From C" +msgstr "स से लाइन चà¥à¤¨à¥‡à¤‚" + +#: kdiff3.cpp:490 +msgid "Automatically Go to Next Unsolved Conflict After Source Selection" +msgstr "" + +#: kdiff3.cpp:492 +msgid "Show Space && Tabulator Characters for Differences" +msgstr "भिनà¥à¤¨à¤¤à¤¾à¤“ं के लिठटेबà¥à¤²à¥‡à¤Ÿà¤° अकà¥à¤·à¤° तथा जगह दिखाà¤à¤ " + +#: kdiff3.cpp:493 +msgid "Show White Space" +msgstr "सफेद जगह दिखाà¤à¤" + +#: kdiff3.cpp:495 +msgid "Show Line Numbers" +msgstr "पंकà¥à¤¤à¤¿ कà¥à¤°à¤®à¤¾à¤‚क दिखाà¤à¤" + +#: kdiff3.cpp:496 +msgid "Choose A Everywhere" +msgstr "सभी जगह अ चà¥à¤¨à¥‡à¤‚" + +#: kdiff3.cpp:497 +msgid "Choose B Everywhere" +msgstr "सभी जगह ब चà¥à¤¨à¥‡à¤‚" + +#: kdiff3.cpp:498 +msgid "Choose C Everywhere" +msgstr "सभी जगह स चà¥à¤¨à¥‡à¤‚" + +#: kdiff3.cpp:499 +msgid "Choose A for All Unsolved Conflicts" +msgstr "सभी समाधान-रहित परसà¥à¤ªà¤° विरोधों के लिठअ चà¥à¤¨à¥‡à¤‚" + +#: kdiff3.cpp:500 +msgid "Choose B for All Unsolved Conflicts" +msgstr "सभी समाधान-रहित परसà¥à¤ªà¤° विरोधों के लिठब चà¥à¤¨à¥‡à¤‚" + +#: kdiff3.cpp:501 +msgid "Choose C for All Unsolved Conflicts" +msgstr "सभी समाधान-रहित परसà¥à¤ªà¤° विरोधों के लिठस चà¥à¤¨à¥‡à¤‚" + +#: kdiff3.cpp:502 +msgid "Choose A for All Unsolved Whitespace Conflicts" +msgstr "सभी समाधान-रहित सफेद-जगह परसà¥à¤ªà¤° विरोधों के लिठअ चà¥à¤¨à¥‡à¤‚" + +#: kdiff3.cpp:503 +msgid "Choose B for All Unsolved Whitespace Conflicts" +msgstr "सभी समाधान-रहित सफेद-जगह परसà¥à¤ªà¤° विरोधों के लिठब चà¥à¤¨à¥‡à¤‚" + +#: kdiff3.cpp:504 +msgid "Choose C for All Unsolved Whitespace Conflicts" +msgstr "सभी समाधान-रहित सफेद-जगह परसà¥à¤ªà¤° विरोधों के लिठस चà¥à¤¨à¥‡à¤‚" + +#: kdiff3.cpp:505 +msgid "Automatically Solve Simple Conflicts" +msgstr "सादा परसà¥à¤ªà¤° विरोधों का सà¥à¤µà¤šà¤¾à¤²à¤¿à¤¤ समाधान करें" + +#: kdiff3.cpp:506 +msgid "Set Deltas to Conflicts" +msgstr "डेलà¥à¤Ÿà¤¾ को परसà¥à¤ªà¤° विरोधों में सेट करें" + +#: kdiff3.cpp:507 +msgid "Run Regular Expression Auto Merge" +msgstr "" + +#: kdiff3.cpp:508 +#, fuzzy +msgid "Automatically Solve History Conflicts" +msgstr "सादा परसà¥à¤ªà¤° विरोधों का सà¥à¤µà¤šà¤¾à¤²à¤¿à¤¤ समाधान करें" + +#: kdiff3.cpp:509 +msgid "Split Diff At Selection" +msgstr "" + +#: kdiff3.cpp:510 +#, fuzzy +msgid "Join Selected Diffs" +msgstr "चयनित फ़ाइल की तà¥à¤²à¤¨à¤¾ करें" + +#: kdiff3.cpp:512 +msgid "Show Window A" +msgstr "विंडो अ दिखाà¤à¤" + +#: kdiff3.cpp:513 +msgid "Show Window B" +msgstr "विंडो ब दिखाà¤à¤" + +#: kdiff3.cpp:514 +msgid "Show Window C" +msgstr "विंडो स दिखाà¤à¤" + +#: kdiff3.cpp:515 kdiff3.cpp:526 +msgid "Focus Next Window" +msgstr "अगले विंडो पर फोकस" + +#: kdiff3.cpp:517 +msgid "Normal Overview" +msgstr "सामानà¥à¤¯ ओवरवà¥à¤¯à¥‚" + +#: kdiff3.cpp:518 +msgid "A vs. B Overview" +msgstr "अ वि. ब ओवरवà¥à¤¯à¥‚" + +#: kdiff3.cpp:519 +msgid "A vs. C Overview" +msgstr "अ वि. स ओवरवà¥à¤¯à¥‚" + +#: kdiff3.cpp:520 +msgid "B vs. C Overview" +msgstr "ब वि. स ओवरवà¥à¤¯à¥‚" + +#: kdiff3.cpp:521 +msgid "Word Wrap Diff Windows" +msgstr "वरà¥à¤¡ वà¥à¤°à¥‡à¤ª डिफ विंडोज़" + +#: kdiff3.cpp:522 +msgid "Add Manual Diff Alignment" +msgstr "" + +#: kdiff3.cpp:523 +msgid "Clear All Manual Diff Alignments" +msgstr "" + +#: kdiff3.cpp:528 +msgid "Focus Prev Window" +msgstr "पिछले विंडो में फोकस" + +#: kdiff3.cpp:529 +msgid "Toggle Split Orientation" +msgstr "अलग करने की दिशा टॉगल करें" + +#: kdiff3.cpp:531 +msgid "Dir && Text Split Screen View" +msgstr "डिरेकà¥à¤Ÿà¥à¤°à¥€ तथा पाठ सà¥à¤ªà¥à¤²à¤¿à¤Ÿ सà¥à¤•à¥à¤°à¥€à¤¨ दृशà¥à¤¯" + +#: kdiff3.cpp:533 +msgid "Toggle Between Dir && Text View" +msgstr "डिरेकà¥à¤Ÿà¥à¤°à¥€ तथा पाठ दृशà¥à¤¯ के बीच टॉगल करें" + +#: kdiff3.cpp:582 pdiff.cpp:1712 +msgid "The merge result hasn't been saved." +msgstr "समà¥à¤®à¤¿à¤²à¤¿à¤¤ करने का परिणाम अभी सहेजा नहीं गया." + +#: kdiff3.cpp:583 +msgid "Save && Quit" +msgstr "सहेजें तथा बाहर हों" + +#: kdiff3.cpp:583 +msgid "Quit Without Saving" +msgstr "सहेजे बगैर बाहर हों" + +#: kdiff3.cpp:591 pdiff.cpp:1721 +msgid "Saving the merge result failed." +msgstr "समà¥à¤®à¤¿à¤²à¤¿à¤¤ किया जाने का परिणाम सहेजना असफल." + +#: kdiff3.cpp:602 pdiff.cpp:978 +msgid "" +"You are currently doing a directory merge. Are you sure, you want to abort?" +msgstr "" + +#: kdiff3.cpp:625 +msgid "Saving file..." +msgstr "फ़ाइल सहेजा जा रहा है..." + +#: kdiff3.cpp:642 +msgid "Saving file with a new filename..." +msgstr "फ़ाइल नठफ़ाइलनाम के साथ सहेजा जा रहा है..." + +#: kdiff3.cpp:732 +#, fuzzy +msgid "Printing..." +msgstr "बाहर हो रहे हैं..." + +#: kdiff3.cpp:738 kdiff3.cpp:900 +msgid "Printing aborted." +msgstr "" + +#: kdiff3.cpp:870 +msgid "Selection" +msgstr "" + +#: kdiff3.cpp:896 +#, fuzzy +msgid "Printing completed." +msgstr "समà¥à¤®à¤¿à¤²à¤¿à¤¤ करने की कà¥à¤°à¤¿à¤¯à¤¾ पूरी हà¥à¤ˆ." + +#: kdiff3.cpp:906 +msgid "Exiting..." +msgstr "बाहर हो रहे हैं..." + +#: kdiff3.cpp:918 +msgid "Toggling toolbar..." +msgstr "टूलबार टॉगल किया जा रहा है..." + +#: kdiff3.cpp:939 +msgid "Toggle the statusbar..." +msgstr "सà¥à¤¥à¤¿à¤¤à¤¿ पटà¥à¤Ÿà¥€ टॉगल करें..." + +#: kdiff3_part.cpp:155 kdiff3_part.cpp:224 +msgid "Couldn't find files for comparison." +msgstr "तà¥à¤²à¤¨à¤¾ के लिठफ़ाइलों को नहीं ढूंढ सका" + +#: kdiff3_part.cpp:291 +msgid "KDiff3Part" +msgstr "के-डिफ3पारà¥à¤Ÿ" + +#: kdiff3_shell.cpp:78 +msgid "" +"Could not find our part!\n" +"This usually happens due to an installation problem. Please read the " +"README-file in the source package for details." +msgstr "" + +#: main.cpp:35 +msgid "Tool for Comparison and Merge of Files and Directories" +msgstr "" + +#: main.cpp:40 +msgid "Merge the input." +msgstr "इनपà¥à¤Ÿ समà¥à¤®à¤¿à¤²à¤¿à¤¤ करें." + +#: main.cpp:42 +msgid "Explicit base file. For compatibility with certain tools." +msgstr "" + +#: main.cpp:44 +msgid "Output file. Implies -m. E.g.: -o newfile.txt" +msgstr "आउटपà¥à¤Ÿ फ़ाइल. इमà¥à¤ªà¥à¤²à¤¾à¤‡à¤¸ -m. उदा.: -o newfile.txt" + +#: main.cpp:45 +msgid "Output file, again. (For compatibility with certain tools.)" +msgstr "आउटपà¥à¤Ÿ फ़ाइल, फिर से. (कà¥à¤› औज़ारों के साथ कमà¥à¤ªà¥‡à¤Ÿà¤¿à¤¬à¤¿à¤²à¤¿à¤Ÿà¥€ के लिà¤.)" + +#: main.cpp:46 +msgid "No GUI if all conflicts are auto-solvable. (Needs -o file)" +msgstr "" + +#: main.cpp:47 +msgid "Don't solve conflicts automatically. (For compatibility...)" +msgstr "" + +#: main.cpp:48 +msgid "Visible name replacement for input file 1 (base)." +msgstr "इनपà¥à¤Ÿ फ़ाइल 1 (आधार) के लिठविजिबल नाम रीपà¥à¤²à¥‡à¤¸à¤®à¥‡à¤‚ट." + +#: main.cpp:49 +msgid "Visible name replacement for input file 2." +msgstr "इनपà¥à¤Ÿ फ़ाइल 2 के लिठविजिबल नाम रीपà¥à¤²à¥‡à¤¸à¤®à¥‡à¤‚ट." + +#: main.cpp:50 +msgid "Visible name replacement for input file 3." +msgstr "इनपà¥à¤Ÿ फ़ाइल 3 के लिठविजिबल नाम रीपà¥à¤²à¥‡à¤¸à¤®à¥‡à¤‚ट." + +#: main.cpp:52 +msgid "Alternative visible name replacement. Supply this once for every input." +msgstr "" + +#: main.cpp:53 +msgid "" +"Override a config setting. Use once for every setting. E.g.: --cs " +"\"AutoAdvance=1\"" +msgstr "" + +#: main.cpp:54 +msgid "Show list of config settings and current values." +msgstr "" + +#: main.cpp:55 +#, fuzzy +msgid "Use a different config file." +msgstr "भिनà¥à¤¨ फ़ाइलों की संखà¥à¤¯à¤¾:" + +#: main.cpp:59 +msgid "file1 to open (base, if not specified via --base)" +msgstr "खोलने के लिठफ़ाइल1 (आधार, यदि इसके दà¥à¤µà¤¾à¤°à¤¾ निरà¥à¤¦à¤¿à¤·à¥à¤Ÿ नहीं --base)" + +#: main.cpp:60 +msgid "file2 to open" +msgstr "खोलने के लिठफ़ाइल2" + +#: main.cpp:61 +msgid "file3 to open" +msgstr "खोलने के लिठफ़ाइल3" + +#: main.cpp:93 +msgid "Ignored. (User defined.)" +msgstr "" + +#. i18n: file kdiff3_part.rc line 16 +#: main.cpp:173 rc.cpp:9 +#, no-c-format +msgid "KDiff3" +msgstr "के-डिफ3" + +#: main.cpp:186 +msgid "+ Many thanks to those who reported bugs and contributed ideas!" +msgstr "" + +#: mergeresultwindow.cpp:136 mergeresultwindow.cpp:939 +#: mergeresultwindow.cpp:953 mergeresultwindow.cpp:965 +#: mergeresultwindow.cpp:977 +#, fuzzy +msgid "Number of remaining unsolved conflicts: %1 (of which %2 are whitespace)" +msgstr "बचे हà¥à¤ समाधान-रहित विरोधाभासों की संखà¥à¤¯à¤¾: %1" + +#: mergeresultwindow.cpp:285 +msgid "" +"The output has been modified.\n" +"If you continue your changes will be lost." +msgstr "" +"आउटपà¥à¤Ÿ परिवरà¥à¤§à¤¿à¤¤ किया जा चà¥à¤•à¤¾ है.\n" +"यदि आप जारी रखते हैं तो आपके परिवरà¥à¤¤à¤¨ खो जाà¤à¤à¤—े." + +#: mergeresultwindow.cpp:797 pdiff.cpp:511 +msgid "All input files are binary equal." +msgstr "सभी इनपà¥à¤Ÿ फ़ाइलें बाइनरी समान हैं." + +#: mergeresultwindow.cpp:799 +msgid "All input files contain the same text." +msgstr "सभी इनपà¥à¤Ÿ फ़ाइलें à¤à¤• ही पाठ रखे हैं." + +#: mergeresultwindow.cpp:801 +msgid "" +"Files A and B are binary equal.\n" +msgstr "" +"फ़ाइलें अ तथा ब बाइनरी समान हैं.\n" + +#: mergeresultwindow.cpp:802 +msgid "" +"Files A and B have equal text. \n" +msgstr "" +"फ़ाइलें अ तथा ब में पाठ समान हैं.\n" + +#: mergeresultwindow.cpp:803 +msgid "" +"Files A and C are binary equal.\n" +msgstr "" +"फ़ाइलें अ तथा स बाइनरी समान हैं.\n" + +#: mergeresultwindow.cpp:804 +msgid "" +"Files A and C have equal text. \n" +msgstr "" +"फ़ाइलें अ तथा स में पाठ समान हैं.\n" + +#: mergeresultwindow.cpp:805 +msgid "" +"Files B and C are binary equal.\n" +msgstr "" +"फ़ाइलें ब तथा स बाइनरी समान हैं.\n" + +#: mergeresultwindow.cpp:806 +msgid "" +"Files B and C have equal text. \n" +msgstr "" +"फ़ाइलें ब तथा स में पाठ समान हैं.\n" + +#: mergeresultwindow.cpp:812 +msgid "Total number of conflicts: " +msgstr "परसà¥à¤ªà¤° विरोधों की कà¥à¤² संखà¥à¤¯à¤¾:" + +#: mergeresultwindow.cpp:813 +msgid "" +"\n" +"Nr of automatically solved conflicts: " +msgstr "" +"\n" +"सà¥à¤µà¤šà¤¾à¤²à¤¿à¤¤ समाधान किठविरोधाभासों की संखà¥à¤¯à¤¾: " + +#: mergeresultwindow.cpp:814 +msgid "" +"\n" +"Nr of unsolved conflicts: " +msgstr "" +"\n" +"समाधान-रहित विरोधाभासों की संखà¥à¤¯à¤¾: " + +#: mergeresultwindow.cpp:816 +msgid "Conflicts" +msgstr "परसà¥à¤ªà¤° विरोध" + +#: mergeresultwindow.cpp:1652 +msgid "" +msgstr "<कोई सà¥à¤°à¥‹à¤¤ पंकà¥à¤¤à¤¿ नहीं>" + +#: mergeresultwindow.cpp:1660 +#, fuzzy +msgid "" +msgstr "<विरोधाभास समà¥à¤®à¤¿à¤²à¤¿à¤¤ करें>" + +#: mergeresultwindow.cpp:1662 mergeresultwindow.cpp:2427 +msgid "" +msgstr "<विरोधाभास समà¥à¤®à¤¿à¤²à¤¿à¤¤ करें>" + +#: mergeresultwindow.cpp:2635 +msgid "" +"Not all conflicts are solved yet.\n" +"File not saved.\n" +msgstr "" +"अब तक सभी विरोधाभासों का समाधान नहीं किया गया है.\n" +"फ़ाइल सहेजा नहीं गया.\n" + +#: mergeresultwindow.cpp:2637 +msgid "Conflicts Left" +msgstr "विरोधाभास बायाठ" + +#: mergeresultwindow.cpp:2649 +msgid "" +"\n" +"\n" +"Creating backup failed. File not saved." +msgstr "" + +#: mergeresultwindow.cpp:2649 mergeresultwindow.cpp:2689 +msgid "File Save Error" +msgstr "फ़ाइल सहेजने में तà¥à¤°à¥à¤Ÿà¤¿" + +#: mergeresultwindow.cpp:2689 +msgid "Error while writing." +msgstr "लिखने के दौरान तà¥à¤°à¥à¤Ÿà¤¿." + +#: mergeresultwindow.cpp:3020 +msgid "Output" +msgstr "आउटपà¥à¤Ÿ" + +#: mergeresultwindow.cpp:3032 mergeresultwindow.cpp:3139 +msgid "[Modified]" +msgstr "[परिवरà¥à¤§à¤¿à¤¤]" + +#: mergeresultwindow.cpp:3039 +msgid "Encoding for saving" +msgstr "" + +#: mergeresultwindow.cpp:3075 mergeresultwindow.cpp:3081 +#: mergeresultwindow.cpp:3087 +msgid "Codec from" +msgstr "" + +#: optiondialog.cpp:362 +msgid "Unicode, 8 bit" +msgstr "" + +#: optiondialog.cpp:363 +msgid "Unicode" +msgstr "" + +#: optiondialog.cpp:364 +msgid "Latin1" +msgstr "" + +#: optiondialog.cpp:383 +msgid "Change this if non-ASCII characters are not displayed correctly." +msgstr "" + +#: optiondialog.cpp:510 +msgid "Editor & Diff Output Font" +msgstr "संपादक तथा डिफ़ आउटपà¥à¤Ÿ फ़ॉनà¥à¤Ÿ" + +#: optiondialog.cpp:531 +msgid "Italic font for deltas" +msgstr "डेलà¥à¤Ÿà¤¾à¤œà¤¼ के लिठइटैलिक फ़ॉनà¥à¤Ÿ" + +#: optiondialog.cpp:534 +msgid "" +"Selects the italic version of the font for differences.\n" +"If the font doesn't support italic characters, then this does nothing." +msgstr "" + +#: optiondialog.cpp:542 +msgid "Color" +msgstr "रंग" + +#: optiondialog.cpp:542 +#, fuzzy +msgid "Colors Settings" +msgstr "कà¥à¤·à¥‡à¤¤à¥à¤°à¥€à¤¯ विनà¥à¤¯à¤¾à¤¸" + +#: optiondialog.cpp:556 +msgid "Editor and Diff Views:" +msgstr "" + +#: optiondialog.cpp:564 +msgid "Foreground color:" +msgstr "अगà¥à¤°à¤­à¥‚मि का रंगः" + +#: optiondialog.cpp:570 +msgid "Background color:" +msgstr "पृषà¥à¤ à¤­à¥‚मि का रंगः" + +#: optiondialog.cpp:578 +msgid "Diff background color:" +msgstr "डिफ पृषà¥à¤ à¤­à¥‚मि रंगः" + +#: optiondialog.cpp:585 +msgid "Color A:" +msgstr "रंग अ:" + +#: optiondialog.cpp:592 +msgid "Color B:" +msgstr "रंग ब:" + +#: optiondialog.cpp:599 +msgid "Color C:" +msgstr "रंग स:" + +#: optiondialog.cpp:605 +msgid "Conflict color:" +msgstr "विरोधाभास के लिठरंग:" + +#: optiondialog.cpp:612 +msgid "Current range background color:" +msgstr "वरà¥à¤¤à¤®à¤¾à¤¨ सीमा पृषà¥à¤ à¤­à¥‚मि रंग:" + +#: optiondialog.cpp:619 +msgid "Current range diff background color:" +msgstr "वरà¥à¤¤à¤®à¤¾à¤¨ सीमा डिफ पृषà¥à¤ à¤­à¥‚मि रंग:" + +#: optiondialog.cpp:625 +msgid "Color for manually aligned difference ranges:" +msgstr "" + +#: optiondialog.cpp:630 +#, fuzzy +msgid "Directory Comparison View:" +msgstr "डिरेकà¥à¤Ÿà¥à¤°à¥€ तà¥à¤²à¤¨à¤¾ सà¥à¤¥à¤¿à¤¤à¤¿" + +#: optiondialog.cpp:636 +msgid "Newest file color:" +msgstr "" + +#: optiondialog.cpp:639 +msgid "" +"Changing this color will only be effective when starting the next directory " +"comparison." +msgstr "" + +#: optiondialog.cpp:644 +msgid "Oldest file color:" +msgstr "" + +#: optiondialog.cpp:651 +msgid "Middle age file color:" +msgstr "" + +#: optiondialog.cpp:658 +msgid "Color for missing files:" +msgstr "" + +#: optiondialog.cpp:670 +msgid "Editor" +msgstr "संपादक" + +#: optiondialog.cpp:670 +msgid "Editor Behavior" +msgstr "संपादक वà¥à¤¯à¤µà¤¹à¤¾à¤°" + +#: optiondialog.cpp:680 +msgid "Tab inserts spaces" +msgstr "टैब जगह पà¥à¤°à¤µà¤¿à¤·à¥à¤Ÿ करता है" + +#: optiondialog.cpp:683 +msgid "" +"On: Pressing tab generates the appropriate number of spaces.\n" +"Off: A Tab-character will be inserted." +msgstr "" + +#: optiondialog.cpp:689 +msgid "Tab size:" +msgstr "टैब आकारः" + +#: optiondialog.cpp:694 +msgid "Auto indentation" +msgstr "सà¥à¤µà¤šà¤¾à¤²à¤¿à¤¤ हाशिया छोड़ना" + +#: optiondialog.cpp:697 +msgid "" +"On: The indentation of the previous line is used for a new line.\n" +msgstr "" + +#: optiondialog.cpp:701 +msgid "Auto copy selection" +msgstr "सà¥à¤µà¤šà¤¾à¤²à¤¿à¤¤ नक़ल चयन" + +#: optiondialog.cpp:704 +msgid "" +"On: Any selection is immediately written to the clipboard.\n" +"Off: You must explicitely copy e.g. via Ctrl-C." +msgstr "" + +#: optiondialog.cpp:709 +msgid "Line end style:" +msgstr "पंकà¥à¤¤à¤¿ ख़तà¥à¤® होने की शैलीः" + +#: optiondialog.cpp:721 +msgid "" +"Sets the line endings for when an edited file is saved.\n" +"DOS/Windows: CR+LF; UNIX: LF; with CR=0D, LF=0A" +msgstr "" + +#: optiondialog.cpp:732 +#, fuzzy +msgid "Diff" +msgstr "के-डिफ3" + +#: optiondialog.cpp:732 +#, fuzzy +msgid "Diff Settings" +msgstr "डिफ तथा समà¥à¤®à¤¿à¤²à¤¿à¤¤ करने का विनà¥à¤¯à¤¾à¤¸" + +#: optiondialog.cpp:743 +msgid "Preserve carriage return" +msgstr "कैरिज रिटरà¥à¤¨ बनाठरखें" + +#: optiondialog.cpp:746 +msgid "" +"Show carriage return characters '\\r' if they exist.\n" +"Helps to compare files that were modified under different operating systems." +msgstr "" + +#: optiondialog.cpp:751 +msgid "Ignore numbers" +msgstr "संखà¥à¤¯à¤¾à¤“ं को अनदेखा करें" + +#: optiondialog.cpp:754 +msgid "" +"Ignore number characters during line matching phase. (Similar to Ignore white " +"space.)\n" +"Might help to compare files with numeric data." +msgstr "" + +#: optiondialog.cpp:759 +msgid "Ignore C/C++ comments" +msgstr "C/C++ कमेंटà¥à¤¸ को अनदेखा करें" + +#: optiondialog.cpp:761 +msgid "Treat C/C++ comments like white space." +msgstr "C/C++ कमेंटà¥à¤¸ को सफेद जगह के रूप में समà¤à¥‡à¤‚" + +#: optiondialog.cpp:765 +msgid "Ignore case" +msgstr "केस अनदेखा करें" + +#: optiondialog.cpp:768 +msgid "Treat case differences like white space changes. ('a'<=>'A')" +msgstr "केस डिफरेंसेस को सफेद जगह परिवरà¥à¤¤à¤¨ के रूप में समà¤à¥‡à¤‚. ('a'<=>'A')" + +#: optiondialog.cpp:772 +msgid "Preprocessor command:" +msgstr "पà¥à¤°à¥€-पà¥à¤°à¥‹à¤¸à¥‡à¤¸à¤° कमांड:" + +#: optiondialog.cpp:776 +msgid "User defined pre-processing. (See the docs for details.)" +msgstr "उपयोकà¥à¤¤à¤¾ पारिभाषित पà¥à¤°à¥€-पà¥à¤°à¥‹à¤¸à¥‡à¤¸à¤¿à¤‚ग. (विवरण के लिठदसà¥à¤¤à¤¾à¤µà¥‡à¤œà¤¼ देखें.)" + +#: optiondialog.cpp:779 +msgid "Line-matching preprocessor command:" +msgstr "लाइन-मैचिंग पà¥à¤°à¥€-पà¥à¤°à¥‹à¤¸à¥‡à¤¸à¤° कमांड:" + +#: optiondialog.cpp:783 +msgid "" +"This pre-processor is only used during line matching.\n" +"(See the docs for details.)" +msgstr "" + +#: optiondialog.cpp:786 +msgid "Try hard (slower)" +msgstr "गंभीर कोशिश करें (धीमा)" + +#: optiondialog.cpp:789 +msgid "" +"Enables the --minimal option for the external diff.\n" +"The analysis of big files will be much slower." +msgstr "" + +#: optiondialog.cpp:794 +msgid "Auto advance delay (ms):" +msgstr "सà¥à¤µà¤šà¤¾à¤²à¤¿à¤¤ à¤à¤¡à¤µà¤¾à¤¨à¥à¤¸ देरी (मि.से.):" + +#: optiondialog.cpp:799 +msgid "" +"When in Auto-Advance mode the result of the current selection is shown \n" +"for the specified time, before jumping to the next conflict. Range: 0-2000 ms" +msgstr "" + +#: optiondialog.cpp:809 +#, fuzzy +msgid "Merge Settings" +msgstr "डिफ तथा समà¥à¤®à¤¿à¤²à¤¿à¤¤ करने का विनà¥à¤¯à¤¾à¤¸" + +#: optiondialog.cpp:822 +msgid "White space 2-file merge default:" +msgstr "सफेद जगह 2-फ़ाइल समà¥à¤®à¤¿à¤²à¤¿à¤¤ डिफ़ॉलà¥à¤Ÿ:" + +#: optiondialog.cpp:826 optiondialog.cpp:839 +msgid "Manual Choice" +msgstr "हसà¥à¤¤à¤šà¤¾à¤²à¤¿à¤¤ चà¥à¤¨à¤¾à¤µ" + +#: optiondialog.cpp:830 optiondialog.cpp:844 +msgid "" +"Allow the merge algorithm to automatically select an input for white-space-only " +"changes." +msgstr "" + +#: optiondialog.cpp:835 +msgid "White space 3-file merge default:" +msgstr "सफेद जगह 3-फ़ाइल समà¥à¤®à¤¿à¤²à¤¿à¤¤ डिफ़ॉलà¥à¤Ÿ:" + +#: optiondialog.cpp:849 +msgid "Automatic Merge Regular Expression" +msgstr "" + +#: optiondialog.cpp:858 smalldialogs.cpp:397 +msgid "Auto merge regular expression:" +msgstr "" + +#: optiondialog.cpp:862 +msgid "" +"Regular expression for lines where KDiff3 should automatically choose one " +"source.\n" +"When a line with a conflict matches the regular expression then\n" +"- if available - C, otherwise B will be chosen." +msgstr "" + +#: optiondialog.cpp:868 +msgid "Run regular expression auto merge on merge start" +msgstr "" + +#: optiondialog.cpp:870 +msgid "" +"Run the merge for auto merge regular expressions\n" +"immediately when a merge starts.\n" +msgstr "" + +#: optiondialog.cpp:875 +msgid "Version Control History Merging" +msgstr "" + +#: optiondialog.cpp:884 smalldialogs.cpp:424 +msgid "History start regular expression:" +msgstr "" + +#: optiondialog.cpp:888 +msgid "" +"Regular expression for the start of the version control history entry.\n" +"Usually this line contains the \"$Log$\"-keyword.\n" +"Default value: \".*\\$Log.*\\$.*\"" +msgstr "" + +#: optiondialog.cpp:894 smalldialogs.cpp:453 +msgid "History entry start regular expression:" +msgstr "" + +#: optiondialog.cpp:906 +msgid "" +"A version control history entry consists of several lines.\n" +"Specify the regular expression to detect the first line (without the leading " +"comment).\n" +"Use parentheses to group the keys you want to use for sorting.\n" +"If left empty, then KDiff3 assumes that empty lines separate history entries.\n" +"See the documentation for details." +msgstr "" + +#: optiondialog.cpp:914 +msgid "History merge sorting" +msgstr "" + +#: optiondialog.cpp:916 +msgid "Sort version control history by a key." +msgstr "" + +#: optiondialog.cpp:926 +msgid "History entry start sort key order:" +msgstr "" + +#: optiondialog.cpp:930 +msgid "" +"Each parentheses used in the regular expression for the history start entry\n" +"groups a key that can be used for sorting.\n" +"Specify the list of keys (that are numbered in order of occurrence\n" +"starting with 1) using ',' as separator (e.g. \"4,5,6,1,2,3,7\").\n" +"If left empty, then no sorting will be done.\n" +"See the documentation for details." +msgstr "" + +#: optiondialog.cpp:941 +msgid "Merge version control history on merge start" +msgstr "" + +#: optiondialog.cpp:943 +msgid "Run version control history automerge on merge start." +msgstr "" + +#: optiondialog.cpp:947 +msgid "Test your regular expressions" +msgstr "" + +#: optiondialog.cpp:952 +msgid "Irrelevant merge command:" +msgstr "" + +#: optiondialog.cpp:956 +msgid "" +"If specified this script is run after automerge\n" +"when no other relevant changes were detected.\n" +"Called with the parameters: filename1 filename2 filename3" +msgstr "" + +#: optiondialog.cpp:966 +msgid "Directory Merge" +msgstr "डिरेकà¥à¤Ÿà¥à¤°à¥€ समà¥à¤®à¤¿à¤²à¤¿à¤¤ करें" + +#: optiondialog.cpp:975 +msgid "Recursive directories" +msgstr "डिरेकà¥à¤Ÿà¥à¤°à¥€à¤œà¤¼ रिकरà¥à¤¸à¤¿à¤µ करें" + +#: optiondialog.cpp:977 +msgid "Whether to analyze subdirectories or not." +msgstr "कà¥à¤¯à¤¾ सबडिरेकà¥à¤Ÿà¥à¤°à¥€à¤œà¤¼ को विशà¥à¤²à¥‡à¤·à¤£ करना है या नहीं. " + +#: optiondialog.cpp:979 +msgid "File pattern(s):" +msgstr "फ़ाइल पैटरà¥à¤¨:" + +#: optiondialog.cpp:984 +msgid "" +"Pattern(s) of files to be analyzed. \n" +"Wildcards: '*' and '?'\n" +"Several Patterns can be specified by using the separator: ';'" +msgstr "" + +#: optiondialog.cpp:990 +msgid "File-anti-pattern(s):" +msgstr "फ़ाइल-à¤à¤¨à¥à¤Ÿà¥€-पैटरà¥à¤¨:" + +#: optiondialog.cpp:995 +msgid "" +"Pattern(s) of files to be excluded from analysis. \n" +"Wildcards: '*' and '?'\n" +"Several Patterns can be specified by using the separator: ';'" +msgstr "" + +#: optiondialog.cpp:1001 +msgid "Dir-anti-pattern(s):" +msgstr "डिर-à¤à¤¨à¥à¤Ÿà¥€-पैटरà¥à¤¨:" + +#: optiondialog.cpp:1006 +msgid "" +"Pattern(s) of directories to be excluded from analysis. \n" +"Wildcards: '*' and '?'\n" +"Several Patterns can be specified by using the separator: ';'" +msgstr "" + +#: optiondialog.cpp:1012 +msgid "Use .cvsignore" +msgstr ".cvsignore का उपयोग करें" + +#: optiondialog.cpp:1015 +msgid "" +"Extends the antipattern to anything that would be ignored by CVS.\n" +"Via local \".cvsignore\"-files this can be directory specific." +msgstr "" + +#: optiondialog.cpp:1020 +msgid "Find hidden files and directories" +msgstr "छà¥à¤ªà¥€ फ़ाइलों तथा डिरेकà¥à¤Ÿà¥à¤°à¥€à¤œà¤¼ ढूंढें" + +#: optiondialog.cpp:1023 +msgid "Finds files and directories with the hidden attribute." +msgstr "हिडन à¤à¤Ÿà¥à¤°à¤¿à¤¬à¥à¤¯à¥‚ट वाली फ़ाइल तथा डिरेकà¥à¤Ÿà¥à¤°à¥€à¤œà¤¼ को ढूंढें." + +#: optiondialog.cpp:1025 +msgid "Finds files and directories starting with '.'." +msgstr "'.'. से पà¥à¤°à¤¾à¤°à¤‚भ हो रहे फ़ाइल तथा डिरेकà¥à¤Ÿà¥à¤°à¥€à¤œà¤¼ को ढूंढें" + +#: optiondialog.cpp:1029 +msgid "Follow file links" +msgstr "फ़ाइल कड़ियों का अनà¥à¤¸à¤°à¤£ करें" + +#: optiondialog.cpp:1032 +msgid "" +"On: Compare the file the link points to.\n" +"Off: Compare the links." +msgstr "" + +#: optiondialog.cpp:1037 +msgid "Follow directory links" +msgstr "डिरेकà¥à¤Ÿà¥à¤°à¥€ कड़ियों का अनà¥à¤¸à¤°à¤£ करें" + +#: optiondialog.cpp:1040 +msgid "" +"On: Compare the directory the link points to.\n" +"Off: Compare the links." +msgstr "" + +#: optiondialog.cpp:1056 +msgid "Case sensitive filename comparison" +msgstr "" + +#: optiondialog.cpp:1059 +msgid "" +"The directory comparison will compare files or directories when their names " +"match.\n" +"Set this option if the case of the names must match. (Default for Windows is " +"off, otherwise on.)" +msgstr "" + +#: optiondialog.cpp:1063 +msgid "File Comparison Mode" +msgstr "फ़ाइल तà¥à¤²à¤¨à¤¾ मोड" + +#: optiondialog.cpp:1067 +msgid "Binary comparison" +msgstr "बाइनरी तà¥à¤²à¤¨à¤¾" + +#: optiondialog.cpp:1068 +msgid "Binary comparison of each file. (Default)" +msgstr "पà¥à¤°à¤¤à¥à¤¯à¥‡à¤• फ़ाइल की बाइनरी तà¥à¤²à¤¨à¤¾. (डिफ़ॉलà¥à¤Ÿ)" + +#: optiondialog.cpp:1070 +msgid "Full analysis" +msgstr "पूरà¥à¤£ विशà¥à¤²à¥‡à¤·à¤£" + +#: optiondialog.cpp:1071 +msgid "" +"Do a full analysis and show statistics information in extra columns.\n" +"(Slower than a binary comparison, much slower for binary files.)" +msgstr "" + +#: optiondialog.cpp:1074 +msgid "Trust the modification date (unsafe)" +msgstr "परिवरà¥à¤§à¤¨ तारीख पर भरोसा करें (असà¥à¤°à¤•à¥à¤·à¤¿à¤¤)" + +#: optiondialog.cpp:1075 +msgid "" +"Assume that files are equal if the modification date and file length are " +"equal.\n" +"Useful for big directories or slow networks." +msgstr "" + +#: optiondialog.cpp:1078 +msgid "Trust the size (unsafe)" +msgstr "आकार पर भरोसा करें (असà¥à¤°à¤•à¥à¤·à¤¿à¤¤)" + +#: optiondialog.cpp:1079 +msgid "" +"Assume that files are equal if their file lengths are equal.\n" +"Useful for big directories or slow networks when the date is modified during " +"download." +msgstr "" + +#: optiondialog.cpp:1083 +msgid "Synchronize directories" +msgstr "डिरेकà¥à¤Ÿà¥à¤°à¥€à¤œà¤¼ सिंकà¥à¤°à¥‹à¤¨à¤¾à¤‡à¤œà¤¼ करें" + +#: optiondialog.cpp:1086 +msgid "" +"Offers to store files in both directories so that\n" +"both directories are the same afterwards.\n" +"Works only when comparing two directories without specifying a destination." +msgstr "" + +#: optiondialog.cpp:1092 +#, fuzzy +msgid "White space differences considered equal" +msgstr "सफेद जगह 3-फ़ाइल समà¥à¤®à¤¿à¤²à¤¿à¤¤ डिफ़ॉलà¥à¤Ÿ:" + +#: optiondialog.cpp:1095 +msgid "" +"If files differ only by white space consider them equal.\n" +"This is only active when full analysis is chosen." +msgstr "" + +#: optiondialog.cpp:1101 +msgid "Copy newer instead of merging (unsafe)" +msgstr "समà¥à¤®à¤¿à¤²à¤¿à¤¤ करने के बजाठनठकी नक़ल करें (असà¥à¤°à¤•à¥à¤·à¤¿à¤¤)" + +#: optiondialog.cpp:1104 +msgid "" +"Don't look inside, just take the newer file.\n" +"(Use this only if you know what you are doing!)\n" +"Only effective when comparing two directories." +msgstr "" + +#: optiondialog.cpp:1109 +msgid "Backup files (.orig)" +msgstr "बैकअप फ़ाइलें (.orig)" + +#: optiondialog.cpp:1112 +msgid "" +"When a file would be saved over an old file, then the old file\n" +"will be renamed with a '.orig'-extension instead of being deleted." +msgstr "" + +#: optiondialog.cpp:1176 +msgid "Regional Settings" +msgstr "कà¥à¤·à¥‡à¤¤à¥à¤°à¥€à¤¯ विनà¥à¤¯à¤¾à¤¸" + +#: optiondialog.cpp:1272 +msgid "Language (restart required)" +msgstr "भाषा (फिर से पà¥à¤°à¤¾à¤°à¤‚भ करना आवशà¥à¤¯à¤• है)" + +#: optiondialog.cpp:1304 +msgid "" +"Choose the language of the GUI-strings or \"Auto\".\n" +"For a change of language to take place, quit and restart KDiff3." +msgstr "" + +#: optiondialog.cpp:1322 +msgid "Use the same encoding for everything:" +msgstr "" + +#: optiondialog.cpp:1325 +msgid "" +"Enable this allows to change all encodings by changing the first only.\n" +"Disable this if different individual settings are needed." +msgstr "" + +#: optiondialog.cpp:1330 +#, fuzzy +msgid "Note: Local Encoding is " +msgstr "सà¥à¤¥à¤¾à¤¨à¥€à¤¯ à¤à¤¨à¤•à¥‹à¤¡à¤¿à¤‚ग इसà¥à¤¤à¥‡à¤®à¤¾à¤² करें" + +#: optiondialog.cpp:1334 +msgid "File Encoding for A:" +msgstr "" + +#: optiondialog.cpp:1340 +msgid "" +"If enabled then Unicode (UTF-16 or UTF-8) encoding will be detected.\n" +"If the file encoding is not detected then the selected encoding will be used as " +"fallback.\n" +"(Unicode detection depends on the first bytes of a file - the byte order mark " +"\"BOM\".)" +msgstr "" + +#: optiondialog.cpp:1344 optiondialog.cpp:1353 optiondialog.cpp:1362 +msgid "Auto Detect Unicode" +msgstr "" + +#: optiondialog.cpp:1349 +msgid "File Encoding for B:" +msgstr "" + +#: optiondialog.cpp:1358 +msgid "File Encoding for C:" +msgstr "" + +#: optiondialog.cpp:1367 +msgid "File Encoding for Merge Output and Saving:" +msgstr "" + +#: optiondialog.cpp:1371 +#, fuzzy +msgid "Auto Select" +msgstr "सà¥à¤µà¤šà¤¾à¤²à¤¿à¤¤ नक़ल चयन" + +#: optiondialog.cpp:1374 +msgid "" +"If enabled then the encoding from the input files is used.\n" +"In ambiguous cases a dialog will ask the user to choose the encoding for " +"saving." +msgstr "" + +#: optiondialog.cpp:1378 +msgid "File Encoding for Preprocessor Files:" +msgstr "" + +#: optiondialog.cpp:1389 +msgid "Right To Left Language" +msgstr "" + +#: optiondialog.cpp:1392 +msgid "" +"Some languages are read from right to left.\n" +"This setting will change the viewer and editor accordingly." +msgstr "" + +#: optiondialog.cpp:1402 +#, fuzzy +msgid "Integration" +msgstr "ऑपरेशन" + +#: optiondialog.cpp:1402 +#, fuzzy +msgid "Integration Settings" +msgstr "कà¥à¤·à¥‡à¤¤à¥à¤°à¥€à¤¯ विनà¥à¤¯à¤¾à¤¸" + +#: optiondialog.cpp:1412 +msgid "Command line options to ignore:" +msgstr "" + +#: optiondialog.cpp:1417 +msgid "" +"List of command line options that should be ignored when KDiff3 is used by " +"other tools.\n" +"Several values can be specified if separated via ';'\n" +"This will suppress the \"Unknown option\"-error." +msgstr "" + +#: optiondialog.cpp:1480 +msgid "" +"You selected a variable width font.\n" +"\n" +"Because this program doesn't handle variable width fonts\n" +"correctly, you might experience problems while editing.\n" +"\n" +"Do you want to continue or do you want to select another font." +msgstr "" + +#: optiondialog.cpp:1484 +msgid "Incompatible Font" +msgstr "फ़ॉनà¥à¤Ÿ असंगत है" + +#: optiondialog.cpp:1485 +msgid "Continue at Own Risk" +msgstr "अपने सà¥à¤µà¤¯à¤‚ के जोखिम पर जारी रखें" + +#: optiondialog.cpp:1485 +msgid "Select Another Font" +msgstr "अनà¥à¤¯ फ़ॉनà¥à¤Ÿ चà¥à¤¨à¥‡à¤‚" + +#: optiondialog.cpp:1521 +msgid "This resets all options. Not only those of the current topic." +msgstr "" +"यह सभी विकलà¥à¤ªà¥‹à¤‚ को रीसेट करता है. सिरà¥à¤« उनको ही नहीं जो मौजूदा विषय में हैं. " + +#: pdiff.cpp:258 +msgid "PreprocessorCmd: " +msgstr "पà¥à¤°à¥€-पà¥à¤°à¥‹à¤¸à¥‡à¤¸à¤°-कमांड:" + +#: pdiff.cpp:263 +msgid "" +"The following option(s) you selected might change data:\n" +msgstr "" +"निमà¥à¤¨ विकलà¥à¤ª जो आपने चà¥à¤¨à¥‡ हैं वे डाटा को बदल सकते हैं:\n" + +#: pdiff.cpp:264 +msgid "" +"\n" +"Most likely this is not wanted during a merge.\n" +"Do you want to disable these settings or continue with these settings active?" +msgstr "" + +#: pdiff.cpp:266 +msgid "Option Unsafe for Merging" +msgstr "समà¥à¤®à¤¿à¤²à¤¿à¤¤ करने के लिठविकलà¥à¤ª असà¥à¤°à¤•à¥à¤·à¤¿à¤¤ हैं" + +#: pdiff.cpp:267 +msgid "Use These Options During Merge" +msgstr "इन विकलà¥à¤ªà¥‹à¤‚ का उपयोग समà¥à¤®à¤¿à¤²à¤¿à¤¤ करने के दौरान करें" + +#: pdiff.cpp:267 +msgid "Disable Unsafe Options" +msgstr "असà¥à¤°à¤•à¥à¤·à¤¿à¤¤ विकलà¥à¤ª अकà¥à¤·à¤® करें" + +#: pdiff.cpp:297 +msgid "Loading A" +msgstr "अ लोड किया जा रहा है" + +#: pdiff.cpp:301 +msgid "Loading B" +msgstr "ब लोड किया जा रहा है" + +#: pdiff.cpp:318 pdiff.cpp:344 +msgid "Diff: A <-> B" +msgstr "डिफ: अ <-> ब" + +#: pdiff.cpp:324 pdiff.cpp:366 +msgid "Linediff: A <-> B" +msgstr "लाइनडिफ: अ <-> ब" + +#: pdiff.cpp:335 +msgid "Loading C" +msgstr "स लोड किया जा रहा है" + +#: pdiff.cpp:347 +msgid "Diff: B <-> C" +msgstr "डिफ: ब <-> स" + +#: pdiff.cpp:350 +msgid "Diff: A <-> C" +msgstr "डिफ: अ <-> स" + +#: pdiff.cpp:369 +msgid "Linediff: B <-> C" +msgstr "लाइनडिफ: ब <-> स" + +#: pdiff.cpp:372 +msgid "Linediff: A <-> C" +msgstr "लाइनडिफ: अ <-> स" + +#: pdiff.cpp:513 +#, fuzzy +msgid "All input files contain the same text, but are not binary equal." +msgstr "सभी इनपà¥à¤Ÿ फ़ाइलें à¤à¤• ही पाठ रखे हैं." + +#: pdiff.cpp:515 pdiff.cpp:517 pdiff.cpp:519 +#, fuzzy +msgid "" +"Files %1 and %2 are binary equal.\n" +msgstr "" +"फ़ाइलें ब तथा स बाइनरी समान हैं.\n" + +#: pdiff.cpp:516 pdiff.cpp:518 pdiff.cpp:520 +#, fuzzy +msgid "" +"Files %1 and %2 have equal text, but are not binary equal. \n" +msgstr "" +"फ़ाइलें अ तथा ब बाइनरी समान हैं.\n" + +#: pdiff.cpp:530 +msgid "" +"Some inputfiles don't seem to be pure textfiles.\n" +"Note that the KDiff3-merge was not meant for binary data.\n" +"Continue at your own risk." +msgstr "" + +#: pdiff.cpp:979 +msgid "Abort" +msgstr "छोड़ें" + +#: pdiff.cpp:985 pdiff.cpp:1073 +msgid "Opening files..." +msgstr "फ़ाइलें खोली जा रही हैं..." + +#: pdiff.cpp:1050 pdiff.cpp:1121 +msgid "File open error" +msgstr "फ़ाइल खोलने में तà¥à¤°à¥à¤Ÿà¤¿" + +#: pdiff.cpp:1153 +msgid "Cutting selection..." +msgstr "चयन को काटा जा रहा है..." + +#: pdiff.cpp:1174 +msgid "Copying selection to clipboard..." +msgstr "चà¥à¤¨à¥‡ हà¥à¤ की नकल कà¥à¤²à¤¿à¤ªà¤¬à¥‹à¤°à¥à¤¡ पर बनाया जा रहा है..." + +#: pdiff.cpp:1190 +msgid "Inserting clipboard contents..." +msgstr "कà¥à¤²à¤¿à¤ªà¤¬à¥‹à¤°à¥à¤¡ के वसà¥à¤¤à¥à¤“ं को पà¥à¤°à¤µà¤¿à¤·à¥à¤Ÿ किया जा रहा है..." + +#: pdiff.cpp:1713 +msgid "Save && Continue" +msgstr "सहेजें तथा जारी रखें" + +#: pdiff.cpp:1713 +msgid "Continue Without Saving" +msgstr "सहेजे बगैर जारी रखें" + +#: pdiff.cpp:1920 +msgid "Search complete." +msgstr "ढूंढना समà¥à¤ªà¤¨à¥à¤¨" + +#: pdiff.cpp:1920 +msgid "Search Complete" +msgstr "ढूंढना समà¥à¤ªà¤¨à¥à¤¨" + +#: pdiff.cpp:2144 +msgid "Nothing is selected in either diff input window." +msgstr "" + +#: pdiff.cpp:2144 +#, fuzzy +msgid "Error while adding manual diff range" +msgstr "डिरेकà¥à¤Ÿà¥à¤°à¥€ बनाने के दौरान तà¥à¤°à¥à¤Ÿà¤¿." + +#. i18n: file kdiff3_part.rc line 4 +#: rc.cpp:3 +#, no-c-format +msgid "&KDiff3" +msgstr "के-डिफ3 (&K)" + +#. i18n: file kdiff3_part.rc line 13 +#: rc.cpp:6 +#, no-c-format +msgid "Configure KDiff3" +msgstr "के-डिफ3 को कॉनà¥à¤«à¤¼à¤¿à¤—र करें" + +#. i18n: file kdiff3_shell.rc line 7 +#: rc.cpp:15 +#, no-c-format +msgid "&Directory" +msgstr "डिरेकà¥à¤Ÿà¥à¤°à¥€ (&D)" + +#. i18n: file kdiff3_shell.rc line 30 +#: rc.cpp:18 +#, no-c-format +msgid "Current Item Merge Operation" +msgstr "मौजूदा वसà¥à¤¤à¥ समà¥à¤®à¤¿à¤²à¤¿à¤¤ करने की कà¥à¤°à¤¿à¤¯à¤¾" + +#. i18n: file kdiff3_shell.rc line 38 +#: rc.cpp:21 +#, no-c-format +msgid "Current Item Sync Operation" +msgstr "मौजूदा वसà¥à¤¤à¥ सिंक ऑपरेशन" + +#. i18n: file kdiff3_shell.rc line 50 +#: rc.cpp:24 +#, no-c-format +msgid "&Movement" +msgstr "गतिविधि (&M)" + +#. i18n: file kdiff3_shell.rc line 61 +#: rc.cpp:27 +#, no-c-format +msgid "D&iffview" +msgstr "डिफवà¥à¤¯à¥‚ (&i)" + +#. i18n: file kdiff3_shell.rc line 73 +#: rc.cpp:30 +#, no-c-format +msgid "&Merge" +msgstr "समà¥à¤®à¤¿à¤²à¤¿à¤¤ करें (&M)" + +#. i18n: file kdiff3_shell.rc line 95 +#: rc.cpp:33 +#, no-c-format +msgid "&Window" +msgstr "विंडो (&W)" + +#: smalldialogs.cpp:53 +msgid "A (Base):" +msgstr "अ (बेस):" + +#: smalldialogs.cpp:59 smalldialogs.cpp:75 smalldialogs.cpp:91 +#: smalldialogs.cpp:134 +msgid "File..." +msgstr "फ़ाइल..." + +#: smalldialogs.cpp:61 smalldialogs.cpp:77 smalldialogs.cpp:93 +#: smalldialogs.cpp:136 +msgid "Dir..." +msgstr "डिर.:" + +#: smalldialogs.cpp:86 +msgid "C (Optional):" +msgstr "स (वैकलà¥à¤ªà¤¿à¤•):" + +#: smalldialogs.cpp:108 +msgid "Swap/Copy Names ..." +msgstr "" + +#: smalldialogs.cpp:114 smalldialogs.cpp:115 smalldialogs.cpp:116 +msgid "Swap %1<->%2" +msgstr "" + +#: smalldialogs.cpp:117 smalldialogs.cpp:118 smalldialogs.cpp:119 +msgid "Copy %1->Output" +msgstr "" + +#: smalldialogs.cpp:120 smalldialogs.cpp:121 smalldialogs.cpp:122 +msgid "Swap %1<->Output" +msgstr "" + +#: smalldialogs.cpp:129 +msgid "Output (optional):" +msgstr "आउटपà¥à¤Ÿ (वैकलà¥à¤ªà¤¿à¤•):" + +#: smalldialogs.cpp:158 +msgid "Configure..." +msgstr "कॉनà¥à¤«à¤¼à¤¿à¤—र...." + +#: smalldialogs.cpp:347 +msgid "Search text:" +msgstr "पाठ ढूंढें:" + +#: smalldialogs.cpp:354 +msgid "Case sensitive" +msgstr "केस सेंसिटिव" + +#: smalldialogs.cpp:357 +msgid "Search A" +msgstr "ढूंढें अ" + +#: smalldialogs.cpp:362 +msgid "Search B" +msgstr "ढूंढें ब" + +#: smalldialogs.cpp:367 +msgid "Search C" +msgstr "ढूंढें स" + +#: smalldialogs.cpp:372 +msgid "Search output" +msgstr "ढूंढने के पशà¥à¤šà¤¾à¤¤à¥ आउटपà¥à¤Ÿ" + +#: smalldialogs.cpp:377 +msgid "&Search" +msgstr "ढूंढें (&S)" + +#: smalldialogs.cpp:394 +msgid "Regular Expression Tester" +msgstr "" + +#: smalldialogs.cpp:405 +msgid "Example auto merge line:" +msgstr "" + +#: smalldialogs.cpp:407 +msgid "For auto merge test copy a line as used in your files." +msgstr "" + +#: smalldialogs.cpp:413 smalldialogs.cpp:442 smalldialogs.cpp:479 +msgid "Match result:" +msgstr "" + +#: smalldialogs.cpp:432 +msgid "Example history start line (with leading comment):" +msgstr "" + +#: smalldialogs.cpp:435 +msgid "" +"Copy a history start line as used in your files,\n" +"including the leading comment." +msgstr "" + +#: smalldialogs.cpp:461 +msgid "History sort key order:" +msgstr "" + +#: smalldialogs.cpp:469 +msgid "Example history entry start line (without leading comment):" +msgstr "" + +#: smalldialogs.cpp:471 +msgid "" +"Copy a history entry start line as used in your files,\n" +"but omit the leading comment." +msgstr "" + +#: smalldialogs.cpp:486 +msgid "Sort key result:" +msgstr "" + +#: smalldialogs.cpp:537 smalldialogs.cpp:547 smalldialogs.cpp:568 +msgid "Match success." +msgstr "" + +#: smalldialogs.cpp:541 smalldialogs.cpp:551 smalldialogs.cpp:574 +#, fuzzy +msgid "Match failed." +msgstr "सहेजने में असफल." + +#: smalldialogs.cpp:559 +msgid "Opening and closing parentheses don't match in regular expression." +msgstr "" + +#, fuzzy +#~ msgid "Diff and Merge" +#~ msgstr "डिफ तथा समà¥à¤®à¤¿à¤²à¤¿à¤¤" + +#, fuzzy +#~ msgid "Save Directory Merge State ..." +#~ msgstr "डिरेकà¥à¤Ÿà¥à¤°à¥€ समà¥à¤®à¤¿à¤²à¤¿à¤¤ करें" + +#, fuzzy +#~ msgid "Load Directory Merge State ..." +#~ msgstr "डिरेकà¥à¤Ÿà¥à¤°à¥€ समà¥à¤®à¤¿à¤²à¤¿à¤¤ करें" + +#, fuzzy +#~ msgid "Synchronize Directories" +#~ msgstr "डिरेकà¥à¤Ÿà¥à¤°à¥€à¤œà¤¼ सिंकà¥à¤°à¥‹à¤¨à¤¾à¤‡à¤œà¤¼ करें" + +#, fuzzy +#~ msgid "Copy Newer Files Instead of Merging" +#~ msgstr "समà¥à¤®à¤¿à¤²à¤¿à¤¤ करने के बजाठनठकी नक़ल करें (असà¥à¤°à¤•à¥à¤·à¤¿à¤¤)" + +#~ msgid "List only deltas" +#~ msgstr "सिरà¥à¤« डेलà¥à¤Ÿà¤¾à¤œà¤¼ की सूची दें" + +#~ msgid "Files and directories without change will not appear in the list." +#~ msgstr "बिना परिवरà¥à¤¤à¤¨à¥‹à¤‚ के फ़ाइल तथा डिरेकà¥à¤Ÿà¥à¤°à¥€à¤œà¤¼ सूची में पà¥à¤°à¤•à¤Ÿ नहीं होंगे." + +#, fuzzy +#~ msgid "no selection" +#~ msgstr "सà¥à¤µà¤šà¤¾à¤²à¤¿à¤¤ नक़ल चयन" + +#, fuzzy +#~ msgid "Manually match lines" +#~ msgstr "हसà¥à¤¤à¤šà¤¾à¤²à¤¿à¤¤ चà¥à¤¨à¤¾à¤µ" + +#~ msgid "Has no effect. For compatibility with certain tools." +#~ msgstr "कोई पà¥à¤°à¤­à¤¾à¤µ नहीं. कà¥à¤› औज़ारों के साथ कमà¥à¤ªà¥‡à¤Ÿà¤¿à¤¬à¤¿à¤²à¤¿à¤Ÿà¥€ के लिà¤." + +#~ msgid "For compatibility with certain tools." +#~ msgstr "कà¥à¤› औज़ारों के साथ कमà¥à¤ªà¥‡à¤Ÿà¤¿à¤¬à¤¿à¤²à¤¿à¤Ÿà¥€ के लिà¤." + +#~ msgid "Colors in Editor & Diff Output" +#~ msgstr "संपादक तथा डिफ़ आउटपà¥à¤Ÿ में रंग" + +#~ msgid "Text Diff and Merge Tool" +#~ msgstr "पाठ डिफ तथा समà¥à¤®à¤¿à¤²à¤¿à¤¤ करने का औज़ार" + +#~ msgid "" +#~ "\n" +#~ "\n" +#~ "File not saved." +#~ msgstr "" +#~ "\n" +#~ "\n" +#~ "फ़ाइल सहेजा नहीं गया." + +#~ msgid "Out of memory while preparing to save." +#~ msgstr "सहेजने के लिठतैयारी करने के दौरान मेमोरी कम पड़ गई." diff --git a/po/hu.po b/po/hu.po new file mode 100644 index 0000000..f1dc4b9 --- /dev/null +++ b/po/hu.po @@ -0,0 +1,2620 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR Free Software Foundation, Inc. +# Tamas Szanto , 2003. +# +msgid "" +msgstr "" +"Project-Id-Version: KDE 3.2\n" +"POT-Creation-Date: 2006-11-05 08:45+0100\n" +"PO-Revision-Date: 2004-01-09 11:11+0100\n" +"Last-Translator: Tamas Szanto \n" +"Language-Team: Hungarian \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: _translatorinfo.cpp:1 +msgid "" +"_: NAME OF TRANSLATORS\n" +"Your names" +msgstr "Szántó Tamás" + +#: _translatorinfo.cpp:3 +msgid "" +"_: EMAIL OF TRANSLATORS\n" +"Your emails" +msgstr "tszanto@mol.hu" + +#: diff.cpp:246 +msgid "Writing clipboard data to temp file failed." +msgstr "" + +#: diff.cpp:250 +msgid "From Clipboard" +msgstr "A vágólapról" + +#: diff.cpp:491 +msgid "" +"Preprocessing possibly failed. Check this command:\n" +"\n" +" %1\n" +"\n" +"The preprocessing command will be disabled now." +msgstr "" + +#: diff.cpp:526 +msgid "" +"The line-matching-preprocessing possibly failed. Check this command:\n" +"\n" +" %1\n" +"\n" +"The line-matching-preprocessing command will be disabled now." +msgstr "" + +#: diff.cpp:1631 diff.cpp:1645 +msgid "" +"Data loss error:\n" +"If it is reproducable please contact the author.\n" +msgstr "" +"Adatvesztési hiba:\n" +"ha a jelenség többször is elÅ‘fordul, kérjük jelentse be a hibát.\n" + +#: diff.cpp:1633 diff.cpp:1647 +msgid "Severe Internal Error" +msgstr "Súlyos belsÅ‘ hiba történt" + +#: difftextwindow.cpp:1643 kdiff3.cpp:753 +#, fuzzy +msgid "Top line" +msgstr "FelsÅ‘ sor - %1" + +#: difftextwindow.cpp:1653 +msgid "End" +msgstr "Vég" + +#: directorymergewindow.cpp:142 +msgid "Mix of links and normal files." +msgstr "Linkek és normál fájlok vegyesen." + +#: directorymergewindow.cpp:149 +msgid "Link: " +msgstr "Link: " + +#: directorymergewindow.cpp:157 +msgid "Size. " +msgstr "Méret. " + +#: directorymergewindow.cpp:170 +msgid "Date & Size: " +msgstr "Dátum és méret: " + +#: directorymergewindow.cpp:179 directorymergewindow.cpp:185 +msgid "Creating temp copy of %1 failed." +msgstr "Nem sikerült ideiglenes másolatot készíteni a(z) %1 fájlról." + +#: directorymergewindow.cpp:196 directorymergewindow.cpp:204 +msgid "Opening %1 failed." +msgstr "%1 megnyitása nem sikerült." + +#: directorymergewindow.cpp:208 +#, fuzzy +msgid "Comparing file..." +msgstr "A fájl mentése..." + +#: directorymergewindow.cpp:218 directorymergewindow.cpp:224 +#, c-format +msgid "Error reading from %1" +msgstr "%1 olvasása közben hiba történt" + +#: directorymergewindow.cpp:282 +msgid "Name" +msgstr "Név" + +#: directorymergewindow.cpp:286 +msgid "Operation" +msgstr "Művelet" + +#: directorymergewindow.cpp:287 +msgid "Status" +msgstr "Ãllapot" + +#: directorymergewindow.cpp:288 +msgid "Unsolved" +msgstr "" + +#: directorymergewindow.cpp:289 +msgid "Solved" +msgstr "" + +#: directorymergewindow.cpp:290 +msgid "Nonwhite" +msgstr "" + +#: directorymergewindow.cpp:291 +msgid "White" +msgstr "" + +#: directorymergewindow.cpp:319 +msgid "" +"You are currently doing a directory merge. Are you sure, you want to abort the " +"merge and rescan the directory?" +msgstr "" +"Egy könyvtárösszeolvasztás még nem fejezÅ‘dött be. Biztosan félbe szeretné " +"szakítani a műveletet és újra be szeretné olvasni a könyvtár tartalmát?" + +#: directorymergewindow.cpp:320 directorymergewindow.cpp:2868 +msgid "Rescan" +msgstr "Újraolvasás" + +#: directorymergewindow.cpp:320 kdiff3.cpp:603 pdiff.cpp:979 +msgid "Continue Merging" +msgstr "A művelet folytatása" + +#: directorymergewindow.cpp:462 +msgid "Opening of directories failed:" +msgstr "Nem sikerült beolvasni ezeket a könyvtárakat:" + +#: directorymergewindow.cpp:465 +msgid "" +"Dir A \"%1\" does not exist or is not a directory.\n" +msgstr "" +"Az \"A\" könyvtár (\"%1\") nem létezik vagy más típusú a bejegyzés.\n" + +#: directorymergewindow.cpp:468 +msgid "" +"Dir B \"%1\" does not exist or is not a directory.\n" +msgstr "" +"A \"B\" könyvtár (\"%1\") nem létezik vagy más típusú a bejegyzés.\n" + +#: directorymergewindow.cpp:471 +msgid "" +"Dir C \"%1\" does not exist or is not a directory.\n" +msgstr "" +"A \"C\" könyvtár (\"%1\") nem létezik vagy más típusú a bejegyzés.\n" + +#: directorymergewindow.cpp:473 +msgid "Directory Open Error" +msgstr "Könyvtármegnyitási hiba" + +#: directorymergewindow.cpp:481 +msgid "" +"The destination directory must not be the same as A or B when three directories " +"are merged.\n" +"Check again before continuing." +msgstr "" +"A célkönyvtár nem egyezhet meg sem az A, sem a B könyvtárral, ha három könyvtár " +"lesz összeolvasztva.\n" +"Továbblépés elÅ‘tt ellenÅ‘rizze az értéket." + +#: directorymergewindow.cpp:483 +msgid "Parameter Warning" +msgstr "Figyelmeztetés - paraméter" + +#: directorymergewindow.cpp:488 +#, fuzzy +msgid "Scanning directories..." +msgstr "A könyvtárak szinkronizálása" + +#: directorymergewindow.cpp:537 +msgid "Reading Directory A" +msgstr "Az A könyvtár beolvasása" + +#: directorymergewindow.cpp:559 +msgid "Reading Directory B" +msgstr "A B könyvtár beolvasása" + +#: directorymergewindow.cpp:581 +msgid "Reading Directory C" +msgstr "A C könyvtár beolvasása" + +#: directorymergewindow.cpp:607 +msgid "Some subdirectories were not readable in" +msgstr "Néhány alkönyvtár beolvasása nem sikerült itt:" + +#: directorymergewindow.cpp:612 +msgid "Check the permissions of the subdirectories." +msgstr "EllenÅ‘rizze az alkönyvtárak jogosultságait." + +#: directorymergewindow.cpp:646 kdiff3.cpp:552 kdiff3.cpp:636 kdiff3.cpp:661 +#: kdiff3.cpp:934 kdiff3.cpp:955 pdiff.cpp:1059 pdiff.cpp:1131 pdiff.cpp:1169 +#: pdiff.cpp:1185 pdiff.cpp:1215 pdiff.cpp:1226 +msgid "Ready." +msgstr "Kész." + +#: directorymergewindow.cpp:660 +msgid "Directory Comparison Status" +msgstr "A könyvtárak összehasonlítási állapota" + +#: directorymergewindow.cpp:661 +msgid "Number of subdirectories:" +msgstr "Az alkönyvtárak száma:" + +#: directorymergewindow.cpp:662 +msgid "Number of equal files:" +msgstr "A megegyezÅ‘ fájlok száma:" + +#: directorymergewindow.cpp:663 +msgid "Number of different files:" +msgstr "Az eltérÅ‘ fájlok száma:" + +#: directorymergewindow.cpp:666 +msgid "Number of manual merges:" +msgstr "A kézi összeolvasztások száma:" + +#: directorymergewindow.cpp:802 +msgid "This affects all merge operations." +msgstr "Ez minden összeolvasztási műveletet érint." + +#: directorymergewindow.cpp:803 +msgid "Changing All Merge Operations" +msgstr "Az összes összeolvasztási művelet megváltoztatása" + +#: directorymergewindow.cpp:803 mergeresultwindow.cpp:287 +msgid "C&ontinue" +msgstr "F&olytatás" + +#: directorymergewindow.cpp:1169 +msgid "Processing " +msgstr "Feldolgozás " + +#: directorymergewindow.cpp:1647 directorymergewindow.cpp:1653 +msgid "To do." +msgstr "Feladat." + +#: directorymergewindow.cpp:1756 directorymergewindow.cpp:2899 +msgid "Copy A to B" +msgstr "A másolása B-be" + +#: directorymergewindow.cpp:1757 directorymergewindow.cpp:2900 +msgid "Copy B to A" +msgstr "B másolása A-ba" + +#: directorymergewindow.cpp:1758 directorymergewindow.cpp:2901 +msgid "Delete A" +msgstr "A törlése" + +#: directorymergewindow.cpp:1759 directorymergewindow.cpp:2902 +msgid "Delete B" +msgstr "B törlése" + +#: directorymergewindow.cpp:1760 +msgid "Delete A & B" +msgstr "A és B törlése" + +#: directorymergewindow.cpp:1761 directorymergewindow.cpp:2904 +msgid "Merge to A" +msgstr "Beolvasztás A-ba" + +#: directorymergewindow.cpp:1762 directorymergewindow.cpp:2905 +msgid "Merge to B" +msgstr "Beolvasztás B-be" + +#: directorymergewindow.cpp:1763 +msgid "Merge to A & B" +msgstr "Beolvasztás A és B-be" + +#: directorymergewindow.cpp:1767 directorymergewindow.cpp:2896 +msgid "Delete (if exists)" +msgstr "Törlés (ha létezik)" + +#: directorymergewindow.cpp:1768 directorymergewindow.cpp:1769 +#: directorymergewindow.cpp:2895 optiondialog.cpp:809 smalldialogs.cpp:102 +msgid "Merge" +msgstr "Összeolvasztás" + +#: directorymergewindow.cpp:1768 directorymergewindow.cpp:1769 +msgid "Merge (manual)" +msgstr "Összeolvasztás (kézi)" + +#: directorymergewindow.cpp:1770 +msgid "Error: Conflicting File Types" +msgstr "Hiba: ütközÅ‘ fájltípusok" + +#: directorymergewindow.cpp:1771 +msgid "Error: Dates are equal but files are not." +msgstr "Hiba: a dátumok megegyeznek, de a fájlok nem." + +#: directorymergewindow.cpp:1795 directorymergewindow.cpp:1824 +#: directorymergewindow.cpp:1849 +msgid "This operation is currently not possible." +msgstr "Ez a művelet jelenleg nem lehetséges." + +#: directorymergewindow.cpp:1795 directorymergewindow.cpp:1824 +#: directorymergewindow.cpp:1849 directorymergewindow.cpp:2106 +msgid "Operation Not Possible" +msgstr "A művelet nem lehetséges" + +#: directorymergewindow.cpp:1888 +msgid "" +"This should never happen: \n" +"\n" +"mergeResultSaved: m_pMFI=0\n" +"\n" +"If you know how to reproduce this, please contact the program author." +msgstr "" +"Ez nem normál körülmények között nem történhet meg: \n" +"\n" +"mergeResultSaved: m_pMFI=0\n" +"\n" +"Ha tudja, hogyan kell ezt a helyzetet reprodukálni, kérem értesítse a szerzÅ‘t." + +#: directorymergewindow.cpp:1888 +msgid "Program Error" +msgstr "Programhiba" + +#: directorymergewindow.cpp:1899 +msgid "" +"An error occurred while copying.\n" +msgstr "" +"Hiba történt másolás közben.\n" + +#: directorymergewindow.cpp:1900 directorymergewindow.cpp:2306 +msgid "Merge Error" +msgstr "Összeolvasztási hiba" + +#: directorymergewindow.cpp:1905 directorymergewindow.cpp:2311 +msgid "Error." +msgstr "Hiba." + +#: directorymergewindow.cpp:1910 directorymergewindow.cpp:2202 +#: directorymergewindow.cpp:2242 +msgid "Done." +msgstr "Kész." + +#: directorymergewindow.cpp:1933 +msgid "Not saved." +msgstr "Nincs elmentve." + +#: directorymergewindow.cpp:1968 +msgid "Unknown merge operation. (This must never happen!)" +msgstr "" +"Ismeretlen összeolvasztási művelet (normál körülmények között nem fordulhat " +"elÅ‘)." + +#: directorymergewindow.cpp:2000 +msgid "Unknown merge operation." +msgstr "Ismeretlen összeolvasztási művelet." + +#: directorymergewindow.cpp:2015 +msgid "" +"The merge is about to begin.\n" +"\n" +"Choose \"Do it\" if you have read the instructions and know what you are " +"doing.\n" +"Choosing \"Simulate it\" will tell you what would happen.\n" +"\n" +"Be aware that this program still has beta status and there is NO WARRANTY " +"whatsoever! Make backups of your vital data!" +msgstr "" +"Az összeolvasztás elÅ‘készítése megtörtént.\n" +"\n" +"Kattintson a \"KezdÅ‘djön\" gombra, ha elolvasta a leírást és tudja, mi fog " +"történni.\n" +"Kattintson a \"Szimuláció\" gombra, ha látni szeretné, mi fog történni.\n" +"\n" +"Ez a program még béta állapotú, ezért nincs garancia a hibátlan működésre. A " +"fontos adatokról mindenképpen készítsen biztonsági másolatot!" + +#: directorymergewindow.cpp:2020 +msgid "Starting Merge" +msgstr "Az összeolvasztás megkezdése" + +#: directorymergewindow.cpp:2020 +msgid "Do It" +msgstr "KezdÅ‘djön" + +#: directorymergewindow.cpp:2020 +msgid "Simulate It" +msgstr "Szimuláció" + +#: directorymergewindow.cpp:2046 +msgid "" +"The highlighted item has a different type in the different directories. Select " +"what to do." +msgstr "" +"A kijelölt elem típusa eltérÅ‘ a könyvtárakban. Válassza ki, mit szeretne tenni." + +#: directorymergewindow.cpp:2055 +msgid "" +"The modification dates of the file are equal but the files are not. Select what " +"to do." +msgstr "" +"A két fájl utolsó módosítási dátuma megegyezik, de a fájlok tartalma nem. Mi " +"történjen?" + +#: directorymergewindow.cpp:2106 +#, fuzzy +msgid "" +"This operation is currently not possible because directory merge is currently " +"running." +msgstr "" +"Ez a művelet most nem hajtható végre, mert folyamatban van egy " +"könyvtárösszeolvasztás." + +#: directorymergewindow.cpp:2166 +msgid "" +"There was an error in the last step.\n" +"Do you want to continue with the item that caused the error or do you want to " +"skip this item?" +msgstr "" +"Hiba történt az utolsó lépsnél.\n" +"Folytatni szeretné a műveletet a hiba ellenére vagy át szeretné ugrani a hibát " +"okozó elemet?" + +#: directorymergewindow.cpp:2168 +msgid "Continue merge after an error" +msgstr "Az összeolvasztás folytatása hiba esetén is" + +#: directorymergewindow.cpp:2168 +msgid "Continue With Last Item" +msgstr "Folytatás az utolsó elemmel" + +#: directorymergewindow.cpp:2168 +msgid "Skip Item" +msgstr "Az elem átlépése" + +#: directorymergewindow.cpp:2202 +msgid "Skipped." +msgstr "Ãtlépve." + +#: directorymergewindow.cpp:2209 directorymergewindow.cpp:2435 +msgid "In progress..." +msgstr "Folyamatban..." + +#: directorymergewindow.cpp:2257 +msgid "Merge operation complete." +msgstr "Az összeolvasztási művelet befejezÅ‘dött." + +#: directorymergewindow.cpp:2257 directorymergewindow.cpp:2260 +msgid "Merge Complete" +msgstr "Az összeolvasztás befejezÅ‘dött" + +#: directorymergewindow.cpp:2269 +msgid "" +"Simulated merge complete: Check if you agree with the proposed operations." +msgstr "" +"A szimulált összeolvasztás befejezÅ‘dött: ellenÅ‘rizze, hogy elfogadhatók-e a " +"javasolt műveletek." + +#: directorymergewindow.cpp:2305 +msgid "" +"An error occurred. Press OK to see detailed information.\n" +msgstr "" +"Hiba történt. Kattintson az OK gombra részletes tájékoztatáshoz.\n" + +#: directorymergewindow.cpp:2348 +msgid "Error: While deleting %1: Creating backup failed." +msgstr "" +"Hiba történt %1 törlése közben: nem sikerült létrehozni egy biztonsági " +"másolatot." + +#: directorymergewindow.cpp:2355 +msgid "delete directory recursively( %1 )" +msgstr "könyvtár (%1) törlése az alkönyvtárakkal együtt" + +#: directorymergewindow.cpp:2357 +msgid "delete( %1 )" +msgstr "törlés (%1)" + +#: directorymergewindow.cpp:2372 +msgid "Error: delete dir operation failed while trying to read the directory." +msgstr "" +"Hiba történt: a könyvtártörlés során, a könyvtár beolvasásakor, hiba történt." + +#: directorymergewindow.cpp:2391 +msgid "Error: rmdir( %1 ) operation failed." +msgstr "Hiba: egy rmdir (%1) művelet nem sikerült." + +#: directorymergewindow.cpp:2401 +msgid "Error: delete operation failed." +msgstr "Hiba történt: a törlési művelet nem sikerült." + +#: directorymergewindow.cpp:2427 +msgid "manual merge( %1, %2, %3 -> %4)" +msgstr "kézi összeolvasztás (%1, %2, %3 -> %4)" + +#: directorymergewindow.cpp:2430 +#, fuzzy +msgid "" +" Note: After a manual merge the user should continue by pressing F7." +msgstr "" +" Megjegyzés: kézi összeolvasztás esetén a felhasználónak az F7-tel kell " +"továbblépnie." + +#: directorymergewindow.cpp:2453 +msgid "Error: copy( %1 -> %2 ) failed.Deleting existing destination failed." +msgstr "" +"Hiba: egy másolás (%1 -> %2) nem sikerült. Nem sikerült törölni a már létezÅ‘ " +"másolási célpontot." + +#: directorymergewindow.cpp:2463 +msgid "copyLink( %1 -> %2 )" +msgstr "Link másolása (%1 -> %2)" + +#: directorymergewindow.cpp:2474 +msgid "Error: copyLink failed: Remote links are not yet supported." +msgstr "" +"Hiba: egy link másolása nem sikerült. Távoli linkeket nem lehet használni." + +#: directorymergewindow.cpp:2480 +msgid "Error: copyLink failed." +msgstr "Hiba történt: egy link másolása nem sikerült." + +#: directorymergewindow.cpp:2500 +msgid "copy( %1 -> %2 )" +msgstr "másolás (%1 -> %2)" + +#: directorymergewindow.cpp:2526 +msgid "Error during rename( %1 -> %2 ): Cannot delete existing destination." +msgstr "Hiba történt átnevezés (%1 -> %2) közben: a célfájl nem törölhetÅ‘." + +#: directorymergewindow.cpp:2532 +msgid "rename( %1 -> %2 )" +msgstr "átnevezés (%1 -> %2)" + +#: directorymergewindow.cpp:2541 +msgid "Error: Rename failed." +msgstr "Hiba történt: egy átnevezés nem sikerült." + +#: directorymergewindow.cpp:2559 +msgid "Error during makeDir of %1. Cannot delete existing file." +msgstr "" +"Hiba történt a könyvtár (%1) létrehozása közben. A már létezÅ‘ fájl nem " +"törölhetÅ‘." + +#: directorymergewindow.cpp:2575 +msgid "makeDir( %1 )" +msgstr "Könyvtár létrehozása (%1)" + +#: directorymergewindow.cpp:2585 +msgid "Error while creating directory." +msgstr "Hiba történt egy könyvtár létrehozása közben." + +#: directorymergewindow.cpp:2608 directorymergewindow.cpp:2725 +msgid "Dest" +msgstr "Cél" + +#: directorymergewindow.cpp:2612 directorymergewindow.cpp:2650 +msgid "Dir" +msgstr "Könyvtár" + +#: directorymergewindow.cpp:2613 +msgid "Type" +msgstr "Típus" + +#: directorymergewindow.cpp:2614 +msgid "Size" +msgstr "Méret" + +#: directorymergewindow.cpp:2615 +msgid "Attr" +msgstr "Attribútum" + +#: directorymergewindow.cpp:2616 +msgid "Last Modification" +msgstr "Utolsó módosítás" + +#: directorymergewindow.cpp:2617 +msgid "Link-Destination" +msgstr "Link-Cél" + +#: directorymergewindow.cpp:2667 +msgid "not available" +msgstr "nem áll rendelkezésre" + +#: directorymergewindow.cpp:2687 +msgid "A (Dest): " +msgstr "A (cél):" + +#: directorymergewindow.cpp:2690 +msgid "A (Base): " +msgstr "A (alap):" + +#: directorymergewindow.cpp:2696 +msgid "B (Dest): " +msgstr "B (cél):" + +#: directorymergewindow.cpp:2704 +msgid "C (Dest): " +msgstr "C (cél):" + +#: directorymergewindow.cpp:2710 +msgid "Dest: " +msgstr "Cél: " + +#: directorymergewindow.cpp:2775 +#, fuzzy +msgid "Save Directory Merge State As..." +msgstr "Könyvtárösszeolvasztás" + +#: directorymergewindow.cpp:2862 +msgid "Start/Continue Directory Merge" +msgstr "A könyvtárösszeolvasztás kezdése/folytatása" + +#: directorymergewindow.cpp:2863 +msgid "Run Operation for Current Item" +msgstr "A művelet végrehajtása az aktuális elemen" + +#: directorymergewindow.cpp:2864 +msgid "Compare Selected File" +msgstr "A kiválasztott fájl összehasonlítása" + +#: directorymergewindow.cpp:2865 +msgid "Merge Current File" +msgstr "Az aktuális fájl összeolvasztása" + +#: directorymergewindow.cpp:2866 +msgid "Fold All Subdirs" +msgstr "Az alkönyvtárak összecsukása" + +#: directorymergewindow.cpp:2867 +msgid "Unfold All Subdirs" +msgstr "Az alkönyvtárak kibontása" + +#: directorymergewindow.cpp:2871 +msgid "Choose A for All Items" +msgstr "Az 'A' kiválasztása az összes elemhez" + +#: directorymergewindow.cpp:2872 +msgid "Choose B for All Items" +msgstr "A 'B' kiválasztása az összes elemhez" + +#: directorymergewindow.cpp:2873 +msgid "Choose C for All Items" +msgstr "A 'C' kiválasztása az összes elemhez" + +#: directorymergewindow.cpp:2874 +msgid "Auto-Choose Operation for All Items" +msgstr "Automatikus kiválasztás az összes elemnél" + +#: directorymergewindow.cpp:2875 +msgid "No Operation for All Items" +msgstr "Nincs művelet az összes elemre" + +#: directorymergewindow.cpp:2880 +msgid "Show Identical Files" +msgstr "" + +#: directorymergewindow.cpp:2881 +#, fuzzy +msgid "Show Different Files" +msgstr "Az eltérÅ‘ fájlok száma:" + +#: directorymergewindow.cpp:2882 +msgid "Show Files only in A" +msgstr "" + +#: directorymergewindow.cpp:2883 +msgid "Show Files only in B" +msgstr "" + +#: directorymergewindow.cpp:2884 +msgid "Show Files only in C" +msgstr "" + +#: directorymergewindow.cpp:2888 +#, fuzzy +msgid "Compare Explicitly Selected Files" +msgstr "A kiválasztott fájl összehasonlítása" + +#: directorymergewindow.cpp:2889 +#, fuzzy +msgid "Merge Explicitly Selected Files" +msgstr "A kiválasztott fájl összehasonlítása" + +#: directorymergewindow.cpp:2891 directorymergewindow.cpp:2898 +msgid "Do Nothing" +msgstr "Nem kell semmit tenni" + +#: directorymergewindow.cpp:2892 +msgid "A" +msgstr "A" + +#: directorymergewindow.cpp:2893 +msgid "B" +msgstr "B" + +#: directorymergewindow.cpp:2894 +msgid "C" +msgstr "C" + +#: directorymergewindow.cpp:2903 +#, fuzzy +msgid "Delete A && B" +msgstr "A és B törlése" + +#: directorymergewindow.cpp:2906 +#, fuzzy +msgid "Merge to A && B" +msgstr "Beolvasztás A és B-be" + +#: fileaccess.cpp:595 +msgid "" +"While trying to make a backup, deleting an older backup failed. \n" +"Filename: " +msgstr "" +"Biztonsági mentés készítése közben egy régebbi biztonsági mentést nem sikerült " +"törölni. \n" +"Fájlnév: " + +#: fileaccess.cpp:602 +msgid "" +"While trying to make a backup, renaming failed. \n" +"Filenames: " +msgstr "" +"Biztonsági mentés készítése közben egy átnevezés nem sikerült. \n" +"A fájlok nevei: " + +#: fileaccess.cpp:624 +#, c-format +msgid "Getting file status: %1" +msgstr "A fájlállapot lekérdezése: %1" + +#: fileaccess.cpp:667 +#, c-format +msgid "Reading file: %1" +msgstr "Fájl beolvasása: %1" + +#: fileaccess.cpp:703 +#, c-format +msgid "Writing file: %1" +msgstr "Fájl írása: %1" + +#: fileaccess.cpp:731 +msgid "Out of memory" +msgstr "Elfogyott a memória" + +#: fileaccess.cpp:766 +#, c-format +msgid "Making directory: %1" +msgstr "Könyvtár létrehozása: %1" + +#: fileaccess.cpp:786 +#, c-format +msgid "Removing directory: %1" +msgstr "Könyvtár törlése: %1" + +#: fileaccess.cpp:801 +#, c-format +msgid "Removing file: %1" +msgstr "Fájl törlése: %1" + +#: fileaccess.cpp:817 +msgid "Creating symbolic link: %1 -> %2" +msgstr "Szimbolikus link létrehozása: %1 -> %2" + +#: fileaccess.cpp:843 +msgid "Renaming file: %1 -> %2" +msgstr "Fájl átnevezése: %1 -> %2" + +#: fileaccess.cpp:879 +msgid "Copying file: %1 -> %2" +msgstr "Fájl másolása: %1 -> %2" + +#: fileaccess.cpp:893 +#, c-format +msgid "" +"Error during file copy operation: Opening file for reading failed. Filename: %1" +msgstr "" +"Hiba történt fájlmásolás közben: nem sikerült olvasásra megnyitni egy fájlt. A " +"fájl neve: %1" + +#: fileaccess.cpp:899 +#, c-format +msgid "" +"Error during file copy operation: Opening file for writing failed. Filename: %1" +msgstr "" +"Hiba történt fájlmásolás közben: nem sikerült írásra megnyitni egy fájlt. A " +"fájl neve: %1" + +#: fileaccess.cpp:914 +#, c-format +msgid "Error during file copy operation: Reading failed. Filename: %1" +msgstr "" +"Hiba történt fájlmásolás közben: egy olvasási művelet nem sikerült. A fájl " +"neve: %1" + +#: fileaccess.cpp:923 +#, c-format +msgid "Error during file copy operation: Writing failed. Filename: %1" +msgstr "" +"Hiba történt fájlmásolás közben: egy írási művelet nem sikerült. A fájl neve: " +"%1" + +#: fileaccess.cpp:1219 +msgid "Reading directory: " +msgstr "Könyvtár beolvasása: " + +#: fileaccess.cpp:1348 +#, c-format +msgid "Listing directory: %1" +msgstr "Könyvtár kilistázása: %1" + +#: kdiff3.cpp:142 +#, fuzzy +msgid "Current Configuration:" +msgstr "Szinkronizálási művelet az aktuális elemmel" + +#: kdiff3.cpp:147 +#, fuzzy +msgid "Config Option Error:" +msgstr "Fájlmegnyitási hiba" + +#: kdiff3.cpp:187 +msgid "Option --auto used, but no output file specified." +msgstr "" +"Az --auto opciót használná a program, de nincs megadva a kimeneti fájl." + +#: kdiff3.cpp:323 +msgid "Option --auto ignored for directory comparison." +msgstr "" +"Az --auto opció figyelmen kívül lesz hagyva könyvtárak összehasonlításánál." + +#: kdiff3.cpp:359 +msgid "Saving failed." +msgstr "A mentés nem sikerült." + +#: kdiff3.cpp:386 pdiff.cpp:1041 pdiff.cpp:1112 +msgid "Opening of these files failed:" +msgstr "Nem sikerült megnyitni a következÅ‘ fájlokat:" + +#: kdiff3.cpp:395 +msgid "File Open Error" +msgstr "Fájlmegnyitási hiba" + +#: kdiff3.cpp:418 +msgid "Opens documents for comparison..." +msgstr "Dokumentumok megnyitása összehasonlításhoz..." + +#: kdiff3.cpp:423 +msgid "Saves the merge result. All conflicts must be solved!" +msgstr "" +"Az összeolvasztás eredményének elmentése. Minden ütközést fel kell oldani." + +#: kdiff3.cpp:425 +msgid "Saves the current document as..." +msgstr "Az aktuális dokumentum mentése mint..." + +#: kdiff3.cpp:427 +msgid "Print the differences" +msgstr "" + +#: kdiff3.cpp:429 +msgid "Quits the application" +msgstr "Kilépés az alkalmazásból" + +#: kdiff3.cpp:431 +msgid "Cuts the selected section and puts it to the clipboard" +msgstr "Kivágja a kijelölt részt és a vágólapra helyezi" + +#: kdiff3.cpp:433 +msgid "Copies the selected section to the clipboard" +msgstr "Kimásolja a kijelölt részt és a vágólapra helyezi" + +#: kdiff3.cpp:435 +msgid "Pastes the clipboard contents to actual position" +msgstr "Beilleszti a vágólap tartalmát az aktuális pozíciónál" + +#: kdiff3.cpp:437 +msgid "Select everything in current window" +msgstr "" + +#: kdiff3.cpp:439 +msgid "Search for a string" +msgstr "Sztring keresése" + +#: kdiff3.cpp:441 +msgid "Search again for the string" +msgstr "A sztring keresése újból" + +#: kdiff3.cpp:443 +msgid "Enables/disables the toolbar" +msgstr "Az eszköztár ki-be kapcsolása" + +#: kdiff3.cpp:445 +msgid "Enables/disables the statusbar" +msgstr "Az állapotsor ki-be kapcsolása" + +#: kdiff3.cpp:449 +msgid "Configure KDiff3..." +msgstr "A KDiff3 beállításai..." + +#: kdiff3.cpp:470 +msgid "Go to Current Delta" +msgstr "Ugrás az aktuális deltára..." + +#: kdiff3.cpp:471 +msgid "Go to First Delta" +msgstr "Ugrás az elsÅ‘ deltára" + +#: kdiff3.cpp:472 +msgid "Go to Last Delta" +msgstr "Ugrás az utolsó deltára" + +#: kdiff3.cpp:473 +msgid "(Skips white space differences when \"Show White Space\" is disabled.)" +msgstr "" + +#: kdiff3.cpp:474 +msgid "" +"(Does not skip white space differences even when \"Show White Space\" is " +"disabled.)" +msgstr "" + +#: kdiff3.cpp:475 +msgid "Go to Previous Delta" +msgstr "Ugrás az elÅ‘zÅ‘ deltára" + +#: kdiff3.cpp:477 +msgid "Go to Next Delta" +msgstr "Ugrás a következÅ‘ deltára" + +#: kdiff3.cpp:479 +msgid "Go to Previous Conflict" +msgstr "Ugrás az elÅ‘zÅ‘ ütközésre" + +#: kdiff3.cpp:481 +msgid "Go to Next Conflict" +msgstr "Ugrás a következÅ‘ ütközésre" + +#: kdiff3.cpp:483 +msgid "Go to Previous Unsolved Conflict" +msgstr "Ugrás az elÅ‘zÅ‘ feloldatlan ütközésre" + +#: kdiff3.cpp:485 +msgid "Go to Next Unsolved Conflict" +msgstr "Ugrás a következÅ‘ feloldatlan ütközésre" + +#: kdiff3.cpp:487 +msgid "Select Line(s) From A" +msgstr "Sor(ok) kiválasztása A-ból" + +#: kdiff3.cpp:488 +msgid "Select Line(s) From B" +msgstr "Sor(ok) kiválasztása B-bÅ‘l" + +#: kdiff3.cpp:489 +msgid "Select Line(s) From C" +msgstr "Sor(ok) kiválasztása C-bÅ‘l" + +#: kdiff3.cpp:490 +msgid "Automatically Go to Next Unsolved Conflict After Source Selection" +msgstr "" +"A forrás kiválasztása után automatikus ugrás a következÅ‘ feloldatlan ütközésre" + +#: kdiff3.cpp:492 +msgid "Show Space && Tabulator Characters for Differences" +msgstr "A szóközök és tabulátorok megjelenítése eltéréseknél" + +#: kdiff3.cpp:493 +msgid "Show White Space" +msgstr "Az üres karakterek megjelenítése" + +#: kdiff3.cpp:495 +msgid "Show Line Numbers" +msgstr "A sorszámok megjelenítése" + +#: kdiff3.cpp:496 +msgid "Choose A Everywhere" +msgstr "A kiválasztása mindenhol" + +#: kdiff3.cpp:497 +msgid "Choose B Everywhere" +msgstr "B kiválasztása mindenhol" + +#: kdiff3.cpp:498 +msgid "Choose C Everywhere" +msgstr "C kiválasztása mindenhol" + +#: kdiff3.cpp:499 +#, fuzzy +msgid "Choose A for All Unsolved Conflicts" +msgstr "A kiválasztása az összes feloldatlan ütközéshez" + +#: kdiff3.cpp:500 +#, fuzzy +msgid "Choose B for All Unsolved Conflicts" +msgstr "B kiválasztása az összes feloldatlan ütközéshez" + +#: kdiff3.cpp:501 +#, fuzzy +msgid "Choose C for All Unsolved Conflicts" +msgstr "C kiválasztása az összes feloldatlan ütközéshez" + +#: kdiff3.cpp:502 +#, fuzzy +msgid "Choose A for All Unsolved Whitespace Conflicts" +msgstr "A kiválasztása az összes feloldatlan elválasztókarakter-ütközéshez" + +#: kdiff3.cpp:503 +#, fuzzy +msgid "Choose B for All Unsolved Whitespace Conflicts" +msgstr "B kiválasztása az összes feloldatlan elválasztókarakter-ütközéshez" + +#: kdiff3.cpp:504 +#, fuzzy +msgid "Choose C for All Unsolved Whitespace Conflicts" +msgstr "C kiválasztása az összes feloldatlan elválasztókarakter-ütközéshez" + +#: kdiff3.cpp:505 +msgid "Automatically Solve Simple Conflicts" +msgstr "Az egyszerű ütközések automatikus feloldása" + +#: kdiff3.cpp:506 +msgid "Set Deltas to Conflicts" +msgstr "Delták beállítása az ütközésekhez" + +#: kdiff3.cpp:507 +msgid "Run Regular Expression Auto Merge" +msgstr "" + +#: kdiff3.cpp:508 +#, fuzzy +msgid "Automatically Solve History Conflicts" +msgstr "Az egyszerű ütközések automatikus feloldása" + +#: kdiff3.cpp:509 +msgid "Split Diff At Selection" +msgstr "" + +#: kdiff3.cpp:510 +#, fuzzy +msgid "Join Selected Diffs" +msgstr "A kiválasztott fájl összehasonlítása" + +#: kdiff3.cpp:512 +msgid "Show Window A" +msgstr "Az A ablak megjelenítése" + +#: kdiff3.cpp:513 +msgid "Show Window B" +msgstr "A B ablak megjelenítése" + +#: kdiff3.cpp:514 +msgid "Show Window C" +msgstr "A C ablak megjelenítése" + +#: kdiff3.cpp:515 kdiff3.cpp:526 +msgid "Focus Next Window" +msgstr "Fókusz a következÅ‘ ablakra" + +#: kdiff3.cpp:517 +msgid "Normal Overview" +msgstr "" + +#: kdiff3.cpp:518 +msgid "A vs. B Overview" +msgstr "" + +#: kdiff3.cpp:519 +msgid "A vs. C Overview" +msgstr "" + +#: kdiff3.cpp:520 +msgid "B vs. C Overview" +msgstr "" + +#: kdiff3.cpp:521 +msgid "Word Wrap Diff Windows" +msgstr "" + +#: kdiff3.cpp:522 +msgid "Add Manual Diff Alignment" +msgstr "" + +#: kdiff3.cpp:523 +msgid "Clear All Manual Diff Alignments" +msgstr "" + +#: kdiff3.cpp:528 +msgid "Focus Prev Window" +msgstr "Fókusz az elÅ‘zÅ‘ ablakra" + +#: kdiff3.cpp:529 +msgid "Toggle Split Orientation" +msgstr "A megosztás irányának megváltoztatása" + +#: kdiff3.cpp:531 +msgid "Dir && Text Split Screen View" +msgstr "Osztott nézet (könyvtár és szöveg)" + +#: kdiff3.cpp:533 +msgid "Toggle Between Dir && Text View" +msgstr "Váltás a könyvtár- és szöveges nézet között" + +#: kdiff3.cpp:582 pdiff.cpp:1712 +msgid "The merge result hasn't been saved." +msgstr "Az összeolvasztás eredménye még nincs elmentve." + +#: kdiff3.cpp:583 +msgid "Save && Quit" +msgstr "Mentés és kilépés" + +#: kdiff3.cpp:583 +msgid "Quit Without Saving" +msgstr "Kilépés mentés nélkül" + +#: kdiff3.cpp:591 pdiff.cpp:1721 +msgid "Saving the merge result failed." +msgstr "Az összeolvasztás eredményét nem sikerült elmenteni." + +#: kdiff3.cpp:602 pdiff.cpp:978 +msgid "" +"You are currently doing a directory merge. Are you sure, you want to abort?" +msgstr "" +"Éppen folyamatban van egy könyvtárösszeolvasztás. Biztosan félbe szeretné " +"szakítani a műveletet?" + +#: kdiff3.cpp:625 +msgid "Saving file..." +msgstr "A fájl mentése..." + +#: kdiff3.cpp:642 +msgid "Saving file with a new filename..." +msgstr "A fájl elmentése más néven..." + +#: kdiff3.cpp:732 +#, fuzzy +msgid "Printing..." +msgstr "Kilépés..." + +#: kdiff3.cpp:738 kdiff3.cpp:900 +msgid "Printing aborted." +msgstr "" + +#: kdiff3.cpp:870 +msgid "Selection" +msgstr "" + +#: kdiff3.cpp:896 +#, fuzzy +msgid "Printing completed." +msgstr "Az összeolvasztási művelet befejezÅ‘dött." + +#: kdiff3.cpp:906 +msgid "Exiting..." +msgstr "Kilépés..." + +#: kdiff3.cpp:918 +msgid "Toggling toolbar..." +msgstr "Az eszköztár átkapcsolása..." + +#: kdiff3.cpp:939 +msgid "Toggle the statusbar..." +msgstr "Az állapotsor átkapcsolása..." + +#: kdiff3_part.cpp:155 kdiff3_part.cpp:224 +msgid "Couldn't find files for comparison." +msgstr "Nem található összehasonlítható fájlpár." + +#: kdiff3_part.cpp:291 +msgid "KDiff3Part" +msgstr "KDiff3Part" + +#: kdiff3_shell.cpp:78 +msgid "" +"Could not find our part!\n" +"This usually happens due to an installation problem. Please read the " +"README-file in the source package for details." +msgstr "" +"A keresett komponens nem található.\n" +"Ez a hiba valószínűleg valamilyen telepítési probléma következménye. További " +"információ a forráscsomagban található README fájlban található." + +#: main.cpp:35 +msgid "Tool for Comparison and Merge of Files and Directories" +msgstr "" + +#: main.cpp:40 +msgid "Merge the input." +msgstr "Összeolvasztás a bemenettel." + +#: main.cpp:42 +msgid "Explicit base file. For compatibility with certain tools." +msgstr "Az alapfájl explicit kijelölése. Kompatibilitási célokat szolgál." + +#: main.cpp:44 +msgid "Output file. Implies -m. E.g.: -o newfile.txt" +msgstr "" +"A kimeneti fájl neve. Maga után vonja a -m opciót. Például: -o újfájl.txt" + +#: main.cpp:45 +msgid "Output file, again. (For compatibility with certain tools.)" +msgstr "A kimeneti fájl neve, még egyszer. Kompatibilitási célokat szolgál." + +#: main.cpp:46 +msgid "No GUI if all conflicts are auto-solvable. (Needs -o file)" +msgstr "" +"Nem jelenjen meg grafikus felület, ha az összes ütközés automatikusan " +"feloldható. (A -o fájlnév opcióval használható.)" + +#: main.cpp:47 +msgid "Don't solve conflicts automatically. (For compatibility...)" +msgstr "" +"Az ütközések automatikus feloldásának kikapcsolása. Kompatibilitási célokat " +"szolgál." + +#: main.cpp:48 +#, fuzzy +msgid "Visible name replacement for input file 1 (base)." +msgstr "" +"A megjelenített név cseréje. Minden bemenethez csak egyszer kell megadni." + +#: main.cpp:49 +#, fuzzy +msgid "Visible name replacement for input file 2." +msgstr "" +"A megjelenített név cseréje. Minden bemenethez csak egyszer kell megadni." + +#: main.cpp:50 +#, fuzzy +msgid "Visible name replacement for input file 3." +msgstr "" +"A megjelenített név cseréje. Minden bemenethez csak egyszer kell megadni." + +#: main.cpp:52 +#, fuzzy +msgid "Alternative visible name replacement. Supply this once for every input." +msgstr "" +"A megjelenített név cseréje. Minden bemenethez csak egyszer kell megadni." + +#: main.cpp:53 +msgid "" +"Override a config setting. Use once for every setting. E.g.: --cs " +"\"AutoAdvance=1\"" +msgstr "" + +#: main.cpp:54 +msgid "Show list of config settings and current values." +msgstr "" + +#: main.cpp:55 +#, fuzzy +msgid "Use a different config file." +msgstr "Az eltérÅ‘ fájlok száma:" + +#: main.cpp:59 +msgid "file1 to open (base, if not specified via --base)" +msgstr "" +"a megnyitandó fájl (1) - ez lesz az alap, ha nincs megadva a --base opció" + +#: main.cpp:60 +msgid "file2 to open" +msgstr "a megnyitandó fájl (2)" + +#: main.cpp:61 +msgid "file3 to open" +msgstr "a megnyitandó fájl (3)" + +#: main.cpp:93 +msgid "Ignored. (User defined.)" +msgstr "" + +#. i18n: file kdiff3_part.rc line 16 +#: main.cpp:173 rc.cpp:9 +#, no-c-format +msgid "KDiff3" +msgstr "KDiff3" + +#: main.cpp:186 +msgid "+ Many thanks to those who reported bugs and contributed ideas!" +msgstr "" + +#: mergeresultwindow.cpp:136 mergeresultwindow.cpp:939 +#: mergeresultwindow.cpp:953 mergeresultwindow.cpp:965 +#: mergeresultwindow.cpp:977 +#, fuzzy +msgid "Number of remaining unsolved conflicts: %1 (of which %2 are whitespace)" +msgstr "" +"\n" +"A fel nem oldott ütközések száma: " + +#: mergeresultwindow.cpp:285 +msgid "" +"The output has been modified.\n" +"If you continue your changes will be lost." +msgstr "" +"A kimenet megváltozott.\n" +"Ha továbblép, a módosítások elvesznek." + +#: mergeresultwindow.cpp:797 pdiff.cpp:511 +msgid "All input files are binary equal." +msgstr "Az összes bemeneti fájl megegyezik (bináris módban)." + +#: mergeresultwindow.cpp:799 +msgid "All input files contain the same text." +msgstr "Az összes bemeneti fájl megegyezik (szöveges módban)." + +#: mergeresultwindow.cpp:801 +msgid "" +"Files A and B are binary equal.\n" +msgstr "" +"A és B fájl binárisan megegyezik.\n" + +#: mergeresultwindow.cpp:802 +msgid "" +"Files A and B have equal text. \n" +msgstr "" +"A és B szövege megegyezik.\n" + +#: mergeresultwindow.cpp:803 +msgid "" +"Files A and C are binary equal.\n" +msgstr "" +"A és C fájl binárisan megegyezik.\n" + +#: mergeresultwindow.cpp:804 +msgid "" +"Files A and C have equal text. \n" +msgstr "" +"A és C szövege megegyezik. \n" + +#: mergeresultwindow.cpp:805 +msgid "" +"Files B and C are binary equal.\n" +msgstr "" +"B és C binárisan megegyezik.\n" + +#: mergeresultwindow.cpp:806 +msgid "" +"Files B and C have equal text. \n" +msgstr "" +"B és C szövege megegyezik.\n" + +#: mergeresultwindow.cpp:812 +msgid "Total number of conflicts: " +msgstr "Az ütközések száma: " + +#: mergeresultwindow.cpp:813 +msgid "" +"\n" +"Nr of automatically solved conflicts: " +msgstr "" +"\n" +"Az automatikusan feloldott ütközések száma: " + +#: mergeresultwindow.cpp:814 +msgid "" +"\n" +"Nr of unsolved conflicts: " +msgstr "" +"\n" +"A fel nem oldott ütközések száma: " + +#: mergeresultwindow.cpp:816 +msgid "Conflicts" +msgstr "Ãœtközések" + +#: mergeresultwindow.cpp:1652 +msgid "" +msgstr "" + +#: mergeresultwindow.cpp:1660 +#, fuzzy +msgid "" +msgstr "<Összeolvasztási ütközés>" + +#: mergeresultwindow.cpp:1662 mergeresultwindow.cpp:2427 +msgid "" +msgstr "<Összeolvasztási ütközés>" + +#: mergeresultwindow.cpp:2635 +msgid "" +"Not all conflicts are solved yet.\n" +"File not saved.\n" +msgstr "" +"Még nincs feloldva az összes ütközés.\n" +"A fájl nem lesz elmentve.\n" + +#: mergeresultwindow.cpp:2637 +msgid "Conflicts Left" +msgstr "Megmaradt ütközések" + +#: mergeresultwindow.cpp:2649 +msgid "" +"\n" +"\n" +"Creating backup failed. File not saved." +msgstr "" + +#: mergeresultwindow.cpp:2649 mergeresultwindow.cpp:2689 +msgid "File Save Error" +msgstr "Fájlmentési hiba" + +#: mergeresultwindow.cpp:2689 +msgid "Error while writing." +msgstr "Hiba történt írás közben." + +#: mergeresultwindow.cpp:3020 +msgid "Output" +msgstr "" + +#: mergeresultwindow.cpp:3032 mergeresultwindow.cpp:3139 +msgid "[Modified]" +msgstr "[Módosítva]" + +#: mergeresultwindow.cpp:3039 +msgid "Encoding for saving" +msgstr "" + +#: mergeresultwindow.cpp:3075 mergeresultwindow.cpp:3081 +#: mergeresultwindow.cpp:3087 +msgid "Codec from" +msgstr "" + +#: optiondialog.cpp:362 +msgid "Unicode, 8 bit" +msgstr "" + +#: optiondialog.cpp:363 +msgid "Unicode" +msgstr "" + +#: optiondialog.cpp:364 +msgid "Latin1" +msgstr "" + +#: optiondialog.cpp:383 +#, fuzzy +msgid "Change this if non-ASCII characters are not displayed correctly." +msgstr "" +"Akkor kell esetleg bejelölni, ha a nem ASCII karakterek helytelenül jelennek " +"meg." + +#: optiondialog.cpp:510 +msgid "Editor & Diff Output Font" +msgstr "A szerkesztÅ‘ és a diff-kimenet betűtípusa" + +#: optiondialog.cpp:531 +msgid "Italic font for deltas" +msgstr "DÅ‘lt betűk az eltéréseknél" + +#: optiondialog.cpp:534 +msgid "" +"Selects the italic version of the font for differences.\n" +"If the font doesn't support italic characters, then this does nothing." +msgstr "" +"Ennek hatására a program az eltérések megjelenítéséhez dÅ‘lt betűket fog " +"használni.\n" +"Ha a betűtípus nem tartalmaz dÅ‘lt betűket, akkor az opciónak nincs hatása." + +#: optiondialog.cpp:542 +msgid "Color" +msgstr "Szín" + +#: optiondialog.cpp:542 +msgid "Colors Settings" +msgstr "" + +#: optiondialog.cpp:556 +msgid "Editor and Diff Views:" +msgstr "" + +#: optiondialog.cpp:564 +msgid "Foreground color:" +msgstr "ElÅ‘térszín:" + +#: optiondialog.cpp:570 +msgid "Background color:" +msgstr "Háttérszín:" + +#: optiondialog.cpp:578 +msgid "Diff background color:" +msgstr "A diff szöveg háttérszíne:" + +#: optiondialog.cpp:585 +msgid "Color A:" +msgstr "A szín:" + +#: optiondialog.cpp:592 +msgid "Color B:" +msgstr "B szín:" + +#: optiondialog.cpp:599 +msgid "Color C:" +msgstr "C szín:" + +#: optiondialog.cpp:605 +msgid "Conflict color:" +msgstr "Ãœtközési szín:" + +#: optiondialog.cpp:612 +msgid "Current range background color:" +msgstr "A jelenlegi tartomány háttérszíne:" + +#: optiondialog.cpp:619 +msgid "Current range diff background color:" +msgstr "A jelenlegi tartomány diff-jének háttérszíne:" + +#: optiondialog.cpp:625 +msgid "Color for manually aligned difference ranges:" +msgstr "" + +#: optiondialog.cpp:630 +#, fuzzy +msgid "Directory Comparison View:" +msgstr "A könyvtárak összehasonlítási állapota" + +#: optiondialog.cpp:636 +msgid "Newest file color:" +msgstr "" + +#: optiondialog.cpp:639 +msgid "" +"Changing this color will only be effective when starting the next directory " +"comparison." +msgstr "" + +#: optiondialog.cpp:644 +msgid "Oldest file color:" +msgstr "" + +#: optiondialog.cpp:651 +msgid "Middle age file color:" +msgstr "" + +#: optiondialog.cpp:658 +msgid "Color for missing files:" +msgstr "" + +#: optiondialog.cpp:670 +msgid "Editor" +msgstr "SzerkesztÅ‘" + +#: optiondialog.cpp:670 +#, fuzzy +msgid "Editor Behavior" +msgstr "A szerkesztÅ‘ működési jellemzÅ‘i" + +#: optiondialog.cpp:680 +msgid "Tab inserts spaces" +msgstr "A Tab billentyű szóközöket szúrjon be" + +#: optiondialog.cpp:683 +msgid "" +"On: Pressing tab generates the appropriate number of spaces.\n" +"Off: A Tab-character will be inserted." +msgstr "" +"Ha be van jelölve: a Tab lenyomásakor a megadott számú szóköz kerül a " +"szövegbe.\n" +"Ha nincs bejelölve: a Tab lenyomásakor Tab karakter kerül a szövegbe.." + +#: optiondialog.cpp:689 +msgid "Tab size:" +msgstr "Tabulátorméret:" + +#: optiondialog.cpp:694 +msgid "Auto indentation" +msgstr "A behúzás megÅ‘rzése" + +#: optiondialog.cpp:697 +msgid "" +"On: The indentation of the previous line is used for a new line.\n" +msgstr "" +"Ha be van jelölve: új sor kezdésekor az elÅ‘zÅ‘ sor behúzását használja a " +"program.\n" + +#: optiondialog.cpp:701 +msgid "Auto copy selection" +msgstr "A kijelölt adatok automatikus kimásolása a vágólapra" + +#: optiondialog.cpp:704 +msgid "" +"On: Any selection is immediately written to the clipboard.\n" +"Off: You must explicitely copy e.g. via Ctrl-C." +msgstr "" +"Ha be van jelölve: a kijelölt adatok másolata mindig automatikusan a vágólapra " +"kerül.\n" +"Ha nincs bejelölve: a másolás csak parancsra történik meg (pl. a Ctrl+C-vel)." + +#: optiondialog.cpp:709 +msgid "Line end style:" +msgstr "" + +#: optiondialog.cpp:721 +msgid "" +"Sets the line endings for when an edited file is saved.\n" +"DOS/Windows: CR+LF; UNIX: LF; with CR=0D, LF=0A" +msgstr "" + +#: optiondialog.cpp:732 +#, fuzzy +msgid "Diff" +msgstr "KDiff3" + +#: optiondialog.cpp:732 +#, fuzzy +msgid "Diff Settings" +msgstr "A diff és az összeolvasztás beállításai" + +#: optiondialog.cpp:743 +msgid "Preserve carriage return" +msgstr "A CR (kocsivissza) karakterek megÅ‘rzése" + +#: optiondialog.cpp:746 +msgid "" +"Show carriage return characters '\\r' if they exist.\n" +"Helps to compare files that were modified under different operating systems." +msgstr "" +"A kocsivissza ('\\r') karakterek megjelenítése.\n" +"Segít a különféle operációs rendszerekben megváltoztatott szövegek eltéréseinek " +"kezelésénél." + +#: optiondialog.cpp:751 +msgid "Ignore numbers" +msgstr "A számok figyelmen kívül hagyása" + +#: optiondialog.cpp:754 +msgid "" +"Ignore number characters during line matching phase. (Similar to Ignore white " +"space.)\n" +"Might help to compare files with numeric data." +msgstr "" +"A számjegyek figyelmen kívül hagyása sorillesztésnél. (Hasonló 'Az üres " +"karakterek figyelmen kívül hagyása' opcióhoz.)\n" +"Néha szükség lehet erre az opcióra számadatokat tartalmazó fájlok " +"összehasonlításánál." + +#: optiondialog.cpp:759 +#, fuzzy +msgid "Ignore C/C++ comments" +msgstr "A C/C++-megjegyzések figyelmen kívül hagyása" + +#: optiondialog.cpp:761 +msgid "Treat C/C++ comments like white space." +msgstr "A C/C++-megjegyzések üres helynek tekintése." + +#: optiondialog.cpp:765 +#, fuzzy +msgid "Ignore case" +msgstr "A számok figyelmen kívül hagyása" + +#: optiondialog.cpp:768 +msgid "Treat case differences like white space changes. ('a'<=>'A')" +msgstr "" + +#: optiondialog.cpp:772 +msgid "Preprocessor command:" +msgstr "ElÅ‘feldolgozási parancs:" + +#: optiondialog.cpp:776 +msgid "User defined pre-processing. (See the docs for details.)" +msgstr "" +"A felhasználó által megadott elÅ‘feldolgozás használata (a részletek a " +"dokumentációban találhatók)." + +#: optiondialog.cpp:779 +msgid "Line-matching preprocessor command:" +msgstr "Sorösszehasonlítási elÅ‘parancs:" + +#: optiondialog.cpp:783 +msgid "" +"This pre-processor is only used during line matching.\n" +"(See the docs for details.)" +msgstr "" +"Ezt a parancsot sorillesztésnél használja a program.\n" +"(A részletek a dokumentációban találhatók.)" + +#: optiondialog.cpp:786 +msgid "Try hard (slower)" +msgstr "Alaposabb próbálkozás (lassabb)" + +#: optiondialog.cpp:789 +msgid "" +"Enables the --minimal option for the external diff.\n" +"The analysis of big files will be much slower." +msgstr "" +"Bekapcsolja a --minimal opciót a külsÅ‘ diff programnál.\n" +"Hatására a sebesség jelentÅ‘sen lecsökkenhet nagy fájlok esetén." + +#: optiondialog.cpp:794 +msgid "Auto advance delay (ms):" +msgstr "Automatikus léptetési késleltetés (ms):" + +#: optiondialog.cpp:799 +msgid "" +"When in Auto-Advance mode the result of the current selection is shown \n" +"for the specified time, before jumping to the next conflict. Range: 0-2000 ms" +msgstr "" +"Automatikus léptetés esetén a megadott ideig a kijelölt rész látszik,\n" +"utána a program automatikusan a következÅ‘ ütközésre lép. A megengedett " +"értéktartomány: 0-2000 ms" + +#: optiondialog.cpp:809 +#, fuzzy +msgid "Merge Settings" +msgstr "A diff és az összeolvasztás beállításai" + +#: optiondialog.cpp:822 +msgid "White space 2-file merge default:" +msgstr "Ãœres karakterek 2 fájl összeolvasztásánál (alapértelmezés):" + +#: optiondialog.cpp:826 optiondialog.cpp:839 +#, fuzzy +msgid "Manual Choice" +msgstr "Kézi választás" + +#: optiondialog.cpp:830 optiondialog.cpp:844 +msgid "" +"Allow the merge algorithm to automatically select an input for white-space-only " +"changes." +msgstr "" +"LehetÅ‘vé teszi az összeolvasztási algoritmusnak, hogy automatikusan kiválassza " +"a megfelelÅ‘ bemenetet, ha az üres helyek megváltozását kell nézni." + +#: optiondialog.cpp:835 +msgid "White space 3-file merge default:" +msgstr "Ãœres karakterek 2 fájl összeolvasztásánál (alapértelmezés):" + +#: optiondialog.cpp:849 +msgid "Automatic Merge Regular Expression" +msgstr "" + +#: optiondialog.cpp:858 smalldialogs.cpp:397 +msgid "Auto merge regular expression:" +msgstr "" + +#: optiondialog.cpp:862 +msgid "" +"Regular expression for lines where KDiff3 should automatically choose one " +"source.\n" +"When a line with a conflict matches the regular expression then\n" +"- if available - C, otherwise B will be chosen." +msgstr "" + +#: optiondialog.cpp:868 +msgid "Run regular expression auto merge on merge start" +msgstr "" + +#: optiondialog.cpp:870 +msgid "" +"Run the merge for auto merge regular expressions\n" +"immediately when a merge starts.\n" +msgstr "" + +#: optiondialog.cpp:875 +msgid "Version Control History Merging" +msgstr "" + +#: optiondialog.cpp:884 smalldialogs.cpp:424 +msgid "History start regular expression:" +msgstr "" + +#: optiondialog.cpp:888 +msgid "" +"Regular expression for the start of the version control history entry.\n" +"Usually this line contains the \"$Log$\"-keyword.\n" +"Default value: \".*\\$Log.*\\$.*\"" +msgstr "" + +#: optiondialog.cpp:894 smalldialogs.cpp:453 +msgid "History entry start regular expression:" +msgstr "" + +#: optiondialog.cpp:906 +msgid "" +"A version control history entry consists of several lines.\n" +"Specify the regular expression to detect the first line (without the leading " +"comment).\n" +"Use parentheses to group the keys you want to use for sorting.\n" +"If left empty, then KDiff3 assumes that empty lines separate history entries.\n" +"See the documentation for details." +msgstr "" + +#: optiondialog.cpp:914 +msgid "History merge sorting" +msgstr "" + +#: optiondialog.cpp:916 +msgid "Sort version control history by a key." +msgstr "" + +#: optiondialog.cpp:926 +msgid "History entry start sort key order:" +msgstr "" + +#: optiondialog.cpp:930 +msgid "" +"Each parentheses used in the regular expression for the history start entry\n" +"groups a key that can be used for sorting.\n" +"Specify the list of keys (that are numbered in order of occurrence\n" +"starting with 1) using ',' as separator (e.g. \"4,5,6,1,2,3,7\").\n" +"If left empty, then no sorting will be done.\n" +"See the documentation for details." +msgstr "" + +#: optiondialog.cpp:941 +msgid "Merge version control history on merge start" +msgstr "" + +#: optiondialog.cpp:943 +msgid "Run version control history automerge on merge start." +msgstr "" + +#: optiondialog.cpp:947 +msgid "Test your regular expressions" +msgstr "" + +#: optiondialog.cpp:952 +msgid "Irrelevant merge command:" +msgstr "" + +#: optiondialog.cpp:956 +msgid "" +"If specified this script is run after automerge\n" +"when no other relevant changes were detected.\n" +"Called with the parameters: filename1 filename2 filename3" +msgstr "" + +#: optiondialog.cpp:966 +msgid "Directory Merge" +msgstr "Könyvtárösszeolvasztás" + +#: optiondialog.cpp:975 +msgid "Recursive directories" +msgstr "Az alkönyvtárakban is" + +#: optiondialog.cpp:977 +msgid "Whether to analyze subdirectories or not." +msgstr "" +"Itt lehet megadni, hogy az összehasonlítás az alkönyvtárak tartalmára is " +"kiterjedjen-e." + +#: optiondialog.cpp:979 +msgid "File pattern(s):" +msgstr "Fájlminták:" + +#: optiondialog.cpp:984 +msgid "" +"Pattern(s) of files to be analyzed. \n" +"Wildcards: '*' and '?'\n" +"Several Patterns can be specified by using the separator: ';'" +msgstr "" +"Az ellenÅ‘rzendÅ‘ fájlok mintája. \n" +"Használható illesztési karakterek: '*' és '?'\n" +"Több minta is megadható pontosvesszÅ‘vel elválasztva." + +#: optiondialog.cpp:990 +msgid "File-anti-pattern(s):" +msgstr "Kizáró fájlminták:" + +#: optiondialog.cpp:995 +msgid "" +"Pattern(s) of files to be excluded from analysis. \n" +"Wildcards: '*' and '?'\n" +"Several Patterns can be specified by using the separator: ';'" +msgstr "" +"A műveletbÅ‘l kizárni kívánt fájlok mintája. \n" +"Használható illesztési karakterek: '*' és '?'\n" +"Több minta is megadható pontosvesszÅ‘vel elválasztva." + +#: optiondialog.cpp:1001 +msgid "Dir-anti-pattern(s):" +msgstr "Kizáró könyvtárminták:" + +#: optiondialog.cpp:1006 +msgid "" +"Pattern(s) of directories to be excluded from analysis. \n" +"Wildcards: '*' and '?'\n" +"Several Patterns can be specified by using the separator: ';'" +msgstr "" +"A műveletbÅ‘l kizárni kívánt könyvtárak mintája. \n" +"Használható illesztési karakterek: '*' és '?'\n" +"Több minta is megadható pontosvesszÅ‘vel elválasztva." + +#: optiondialog.cpp:1012 +msgid "Use .cvsignore" +msgstr "A .cvsignore használata" + +#: optiondialog.cpp:1015 +msgid "" +"Extends the antipattern to anything that would be ignored by CVS.\n" +"Via local \".cvsignore\"-files this can be directory specific." +msgstr "" +"A kizárási mintát kiterjeszti a CVS által figyelmen kívül hagyott fájlokra.\n" +"A \".cvsignore\" fájlok segítségével ez minden könyvtárban külön megadható." + +#: optiondialog.cpp:1020 +msgid "Find hidden files and directories" +msgstr "A keresések a rejtett fájlokra és könyvtárakra is terjedjenek ki" + +#: optiondialog.cpp:1023 +msgid "Finds files and directories with the hidden attribute." +msgstr "A keresések terjedjenek ki a rejtett fájlokra és könyvtárakra is." + +#: optiondialog.cpp:1025 +msgid "Finds files and directories starting with '.'." +msgstr "" +"A keresések a ponttal kezdÅ‘dÅ‘ nevű fájlokra és könyvtárakra is terjedjenek ki." + +#: optiondialog.cpp:1029 +msgid "Follow file links" +msgstr "A fájllinkek követése" + +#: optiondialog.cpp:1032 +msgid "" +"On: Compare the file the link points to.\n" +"Off: Compare the links." +msgstr "" +"Be: összehasonlítás a link által mutatott fájllal.\n" +"Ki: a linkek összehasonlítása." + +#: optiondialog.cpp:1037 +msgid "Follow directory links" +msgstr "A linkek követése" + +#: optiondialog.cpp:1040 +msgid "" +"On: Compare the directory the link points to.\n" +"Off: Compare the links." +msgstr "" +"Ha be van jelölve: a linkek által mutatott könyvtárak lesznek összehasonlítva.\n" +"Ha nincs bejelölve: maguk a linkek lesznek összehasonlítva." + +#: optiondialog.cpp:1056 +msgid "Case sensitive filename comparison" +msgstr "" + +#: optiondialog.cpp:1059 +msgid "" +"The directory comparison will compare files or directories when their names " +"match.\n" +"Set this option if the case of the names must match. (Default for Windows is " +"off, otherwise on.)" +msgstr "" + +#: optiondialog.cpp:1063 +msgid "File Comparison Mode" +msgstr "" + +#: optiondialog.cpp:1067 +#, fuzzy +msgid "Binary comparison" +msgstr "A könyvtárak összehasonlítási állapota" + +#: optiondialog.cpp:1068 +msgid "Binary comparison of each file. (Default)" +msgstr "" + +#: optiondialog.cpp:1070 +msgid "Full analysis" +msgstr "" + +#: optiondialog.cpp:1071 +msgid "" +"Do a full analysis and show statistics information in extra columns.\n" +"(Slower than a binary comparison, much slower for binary files.)" +msgstr "" + +#: optiondialog.cpp:1074 +msgid "Trust the modification date (unsafe)" +msgstr "A módosítási dátum valósnak feltételezése (nem megbízható!)" + +#: optiondialog.cpp:1075 +msgid "" +"Assume that files are equal if the modification date and file length are " +"equal.\n" +"Useful for big directories or slow networks." +msgstr "" +"Két fájlt egyezÅ‘nek feltételez majd a program, ha a hosszuk és az utolsó " +"módosítás dátuma megegyezik.\n" +"Nagy könyvtárak vagy lassú hálózat esetén lehet erre szükség." + +#: optiondialog.cpp:1078 +msgid "Trust the size (unsafe)" +msgstr "A méret valósnak feltételezése (nem megbízható!)" + +#: optiondialog.cpp:1079 +msgid "" +"Assume that files are equal if their file lengths are equal.\n" +"Useful for big directories or slow networks when the date is modified during " +"download." +msgstr "" +"Két fájlt egyezÅ‘nek feltételez majd a program, ha a hosszuk megegyezik.\n" +"Nagy könyvtárak vagy lassú hálózat esetén lehet erre szükség, ha letöltéskor a " +"módosítási dátum megváltozik." + +#: optiondialog.cpp:1083 +msgid "Synchronize directories" +msgstr "A könyvtárak szinkronizálása" + +#: optiondialog.cpp:1086 +msgid "" +"Offers to store files in both directories so that\n" +"both directories are the same afterwards.\n" +"Works only when comparing two directories without specifying a destination." +msgstr "" +"A program másolja át a fájlokat mindkét könyvtárba - ilyenkor\n" +"összehasonlítás után a könyvtárak meg fognak egyezni.\n" +"Csak akkor működik, ha az összehasonlításnál nincs megadva a cél." + +#: optiondialog.cpp:1092 +#, fuzzy +msgid "White space differences considered equal" +msgstr "Ãœres karakterek 2 fájl összeolvasztásánál (alapértelmezés):" + +#: optiondialog.cpp:1095 +msgid "" +"If files differ only by white space consider them equal.\n" +"This is only active when full analysis is chosen." +msgstr "" + +#: optiondialog.cpp:1101 +msgid "Copy newer instead of merging (unsafe)" +msgstr "Az újabb másolása összeolvasztás helyett (nem megbízható!)." + +#: optiondialog.cpp:1104 +msgid "" +"Don't look inside, just take the newer file.\n" +"(Use this only if you know what you are doing!)\n" +"Only effective when comparing two directories." +msgstr "" +"Nem kell a fájlok tartalmával törÅ‘dni, csak az újabb fájlt kell venni.\n" +"Csak akkor használja, ha tudja, milyen következményekkel jár ez a művelet!\n" +"Az opciónak csak két könyvtár összehasonlításakor van hatása." + +#: optiondialog.cpp:1109 +msgid "Backup files (.orig)" +msgstr "Biztonsági mentések (.orig)" + +#: optiondialog.cpp:1112 +msgid "" +"When a file would be saved over an old file, then the old file\n" +"will be renamed with a '.orig'-extension instead of being deleted." +msgstr "" +"MielÅ‘tt a program egy régebbi fájlt felülírna az újabbal, a régi fájl\n" +"legyen átnevezve '.orig' kiterjesztéssel (törlés helyett)." + +#: optiondialog.cpp:1176 +msgid "Regional Settings" +msgstr "" + +#: optiondialog.cpp:1272 +msgid "Language (restart required)" +msgstr "" + +#: optiondialog.cpp:1304 +msgid "" +"Choose the language of the GUI-strings or \"Auto\".\n" +"For a change of language to take place, quit and restart KDiff3." +msgstr "" + +#: optiondialog.cpp:1322 +msgid "Use the same encoding for everything:" +msgstr "" + +#: optiondialog.cpp:1325 +msgid "" +"Enable this allows to change all encodings by changing the first only.\n" +"Disable this if different individual settings are needed." +msgstr "" + +#: optiondialog.cpp:1330 +#, fuzzy +msgid "Note: Local Encoding is " +msgstr "A helyi kódolás használata" + +#: optiondialog.cpp:1334 +msgid "File Encoding for A:" +msgstr "" + +#: optiondialog.cpp:1340 +msgid "" +"If enabled then Unicode (UTF-16 or UTF-8) encoding will be detected.\n" +"If the file encoding is not detected then the selected encoding will be used as " +"fallback.\n" +"(Unicode detection depends on the first bytes of a file - the byte order mark " +"\"BOM\".)" +msgstr "" + +#: optiondialog.cpp:1344 optiondialog.cpp:1353 optiondialog.cpp:1362 +msgid "Auto Detect Unicode" +msgstr "" + +#: optiondialog.cpp:1349 +msgid "File Encoding for B:" +msgstr "" + +#: optiondialog.cpp:1358 +msgid "File Encoding for C:" +msgstr "" + +#: optiondialog.cpp:1367 +msgid "File Encoding for Merge Output and Saving:" +msgstr "" + +#: optiondialog.cpp:1371 +#, fuzzy +msgid "Auto Select" +msgstr "A kijelölt adatok automatikus kimásolása a vágólapra" + +#: optiondialog.cpp:1374 +msgid "" +"If enabled then the encoding from the input files is used.\n" +"In ambiguous cases a dialog will ask the user to choose the encoding for " +"saving." +msgstr "" + +#: optiondialog.cpp:1378 +msgid "File Encoding for Preprocessor Files:" +msgstr "" + +#: optiondialog.cpp:1389 +msgid "Right To Left Language" +msgstr "" + +#: optiondialog.cpp:1392 +msgid "" +"Some languages are read from right to left.\n" +"This setting will change the viewer and editor accordingly." +msgstr "" + +#: optiondialog.cpp:1402 +#, fuzzy +msgid "Integration" +msgstr "Művelet" + +#: optiondialog.cpp:1402 +msgid "Integration Settings" +msgstr "" + +#: optiondialog.cpp:1412 +msgid "Command line options to ignore:" +msgstr "" + +#: optiondialog.cpp:1417 +msgid "" +"List of command line options that should be ignored when KDiff3 is used by " +"other tools.\n" +"Several values can be specified if separated via ';'\n" +"This will suppress the \"Unknown option\"-error." +msgstr "" + +#: optiondialog.cpp:1480 +msgid "" +"You selected a variable width font.\n" +"\n" +"Because this program doesn't handle variable width fonts\n" +"correctly, you might experience problems while editing.\n" +"\n" +"Do you want to continue or do you want to select another font." +msgstr "" +"Változó szélességű betűket tartalmazó betűtípust választott.\n" +"\n" +"Ez a program nem kezeli helyesen a változó szélességű betűket,\n" +"ezért különféle szerkesztési problémák léphetnek fel.\n" +"\n" +"Tovább szeretne lépni vagy inkább más betűtípust választ?" + +#: optiondialog.cpp:1484 +msgid "Incompatible Font" +msgstr "Nem kompatibilis betűtípus" + +#: optiondialog.cpp:1485 +msgid "Continue at Own Risk" +msgstr "Folytatás (kockázatos)" + +#: optiondialog.cpp:1485 +msgid "Select Another Font" +msgstr "Válasszon egy másik betűtípust" + +#: optiondialog.cpp:1521 +msgid "This resets all options. Not only those of the current topic." +msgstr "" +"Ezzel alapállapotba hozható az összes beállítás (nem csak az aktuális témáé)." + +#: pdiff.cpp:258 +#, fuzzy +msgid "PreprocessorCmd: " +msgstr "ElÅ‘feldolgozási parancs:" + +#: pdiff.cpp:263 +msgid "" +"The following option(s) you selected might change data:\n" +msgstr "" + +#: pdiff.cpp:264 +msgid "" +"\n" +"Most likely this is not wanted during a merge.\n" +"Do you want to disable these settings or continue with these settings active?" +msgstr "" + +#: pdiff.cpp:266 +msgid "Option Unsafe for Merging" +msgstr "" + +#: pdiff.cpp:267 +msgid "Use These Options During Merge" +msgstr "" + +#: pdiff.cpp:267 +msgid "Disable Unsafe Options" +msgstr "" + +#: pdiff.cpp:297 +msgid "Loading A" +msgstr "A betöltése" + +#: pdiff.cpp:301 +msgid "Loading B" +msgstr "B betöltése" + +#: pdiff.cpp:318 pdiff.cpp:344 +msgid "Diff: A <-> B" +msgstr "Diff: A <-> B" + +#: pdiff.cpp:324 pdiff.cpp:366 +msgid "Linediff: A <-> B" +msgstr "Sordiff: A <-> B" + +#: pdiff.cpp:335 +msgid "Loading C" +msgstr "C betöltése" + +#: pdiff.cpp:347 +msgid "Diff: B <-> C" +msgstr "Diff: B <-> C" + +#: pdiff.cpp:350 +msgid "Diff: A <-> C" +msgstr "Diff: A <-> C" + +#: pdiff.cpp:369 +msgid "Linediff: B <-> C" +msgstr "Linediff: B <-> C" + +#: pdiff.cpp:372 +msgid "Linediff: A <-> C" +msgstr "Linediff: A <-> C" + +#: pdiff.cpp:513 +#, fuzzy +msgid "All input files contain the same text, but are not binary equal." +msgstr "Az összes bemeneti fájl megegyezik (szöveges módban)." + +#: pdiff.cpp:515 pdiff.cpp:517 pdiff.cpp:519 +#, fuzzy +msgid "" +"Files %1 and %2 are binary equal.\n" +msgstr "" +"B és C binárisan megegyezik.\n" + +#: pdiff.cpp:516 pdiff.cpp:518 pdiff.cpp:520 +#, fuzzy +msgid "" +"Files %1 and %2 have equal text, but are not binary equal. \n" +msgstr "" +"A és B fájl binárisan megegyezik.\n" + +#: pdiff.cpp:530 +msgid "" +"Some inputfiles don't seem to be pure textfiles.\n" +"Note that the KDiff3-merge was not meant for binary data.\n" +"Continue at your own risk." +msgstr "" +"Néhány bemeneti fáj bináris fájlnak tűnik.\n" +"A KDiff3-féle összeolvasztás szöveges fájlok kezelésére való.\n" +"Csak akkor lépjen tovább, ha valóban ezt szeretne." + +#: pdiff.cpp:979 +msgid "Abort" +msgstr "Félbeszakítás" + +#: pdiff.cpp:985 pdiff.cpp:1073 +msgid "Opening files..." +msgstr "Fájlok megnyitása..." + +#: pdiff.cpp:1050 pdiff.cpp:1121 +msgid "File open error" +msgstr "Fájlmegnyitási hiba" + +#: pdiff.cpp:1153 +msgid "Cutting selection..." +msgstr "A kijelölt adatok kivágása..." + +#: pdiff.cpp:1174 +msgid "Copying selection to clipboard..." +msgstr "A kijelölt adatok másolása a vágólapra..." + +#: pdiff.cpp:1190 +msgid "Inserting clipboard contents..." +msgstr "A vágólap tartalmának beillesztése..." + +#: pdiff.cpp:1713 +msgid "Save && Continue" +msgstr "Mentés és folytatás" + +#: pdiff.cpp:1713 +msgid "Continue Without Saving" +msgstr "Folytatás mentés nélkül" + +#: pdiff.cpp:1920 +msgid "Search complete." +msgstr "A keresés befejezÅ‘dött." + +#: pdiff.cpp:1920 +msgid "Search Complete" +msgstr "A keresés befejezÅ‘dött" + +#: pdiff.cpp:2144 +msgid "Nothing is selected in either diff input window." +msgstr "" + +#: pdiff.cpp:2144 +#, fuzzy +msgid "Error while adding manual diff range" +msgstr "Hiba történt egy könyvtár létrehozása közben." + +#. i18n: file kdiff3_part.rc line 4 +#: rc.cpp:3 +#, no-c-format +msgid "&KDiff3" +msgstr "&KDiff3" + +#. i18n: file kdiff3_part.rc line 13 +#: rc.cpp:6 +#, no-c-format +msgid "Configure KDiff3" +msgstr "A KDiff3 beállításai" + +#. i18n: file kdiff3_shell.rc line 7 +#: rc.cpp:15 +#, no-c-format +msgid "&Directory" +msgstr "Köny&vtár" + +#. i18n: file kdiff3_shell.rc line 30 +#: rc.cpp:18 +#, no-c-format +msgid "Current Item Merge Operation" +msgstr "Összevonási művelet az aktuális elemmel" + +#. i18n: file kdiff3_shell.rc line 38 +#: rc.cpp:21 +#, no-c-format +msgid "Current Item Sync Operation" +msgstr "Szinkronizálási művelet az aktuális elemmel" + +#. i18n: file kdiff3_shell.rc line 50 +#: rc.cpp:24 +#, no-c-format +msgid "&Movement" +msgstr "Mozg&atás" + +#. i18n: file kdiff3_shell.rc line 61 +#: rc.cpp:27 +#, fuzzy, no-c-format +msgid "D&iffview" +msgstr "KDiff3" + +#. i18n: file kdiff3_shell.rc line 73 +#: rc.cpp:30 +#, no-c-format +msgid "&Merge" +msgstr "Össze&olvasztás" + +#. i18n: file kdiff3_shell.rc line 95 +#: rc.cpp:33 +#, no-c-format +msgid "&Window" +msgstr "&Ablak" + +#: smalldialogs.cpp:53 +msgid "A (Base):" +msgstr "A (alap):" + +#: smalldialogs.cpp:59 smalldialogs.cpp:75 smalldialogs.cpp:91 +#: smalldialogs.cpp:134 +msgid "File..." +msgstr "Fájl..." + +#: smalldialogs.cpp:61 smalldialogs.cpp:77 smalldialogs.cpp:93 +#: smalldialogs.cpp:136 +msgid "Dir..." +msgstr "Könyvtár..." + +#: smalldialogs.cpp:86 +msgid "C (Optional):" +msgstr "C (opcionális):" + +#: smalldialogs.cpp:108 +msgid "Swap/Copy Names ..." +msgstr "" + +#: smalldialogs.cpp:114 smalldialogs.cpp:115 smalldialogs.cpp:116 +msgid "Swap %1<->%2" +msgstr "" + +#: smalldialogs.cpp:117 smalldialogs.cpp:118 smalldialogs.cpp:119 +msgid "Copy %1->Output" +msgstr "" + +#: smalldialogs.cpp:120 smalldialogs.cpp:121 smalldialogs.cpp:122 +msgid "Swap %1<->Output" +msgstr "" + +#: smalldialogs.cpp:129 +msgid "Output (optional):" +msgstr "Kimenet (opcionális):" + +#: smalldialogs.cpp:158 +msgid "Configure..." +msgstr "Beállítás..." + +#: smalldialogs.cpp:347 +#, fuzzy +msgid "Search text:" +msgstr "A keresett szöveg:" + +#: smalldialogs.cpp:354 +msgid "Case sensitive" +msgstr "Nagybetűérzékeny" + +#: smalldialogs.cpp:357 +msgid "Search A" +msgstr "A keresése" + +#: smalldialogs.cpp:362 +msgid "Search B" +msgstr "B keresése" + +#: smalldialogs.cpp:367 +msgid "Search C" +msgstr "C keresése" + +#: smalldialogs.cpp:372 +msgid "Search output" +msgstr "A keresés kimenete" + +#: smalldialogs.cpp:377 +msgid "&Search" +msgstr "&Keresés" + +#: smalldialogs.cpp:394 +msgid "Regular Expression Tester" +msgstr "" + +#: smalldialogs.cpp:405 +msgid "Example auto merge line:" +msgstr "" + +#: smalldialogs.cpp:407 +msgid "For auto merge test copy a line as used in your files." +msgstr "" + +#: smalldialogs.cpp:413 smalldialogs.cpp:442 smalldialogs.cpp:479 +msgid "Match result:" +msgstr "" + +#: smalldialogs.cpp:432 +msgid "Example history start line (with leading comment):" +msgstr "" + +#: smalldialogs.cpp:435 +msgid "" +"Copy a history start line as used in your files,\n" +"including the leading comment." +msgstr "" + +#: smalldialogs.cpp:461 +msgid "History sort key order:" +msgstr "" + +#: smalldialogs.cpp:469 +msgid "Example history entry start line (without leading comment):" +msgstr "" + +#: smalldialogs.cpp:471 +msgid "" +"Copy a history entry start line as used in your files,\n" +"but omit the leading comment." +msgstr "" + +#: smalldialogs.cpp:486 +msgid "Sort key result:" +msgstr "" + +#: smalldialogs.cpp:537 smalldialogs.cpp:547 smalldialogs.cpp:568 +msgid "Match success." +msgstr "" + +#: smalldialogs.cpp:541 smalldialogs.cpp:551 smalldialogs.cpp:574 +#, fuzzy +msgid "Match failed." +msgstr "A mentés nem sikerült." + +#: smalldialogs.cpp:559 +msgid "Opening and closing parentheses don't match in regular expression." +msgstr "" + +#, fuzzy +#~ msgid "Diff and Merge" +#~ msgstr "Diff és összeolvasztás" + +#, fuzzy +#~ msgid "Save Directory Merge State ..." +#~ msgstr "Könyvtárösszeolvasztás" + +#, fuzzy +#~ msgid "Load Directory Merge State ..." +#~ msgstr "Könyvtárösszeolvasztás" + +#, fuzzy +#~ msgid "Synchronize Directories" +#~ msgstr "A könyvtárak szinkronizálása" + +#, fuzzy +#~ msgid "Copy Newer Files Instead of Merging" +#~ msgstr "Az újabb másolása összeolvasztás helyett (nem megbízható!)." + +#~ msgid "List only deltas" +#~ msgstr "Csak az eltérések jelenjenek meg" + +#~ msgid "Files and directories without change will not appear in the list." +#~ msgstr "A listában nem jelennek meg a nem módosult fájlok és könyvtárak." + +#, fuzzy +#~ msgid "no selection" +#~ msgstr "A kijelölt adatok automatikus kimásolása a vágólapra" + +#, fuzzy +#~ msgid "Manually match lines" +#~ msgstr "Kézi választás" + +#, fuzzy +#~ msgid "Has no effect. For compatibility with certain tools." +#~ msgstr "Néhány eszközzel való kompatibilitásért." + +#~ msgid "For compatibility with certain tools." +#~ msgstr "Néhány eszközzel való kompatibilitásért." + +#~ msgid "Colors in Editor & Diff Output" +#~ msgstr "A szerkesztÅ‘ és a diff-kimenet színei" + +#~ msgid "Text Diff and Merge Tool" +#~ msgstr "Szöveges eszköz diff készítéséhez és összeolvasztáshoz" + +#~ msgid "" +#~ "\n" +#~ "\n" +#~ "File not saved." +#~ msgstr "" +#~ "\n" +#~ "\n" +#~ "A fájl nem lett elmentve." + +#~ msgid "Out of memory while preparing to save." +#~ msgstr "A mentés elÅ‘készítése közben elfogyott a memória." + +#~ msgid "Delete (If Exists)" +#~ msgstr "Törlés (ha létezik)" + +#~ msgid "Delete A and B" +#~ msgstr "A és B törlése" + +#~ msgid "Merge to A and B" +#~ msgstr "Beolvasztás A és B-be" + +#, fuzzy +#~ msgid "Error writing temporary file: %1" +#~ msgstr "Fájl írása: %1" + +#~ msgid "Convert to upper case" +#~ msgstr "Konvertálás nagybetűkre" + +#~ msgid "Turn all lower case characters to upper case on reading. (e.g.: 'a'->'A')" +#~ msgstr "A kisbetűk nagybetűkké alakítása olvasáskor (pl. 'a' -> 'A')" + +#, fuzzy +#~ msgid "Convert to upper case\n" +#~ msgstr "Konvertálás nagybetűkre" + +#~ msgid "" +#~ "Running the external diff failed.\n" +#~ "Check if the diff works, if the program can write in the temp folder or if the disk is full.\n" +#~ "The external diff option will be disabled now and the internal diff will be used." +#~ msgstr "" +#~ "Nem sikerült futtatni a külsÅ‘ diff programot.\n" +#~ "EllenÅ‘rizze, hogy a program használható-e, tud-e írni az ideiglenes könyvtárba és van-e elég szabad hely a lemezen.\n" +#~ "A külsÅ‘ diff program le lesz tiltva, helyette a beépített diff program lesz felhasználva." diff --git a/po/is.po b/po/is.po new file mode 100644 index 0000000..03a165c --- /dev/null +++ b/po/is.po @@ -0,0 +1,2304 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"POT-Creation-Date: 2006-11-05 08:45+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: ENCODING\n" + +#: _translatorinfo.cpp:1 +msgid "" +"_: NAME OF TRANSLATORS\n" +"Your names" +msgstr "" + +#: _translatorinfo.cpp:3 +msgid "" +"_: EMAIL OF TRANSLATORS\n" +"Your emails" +msgstr "" + +#: diff.cpp:246 +msgid "Writing clipboard data to temp file failed." +msgstr "" + +#: diff.cpp:250 +msgid "From Clipboard" +msgstr "" + +#: diff.cpp:491 +msgid "" +"Preprocessing possibly failed. Check this command:\n" +"\n" +" %1\n" +"\n" +"The preprocessing command will be disabled now." +msgstr "" + +#: diff.cpp:526 +msgid "" +"The line-matching-preprocessing possibly failed. Check this command:\n" +"\n" +" %1\n" +"\n" +"The line-matching-preprocessing command will be disabled now." +msgstr "" + +#: diff.cpp:1631 diff.cpp:1645 +msgid "" +"Data loss error:\n" +"If it is reproducable please contact the author.\n" +msgstr "" + +#: diff.cpp:1633 diff.cpp:1647 +msgid "Severe Internal Error" +msgstr "" + +#: difftextwindow.cpp:1643 kdiff3.cpp:753 +msgid "Top line" +msgstr "" + +#: difftextwindow.cpp:1653 +msgid "End" +msgstr "" + +#: directorymergewindow.cpp:142 +msgid "Mix of links and normal files." +msgstr "" + +#: directorymergewindow.cpp:149 +msgid "Link: " +msgstr "" + +#: directorymergewindow.cpp:157 +msgid "Size. " +msgstr "" + +#: directorymergewindow.cpp:170 +msgid "Date & Size: " +msgstr "" + +#: directorymergewindow.cpp:179 directorymergewindow.cpp:185 +msgid "Creating temp copy of %1 failed." +msgstr "" + +#: directorymergewindow.cpp:196 directorymergewindow.cpp:204 +msgid "Opening %1 failed." +msgstr "" + +#: directorymergewindow.cpp:208 +msgid "Comparing file..." +msgstr "" + +#: directorymergewindow.cpp:218 directorymergewindow.cpp:224 +#, c-format +msgid "Error reading from %1" +msgstr "" + +#: directorymergewindow.cpp:282 +msgid "Name" +msgstr "" + +#: directorymergewindow.cpp:286 +msgid "Operation" +msgstr "" + +#: directorymergewindow.cpp:287 +msgid "Status" +msgstr "" + +#: directorymergewindow.cpp:288 +msgid "Unsolved" +msgstr "" + +#: directorymergewindow.cpp:289 +msgid "Solved" +msgstr "" + +#: directorymergewindow.cpp:290 +msgid "Nonwhite" +msgstr "" + +#: directorymergewindow.cpp:291 +msgid "White" +msgstr "" + +#: directorymergewindow.cpp:319 +msgid "" +"You are currently doing a directory merge. Are you sure, you want to abort the " +"merge and rescan the directory?" +msgstr "" + +#: directorymergewindow.cpp:320 directorymergewindow.cpp:2868 +msgid "Rescan" +msgstr "" + +#: directorymergewindow.cpp:320 kdiff3.cpp:603 pdiff.cpp:979 +msgid "Continue Merging" +msgstr "" + +#: directorymergewindow.cpp:462 +msgid "Opening of directories failed:" +msgstr "" + +#: directorymergewindow.cpp:465 +msgid "" +"Dir A \"%1\" does not exist or is not a directory.\n" +msgstr "" + +#: directorymergewindow.cpp:468 +msgid "" +"Dir B \"%1\" does not exist or is not a directory.\n" +msgstr "" + +#: directorymergewindow.cpp:471 +msgid "" +"Dir C \"%1\" does not exist or is not a directory.\n" +msgstr "" + +#: directorymergewindow.cpp:473 +msgid "Directory Open Error" +msgstr "" + +#: directorymergewindow.cpp:481 +msgid "" +"The destination directory must not be the same as A or B when three directories " +"are merged.\n" +"Check again before continuing." +msgstr "" + +#: directorymergewindow.cpp:483 +msgid "Parameter Warning" +msgstr "" + +#: directorymergewindow.cpp:488 +msgid "Scanning directories..." +msgstr "" + +#: directorymergewindow.cpp:537 +msgid "Reading Directory A" +msgstr "" + +#: directorymergewindow.cpp:559 +msgid "Reading Directory B" +msgstr "" + +#: directorymergewindow.cpp:581 +msgid "Reading Directory C" +msgstr "" + +#: directorymergewindow.cpp:607 +msgid "Some subdirectories were not readable in" +msgstr "" + +#: directorymergewindow.cpp:612 +msgid "Check the permissions of the subdirectories." +msgstr "" + +#: directorymergewindow.cpp:646 kdiff3.cpp:552 kdiff3.cpp:636 kdiff3.cpp:661 +#: kdiff3.cpp:934 kdiff3.cpp:955 pdiff.cpp:1059 pdiff.cpp:1131 pdiff.cpp:1169 +#: pdiff.cpp:1185 pdiff.cpp:1215 pdiff.cpp:1226 +msgid "Ready." +msgstr "" + +#: directorymergewindow.cpp:660 +msgid "Directory Comparison Status" +msgstr "" + +#: directorymergewindow.cpp:661 +msgid "Number of subdirectories:" +msgstr "" + +#: directorymergewindow.cpp:662 +msgid "Number of equal files:" +msgstr "" + +#: directorymergewindow.cpp:663 +msgid "Number of different files:" +msgstr "" + +#: directorymergewindow.cpp:666 +msgid "Number of manual merges:" +msgstr "" + +#: directorymergewindow.cpp:802 +msgid "This affects all merge operations." +msgstr "" + +#: directorymergewindow.cpp:803 +msgid "Changing All Merge Operations" +msgstr "" + +#: directorymergewindow.cpp:803 mergeresultwindow.cpp:287 +msgid "C&ontinue" +msgstr "" + +#: directorymergewindow.cpp:1169 +msgid "Processing " +msgstr "" + +#: directorymergewindow.cpp:1647 directorymergewindow.cpp:1653 +msgid "To do." +msgstr "" + +#: directorymergewindow.cpp:1756 directorymergewindow.cpp:2899 +msgid "Copy A to B" +msgstr "" + +#: directorymergewindow.cpp:1757 directorymergewindow.cpp:2900 +msgid "Copy B to A" +msgstr "" + +#: directorymergewindow.cpp:1758 directorymergewindow.cpp:2901 +msgid "Delete A" +msgstr "" + +#: directorymergewindow.cpp:1759 directorymergewindow.cpp:2902 +msgid "Delete B" +msgstr "" + +#: directorymergewindow.cpp:1760 +msgid "Delete A & B" +msgstr "" + +#: directorymergewindow.cpp:1761 directorymergewindow.cpp:2904 +msgid "Merge to A" +msgstr "" + +#: directorymergewindow.cpp:1762 directorymergewindow.cpp:2905 +msgid "Merge to B" +msgstr "" + +#: directorymergewindow.cpp:1763 +msgid "Merge to A & B" +msgstr "" + +#: directorymergewindow.cpp:1767 directorymergewindow.cpp:2896 +msgid "Delete (if exists)" +msgstr "" + +#: directorymergewindow.cpp:1768 directorymergewindow.cpp:1769 +#: directorymergewindow.cpp:2895 optiondialog.cpp:809 smalldialogs.cpp:102 +msgid "Merge" +msgstr "" + +#: directorymergewindow.cpp:1768 directorymergewindow.cpp:1769 +msgid "Merge (manual)" +msgstr "" + +#: directorymergewindow.cpp:1770 +msgid "Error: Conflicting File Types" +msgstr "" + +#: directorymergewindow.cpp:1771 +msgid "Error: Dates are equal but files are not." +msgstr "" + +#: directorymergewindow.cpp:1795 directorymergewindow.cpp:1824 +#: directorymergewindow.cpp:1849 +msgid "This operation is currently not possible." +msgstr "" + +#: directorymergewindow.cpp:1795 directorymergewindow.cpp:1824 +#: directorymergewindow.cpp:1849 directorymergewindow.cpp:2106 +msgid "Operation Not Possible" +msgstr "" + +#: directorymergewindow.cpp:1888 +msgid "" +"This should never happen: \n" +"\n" +"mergeResultSaved: m_pMFI=0\n" +"\n" +"If you know how to reproduce this, please contact the program author." +msgstr "" + +#: directorymergewindow.cpp:1888 +msgid "Program Error" +msgstr "" + +#: directorymergewindow.cpp:1899 +msgid "" +"An error occurred while copying.\n" +msgstr "" + +#: directorymergewindow.cpp:1900 directorymergewindow.cpp:2306 +msgid "Merge Error" +msgstr "" + +#: directorymergewindow.cpp:1905 directorymergewindow.cpp:2311 +msgid "Error." +msgstr "" + +#: directorymergewindow.cpp:1910 directorymergewindow.cpp:2202 +#: directorymergewindow.cpp:2242 +msgid "Done." +msgstr "" + +#: directorymergewindow.cpp:1933 +msgid "Not saved." +msgstr "" + +#: directorymergewindow.cpp:1968 +msgid "Unknown merge operation. (This must never happen!)" +msgstr "" + +#: directorymergewindow.cpp:2000 +msgid "Unknown merge operation." +msgstr "" + +#: directorymergewindow.cpp:2015 +msgid "" +"The merge is about to begin.\n" +"\n" +"Choose \"Do it\" if you have read the instructions and know what you are " +"doing.\n" +"Choosing \"Simulate it\" will tell you what would happen.\n" +"\n" +"Be aware that this program still has beta status and there is NO WARRANTY " +"whatsoever! Make backups of your vital data!" +msgstr "" + +#: directorymergewindow.cpp:2020 +msgid "Starting Merge" +msgstr "" + +#: directorymergewindow.cpp:2020 +msgid "Do It" +msgstr "" + +#: directorymergewindow.cpp:2020 +msgid "Simulate It" +msgstr "" + +#: directorymergewindow.cpp:2046 +msgid "" +"The highlighted item has a different type in the different directories. Select " +"what to do." +msgstr "" + +#: directorymergewindow.cpp:2055 +msgid "" +"The modification dates of the file are equal but the files are not. Select what " +"to do." +msgstr "" + +#: directorymergewindow.cpp:2106 +msgid "" +"This operation is currently not possible because directory merge is currently " +"running." +msgstr "" + +#: directorymergewindow.cpp:2166 +msgid "" +"There was an error in the last step.\n" +"Do you want to continue with the item that caused the error or do you want to " +"skip this item?" +msgstr "" + +#: directorymergewindow.cpp:2168 +msgid "Continue merge after an error" +msgstr "" + +#: directorymergewindow.cpp:2168 +msgid "Continue With Last Item" +msgstr "" + +#: directorymergewindow.cpp:2168 +msgid "Skip Item" +msgstr "" + +#: directorymergewindow.cpp:2202 +msgid "Skipped." +msgstr "" + +#: directorymergewindow.cpp:2209 directorymergewindow.cpp:2435 +msgid "In progress..." +msgstr "" + +#: directorymergewindow.cpp:2257 +msgid "Merge operation complete." +msgstr "" + +#: directorymergewindow.cpp:2257 directorymergewindow.cpp:2260 +msgid "Merge Complete" +msgstr "" + +#: directorymergewindow.cpp:2269 +msgid "" +"Simulated merge complete: Check if you agree with the proposed operations." +msgstr "" + +#: directorymergewindow.cpp:2305 +msgid "" +"An error occurred. Press OK to see detailed information.\n" +msgstr "" + +#: directorymergewindow.cpp:2348 +msgid "Error: While deleting %1: Creating backup failed." +msgstr "" + +#: directorymergewindow.cpp:2355 +msgid "delete directory recursively( %1 )" +msgstr "" + +#: directorymergewindow.cpp:2357 +msgid "delete( %1 )" +msgstr "" + +#: directorymergewindow.cpp:2372 +msgid "Error: delete dir operation failed while trying to read the directory." +msgstr "" + +#: directorymergewindow.cpp:2391 +msgid "Error: rmdir( %1 ) operation failed." +msgstr "" + +#: directorymergewindow.cpp:2401 +msgid "Error: delete operation failed." +msgstr "" + +#: directorymergewindow.cpp:2427 +msgid "manual merge( %1, %2, %3 -> %4)" +msgstr "" + +#: directorymergewindow.cpp:2430 +msgid "" +" Note: After a manual merge the user should continue by pressing F7." +msgstr "" + +#: directorymergewindow.cpp:2453 +msgid "Error: copy( %1 -> %2 ) failed.Deleting existing destination failed." +msgstr "" + +#: directorymergewindow.cpp:2463 +msgid "copyLink( %1 -> %2 )" +msgstr "" + +#: directorymergewindow.cpp:2474 +msgid "Error: copyLink failed: Remote links are not yet supported." +msgstr "" + +#: directorymergewindow.cpp:2480 +msgid "Error: copyLink failed." +msgstr "" + +#: directorymergewindow.cpp:2500 +msgid "copy( %1 -> %2 )" +msgstr "" + +#: directorymergewindow.cpp:2526 +msgid "Error during rename( %1 -> %2 ): Cannot delete existing destination." +msgstr "" + +#: directorymergewindow.cpp:2532 +msgid "rename( %1 -> %2 )" +msgstr "" + +#: directorymergewindow.cpp:2541 +msgid "Error: Rename failed." +msgstr "" + +#: directorymergewindow.cpp:2559 +msgid "Error during makeDir of %1. Cannot delete existing file." +msgstr "" + +#: directorymergewindow.cpp:2575 +msgid "makeDir( %1 )" +msgstr "" + +#: directorymergewindow.cpp:2585 +msgid "Error while creating directory." +msgstr "" + +#: directorymergewindow.cpp:2608 directorymergewindow.cpp:2725 +msgid "Dest" +msgstr "" + +#: directorymergewindow.cpp:2612 directorymergewindow.cpp:2650 +msgid "Dir" +msgstr "" + +#: directorymergewindow.cpp:2613 +msgid "Type" +msgstr "" + +#: directorymergewindow.cpp:2614 +msgid "Size" +msgstr "" + +#: directorymergewindow.cpp:2615 +msgid "Attr" +msgstr "" + +#: directorymergewindow.cpp:2616 +msgid "Last Modification" +msgstr "" + +#: directorymergewindow.cpp:2617 +msgid "Link-Destination" +msgstr "" + +#: directorymergewindow.cpp:2667 +msgid "not available" +msgstr "" + +#: directorymergewindow.cpp:2687 +msgid "A (Dest): " +msgstr "" + +#: directorymergewindow.cpp:2690 +msgid "A (Base): " +msgstr "" + +#: directorymergewindow.cpp:2696 +msgid "B (Dest): " +msgstr "" + +#: directorymergewindow.cpp:2704 +msgid "C (Dest): " +msgstr "" + +#: directorymergewindow.cpp:2710 +msgid "Dest: " +msgstr "" + +#: directorymergewindow.cpp:2775 +msgid "Save Directory Merge State As..." +msgstr "" + +#: directorymergewindow.cpp:2862 +msgid "Start/Continue Directory Merge" +msgstr "" + +#: directorymergewindow.cpp:2863 +msgid "Run Operation for Current Item" +msgstr "" + +#: directorymergewindow.cpp:2864 +msgid "Compare Selected File" +msgstr "" + +#: directorymergewindow.cpp:2865 +msgid "Merge Current File" +msgstr "" + +#: directorymergewindow.cpp:2866 +msgid "Fold All Subdirs" +msgstr "" + +#: directorymergewindow.cpp:2867 +msgid "Unfold All Subdirs" +msgstr "" + +#: directorymergewindow.cpp:2871 +msgid "Choose A for All Items" +msgstr "" + +#: directorymergewindow.cpp:2872 +msgid "Choose B for All Items" +msgstr "" + +#: directorymergewindow.cpp:2873 +msgid "Choose C for All Items" +msgstr "" + +#: directorymergewindow.cpp:2874 +msgid "Auto-Choose Operation for All Items" +msgstr "" + +#: directorymergewindow.cpp:2875 +msgid "No Operation for All Items" +msgstr "" + +#: directorymergewindow.cpp:2880 +msgid "Show Identical Files" +msgstr "" + +#: directorymergewindow.cpp:2881 +msgid "Show Different Files" +msgstr "" + +#: directorymergewindow.cpp:2882 +msgid "Show Files only in A" +msgstr "" + +#: directorymergewindow.cpp:2883 +msgid "Show Files only in B" +msgstr "" + +#: directorymergewindow.cpp:2884 +msgid "Show Files only in C" +msgstr "" + +#: directorymergewindow.cpp:2888 +msgid "Compare Explicitly Selected Files" +msgstr "" + +#: directorymergewindow.cpp:2889 +msgid "Merge Explicitly Selected Files" +msgstr "" + +#: directorymergewindow.cpp:2891 directorymergewindow.cpp:2898 +msgid "Do Nothing" +msgstr "" + +#: directorymergewindow.cpp:2892 +msgid "A" +msgstr "" + +#: directorymergewindow.cpp:2893 +msgid "B" +msgstr "" + +#: directorymergewindow.cpp:2894 +msgid "C" +msgstr "" + +#: directorymergewindow.cpp:2903 +msgid "Delete A && B" +msgstr "" + +#: directorymergewindow.cpp:2906 +msgid "Merge to A && B" +msgstr "" + +#: fileaccess.cpp:595 +msgid "" +"While trying to make a backup, deleting an older backup failed. \n" +"Filename: " +msgstr "" + +#: fileaccess.cpp:602 +msgid "" +"While trying to make a backup, renaming failed. \n" +"Filenames: " +msgstr "" + +#: fileaccess.cpp:624 +#, c-format +msgid "Getting file status: %1" +msgstr "" + +#: fileaccess.cpp:667 +#, c-format +msgid "Reading file: %1" +msgstr "" + +#: fileaccess.cpp:703 +#, c-format +msgid "Writing file: %1" +msgstr "" + +#: fileaccess.cpp:731 +msgid "Out of memory" +msgstr "" + +#: fileaccess.cpp:766 +#, c-format +msgid "Making directory: %1" +msgstr "" + +#: fileaccess.cpp:786 +#, c-format +msgid "Removing directory: %1" +msgstr "" + +#: fileaccess.cpp:801 +#, c-format +msgid "Removing file: %1" +msgstr "" + +#: fileaccess.cpp:817 +msgid "Creating symbolic link: %1 -> %2" +msgstr "" + +#: fileaccess.cpp:843 +msgid "Renaming file: %1 -> %2" +msgstr "" + +#: fileaccess.cpp:879 +msgid "Copying file: %1 -> %2" +msgstr "" + +#: fileaccess.cpp:893 +#, c-format +msgid "" +"Error during file copy operation: Opening file for reading failed. Filename: %1" +msgstr "" + +#: fileaccess.cpp:899 +#, c-format +msgid "" +"Error during file copy operation: Opening file for writing failed. Filename: %1" +msgstr "" + +#: fileaccess.cpp:914 +#, c-format +msgid "Error during file copy operation: Reading failed. Filename: %1" +msgstr "" + +#: fileaccess.cpp:923 +#, c-format +msgid "Error during file copy operation: Writing failed. Filename: %1" +msgstr "" + +#: fileaccess.cpp:1219 +msgid "Reading directory: " +msgstr "" + +#: fileaccess.cpp:1348 +#, c-format +msgid "Listing directory: %1" +msgstr "" + +#: kdiff3.cpp:142 +msgid "Current Configuration:" +msgstr "" + +#: kdiff3.cpp:147 +msgid "Config Option Error:" +msgstr "" + +#: kdiff3.cpp:187 +msgid "Option --auto used, but no output file specified." +msgstr "" + +#: kdiff3.cpp:323 +msgid "Option --auto ignored for directory comparison." +msgstr "" + +#: kdiff3.cpp:359 +msgid "Saving failed." +msgstr "" + +#: kdiff3.cpp:386 pdiff.cpp:1041 pdiff.cpp:1112 +msgid "Opening of these files failed:" +msgstr "" + +#: kdiff3.cpp:395 +msgid "File Open Error" +msgstr "" + +#: kdiff3.cpp:418 +msgid "Opens documents for comparison..." +msgstr "" + +#: kdiff3.cpp:423 +msgid "Saves the merge result. All conflicts must be solved!" +msgstr "" + +#: kdiff3.cpp:425 +msgid "Saves the current document as..." +msgstr "" + +#: kdiff3.cpp:427 +msgid "Print the differences" +msgstr "" + +#: kdiff3.cpp:429 +msgid "Quits the application" +msgstr "" + +#: kdiff3.cpp:431 +msgid "Cuts the selected section and puts it to the clipboard" +msgstr "" + +#: kdiff3.cpp:433 +msgid "Copies the selected section to the clipboard" +msgstr "" + +#: kdiff3.cpp:435 +msgid "Pastes the clipboard contents to actual position" +msgstr "" + +#: kdiff3.cpp:437 +msgid "Select everything in current window" +msgstr "" + +#: kdiff3.cpp:439 +msgid "Search for a string" +msgstr "" + +#: kdiff3.cpp:441 +msgid "Search again for the string" +msgstr "" + +#: kdiff3.cpp:443 +msgid "Enables/disables the toolbar" +msgstr "" + +#: kdiff3.cpp:445 +msgid "Enables/disables the statusbar" +msgstr "" + +#: kdiff3.cpp:449 +msgid "Configure KDiff3..." +msgstr "" + +#: kdiff3.cpp:470 +msgid "Go to Current Delta" +msgstr "" + +#: kdiff3.cpp:471 +msgid "Go to First Delta" +msgstr "" + +#: kdiff3.cpp:472 +msgid "Go to Last Delta" +msgstr "" + +#: kdiff3.cpp:473 +msgid "(Skips white space differences when \"Show White Space\" is disabled.)" +msgstr "" + +#: kdiff3.cpp:474 +msgid "" +"(Does not skip white space differences even when \"Show White Space\" is " +"disabled.)" +msgstr "" + +#: kdiff3.cpp:475 +msgid "Go to Previous Delta" +msgstr "" + +#: kdiff3.cpp:477 +msgid "Go to Next Delta" +msgstr "" + +#: kdiff3.cpp:479 +msgid "Go to Previous Conflict" +msgstr "" + +#: kdiff3.cpp:481 +msgid "Go to Next Conflict" +msgstr "" + +#: kdiff3.cpp:483 +msgid "Go to Previous Unsolved Conflict" +msgstr "" + +#: kdiff3.cpp:485 +msgid "Go to Next Unsolved Conflict" +msgstr "" + +#: kdiff3.cpp:487 +msgid "Select Line(s) From A" +msgstr "" + +#: kdiff3.cpp:488 +msgid "Select Line(s) From B" +msgstr "" + +#: kdiff3.cpp:489 +msgid "Select Line(s) From C" +msgstr "" + +#: kdiff3.cpp:490 +msgid "Automatically Go to Next Unsolved Conflict After Source Selection" +msgstr "" + +#: kdiff3.cpp:492 +msgid "Show Space && Tabulator Characters for Differences" +msgstr "" + +#: kdiff3.cpp:493 +msgid "Show White Space" +msgstr "" + +#: kdiff3.cpp:495 +msgid "Show Line Numbers" +msgstr "" + +#: kdiff3.cpp:496 +msgid "Choose A Everywhere" +msgstr "" + +#: kdiff3.cpp:497 +msgid "Choose B Everywhere" +msgstr "" + +#: kdiff3.cpp:498 +msgid "Choose C Everywhere" +msgstr "" + +#: kdiff3.cpp:499 +msgid "Choose A for All Unsolved Conflicts" +msgstr "" + +#: kdiff3.cpp:500 +msgid "Choose B for All Unsolved Conflicts" +msgstr "" + +#: kdiff3.cpp:501 +msgid "Choose C for All Unsolved Conflicts" +msgstr "" + +#: kdiff3.cpp:502 +msgid "Choose A for All Unsolved Whitespace Conflicts" +msgstr "" + +#: kdiff3.cpp:503 +msgid "Choose B for All Unsolved Whitespace Conflicts" +msgstr "" + +#: kdiff3.cpp:504 +msgid "Choose C for All Unsolved Whitespace Conflicts" +msgstr "" + +#: kdiff3.cpp:505 +msgid "Automatically Solve Simple Conflicts" +msgstr "" + +#: kdiff3.cpp:506 +msgid "Set Deltas to Conflicts" +msgstr "" + +#: kdiff3.cpp:507 +msgid "Run Regular Expression Auto Merge" +msgstr "" + +#: kdiff3.cpp:508 +msgid "Automatically Solve History Conflicts" +msgstr "" + +#: kdiff3.cpp:509 +msgid "Split Diff At Selection" +msgstr "" + +#: kdiff3.cpp:510 +msgid "Join Selected Diffs" +msgstr "" + +#: kdiff3.cpp:512 +msgid "Show Window A" +msgstr "" + +#: kdiff3.cpp:513 +msgid "Show Window B" +msgstr "" + +#: kdiff3.cpp:514 +msgid "Show Window C" +msgstr "" + +#: kdiff3.cpp:515 kdiff3.cpp:526 +msgid "Focus Next Window" +msgstr "" + +#: kdiff3.cpp:517 +msgid "Normal Overview" +msgstr "" + +#: kdiff3.cpp:518 +msgid "A vs. B Overview" +msgstr "" + +#: kdiff3.cpp:519 +msgid "A vs. C Overview" +msgstr "" + +#: kdiff3.cpp:520 +msgid "B vs. C Overview" +msgstr "" + +#: kdiff3.cpp:521 +msgid "Word Wrap Diff Windows" +msgstr "" + +#: kdiff3.cpp:522 +msgid "Add Manual Diff Alignment" +msgstr "" + +#: kdiff3.cpp:523 +msgid "Clear All Manual Diff Alignments" +msgstr "" + +#: kdiff3.cpp:528 +msgid "Focus Prev Window" +msgstr "" + +#: kdiff3.cpp:529 +msgid "Toggle Split Orientation" +msgstr "" + +#: kdiff3.cpp:531 +msgid "Dir && Text Split Screen View" +msgstr "" + +#: kdiff3.cpp:533 +msgid "Toggle Between Dir && Text View" +msgstr "" + +#: kdiff3.cpp:582 pdiff.cpp:1712 +msgid "The merge result hasn't been saved." +msgstr "" + +#: kdiff3.cpp:583 +msgid "Save && Quit" +msgstr "" + +#: kdiff3.cpp:583 +msgid "Quit Without Saving" +msgstr "" + +#: kdiff3.cpp:591 pdiff.cpp:1721 +msgid "Saving the merge result failed." +msgstr "" + +#: kdiff3.cpp:602 pdiff.cpp:978 +msgid "" +"You are currently doing a directory merge. Are you sure, you want to abort?" +msgstr "" + +#: kdiff3.cpp:625 +msgid "Saving file..." +msgstr "" + +#: kdiff3.cpp:642 +msgid "Saving file with a new filename..." +msgstr "" + +#: kdiff3.cpp:732 +msgid "Printing..." +msgstr "" + +#: kdiff3.cpp:738 kdiff3.cpp:900 +msgid "Printing aborted." +msgstr "" + +#: kdiff3.cpp:870 +msgid "Selection" +msgstr "" + +#: kdiff3.cpp:896 +msgid "Printing completed." +msgstr "" + +#: kdiff3.cpp:906 +msgid "Exiting..." +msgstr "" + +#: kdiff3.cpp:918 +msgid "Toggling toolbar..." +msgstr "" + +#: kdiff3.cpp:939 +msgid "Toggle the statusbar..." +msgstr "" + +#: kdiff3_part.cpp:155 kdiff3_part.cpp:224 +msgid "Couldn't find files for comparison." +msgstr "" + +#: kdiff3_part.cpp:291 +msgid "KDiff3Part" +msgstr "" + +#: kdiff3_shell.cpp:78 +msgid "" +"Could not find our part!\n" +"This usually happens due to an installation problem. Please read the " +"README-file in the source package for details." +msgstr "" + +#: main.cpp:35 +msgid "Tool for Comparison and Merge of Files and Directories" +msgstr "" + +#: main.cpp:40 +msgid "Merge the input." +msgstr "" + +#: main.cpp:42 +msgid "Explicit base file. For compatibility with certain tools." +msgstr "" + +#: main.cpp:44 +msgid "Output file. Implies -m. E.g.: -o newfile.txt" +msgstr "" + +#: main.cpp:45 +msgid "Output file, again. (For compatibility with certain tools.)" +msgstr "" + +#: main.cpp:46 +msgid "No GUI if all conflicts are auto-solvable. (Needs -o file)" +msgstr "" + +#: main.cpp:47 +msgid "Don't solve conflicts automatically. (For compatibility...)" +msgstr "" + +#: main.cpp:48 +msgid "Visible name replacement for input file 1 (base)." +msgstr "" + +#: main.cpp:49 +msgid "Visible name replacement for input file 2." +msgstr "" + +#: main.cpp:50 +msgid "Visible name replacement for input file 3." +msgstr "" + +#: main.cpp:52 +msgid "Alternative visible name replacement. Supply this once for every input." +msgstr "" + +#: main.cpp:53 +msgid "" +"Override a config setting. Use once for every setting. E.g.: --cs " +"\"AutoAdvance=1\"" +msgstr "" + +#: main.cpp:54 +msgid "Show list of config settings and current values." +msgstr "" + +#: main.cpp:55 +msgid "Use a different config file." +msgstr "" + +#: main.cpp:59 +msgid "file1 to open (base, if not specified via --base)" +msgstr "" + +#: main.cpp:60 +msgid "file2 to open" +msgstr "" + +#: main.cpp:61 +msgid "file3 to open" +msgstr "" + +#: main.cpp:93 +msgid "Ignored. (User defined.)" +msgstr "" + +#. i18n: file kdiff3_part.rc line 16 +#: main.cpp:173 rc.cpp:9 +#, no-c-format +msgid "KDiff3" +msgstr "" + +#: main.cpp:186 +msgid "+ Many thanks to those who reported bugs and contributed ideas!" +msgstr "" + +#: mergeresultwindow.cpp:136 mergeresultwindow.cpp:939 +#: mergeresultwindow.cpp:953 mergeresultwindow.cpp:965 +#: mergeresultwindow.cpp:977 +msgid "Number of remaining unsolved conflicts: %1 (of which %2 are whitespace)" +msgstr "" + +#: mergeresultwindow.cpp:285 +msgid "" +"The output has been modified.\n" +"If you continue your changes will be lost." +msgstr "" + +#: mergeresultwindow.cpp:797 pdiff.cpp:511 +msgid "All input files are binary equal." +msgstr "" + +#: mergeresultwindow.cpp:799 +msgid "All input files contain the same text." +msgstr "" + +#: mergeresultwindow.cpp:801 +msgid "" +"Files A and B are binary equal.\n" +msgstr "" + +#: mergeresultwindow.cpp:802 +msgid "" +"Files A and B have equal text. \n" +msgstr "" + +#: mergeresultwindow.cpp:803 +msgid "" +"Files A and C are binary equal.\n" +msgstr "" + +#: mergeresultwindow.cpp:804 +msgid "" +"Files A and C have equal text. \n" +msgstr "" + +#: mergeresultwindow.cpp:805 +msgid "" +"Files B and C are binary equal.\n" +msgstr "" + +#: mergeresultwindow.cpp:806 +msgid "" +"Files B and C have equal text. \n" +msgstr "" + +#: mergeresultwindow.cpp:812 +msgid "Total number of conflicts: " +msgstr "" + +#: mergeresultwindow.cpp:813 +msgid "" +"\n" +"Nr of automatically solved conflicts: " +msgstr "" + +#: mergeresultwindow.cpp:814 +msgid "" +"\n" +"Nr of unsolved conflicts: " +msgstr "" + +#: mergeresultwindow.cpp:816 +msgid "Conflicts" +msgstr "" + +#: mergeresultwindow.cpp:1652 +msgid "" +msgstr "" + +#: mergeresultwindow.cpp:1660 +msgid "" +msgstr "" + +#: mergeresultwindow.cpp:1662 mergeresultwindow.cpp:2427 +msgid "" +msgstr "" + +#: mergeresultwindow.cpp:2635 +msgid "" +"Not all conflicts are solved yet.\n" +"File not saved.\n" +msgstr "" + +#: mergeresultwindow.cpp:2637 +msgid "Conflicts Left" +msgstr "" + +#: mergeresultwindow.cpp:2649 +msgid "" +"\n" +"\n" +"Creating backup failed. File not saved." +msgstr "" + +#: mergeresultwindow.cpp:2649 mergeresultwindow.cpp:2689 +msgid "File Save Error" +msgstr "" + +#: mergeresultwindow.cpp:2689 +msgid "Error while writing." +msgstr "" + +#: mergeresultwindow.cpp:3020 +msgid "Output" +msgstr "" + +#: mergeresultwindow.cpp:3032 mergeresultwindow.cpp:3139 +msgid "[Modified]" +msgstr "" + +#: mergeresultwindow.cpp:3039 +msgid "Encoding for saving" +msgstr "" + +#: mergeresultwindow.cpp:3075 mergeresultwindow.cpp:3081 +#: mergeresultwindow.cpp:3087 +msgid "Codec from" +msgstr "" + +#: optiondialog.cpp:362 +msgid "Unicode, 8 bit" +msgstr "" + +#: optiondialog.cpp:363 +msgid "Unicode" +msgstr "" + +#: optiondialog.cpp:364 +msgid "Latin1" +msgstr "" + +#: optiondialog.cpp:383 +msgid "Change this if non-ASCII characters are not displayed correctly." +msgstr "" + +#: optiondialog.cpp:510 +msgid "Editor & Diff Output Font" +msgstr "" + +#: optiondialog.cpp:531 +msgid "Italic font for deltas" +msgstr "" + +#: optiondialog.cpp:534 +msgid "" +"Selects the italic version of the font for differences.\n" +"If the font doesn't support italic characters, then this does nothing." +msgstr "" + +#: optiondialog.cpp:542 +msgid "Color" +msgstr "" + +#: optiondialog.cpp:542 +msgid "Colors Settings" +msgstr "" + +#: optiondialog.cpp:556 +msgid "Editor and Diff Views:" +msgstr "" + +#: optiondialog.cpp:564 +msgid "Foreground color:" +msgstr "" + +#: optiondialog.cpp:570 +msgid "Background color:" +msgstr "" + +#: optiondialog.cpp:578 +msgid "Diff background color:" +msgstr "" + +#: optiondialog.cpp:585 +msgid "Color A:" +msgstr "" + +#: optiondialog.cpp:592 +msgid "Color B:" +msgstr "" + +#: optiondialog.cpp:599 +msgid "Color C:" +msgstr "" + +#: optiondialog.cpp:605 +msgid "Conflict color:" +msgstr "" + +#: optiondialog.cpp:612 +msgid "Current range background color:" +msgstr "" + +#: optiondialog.cpp:619 +msgid "Current range diff background color:" +msgstr "" + +#: optiondialog.cpp:625 +msgid "Color for manually aligned difference ranges:" +msgstr "" + +#: optiondialog.cpp:630 +msgid "Directory Comparison View:" +msgstr "" + +#: optiondialog.cpp:636 +msgid "Newest file color:" +msgstr "" + +#: optiondialog.cpp:639 +msgid "" +"Changing this color will only be effective when starting the next directory " +"comparison." +msgstr "" + +#: optiondialog.cpp:644 +msgid "Oldest file color:" +msgstr "" + +#: optiondialog.cpp:651 +msgid "Middle age file color:" +msgstr "" + +#: optiondialog.cpp:658 +msgid "Color for missing files:" +msgstr "" + +#: optiondialog.cpp:670 +msgid "Editor" +msgstr "" + +#: optiondialog.cpp:670 +msgid "Editor Behavior" +msgstr "" + +#: optiondialog.cpp:680 +msgid "Tab inserts spaces" +msgstr "" + +#: optiondialog.cpp:683 +msgid "" +"On: Pressing tab generates the appropriate number of spaces.\n" +"Off: A Tab-character will be inserted." +msgstr "" + +#: optiondialog.cpp:689 +msgid "Tab size:" +msgstr "" + +#: optiondialog.cpp:694 +msgid "Auto indentation" +msgstr "" + +#: optiondialog.cpp:697 +msgid "" +"On: The indentation of the previous line is used for a new line.\n" +msgstr "" + +#: optiondialog.cpp:701 +msgid "Auto copy selection" +msgstr "" + +#: optiondialog.cpp:704 +msgid "" +"On: Any selection is immediately written to the clipboard.\n" +"Off: You must explicitely copy e.g. via Ctrl-C." +msgstr "" + +#: optiondialog.cpp:709 +msgid "Line end style:" +msgstr "" + +#: optiondialog.cpp:721 +msgid "" +"Sets the line endings for when an edited file is saved.\n" +"DOS/Windows: CR+LF; UNIX: LF; with CR=0D, LF=0A" +msgstr "" + +#: optiondialog.cpp:732 +msgid "Diff" +msgstr "" + +#: optiondialog.cpp:732 +msgid "Diff Settings" +msgstr "" + +#: optiondialog.cpp:743 +msgid "Preserve carriage return" +msgstr "" + +#: optiondialog.cpp:746 +msgid "" +"Show carriage return characters '\\r' if they exist.\n" +"Helps to compare files that were modified under different operating systems." +msgstr "" + +#: optiondialog.cpp:751 +msgid "Ignore numbers" +msgstr "" + +#: optiondialog.cpp:754 +msgid "" +"Ignore number characters during line matching phase. (Similar to Ignore white " +"space.)\n" +"Might help to compare files with numeric data." +msgstr "" + +#: optiondialog.cpp:759 +msgid "Ignore C/C++ comments" +msgstr "" + +#: optiondialog.cpp:761 +msgid "Treat C/C++ comments like white space." +msgstr "" + +#: optiondialog.cpp:765 +msgid "Ignore case" +msgstr "" + +#: optiondialog.cpp:768 +msgid "Treat case differences like white space changes. ('a'<=>'A')" +msgstr "" + +#: optiondialog.cpp:772 +msgid "Preprocessor command:" +msgstr "" + +#: optiondialog.cpp:776 +msgid "User defined pre-processing. (See the docs for details.)" +msgstr "" + +#: optiondialog.cpp:779 +msgid "Line-matching preprocessor command:" +msgstr "" + +#: optiondialog.cpp:783 +msgid "" +"This pre-processor is only used during line matching.\n" +"(See the docs for details.)" +msgstr "" + +#: optiondialog.cpp:786 +msgid "Try hard (slower)" +msgstr "" + +#: optiondialog.cpp:789 +msgid "" +"Enables the --minimal option for the external diff.\n" +"The analysis of big files will be much slower." +msgstr "" + +#: optiondialog.cpp:794 +msgid "Auto advance delay (ms):" +msgstr "" + +#: optiondialog.cpp:799 +msgid "" +"When in Auto-Advance mode the result of the current selection is shown \n" +"for the specified time, before jumping to the next conflict. Range: 0-2000 ms" +msgstr "" + +#: optiondialog.cpp:809 +msgid "Merge Settings" +msgstr "" + +#: optiondialog.cpp:822 +msgid "White space 2-file merge default:" +msgstr "" + +#: optiondialog.cpp:826 optiondialog.cpp:839 +msgid "Manual Choice" +msgstr "" + +#: optiondialog.cpp:830 optiondialog.cpp:844 +msgid "" +"Allow the merge algorithm to automatically select an input for white-space-only " +"changes." +msgstr "" + +#: optiondialog.cpp:835 +msgid "White space 3-file merge default:" +msgstr "" + +#: optiondialog.cpp:849 +msgid "Automatic Merge Regular Expression" +msgstr "" + +#: optiondialog.cpp:858 smalldialogs.cpp:397 +msgid "Auto merge regular expression:" +msgstr "" + +#: optiondialog.cpp:862 +msgid "" +"Regular expression for lines where KDiff3 should automatically choose one " +"source.\n" +"When a line with a conflict matches the regular expression then\n" +"- if available - C, otherwise B will be chosen." +msgstr "" + +#: optiondialog.cpp:868 +msgid "Run regular expression auto merge on merge start" +msgstr "" + +#: optiondialog.cpp:870 +msgid "" +"Run the merge for auto merge regular expressions\n" +"immediately when a merge starts.\n" +msgstr "" + +#: optiondialog.cpp:875 +msgid "Version Control History Merging" +msgstr "" + +#: optiondialog.cpp:884 smalldialogs.cpp:424 +msgid "History start regular expression:" +msgstr "" + +#: optiondialog.cpp:888 +msgid "" +"Regular expression for the start of the version control history entry.\n" +"Usually this line contains the \"$Log$\"-keyword.\n" +"Default value: \".*\\$Log.*\\$.*\"" +msgstr "" + +#: optiondialog.cpp:894 smalldialogs.cpp:453 +msgid "History entry start regular expression:" +msgstr "" + +#: optiondialog.cpp:906 +msgid "" +"A version control history entry consists of several lines.\n" +"Specify the regular expression to detect the first line (without the leading " +"comment).\n" +"Use parentheses to group the keys you want to use for sorting.\n" +"If left empty, then KDiff3 assumes that empty lines separate history entries.\n" +"See the documentation for details." +msgstr "" + +#: optiondialog.cpp:914 +msgid "History merge sorting" +msgstr "" + +#: optiondialog.cpp:916 +msgid "Sort version control history by a key." +msgstr "" + +#: optiondialog.cpp:926 +msgid "History entry start sort key order:" +msgstr "" + +#: optiondialog.cpp:930 +msgid "" +"Each parentheses used in the regular expression for the history start entry\n" +"groups a key that can be used for sorting.\n" +"Specify the list of keys (that are numbered in order of occurrence\n" +"starting with 1) using ',' as separator (e.g. \"4,5,6,1,2,3,7\").\n" +"If left empty, then no sorting will be done.\n" +"See the documentation for details." +msgstr "" + +#: optiondialog.cpp:941 +msgid "Merge version control history on merge start" +msgstr "" + +#: optiondialog.cpp:943 +msgid "Run version control history automerge on merge start." +msgstr "" + +#: optiondialog.cpp:947 +msgid "Test your regular expressions" +msgstr "" + +#: optiondialog.cpp:952 +msgid "Irrelevant merge command:" +msgstr "" + +#: optiondialog.cpp:956 +msgid "" +"If specified this script is run after automerge\n" +"when no other relevant changes were detected.\n" +"Called with the parameters: filename1 filename2 filename3" +msgstr "" + +#: optiondialog.cpp:966 +msgid "Directory Merge" +msgstr "" + +#: optiondialog.cpp:975 +msgid "Recursive directories" +msgstr "" + +#: optiondialog.cpp:977 +msgid "Whether to analyze subdirectories or not." +msgstr "" + +#: optiondialog.cpp:979 +msgid "File pattern(s):" +msgstr "" + +#: optiondialog.cpp:984 +msgid "" +"Pattern(s) of files to be analyzed. \n" +"Wildcards: '*' and '?'\n" +"Several Patterns can be specified by using the separator: ';'" +msgstr "" + +#: optiondialog.cpp:990 +msgid "File-anti-pattern(s):" +msgstr "" + +#: optiondialog.cpp:995 +msgid "" +"Pattern(s) of files to be excluded from analysis. \n" +"Wildcards: '*' and '?'\n" +"Several Patterns can be specified by using the separator: ';'" +msgstr "" + +#: optiondialog.cpp:1001 +msgid "Dir-anti-pattern(s):" +msgstr "" + +#: optiondialog.cpp:1006 +msgid "" +"Pattern(s) of directories to be excluded from analysis. \n" +"Wildcards: '*' and '?'\n" +"Several Patterns can be specified by using the separator: ';'" +msgstr "" + +#: optiondialog.cpp:1012 +msgid "Use .cvsignore" +msgstr "" + +#: optiondialog.cpp:1015 +msgid "" +"Extends the antipattern to anything that would be ignored by CVS.\n" +"Via local \".cvsignore\"-files this can be directory specific." +msgstr "" + +#: optiondialog.cpp:1020 +msgid "Find hidden files and directories" +msgstr "" + +#: optiondialog.cpp:1023 +msgid "Finds files and directories with the hidden attribute." +msgstr "" + +#: optiondialog.cpp:1025 +msgid "Finds files and directories starting with '.'." +msgstr "" + +#: optiondialog.cpp:1029 +msgid "Follow file links" +msgstr "" + +#: optiondialog.cpp:1032 +msgid "" +"On: Compare the file the link points to.\n" +"Off: Compare the links." +msgstr "" + +#: optiondialog.cpp:1037 +msgid "Follow directory links" +msgstr "" + +#: optiondialog.cpp:1040 +msgid "" +"On: Compare the directory the link points to.\n" +"Off: Compare the links." +msgstr "" + +#: optiondialog.cpp:1056 +msgid "Case sensitive filename comparison" +msgstr "" + +#: optiondialog.cpp:1059 +msgid "" +"The directory comparison will compare files or directories when their names " +"match.\n" +"Set this option if the case of the names must match. (Default for Windows is " +"off, otherwise on.)" +msgstr "" + +#: optiondialog.cpp:1063 +msgid "File Comparison Mode" +msgstr "" + +#: optiondialog.cpp:1067 +msgid "Binary comparison" +msgstr "" + +#: optiondialog.cpp:1068 +msgid "Binary comparison of each file. (Default)" +msgstr "" + +#: optiondialog.cpp:1070 +msgid "Full analysis" +msgstr "" + +#: optiondialog.cpp:1071 +msgid "" +"Do a full analysis and show statistics information in extra columns.\n" +"(Slower than a binary comparison, much slower for binary files.)" +msgstr "" + +#: optiondialog.cpp:1074 +msgid "Trust the modification date (unsafe)" +msgstr "" + +#: optiondialog.cpp:1075 +msgid "" +"Assume that files are equal if the modification date and file length are " +"equal.\n" +"Useful for big directories or slow networks." +msgstr "" + +#: optiondialog.cpp:1078 +msgid "Trust the size (unsafe)" +msgstr "" + +#: optiondialog.cpp:1079 +msgid "" +"Assume that files are equal if their file lengths are equal.\n" +"Useful for big directories or slow networks when the date is modified during " +"download." +msgstr "" + +#: optiondialog.cpp:1083 +msgid "Synchronize directories" +msgstr "" + +#: optiondialog.cpp:1086 +msgid "" +"Offers to store files in both directories so that\n" +"both directories are the same afterwards.\n" +"Works only when comparing two directories without specifying a destination." +msgstr "" + +#: optiondialog.cpp:1092 +msgid "White space differences considered equal" +msgstr "" + +#: optiondialog.cpp:1095 +msgid "" +"If files differ only by white space consider them equal.\n" +"This is only active when full analysis is chosen." +msgstr "" + +#: optiondialog.cpp:1101 +msgid "Copy newer instead of merging (unsafe)" +msgstr "" + +#: optiondialog.cpp:1104 +msgid "" +"Don't look inside, just take the newer file.\n" +"(Use this only if you know what you are doing!)\n" +"Only effective when comparing two directories." +msgstr "" + +#: optiondialog.cpp:1109 +msgid "Backup files (.orig)" +msgstr "" + +#: optiondialog.cpp:1112 +msgid "" +"When a file would be saved over an old file, then the old file\n" +"will be renamed with a '.orig'-extension instead of being deleted." +msgstr "" + +#: optiondialog.cpp:1176 +msgid "Regional Settings" +msgstr "" + +#: optiondialog.cpp:1272 +msgid "Language (restart required)" +msgstr "" + +#: optiondialog.cpp:1304 +msgid "" +"Choose the language of the GUI-strings or \"Auto\".\n" +"For a change of language to take place, quit and restart KDiff3." +msgstr "" + +#: optiondialog.cpp:1322 +msgid "Use the same encoding for everything:" +msgstr "" + +#: optiondialog.cpp:1325 +msgid "" +"Enable this allows to change all encodings by changing the first only.\n" +"Disable this if different individual settings are needed." +msgstr "" + +#: optiondialog.cpp:1330 +msgid "Note: Local Encoding is " +msgstr "" + +#: optiondialog.cpp:1334 +msgid "File Encoding for A:" +msgstr "" + +#: optiondialog.cpp:1340 +msgid "" +"If enabled then Unicode (UTF-16 or UTF-8) encoding will be detected.\n" +"If the file encoding is not detected then the selected encoding will be used as " +"fallback.\n" +"(Unicode detection depends on the first bytes of a file - the byte order mark " +"\"BOM\".)" +msgstr "" + +#: optiondialog.cpp:1344 optiondialog.cpp:1353 optiondialog.cpp:1362 +msgid "Auto Detect Unicode" +msgstr "" + +#: optiondialog.cpp:1349 +msgid "File Encoding for B:" +msgstr "" + +#: optiondialog.cpp:1358 +msgid "File Encoding for C:" +msgstr "" + +#: optiondialog.cpp:1367 +msgid "File Encoding for Merge Output and Saving:" +msgstr "" + +#: optiondialog.cpp:1371 +msgid "Auto Select" +msgstr "" + +#: optiondialog.cpp:1374 +msgid "" +"If enabled then the encoding from the input files is used.\n" +"In ambiguous cases a dialog will ask the user to choose the encoding for " +"saving." +msgstr "" + +#: optiondialog.cpp:1378 +msgid "File Encoding for Preprocessor Files:" +msgstr "" + +#: optiondialog.cpp:1389 +msgid "Right To Left Language" +msgstr "" + +#: optiondialog.cpp:1392 +msgid "" +"Some languages are read from right to left.\n" +"This setting will change the viewer and editor accordingly." +msgstr "" + +#: optiondialog.cpp:1402 +msgid "Integration" +msgstr "" + +#: optiondialog.cpp:1402 +msgid "Integration Settings" +msgstr "" + +#: optiondialog.cpp:1412 +msgid "Command line options to ignore:" +msgstr "" + +#: optiondialog.cpp:1417 +msgid "" +"List of command line options that should be ignored when KDiff3 is used by " +"other tools.\n" +"Several values can be specified if separated via ';'\n" +"This will suppress the \"Unknown option\"-error." +msgstr "" + +#: optiondialog.cpp:1480 +msgid "" +"You selected a variable width font.\n" +"\n" +"Because this program doesn't handle variable width fonts\n" +"correctly, you might experience problems while editing.\n" +"\n" +"Do you want to continue or do you want to select another font." +msgstr "" + +#: optiondialog.cpp:1484 +msgid "Incompatible Font" +msgstr "" + +#: optiondialog.cpp:1485 +msgid "Continue at Own Risk" +msgstr "" + +#: optiondialog.cpp:1485 +msgid "Select Another Font" +msgstr "" + +#: optiondialog.cpp:1521 +msgid "This resets all options. Not only those of the current topic." +msgstr "" + +#: pdiff.cpp:258 +msgid "PreprocessorCmd: " +msgstr "" + +#: pdiff.cpp:263 +msgid "" +"The following option(s) you selected might change data:\n" +msgstr "" + +#: pdiff.cpp:264 +msgid "" +"\n" +"Most likely this is not wanted during a merge.\n" +"Do you want to disable these settings or continue with these settings active?" +msgstr "" + +#: pdiff.cpp:266 +msgid "Option Unsafe for Merging" +msgstr "" + +#: pdiff.cpp:267 +msgid "Use These Options During Merge" +msgstr "" + +#: pdiff.cpp:267 +msgid "Disable Unsafe Options" +msgstr "" + +#: pdiff.cpp:297 +msgid "Loading A" +msgstr "" + +#: pdiff.cpp:301 +msgid "Loading B" +msgstr "" + +#: pdiff.cpp:318 pdiff.cpp:344 +msgid "Diff: A <-> B" +msgstr "" + +#: pdiff.cpp:324 pdiff.cpp:366 +msgid "Linediff: A <-> B" +msgstr "" + +#: pdiff.cpp:335 +msgid "Loading C" +msgstr "" + +#: pdiff.cpp:347 +msgid "Diff: B <-> C" +msgstr "" + +#: pdiff.cpp:350 +msgid "Diff: A <-> C" +msgstr "" + +#: pdiff.cpp:369 +msgid "Linediff: B <-> C" +msgstr "" + +#: pdiff.cpp:372 +msgid "Linediff: A <-> C" +msgstr "" + +#: pdiff.cpp:513 +msgid "All input files contain the same text, but are not binary equal." +msgstr "" + +#: pdiff.cpp:515 pdiff.cpp:517 pdiff.cpp:519 +msgid "" +"Files %1 and %2 are binary equal.\n" +msgstr "" + +#: pdiff.cpp:516 pdiff.cpp:518 pdiff.cpp:520 +msgid "" +"Files %1 and %2 have equal text, but are not binary equal. \n" +msgstr "" + +#: pdiff.cpp:530 +msgid "" +"Some inputfiles don't seem to be pure textfiles.\n" +"Note that the KDiff3-merge was not meant for binary data.\n" +"Continue at your own risk." +msgstr "" + +#: pdiff.cpp:979 +msgid "Abort" +msgstr "" + +#: pdiff.cpp:985 pdiff.cpp:1073 +msgid "Opening files..." +msgstr "" + +#: pdiff.cpp:1050 pdiff.cpp:1121 +msgid "File open error" +msgstr "" + +#: pdiff.cpp:1153 +msgid "Cutting selection..." +msgstr "" + +#: pdiff.cpp:1174 +msgid "Copying selection to clipboard..." +msgstr "" + +#: pdiff.cpp:1190 +msgid "Inserting clipboard contents..." +msgstr "" + +#: pdiff.cpp:1713 +msgid "Save && Continue" +msgstr "" + +#: pdiff.cpp:1713 +msgid "Continue Without Saving" +msgstr "" + +#: pdiff.cpp:1920 +msgid "Search complete." +msgstr "" + +#: pdiff.cpp:1920 +msgid "Search Complete" +msgstr "" + +#: pdiff.cpp:2144 +msgid "Nothing is selected in either diff input window." +msgstr "" + +#: pdiff.cpp:2144 +msgid "Error while adding manual diff range" +msgstr "" + +#. i18n: file kdiff3_part.rc line 4 +#: rc.cpp:3 +#, no-c-format +msgid "&KDiff3" +msgstr "" + +#. i18n: file kdiff3_part.rc line 13 +#: rc.cpp:6 +#, no-c-format +msgid "Configure KDiff3" +msgstr "" + +#. i18n: file kdiff3_shell.rc line 7 +#: rc.cpp:15 +#, no-c-format +msgid "&Directory" +msgstr "" + +#. i18n: file kdiff3_shell.rc line 30 +#: rc.cpp:18 +#, no-c-format +msgid "Current Item Merge Operation" +msgstr "" + +#. i18n: file kdiff3_shell.rc line 38 +#: rc.cpp:21 +#, no-c-format +msgid "Current Item Sync Operation" +msgstr "" + +#. i18n: file kdiff3_shell.rc line 50 +#: rc.cpp:24 +#, no-c-format +msgid "&Movement" +msgstr "" + +#. i18n: file kdiff3_shell.rc line 61 +#: rc.cpp:27 +#, no-c-format +msgid "D&iffview" +msgstr "" + +#. i18n: file kdiff3_shell.rc line 73 +#: rc.cpp:30 +#, no-c-format +msgid "&Merge" +msgstr "" + +#. i18n: file kdiff3_shell.rc line 95 +#: rc.cpp:33 +#, no-c-format +msgid "&Window" +msgstr "" + +#: smalldialogs.cpp:53 +msgid "A (Base):" +msgstr "" + +#: smalldialogs.cpp:59 smalldialogs.cpp:75 smalldialogs.cpp:91 +#: smalldialogs.cpp:134 +msgid "File..." +msgstr "" + +#: smalldialogs.cpp:61 smalldialogs.cpp:77 smalldialogs.cpp:93 +#: smalldialogs.cpp:136 +msgid "Dir..." +msgstr "" + +#: smalldialogs.cpp:86 +msgid "C (Optional):" +msgstr "" + +#: smalldialogs.cpp:108 +msgid "Swap/Copy Names ..." +msgstr "" + +#: smalldialogs.cpp:114 smalldialogs.cpp:115 smalldialogs.cpp:116 +msgid "Swap %1<->%2" +msgstr "" + +#: smalldialogs.cpp:117 smalldialogs.cpp:118 smalldialogs.cpp:119 +msgid "Copy %1->Output" +msgstr "" + +#: smalldialogs.cpp:120 smalldialogs.cpp:121 smalldialogs.cpp:122 +msgid "Swap %1<->Output" +msgstr "" + +#: smalldialogs.cpp:129 +msgid "Output (optional):" +msgstr "" + +#: smalldialogs.cpp:158 +msgid "Configure..." +msgstr "" + +#: smalldialogs.cpp:347 +msgid "Search text:" +msgstr "" + +#: smalldialogs.cpp:354 +msgid "Case sensitive" +msgstr "" + +#: smalldialogs.cpp:357 +msgid "Search A" +msgstr "" + +#: smalldialogs.cpp:362 +msgid "Search B" +msgstr "" + +#: smalldialogs.cpp:367 +msgid "Search C" +msgstr "" + +#: smalldialogs.cpp:372 +msgid "Search output" +msgstr "" + +#: smalldialogs.cpp:377 +msgid "&Search" +msgstr "" + +#: smalldialogs.cpp:394 +msgid "Regular Expression Tester" +msgstr "" + +#: smalldialogs.cpp:405 +msgid "Example auto merge line:" +msgstr "" + +#: smalldialogs.cpp:407 +msgid "For auto merge test copy a line as used in your files." +msgstr "" + +#: smalldialogs.cpp:413 smalldialogs.cpp:442 smalldialogs.cpp:479 +msgid "Match result:" +msgstr "" + +#: smalldialogs.cpp:432 +msgid "Example history start line (with leading comment):" +msgstr "" + +#: smalldialogs.cpp:435 +msgid "" +"Copy a history start line as used in your files,\n" +"including the leading comment." +msgstr "" + +#: smalldialogs.cpp:461 +msgid "History sort key order:" +msgstr "" + +#: smalldialogs.cpp:469 +msgid "Example history entry start line (without leading comment):" +msgstr "" + +#: smalldialogs.cpp:471 +msgid "" +"Copy a history entry start line as used in your files,\n" +"but omit the leading comment." +msgstr "" + +#: smalldialogs.cpp:486 +msgid "Sort key result:" +msgstr "" + +#: smalldialogs.cpp:537 smalldialogs.cpp:547 smalldialogs.cpp:568 +msgid "Match success." +msgstr "" + +#: smalldialogs.cpp:541 smalldialogs.cpp:551 smalldialogs.cpp:574 +msgid "Match failed." +msgstr "" + +#: smalldialogs.cpp:559 +msgid "Opening and closing parentheses don't match in regular expression." +msgstr "" diff --git a/po/it.po b/po/it.po new file mode 100644 index 0000000..b59cefa --- /dev/null +++ b/po/it.po @@ -0,0 +1,2544 @@ +# translation of kdiff3.po to italiano +# Copyright (C) 2003, 2004, 2005, 2006 Free Software Foundation, Inc. +# +# Andrea Celli , 2003, 2004, 2005. +# Marcello Anni , 2006. +# Giovanni Venturi , 2006. +msgid "" +msgstr "" +"Project-Id-Version: kdiff3\n" +"POT-Creation-Date: 2006-11-05 08:45+0100\n" +"PO-Revision-Date: 2006-12-08 16:52+0100\n" +"Last-Translator: Marcello Anni \n" +"Language-Team: italiano \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: KBabel 1.11.4\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: _translatorinfo.cpp:1 +msgid "" +"_: NAME OF TRANSLATORS\n" +"Your names" +msgstr "Andrea Celli, Marcello Anni" + +#: _translatorinfo.cpp:3 +msgid "" +"_: EMAIL OF TRANSLATORS\n" +"Your emails" +msgstr "a.celli@caltanet.it, marcello.anni@alice.it" + +#: diff.cpp:246 +msgid "Writing clipboard data to temp file failed." +msgstr "È fallita la copia da appunti a file temporaneo." + +#: diff.cpp:250 +msgid "From Clipboard" +msgstr "Dagli appunti" + +#: diff.cpp:491 +msgid "" +"Preprocessing possibly failed. Check this command:\n" +"\n" +" %1\n" +"\n" +"The preprocessing command will be disabled now." +msgstr "" +"La pre-elaborazione non sembra riuscita. Controlla questo comando:\n" +"\n" +" %1\n" +"\n" +"Ora il comando di pre-elaborazione verrà disabilitato." + +#: diff.cpp:526 +msgid "" +"The line-matching-preprocessing possibly failed. Check this command:\n" +"\n" +" %1\n" +"\n" +"The line-matching-preprocessing command will be disabled now." +msgstr "" +"La pre-ricerca di righe simili non sembra riuscita. Controlla il comando:\n" +"\n" +" %1\n" +"\n" +"Ora il comando di pre-ricerca di righe simili verrà disabilitato." + +#: diff.cpp:1631 diff.cpp:1645 +msgid "" +"Data loss error:\n" +"If it is reproducable please contact the author.\n" +msgstr "" +"Errore: perdita dati\n" +"Se è riproducibile, ti prego di segnalarlo all'autore.\n" + +#: diff.cpp:1633 diff.cpp:1647 +msgid "Severe Internal Error" +msgstr "Grave errore interno" + +#: difftextwindow.cpp:1643 kdiff3.cpp:753 +msgid "Top line" +msgstr "Riga superiore" + +#: difftextwindow.cpp:1653 +msgid "End" +msgstr "Fine" + +#: directorymergewindow.cpp:142 +msgid "Mix of links and normal files." +msgstr "Collegamenti e file normali insieme." + +#: directorymergewindow.cpp:149 +msgid "Link: " +msgstr "Collegamento: " + +#: directorymergewindow.cpp:157 +msgid "Size. " +msgstr "Dimensione. " + +#: directorymergewindow.cpp:170 +msgid "Date & Size: " +msgstr "Data e dimensione: " + +#: directorymergewindow.cpp:179 directorymergewindow.cpp:185 +msgid "Creating temp copy of %1 failed." +msgstr "Non ho potuto creare una copia temporanea di %1." + +#: directorymergewindow.cpp:196 directorymergewindow.cpp:204 +msgid "Opening %1 failed." +msgstr "Non ho potuto aprire %1." + +#: directorymergewindow.cpp:208 +msgid "Comparing file..." +msgstr "Confronto file ..." + +#: directorymergewindow.cpp:218 directorymergewindow.cpp:224 +#, c-format +msgid "Error reading from %1" +msgstr "Errore nella lettura di %1" + +#: directorymergewindow.cpp:282 +msgid "Name" +msgstr "Nome" + +#: directorymergewindow.cpp:286 +msgid "Operation" +msgstr "Operazione" + +#: directorymergewindow.cpp:287 +msgid "Status" +msgstr "Stato" + +#: directorymergewindow.cpp:288 +msgid "Unsolved" +msgstr "Non risolto" + +#: directorymergewindow.cpp:289 +msgid "Solved" +msgstr "Risolto" + +#: directorymergewindow.cpp:290 +msgid "Nonwhite" +msgstr "Non vuoto" + +#: directorymergewindow.cpp:291 +msgid "White" +msgstr "Vuoto" + +#: directorymergewindow.cpp:319 +msgid "" +"You are currently doing a directory merge. Are you sure, you want to abort the " +"merge and rescan the directory?" +msgstr "" +"Stai fondendo delle cartelle. Sei sicuro? Vuoi interrompere la fusione e " +"riesaminare la cartella?" + +#: directorymergewindow.cpp:320 directorymergewindow.cpp:2868 +msgid "Rescan" +msgstr "Riesamina" + +#: directorymergewindow.cpp:320 kdiff3.cpp:603 pdiff.cpp:979 +msgid "Continue Merging" +msgstr "Continua la fusione" + +#: directorymergewindow.cpp:462 +msgid "Opening of directories failed:" +msgstr "Apertura di cartelle non riuscita:" + +#: directorymergewindow.cpp:465 +msgid "" +"Dir A \"%1\" does not exist or is not a directory.\n" +msgstr "" +"Dir A \"%1\" non esiste o non è una cartella.\n" + +#: directorymergewindow.cpp:468 +msgid "" +"Dir B \"%1\" does not exist or is not a directory.\n" +msgstr "" +"Dir B \"%1\" non esiste o non è una cartella.\n" + +#: directorymergewindow.cpp:471 +msgid "" +"Dir C \"%1\" does not exist or is not a directory.\n" +msgstr "" +"Dir C \"%1\" non esiste o non è una cartella.\n" + +#: directorymergewindow.cpp:473 +msgid "Directory Open Error" +msgstr "Errore apertura cartella" + +#: directorymergewindow.cpp:481 +msgid "" +"The destination directory must not be the same as A or B when three directories " +"are merged.\n" +"Check again before continuing." +msgstr "" +"Quando si fondono tre cartelle, la cartella di destinazione non può essere " +"uguale ad A o B.\n" +"Controlla meglio prima di continuare." + +#: directorymergewindow.cpp:483 +msgid "Parameter Warning" +msgstr "Attenzione ai parametri" + +#: directorymergewindow.cpp:488 +msgid "Scanning directories..." +msgstr "Esame cartelle in corso..." + +#: directorymergewindow.cpp:537 +msgid "Reading Directory A" +msgstr "Lettura della cartella A in corso" + +#: directorymergewindow.cpp:559 +msgid "Reading Directory B" +msgstr "Lettura della cartella B in corso" + +#: directorymergewindow.cpp:581 +msgid "Reading Directory C" +msgstr "Lettura della cartella C in corso" + +#: directorymergewindow.cpp:607 +msgid "Some subdirectories were not readable in" +msgstr "Alcune sotto-cartelle non erano leggibili" + +#: directorymergewindow.cpp:612 +msgid "Check the permissions of the subdirectories." +msgstr "Controlla i permessi per le sotto-cartelle." + +#: directorymergewindow.cpp:646 kdiff3.cpp:552 kdiff3.cpp:636 kdiff3.cpp:661 +#: kdiff3.cpp:934 kdiff3.cpp:955 pdiff.cpp:1059 pdiff.cpp:1131 pdiff.cpp:1169 +#: pdiff.cpp:1185 pdiff.cpp:1215 pdiff.cpp:1226 +msgid "Ready." +msgstr "Pronto." + +#: directorymergewindow.cpp:660 +msgid "Directory Comparison Status" +msgstr "Stato di confronto di cartelle" + +#: directorymergewindow.cpp:661 +msgid "Number of subdirectories:" +msgstr "Numero di sotto-cartelle:" + +#: directorymergewindow.cpp:662 +msgid "Number of equal files:" +msgstr "Numero di file uguali:" + +#: directorymergewindow.cpp:663 +msgid "Number of different files:" +msgstr "Numero di file differenti:" + +#: directorymergewindow.cpp:666 +msgid "Number of manual merges:" +msgstr "Numero di fusioni manuali:" + +#: directorymergewindow.cpp:802 +msgid "This affects all merge operations." +msgstr "Questo riguarda tutte le operazioni di fusione." + +#: directorymergewindow.cpp:803 +msgid "Changing All Merge Operations" +msgstr "Modifica tutte le operazioni di fusione" + +#: directorymergewindow.cpp:803 mergeresultwindow.cpp:287 +msgid "C&ontinue" +msgstr "C&ontinua" + +#: directorymergewindow.cpp:1169 +msgid "Processing " +msgstr "Sto elaborando" + +#: directorymergewindow.cpp:1647 directorymergewindow.cpp:1653 +msgid "To do." +msgstr "Da fare." + +#: directorymergewindow.cpp:1756 directorymergewindow.cpp:2899 +msgid "Copy A to B" +msgstr "Copia A su B" + +#: directorymergewindow.cpp:1757 directorymergewindow.cpp:2900 +msgid "Copy B to A" +msgstr "Copia B su A" + +#: directorymergewindow.cpp:1758 directorymergewindow.cpp:2901 +msgid "Delete A" +msgstr "Elimina A" + +#: directorymergewindow.cpp:1759 directorymergewindow.cpp:2902 +msgid "Delete B" +msgstr "Elimina B" + +#: directorymergewindow.cpp:1760 +msgid "Delete A & B" +msgstr "Elimina A e B" + +#: directorymergewindow.cpp:1761 directorymergewindow.cpp:2904 +msgid "Merge to A" +msgstr "Fondi con A" + +#: directorymergewindow.cpp:1762 directorymergewindow.cpp:2905 +msgid "Merge to B" +msgstr "Fondi con B" + +#: directorymergewindow.cpp:1763 +msgid "Merge to A & B" +msgstr "Fondi A e B" + +#: directorymergewindow.cpp:1767 directorymergewindow.cpp:2896 +msgid "Delete (if exists)" +msgstr "Elimina (se esiste)" + +#: directorymergewindow.cpp:1768 directorymergewindow.cpp:1769 +#: directorymergewindow.cpp:2895 optiondialog.cpp:809 smalldialogs.cpp:102 +msgid "Merge" +msgstr "Fondi" + +#: directorymergewindow.cpp:1768 directorymergewindow.cpp:1769 +msgid "Merge (manual)" +msgstr "Fondi (manuale)" + +#: directorymergewindow.cpp:1770 +msgid "Error: Conflicting File Types" +msgstr "Errore: Tipi di file incompatibili" + +#: directorymergewindow.cpp:1771 +msgid "Error: Dates are equal but files are not." +msgstr "Errore: le date coincidono ma i file sono diversi." + +#: directorymergewindow.cpp:1795 directorymergewindow.cpp:1824 +#: directorymergewindow.cpp:1849 +msgid "This operation is currently not possible." +msgstr "Questa operazione per ora non è implementata." + +#: directorymergewindow.cpp:1795 directorymergewindow.cpp:1824 +#: directorymergewindow.cpp:1849 directorymergewindow.cpp:2106 +msgid "Operation Not Possible" +msgstr "Operazione non possibile" + +#: directorymergewindow.cpp:1888 +msgid "" +"This should never happen: \n" +"\n" +"mergeResultSaved: m_pMFI=0\n" +"\n" +"If you know how to reproduce this, please contact the program author." +msgstr "" +"Questo non dovrebbe mai succedere:\n" +"\n" +"mergeResultSaved: m_pMFI=0\n" +"\n" +"Se sai come riprodurlo, per favore comunicalo all'autore del programma." + +#: directorymergewindow.cpp:1888 +msgid "Program Error" +msgstr "Errore nel programma" + +#: directorymergewindow.cpp:1899 +msgid "" +"An error occurred while copying.\n" +msgstr "" +"Si è verificato un errore durante la copia.\n" + +#: directorymergewindow.cpp:1900 directorymergewindow.cpp:2306 +msgid "Merge Error" +msgstr "Errore nella fusione" + +#: directorymergewindow.cpp:1905 directorymergewindow.cpp:2311 +msgid "Error." +msgstr "Errore." + +#: directorymergewindow.cpp:1910 directorymergewindow.cpp:2202 +#: directorymergewindow.cpp:2242 +msgid "Done." +msgstr "Fatto." + +#: directorymergewindow.cpp:1933 +msgid "Not saved." +msgstr "Non salvato." + +#: directorymergewindow.cpp:1968 +msgid "Unknown merge operation. (This must never happen!)" +msgstr "Operazione di fusione sconosciuta. (Non deve mai succedere!)" + +#: directorymergewindow.cpp:2000 +msgid "Unknown merge operation." +msgstr "Operazione di fusione sconosciuta." + +#: directorymergewindow.cpp:2015 +msgid "" +"The merge is about to begin.\n" +"\n" +"Choose \"Do it\" if you have read the instructions and know what you are " +"doing.\n" +"Choosing \"Simulate it\" will tell you what would happen.\n" +"\n" +"Be aware that this program still has beta status and there is NO WARRANTY " +"whatsoever! Make backups of your vital data!" +msgstr "" +"La fusione sta per iniziare.\n" +"\n" +"Scegli \"Procedi\" se hai letto le istruzioni e sai cosa stai facendo.\n" +"\n" +"Scegli \"Simulazione\" per vedere cosa succederebbe.\n" +"\n" +"Stai attento perché questo programma è ancora una \"beta\" e non c'è NESSUNA " +"GARANZIA che funzioni! Fai una copia di riserva dei tuoi dati importanti!" + +#: directorymergewindow.cpp:2020 +msgid "Starting Merge" +msgstr "Inizio fusione" + +#: directorymergewindow.cpp:2020 +msgid "Do It" +msgstr "Procedi" + +#: directorymergewindow.cpp:2020 +msgid "Simulate It" +msgstr "Simulazione" + +#: directorymergewindow.cpp:2046 +msgid "" +"The highlighted item has a different type in the different directories. Select " +"what to do." +msgstr "" +"Gli elementi evidenziati sono di tipo diverso nelle diverse cartelle. Scegli " +"cosa fare." + +#: directorymergewindow.cpp:2055 +msgid "" +"The modification dates of the file are equal but the files are not. Select what " +"to do." +msgstr "" +"Le date di modifica dei file sono uguali ma i file sono diversi. Scegli cosa " +"fare." + +#: directorymergewindow.cpp:2106 +msgid "" +"This operation is currently not possible because directory merge is currently " +"running." +msgstr "" +"Non si può effettuare questa operazione poiché è in corso la fusione di due " +"cartelle." + +#: directorymergewindow.cpp:2166 +msgid "" +"There was an error in the last step.\n" +"Do you want to continue with the item that caused the error or do you want to " +"skip this item?" +msgstr "" +"Si è verificato un errore nell'ultimo passaggio.\n" +"Vuoi continuare con l'elemento che ha provocato l'errore o vuoi saltarlo?" + +#: directorymergewindow.cpp:2168 +msgid "Continue merge after an error" +msgstr "Continua fusione dopo errore" + +#: directorymergewindow.cpp:2168 +msgid "Continue With Last Item" +msgstr "Continua con il prossimo elemento" + +#: directorymergewindow.cpp:2168 +msgid "Skip Item" +msgstr "Salta l'elemento" + +#: directorymergewindow.cpp:2202 +msgid "Skipped." +msgstr "Saltato." + +#: directorymergewindow.cpp:2209 directorymergewindow.cpp:2435 +msgid "In progress..." +msgstr "In esecuzione..." + +#: directorymergewindow.cpp:2257 +msgid "Merge operation complete." +msgstr "Operazione di fusione completata." + +#: directorymergewindow.cpp:2257 directorymergewindow.cpp:2260 +msgid "Merge Complete" +msgstr "Fusione completata" + +#: directorymergewindow.cpp:2269 +msgid "" +"Simulated merge complete: Check if you agree with the proposed operations." +msgstr "" +"Terminata simulazione fusione: controlla se le operazioni proposte vanno bene." + +#: directorymergewindow.cpp:2305 +msgid "" +"An error occurred. Press OK to see detailed information.\n" +msgstr "" +"Si è verificato un errore. Premi OK per maggiori informazioni.\n" + +#: directorymergewindow.cpp:2348 +msgid "Error: While deleting %1: Creating backup failed." +msgstr "Errore: nell'eliminare %1: non ho potuto creare una copia di riserva." + +#: directorymergewindow.cpp:2355 +msgid "delete directory recursively( %1 )" +msgstr "elimina cartella ricorsivamente (%1)" + +#: directorymergewindow.cpp:2357 +msgid "delete( %1 )" +msgstr "elimina (%1)" + +#: directorymergewindow.cpp:2372 +msgid "Error: delete dir operation failed while trying to read the directory." +msgstr "Errore: fallita l'eleminazione della cartella durante la sua lettura." + +#: directorymergewindow.cpp:2391 +msgid "Error: rmdir( %1 ) operation failed." +msgstr "Errore: non è riuscita l'operazione rmdir (%1)." + +#: directorymergewindow.cpp:2401 +msgid "Error: delete operation failed." +msgstr "Errore: eliminazione fallita." + +#: directorymergewindow.cpp:2427 +msgid "manual merge( %1, %2, %3 -> %4)" +msgstr "fusione manuale (%1, %2,%3 -> %4)" + +#: directorymergewindow.cpp:2430 +msgid "" +" Note: After a manual merge the user should continue by pressing F7." +msgstr "" +" Nota: Dopo una fusione manuale l'utente deve premere F7 per continuare." + +#: directorymergewindow.cpp:2453 +msgid "Error: copy( %1 -> %2 ) failed.Deleting existing destination failed." +msgstr "" +"Errore: copia da %1 a %2 non riuscita. Eliminazione destinazione esistente " +"fallita." + +#: directorymergewindow.cpp:2463 +msgid "copyLink( %1 -> %2 )" +msgstr "copiaLink(%1 -> %2)" + +#: directorymergewindow.cpp:2474 +msgid "Error: copyLink failed: Remote links are not yet supported." +msgstr "" +"Errore: copiaLink impossibile: i link remoti non sono ancora supportati." + +#: directorymergewindow.cpp:2480 +msgid "Error: copyLink failed." +msgstr "Errore: copiaLink non riuscito." + +#: directorymergewindow.cpp:2500 +msgid "copy( %1 -> %2 )" +msgstr "copia(%1 -> %2)" + +#: directorymergewindow.cpp:2526 +msgid "Error during rename( %1 -> %2 ): Cannot delete existing destination." +msgstr "" +"Errore nel cambio nome (%1 -> %2): Impossibile eliminare la destinazione " +"esistente." + +#: directorymergewindow.cpp:2532 +msgid "rename( %1 -> %2 )" +msgstr "cambio nome(%1 -> %2)" + +#: directorymergewindow.cpp:2541 +msgid "Error: Rename failed." +msgstr "Errore: cambio nome non riuscito." + +#: directorymergewindow.cpp:2559 +msgid "Error during makeDir of %1. Cannot delete existing file." +msgstr "Errore eseguendo makeDir di %1. Impossibile eliminare file esistente." + +#: directorymergewindow.cpp:2575 +msgid "makeDir( %1 )" +msgstr "makeDir(%1)" + +#: directorymergewindow.cpp:2585 +msgid "Error while creating directory." +msgstr "Errore nel creare una cartella." + +#: directorymergewindow.cpp:2608 directorymergewindow.cpp:2725 +msgid "Dest" +msgstr "Dest" + +#: directorymergewindow.cpp:2612 directorymergewindow.cpp:2650 +msgid "Dir" +msgstr "Dir" + +#: directorymergewindow.cpp:2613 +msgid "Type" +msgstr "Tipo" + +#: directorymergewindow.cpp:2614 +msgid "Size" +msgstr "Dimensione" + +#: directorymergewindow.cpp:2615 +msgid "Attr" +msgstr "Attr" + +#: directorymergewindow.cpp:2616 +msgid "Last Modification" +msgstr "Ultima modifica" + +#: directorymergewindow.cpp:2617 +msgid "Link-Destination" +msgstr "Collegamento di destinazione" + +#: directorymergewindow.cpp:2667 +msgid "not available" +msgstr "non disponibile" + +#: directorymergewindow.cpp:2687 +msgid "A (Dest): " +msgstr "A (Dest): " + +#: directorymergewindow.cpp:2690 +msgid "A (Base): " +msgstr "A (Base): " + +#: directorymergewindow.cpp:2696 +msgid "B (Dest): " +msgstr "B (Dest): " + +#: directorymergewindow.cpp:2704 +msgid "C (Dest): " +msgstr "C (Dest): " + +#: directorymergewindow.cpp:2710 +msgid "Dest: " +msgstr "Dest: " + +#: directorymergewindow.cpp:2775 +msgid "Save Directory Merge State As..." +msgstr "Salva lo stato di fusione cartelle come..." + +#: directorymergewindow.cpp:2862 +msgid "Start/Continue Directory Merge" +msgstr "Avvia/continua fusione cartelle" + +#: directorymergewindow.cpp:2863 +msgid "Run Operation for Current Item" +msgstr "Esegui operazione per questa voce" + +#: directorymergewindow.cpp:2864 +msgid "Compare Selected File" +msgstr "Confronta file selezionato" + +#: directorymergewindow.cpp:2865 +msgid "Merge Current File" +msgstr "Fondi il file attuale" + +#: directorymergewindow.cpp:2866 +msgid "Fold All Subdirs" +msgstr "Chiudi tutte le sottocartelle" + +#: directorymergewindow.cpp:2867 +msgid "Unfold All Subdirs" +msgstr "Apri tutte le sottocartelle" + +#: directorymergewindow.cpp:2871 +msgid "Choose A for All Items" +msgstr "Scegli A in tutti i casi" + +#: directorymergewindow.cpp:2872 +msgid "Choose B for All Items" +msgstr "Scegli B in tutti i casi" + +#: directorymergewindow.cpp:2873 +msgid "Choose C for All Items" +msgstr "Scegli C in tutti i casi" + +#: directorymergewindow.cpp:2874 +msgid "Auto-Choose Operation for All Items" +msgstr "Scelta automatica in tutti i casi" + +#: directorymergewindow.cpp:2875 +msgid "No Operation for All Items" +msgstr "Non fare nulla in tutti i casi" + +#: directorymergewindow.cpp:2880 +msgid "Show Identical Files" +msgstr "Mostra file uguali" + +#: directorymergewindow.cpp:2881 +msgid "Show Different Files" +msgstr "Mostra file diversi" + +#: directorymergewindow.cpp:2882 +msgid "Show Files only in A" +msgstr "Mostra file solo in A" + +#: directorymergewindow.cpp:2883 +msgid "Show Files only in B" +msgstr "Mostra file solo in B" + +#: directorymergewindow.cpp:2884 +msgid "Show Files only in C" +msgstr "Mostra file solo in C" + +#: directorymergewindow.cpp:2888 +msgid "Compare Explicitly Selected Files" +msgstr "Confronta file selezionati" + +#: directorymergewindow.cpp:2889 +msgid "Merge Explicitly Selected Files" +msgstr "Fondi file selezionati" + +#: directorymergewindow.cpp:2891 directorymergewindow.cpp:2898 +msgid "Do Nothing" +msgstr "Non fare nulla" + +#: directorymergewindow.cpp:2892 +msgid "A" +msgstr "A" + +#: directorymergewindow.cpp:2893 +msgid "B" +msgstr "B" + +#: directorymergewindow.cpp:2894 +msgid "C" +msgstr "C" + +#: directorymergewindow.cpp:2903 +msgid "Delete A && B" +msgstr "Elimina A e B" + +#: directorymergewindow.cpp:2906 +msgid "Merge to A && B" +msgstr "Fondi A e B" + +#: fileaccess.cpp:595 +msgid "" +"While trying to make a backup, deleting an older backup failed. \n" +"Filename: " +msgstr "" +"Nel creare una nuova copia, è fallita l'eliminazione di una precedente.\n" +"Nome del file: " + +#: fileaccess.cpp:602 +msgid "" +"While trying to make a backup, renaming failed. \n" +"Filenames: " +msgstr "" +"Nel creare una copia di riserva, non è riuscito un cambio di nome.\n" +"Nome dei file: " + +#: fileaccess.cpp:624 +#, c-format +msgid "Getting file status: %1" +msgstr "Recupero informazioni su stato file: %1" + +#: fileaccess.cpp:667 +#, c-format +msgid "Reading file: %1" +msgstr "Lettura file: %1" + +#: fileaccess.cpp:703 +#, c-format +msgid "Writing file: %1" +msgstr "Scrittura file: %1" + +#: fileaccess.cpp:731 +msgid "Out of memory" +msgstr "Memoria esaurita" + +#: fileaccess.cpp:766 +#, c-format +msgid "Making directory: %1" +msgstr "Creazione cartella: %1" + +#: fileaccess.cpp:786 +#, c-format +msgid "Removing directory: %1" +msgstr "Rimozione cartella: %1" + +#: fileaccess.cpp:801 +#, c-format +msgid "Removing file: %1" +msgstr "Rimozione file: %1" + +#: fileaccess.cpp:817 +msgid "Creating symbolic link: %1 -> %2" +msgstr "Creazione link simbolico: %1 -> %2" + +#: fileaccess.cpp:843 +msgid "Renaming file: %1 -> %2" +msgstr "Cambiamento nome file: %1 -> %2" + +#: fileaccess.cpp:879 +msgid "Copying file: %1 -> %2" +msgstr "Copia del file: %1 -> %2" + +#: fileaccess.cpp:893 +#, c-format +msgid "" +"Error during file copy operation: Opening file for reading failed. Filename: %1" +msgstr "" +"Errore durante la copia di un file: fallita l'apertura del file in lettura. " +"Nome file: %1" + +#: fileaccess.cpp:899 +#, c-format +msgid "" +"Error during file copy operation: Opening file for writing failed. Filename: %1" +msgstr "" +"Errore durante la copia di un file: fallita l'apertura del file in scrittura. " +"Nome file: %1" + +#: fileaccess.cpp:914 +#, c-format +msgid "Error during file copy operation: Reading failed. Filename: %1" +msgstr "Errore durante la copia di un file: lettura fallita. Nome file: %1" + +#: fileaccess.cpp:923 +#, c-format +msgid "Error during file copy operation: Writing failed. Filename: %1" +msgstr "Errore durante la copia di un file: Scrittura fallita. Nome file: %1" + +#: fileaccess.cpp:1219 +msgid "Reading directory: " +msgstr "Lettura cartella: " + +#: fileaccess.cpp:1348 +#, c-format +msgid "Listing directory: %1" +msgstr "Elencazione cartella: %1" + +#: kdiff3.cpp:142 +msgid "Current Configuration:" +msgstr "Configurazione attuale:" + +#: kdiff3.cpp:147 +msgid "Config Option Error:" +msgstr "Errore opzioni di configurazione:" + +#: kdiff3.cpp:187 +msgid "Option --auto used, but no output file specified." +msgstr "Opzione --auto inserita, manca indicazione del file di output." + +#: kdiff3.cpp:323 +msgid "Option --auto ignored for directory comparison." +msgstr "Opzione --auto ignorata nel confronto di cartelle." + +#: kdiff3.cpp:359 +msgid "Saving failed." +msgstr "Salvataggio non riuscito." + +#: kdiff3.cpp:386 pdiff.cpp:1041 pdiff.cpp:1112 +msgid "Opening of these files failed:" +msgstr "Non è riuscita l'apertura di questi file:" + +#: kdiff3.cpp:395 +msgid "File Open Error" +msgstr "Errore nell'aprire file" + +#: kdiff3.cpp:418 +msgid "Opens documents for comparison..." +msgstr "Apre documenti per confronto..." + +#: kdiff3.cpp:423 +msgid "Saves the merge result. All conflicts must be solved!" +msgstr "" +"Salva il risultato della fusione. Tutti i conflitti devono essere stati " +"risolti!" + +#: kdiff3.cpp:425 +msgid "Saves the current document as..." +msgstr "Salva questo documento con nome..." + +#: kdiff3.cpp:427 +msgid "Print the differences" +msgstr "Stampa le differenze" + +#: kdiff3.cpp:429 +msgid "Quits the application" +msgstr "Esce dall'applicazione" + +#: kdiff3.cpp:431 +msgid "Cuts the selected section and puts it to the clipboard" +msgstr "Taglia la sezione selezionata e la mette negli appunti" + +#: kdiff3.cpp:433 +msgid "Copies the selected section to the clipboard" +msgstr "Copia la sezione selezionata negli appunti" + +#: kdiff3.cpp:435 +msgid "Pastes the clipboard contents to actual position" +msgstr "Incolla il contenuto degli appunti in questa posizione" + +#: kdiff3.cpp:437 +msgid "Select everything in current window" +msgstr "Seleziona tutto nella finestra corrente" + +#: kdiff3.cpp:439 +msgid "Search for a string" +msgstr "Cerca una stringa" + +#: kdiff3.cpp:441 +msgid "Search again for the string" +msgstr "Cerca di nuovo la stringa" + +#: kdiff3.cpp:443 +msgid "Enables/disables the toolbar" +msgstr "Mostra/nascondi la barra degli strumenti" + +#: kdiff3.cpp:445 +msgid "Enables/disables the statusbar" +msgstr "Mostra/nascondi la barra di stato" + +#: kdiff3.cpp:449 +msgid "Configure KDiff3..." +msgstr "Configura KDiff3..." + +#: kdiff3.cpp:470 +msgid "Go to Current Delta" +msgstr "Vai alla differenza attuale" + +#: kdiff3.cpp:471 +msgid "Go to First Delta" +msgstr "Vai alla prima differenza" + +#: kdiff3.cpp:472 +msgid "Go to Last Delta" +msgstr "Vai all'ultima differenza" + +#: kdiff3.cpp:473 +msgid "(Skips white space differences when \"Show White Space\" is disabled.)" +msgstr "" +"(Ignora le differenze di soli spazi bianchi quando \"Mostra spazi bianchi\" è " +"disattivato)" + +#: kdiff3.cpp:474 +msgid "" +"(Does not skip white space differences even when \"Show White Space\" is " +"disabled.)" +msgstr "" +"(Segnala le differenze di soli spazi bianchi anche quando \"Mostra spazi " +"bianchi\" è disattivato)" + +#: kdiff3.cpp:475 +msgid "Go to Previous Delta" +msgstr "Vai alla differenza precedente" + +#: kdiff3.cpp:477 +msgid "Go to Next Delta" +msgstr "Vai alla differenza successiva" + +#: kdiff3.cpp:479 +msgid "Go to Previous Conflict" +msgstr "Vai al conflitto precedente" + +#: kdiff3.cpp:481 +msgid "Go to Next Conflict" +msgstr "Vai al conflitto successivo" + +#: kdiff3.cpp:483 +msgid "Go to Previous Unsolved Conflict" +msgstr "Vai al precedente conflitto non risolto" + +#: kdiff3.cpp:485 +msgid "Go to Next Unsolved Conflict" +msgstr "Vai al successivo conflitto non risolto" + +#: kdiff3.cpp:487 +msgid "Select Line(s) From A" +msgstr "Scegli righe da A" + +#: kdiff3.cpp:488 +msgid "Select Line(s) From B" +msgstr "Scegli righe da B" + +#: kdiff3.cpp:489 +msgid "Select Line(s) From C" +msgstr "Scegli righe da C" + +#: kdiff3.cpp:490 +msgid "Automatically Go to Next Unsolved Conflict After Source Selection" +msgstr "" +"Vai automaticamente al prossimo conflitto non risolto dopo aver selezionato la " +"fonte" + +#: kdiff3.cpp:492 +msgid "Show Space && Tabulator Characters for Differences" +msgstr "Mostra anche le differenze date da spazi e tabulazioni" + +#: kdiff3.cpp:493 +msgid "Show White Space" +msgstr "Mostra spazi vuoti" + +#: kdiff3.cpp:495 +msgid "Show Line Numbers" +msgstr "Mostra numeri riga" + +#: kdiff3.cpp:496 +msgid "Choose A Everywhere" +msgstr "Scegli sempre A" + +#: kdiff3.cpp:497 +msgid "Choose B Everywhere" +msgstr "Scegli sempre B" + +#: kdiff3.cpp:498 +msgid "Choose C Everywhere" +msgstr "Scegli sempre C" + +#: kdiff3.cpp:499 +msgid "Choose A for All Unsolved Conflicts" +msgstr "Scegli A per tutti i conflitti non risolti" + +#: kdiff3.cpp:500 +msgid "Choose B for All Unsolved Conflicts" +msgstr "Scegli B per tutti i conflitti non risolti" + +#: kdiff3.cpp:501 +msgid "Choose C for All Unsolved Conflicts" +msgstr "Scegli C per tutti i conflitti non risolti" + +#: kdiff3.cpp:502 +msgid "Choose A for All Unsolved Whitespace Conflicts" +msgstr "Scegli A per tutti i conflitti di \"spazi bianchi\" non risolti" + +#: kdiff3.cpp:503 +msgid "Choose B for All Unsolved Whitespace Conflicts" +msgstr "Scegli B per tutti i conflitti di \"spazi bianchi\" non risolti" + +#: kdiff3.cpp:504 +msgid "Choose C for All Unsolved Whitespace Conflicts" +msgstr "Scegli C per tutti i conflitti di \"spazi bianchi\" non risolti" + +#: kdiff3.cpp:505 +msgid "Automatically Solve Simple Conflicts" +msgstr "Risolvi automaticamente i conflitti semplici" + +#: kdiff3.cpp:506 +msgid "Set Deltas to Conflicts" +msgstr "Considera le differenze come conflitti" + +#: kdiff3.cpp:507 +msgid "Run Regular Expression Auto Merge" +msgstr "Avvia la fusione automatica espressioni regolari" + +#: kdiff3.cpp:508 +msgid "Automatically Solve History Conflicts" +msgstr "Risolvi automaticamente i conflitti semplici" + +#: kdiff3.cpp:509 +msgid "Split Diff At Selection" +msgstr "Dividi differenze a selezione" + +#: kdiff3.cpp:510 +msgid "Join Selected Diffs" +msgstr "Unisci i file selezionati" + +#: kdiff3.cpp:512 +msgid "Show Window A" +msgstr "Mostra finestra A" + +#: kdiff3.cpp:513 +msgid "Show Window B" +msgstr "Mostra finestra B" + +#: kdiff3.cpp:514 +msgid "Show Window C" +msgstr "Mostra finestra C" + +#: kdiff3.cpp:515 kdiff3.cpp:526 +msgid "Focus Next Window" +msgstr "Focus prossima finestra" + +#: kdiff3.cpp:517 +msgid "Normal Overview" +msgstr "Vista globale normale" + +#: kdiff3.cpp:518 +msgid "A vs. B Overview" +msgstr "Confronto di A con B" + +#: kdiff3.cpp:519 +msgid "A vs. C Overview" +msgstr "Confronto di A con C" + +#: kdiff3.cpp:520 +msgid "B vs. C Overview" +msgstr "Confronto di B con C" + +#: kdiff3.cpp:521 +msgid "Word Wrap Diff Windows" +msgstr "A capo nelle finestre delle differenze" + +#: kdiff3.cpp:522 +msgid "Add Manual Diff Alignment" +msgstr "Aggiungi allineamento manuale delle differenze" + +#: kdiff3.cpp:523 +msgid "Clear All Manual Diff Alignments" +msgstr "Cancella tutti gli allineamenti manuali delle differenze" + +#: kdiff3.cpp:528 +msgid "Focus Prev Window" +msgstr "Focus finestra prec" + +#: kdiff3.cpp:529 +msgid "Toggle Split Orientation" +msgstr "Inverti orientamento divisione" + +#: kdiff3.cpp:531 +msgid "Dir && Text Split Screen View" +msgstr "Separa visione di testi e cartelle" + +#: kdiff3.cpp:533 +msgid "Toggle Between Dir && Text View" +msgstr "Commuta tra visualizzazione di testi e di cartelle" + +#: kdiff3.cpp:582 pdiff.cpp:1712 +msgid "The merge result hasn't been saved." +msgstr "Il risultato della fusione non è stato salvato." + +#: kdiff3.cpp:583 +msgid "Save && Quit" +msgstr "Salva ed esci" + +#: kdiff3.cpp:583 +msgid "Quit Without Saving" +msgstr "Esci senza salvare" + +#: kdiff3.cpp:591 pdiff.cpp:1721 +msgid "Saving the merge result failed." +msgstr "Non è riuscito il salvataggio della fusione." + +#: kdiff3.cpp:602 pdiff.cpp:978 +msgid "" +"You are currently doing a directory merge. Are you sure, you want to abort?" +msgstr "È in corso la fusione di cartelle. Sei sicuro di voler interrompere?" + +#: kdiff3.cpp:625 +msgid "Saving file..." +msgstr "Salvataggio file..." + +#: kdiff3.cpp:642 +msgid "Saving file with a new filename..." +msgstr "Salvataggio file con nuovo nome..." + +#: kdiff3.cpp:732 +msgid "Printing..." +msgstr "Stampa..." + +#: kdiff3.cpp:738 kdiff3.cpp:900 +msgid "Printing aborted." +msgstr "Stampa interrotta." + +#: kdiff3.cpp:870 +msgid "Selection" +msgstr "Selezione" + +#: kdiff3.cpp:896 +msgid "Printing completed." +msgstr "Stampa completata." + +#: kdiff3.cpp:906 +msgid "Exiting..." +msgstr "Uscita..." + +#: kdiff3.cpp:918 +msgid "Toggling toolbar..." +msgstr "(dis)attiva barra degli strumenti..." + +#: kdiff3.cpp:939 +msgid "Toggle the statusbar..." +msgstr "(dis)attiva la barra di stato..." + +#: kdiff3_part.cpp:155 kdiff3_part.cpp:224 +msgid "Couldn't find files for comparison." +msgstr "Non trovo i file da confrontare." + +#: kdiff3_part.cpp:291 +msgid "KDiff3Part" +msgstr "KDiff3Part" + +#: kdiff3_shell.cpp:78 +msgid "" +"Could not find our part!\n" +"This usually happens due to an installation problem. Please read the " +"README-file in the source package for details." +msgstr "" +"Non si trova una componente!\n" +"Questo di solito accade per problemi di installazione. Per maggiori dettagli " +"dovresti leggere il file README nel pacchetto dei sorgenti." + +#: main.cpp:35 +msgid "Tool for Comparison and Merge of Files and Directories" +msgstr "Strumento per confrontare e fondere più file o cartelle" + +#: main.cpp:40 +msgid "Merge the input." +msgstr "Fondi l'input." + +#: main.cpp:42 +msgid "Explicit base file. For compatibility with certain tools." +msgstr "File di base esplicito. Per compatibilità con certi programmi." + +#: main.cpp:44 +msgid "Output file. Implies -m. E.g.: -o newfile.txt" +msgstr "File di output. Implica -m. Ad es.: -o nuovo_file.txt" + +#: main.cpp:45 +msgid "Output file, again. (For compatibility with certain tools.)" +msgstr "File di output, ancora. (Per compatibilità con certi programmi)" + +#: main.cpp:46 +msgid "No GUI if all conflicts are auto-solvable. (Needs -o file)" +msgstr "" +"Senza GUI se ogni conflitto è risolvibile in automatico. (Serve -o file)" + +#: main.cpp:47 +msgid "Don't solve conflicts automatically. (For compatibility...)" +msgstr "Non risolvere i conflitti automaticamente. (Per compatibilità...)" + +#: main.cpp:48 +msgid "Visible name replacement for input file 1 (base)." +msgstr "Mostra sostituzione nome per il file di input 1 (base)." + +#: main.cpp:49 +msgid "Visible name replacement for input file 2." +msgstr "Mostra sostituzione nome per il file di input 2." + +#: main.cpp:50 +msgid "Visible name replacement for input file 3." +msgstr "Mostra sostituzione nome per il file di input 3." + +#: main.cpp:52 +msgid "Alternative visible name replacement. Supply this once for every input." +msgstr "" +"Sostituzione del nome visibile alternativo. Da specificare per ogni input." + +#: main.cpp:53 +msgid "" +"Override a config setting. Use once for every setting. E.g.: --cs " +"\"AutoAdvance=1\"" +msgstr "" +"Ignora un'impostazione di configurazione. Usa una volta per ogni impostazione. " +"P. e.: --cs \"AutoAdvance=1\"" + +#: main.cpp:54 +msgid "Show list of config settings and current values." +msgstr "" +"Mostra la lista delle impostazioni di configurazione e i valori correnti." + +#: main.cpp:55 +msgid "Use a different config file." +msgstr "Usa un file di configurazione diverso." + +#: main.cpp:59 +msgid "file1 to open (base, if not specified via --base)" +msgstr "file1 da aprire (base, se non cambiato con --base)" + +#: main.cpp:60 +msgid "file2 to open" +msgstr "file2 da aprire " + +#: main.cpp:61 +msgid "file3 to open" +msgstr "file3 da aprire " + +#: main.cpp:93 +msgid "Ignored. (User defined.)" +msgstr "Ignorato. (definito dall'utente)" + +#. i18n: file kdiff3_part.rc line 16 +#: main.cpp:173 rc.cpp:9 +#, no-c-format +msgid "KDiff3" +msgstr "KDiff3" + +#: main.cpp:186 +msgid "+ Many thanks to those who reported bugs and contributed ideas!" +msgstr "+ Mille grazie a coloro che hanno segnalato errori o fornito idee!" + +#: mergeresultwindow.cpp:136 mergeresultwindow.cpp:939 +#: mergeresultwindow.cpp:953 mergeresultwindow.cpp:965 +#: mergeresultwindow.cpp:977 +msgid "Number of remaining unsolved conflicts: %1 (of which %2 are whitespace)" +msgstr "" +"Numero di conflitti non ancora risolti: %1 (di cui %2 relativi a spazi bianchi)" + +#: mergeresultwindow.cpp:285 +msgid "" +"The output has been modified.\n" +"If you continue your changes will be lost." +msgstr "" +"L'ouput è stato modificato.\n" +"Se continui le modifiche andranno perse." + +#: mergeresultwindow.cpp:797 pdiff.cpp:511 +msgid "All input files are binary equal." +msgstr "Tutti i file in input sono uguali a livello binario." + +#: mergeresultwindow.cpp:799 +msgid "All input files contain the same text." +msgstr "Tutti i file in input contengono lo stesso testo." + +#: mergeresultwindow.cpp:801 +msgid "" +"Files A and B are binary equal.\n" +msgstr "" +"I file A e B sono uguali a livello binario.\n" + +#: mergeresultwindow.cpp:802 +msgid "" +"Files A and B have equal text. \n" +msgstr "" +"I file A e B contengono lo stesso testo.\n" + +#: mergeresultwindow.cpp:803 +msgid "" +"Files A and C are binary equal.\n" +msgstr "" +"I file A e C sono uguali a livello binario.\n" + +#: mergeresultwindow.cpp:804 +msgid "" +"Files A and C have equal text. \n" +msgstr "" +"I file A e C contengono lo stesso testo.\n" + +#: mergeresultwindow.cpp:805 +msgid "" +"Files B and C are binary equal.\n" +msgstr "" +"I file B e C sono uguali a livello binario.\n" + +#: mergeresultwindow.cpp:806 +msgid "" +"Files B and C have equal text. \n" +msgstr "" +"I file B e C contengono lo stesso testo.\n" + +#: mergeresultwindow.cpp:812 +msgid "Total number of conflicts: " +msgstr "Numero totale di conflitti: " + +#: mergeresultwindow.cpp:813 +msgid "" +"\n" +"Nr of automatically solved conflicts: " +msgstr "" +"\n" +"N. di conflitti risolti automaticamente: " + +#: mergeresultwindow.cpp:814 +msgid "" +"\n" +"Nr of unsolved conflicts: " +msgstr "" +"\n" +"N. di conflitti non risolti: " + +#: mergeresultwindow.cpp:816 +msgid "Conflicts" +msgstr "Conflitti" + +#: mergeresultwindow.cpp:1652 +msgid "" +msgstr "" + +#: mergeresultwindow.cpp:1660 +msgid "" +msgstr "" + +#: mergeresultwindow.cpp:1662 mergeresultwindow.cpp:2427 +msgid "" +msgstr "" + +#: mergeresultwindow.cpp:2635 +msgid "" +"Not all conflicts are solved yet.\n" +"File not saved.\n" +msgstr "" +"Permangono dei conflitti non risolti.\n" +"Il file non verrà salvato.\n" + +#: mergeresultwindow.cpp:2637 +msgid "Conflicts Left" +msgstr "Conflitti restanti" + +#: mergeresultwindow.cpp:2649 +msgid "" +"\n" +"\n" +"Creating backup failed. File not saved." +msgstr "" +"\n" +"\n" +"Impossibile fare una copia di riserva. File non salvato." + +#: mergeresultwindow.cpp:2649 mergeresultwindow.cpp:2689 +msgid "File Save Error" +msgstr "Errore nel salvare il file" + +#: mergeresultwindow.cpp:2689 +msgid "Error while writing." +msgstr "Errore di scrittura." + +#: mergeresultwindow.cpp:3020 +msgid "Output" +msgstr "Output" + +#: mergeresultwindow.cpp:3032 mergeresultwindow.cpp:3139 +msgid "[Modified]" +msgstr "[Modificato]" + +#: mergeresultwindow.cpp:3039 +msgid "Encoding for saving" +msgstr "Codifica per il salvataggio" + +#: mergeresultwindow.cpp:3075 mergeresultwindow.cpp:3081 +#: mergeresultwindow.cpp:3087 +msgid "Codec from" +msgstr "Codec da" + +#: optiondialog.cpp:362 +msgid "Unicode, 8 bit" +msgstr "Unicode, 8 bit" + +#: optiondialog.cpp:363 +msgid "Unicode" +msgstr "Unicode" + +#: optiondialog.cpp:364 +msgid "Latin1" +msgstr "Latin1" + +#: optiondialog.cpp:383 +msgid "Change this if non-ASCII characters are not displayed correctly." +msgstr "Cambialo se i caratteri non-ascii non vengono mostrati correttamente." + +#: optiondialog.cpp:510 +msgid "Editor & Diff Output Font" +msgstr "Set di caratteri per l'editor e per l'output di diff" + +#: optiondialog.cpp:531 +msgid "Italic font for deltas" +msgstr "Metti in corsivo le differenze" + +#: optiondialog.cpp:534 +msgid "" +"Selects the italic version of the font for differences.\n" +"If the font doesn't support italic characters, then this does nothing." +msgstr "" +"Imposta per le differenze la versione corsiva del carattere in uso.\n" +"Se il carattere non supporta il corsivo, l'opzione non avrà alcun effetto." + +#: optiondialog.cpp:542 +msgid "Color" +msgstr "Colore" + +#: optiondialog.cpp:542 +msgid "Colors Settings" +msgstr "Impostazioni colori" + +#: optiondialog.cpp:556 +msgid "Editor and Diff Views:" +msgstr "Editor e visualizzatore differenze:" + +#: optiondialog.cpp:564 +msgid "Foreground color:" +msgstr "Colore del testo:" + +#: optiondialog.cpp:570 +msgid "Background color:" +msgstr "Colore dello sfondo:" + +#: optiondialog.cpp:578 +msgid "Diff background color:" +msgstr "Colore dello sfondo per le differenze:" + +#: optiondialog.cpp:585 +msgid "Color A:" +msgstr "Colore per A:" + +#: optiondialog.cpp:592 +msgid "Color B:" +msgstr "Colore per B:" + +#: optiondialog.cpp:599 +msgid "Color C:" +msgstr "Colore per C:" + +#: optiondialog.cpp:605 +msgid "Conflict color:" +msgstr "Colore per conflitti:" + +#: optiondialog.cpp:612 +msgid "Current range background color:" +msgstr "Colore di sfondo per questo intervallo:" + +#: optiondialog.cpp:619 +msgid "Current range diff background color:" +msgstr "Colore differenze per questo intervallo:" + +#: optiondialog.cpp:625 +msgid "Color for manually aligned difference ranges:" +msgstr "Colore per intervalli di differenze allineate manualmente:" + +#: optiondialog.cpp:630 +msgid "Directory Comparison View:" +msgstr "Vista di confronto cartelle:" + +#: optiondialog.cpp:636 +msgid "Newest file color:" +msgstr "colore del file più recente:" + +#: optiondialog.cpp:639 +msgid "" +"Changing this color will only be effective when starting the next directory " +"comparison." +msgstr "" +"Il cambiamento di questo colore sarà effettivo quando si avvierà un nuovo " +"confronto tra cartelle." + +#: optiondialog.cpp:644 +msgid "Oldest file color:" +msgstr "Colore del file più vecchio:" + +#: optiondialog.cpp:651 +msgid "Middle age file color:" +msgstr "Colore del file di età media:" + +#: optiondialog.cpp:658 +msgid "Color for missing files:" +msgstr "Colore per file mancanti:" + +#: optiondialog.cpp:670 +msgid "Editor" +msgstr "Editor" + +#: optiondialog.cpp:670 +msgid "Editor Behavior" +msgstr "Comportamento dell'editor" + +#: optiondialog.cpp:680 +msgid "Tab inserts spaces" +msgstr "Il Tab inserisce spazi" + +#: optiondialog.cpp:683 +msgid "" +"On: Pressing tab generates the appropriate number of spaces.\n" +"Off: A Tab-character will be inserted." +msgstr "" +"Attivo: premere Tab è come inserire un opportuno numero di spazi.\n" +"Non attivo: viene inserito un carattere Tab." + +#: optiondialog.cpp:689 +msgid "Tab size:" +msgstr "Dimensione di Tab:" + +#: optiondialog.cpp:694 +msgid "Auto indentation" +msgstr "Rientro automatico" + +#: optiondialog.cpp:697 +msgid "" +"On: The indentation of the previous line is used for a new line.\n" +msgstr "" +"Attivo: la nuova riga avrà lo stesso rientro della riga precedente.\n" + +#: optiondialog.cpp:701 +msgid "Auto copy selection" +msgstr "Copia automaticamente della selezione" + +#: optiondialog.cpp:704 +msgid "" +"On: Any selection is immediately written to the clipboard.\n" +"Off: You must explicitely copy e.g. via Ctrl-C." +msgstr "" +"Attivo: Ogni selezione è immediatamente copiata negli appunti.\n" +"Non attivo: Devi esplicitamente copiarla, ad es. con Ctrl-C." + +#: optiondialog.cpp:709 +msgid "Line end style:" +msgstr "Tipo di fine riga:" + +#: optiondialog.cpp:721 +msgid "" +"Sets the line endings for when an edited file is saved.\n" +"DOS/Windows: CR+LF; UNIX: LF; with CR=0D, LF=0A" +msgstr "" +"Imposta il \"fine riga\" da usare quando salvi un file modificato:\n" +"DOS/Windows: CR+LF; Unix: LF; dove CR=0D, LF=0A" + +#: optiondialog.cpp:732 +msgid "Diff" +msgstr "Diff" + +#: optiondialog.cpp:732 +msgid "Diff Settings" +msgstr "Impostazioni Diff" + +#: optiondialog.cpp:743 +msgid "Preserve carriage return" +msgstr "Conserva il ritorno carrello" + +#: optiondialog.cpp:746 +msgid "" +"Show carriage return characters '\\r' if they exist.\n" +"Helps to compare files that were modified under different operating systems." +msgstr "" +"Mostra i caratteri di ritorno carrello \"\\r\"se presenti.\n" +"Aiuta a confrontare file modificati sotto sistemi operativi diversi." + +#: optiondialog.cpp:751 +msgid "Ignore numbers" +msgstr "Ignora i numeri" + +#: optiondialog.cpp:754 +msgid "" +"Ignore number characters during line matching phase. (Similar to Ignore white " +"space.)\n" +"Might help to compare files with numeric data." +msgstr "" +"Ignora i caratteri numerici durante il confronto. (Analogo a \"Ignora " +"spazi\".)\n" +"Può essere utile per confrontare file con dati numerici." + +#: optiondialog.cpp:759 +msgid "Ignore C/C++ comments" +msgstr "Ignora i commenti C/C++" + +#: optiondialog.cpp:761 +msgid "Treat C/C++ comments like white space." +msgstr "Tratta i commenti C/C++ come spazi bianchi." + +#: optiondialog.cpp:765 +msgid "Ignore case" +msgstr "Ignora maiuscole" + +#: optiondialog.cpp:768 +msgid "Treat case differences like white space changes. ('a'<=>'A')" +msgstr "Tratta differenze maiusc./minusc. come spazi bianchi. ('a'<=>'A')" + +#: optiondialog.cpp:772 +msgid "Preprocessor command:" +msgstr "Comando per il preprocessore:" + +#: optiondialog.cpp:776 +msgid "User defined pre-processing. (See the docs for details.)" +msgstr "" +"Preprocessore definito dall'utente. Vedi il manuale per maggiori dettagli" + +#: optiondialog.cpp:779 +msgid "Line-matching preprocessor command:" +msgstr "Preprocessore per confronto righe:" + +#: optiondialog.cpp:783 +msgid "" +"This pre-processor is only used during line matching.\n" +"(See the docs for details.)" +msgstr "" +"Questo preprocessore viene utilizzato solo\n" +"per verificare la corrispondenza di righe.\n" +"Vedi il manuale per maggiori dettagli" + +#: optiondialog.cpp:786 +msgid "Try hard (slower)" +msgstr "Ricerca approfondita (lenta)" + +#: optiondialog.cpp:789 +msgid "" +"Enables the --minimal option for the external diff.\n" +"The analysis of big files will be much slower." +msgstr "" +"Abilita l'opzione --minimal del \"diff\" esterno.\n" +"L'analisi di grandi file sarà molto più lenta." + +#: optiondialog.cpp:794 +msgid "Auto advance delay (ms):" +msgstr "Ritardo nell'avanzamento automatico(ms):" + +#: optiondialog.cpp:799 +msgid "" +"When in Auto-Advance mode the result of the current selection is shown \n" +"for the specified time, before jumping to the next conflict. Range: 0-2000 ms" +msgstr "" +"Quando si è in modalità avanzamento automatico, il risultato della\n" +"selezione attuale viene mostrato per questo tempo, prima di passare\n" +"al prossimo conflitto. Valori ammessi: 0-2000 ms" + +#: optiondialog.cpp:809 +msgid "Merge Settings" +msgstr "Impostazioni fusioni" + +#: optiondialog.cpp:822 +msgid "White space 2-file merge default:" +msgstr "Trattamento predefinito degli spazi bianchi nel fondere 2 file:" + +#: optiondialog.cpp:826 optiondialog.cpp:839 +msgid "Manual Choice" +msgstr "Scelta manuale" + +#: optiondialog.cpp:830 optiondialog.cpp:844 +msgid "" +"Allow the merge algorithm to automatically select an input for white-space-only " +"changes." +msgstr "" +"Consente all'algoritmo di fusione di definire il file da cui prendere le " +"modifiche per gli spazi bianchi." + +#: optiondialog.cpp:835 +msgid "White space 3-file merge default:" +msgstr "Trattamento predefinito degli spazi bianchi nel fondere 3 file:" + +#: optiondialog.cpp:849 +msgid "Automatic Merge Regular Expression" +msgstr "Fusione automatica espressioni regolari" + +#: optiondialog.cpp:858 smalldialogs.cpp:397 +msgid "Auto merge regular expression:" +msgstr "Fondi automaticamente espressione regolare:" + +#: optiondialog.cpp:862 +msgid "" +"Regular expression for lines where KDiff3 should automatically choose one " +"source.\n" +"When a line with a conflict matches the regular expression then\n" +"- if available - C, otherwise B will be chosen." +msgstr "" +"Espressione regolare per le righe dove Kdiff3 dovrebbe scegliere " +"automaticamente una fonte.\n" +"Quando una riga con un conflitto corrisponde all'espressione regolare allora " +"sarà scelto\n" +"- se disponibile - C, altrimenti B." + +#: optiondialog.cpp:868 +msgid "Run regular expression auto merge on merge start" +msgstr "Avvia fusione automatica dell'espressione regolare all'avvio fusione" + +#: optiondialog.cpp:870 +msgid "" +"Run the merge for auto merge regular expressions\n" +"immediately when a merge starts.\n" +msgstr "" +"Esegue la fusione per l'operazione automatica con le espressioni regolari\n" +"immediatamente all'avvio dell'operazione.\n" + +#: optiondialog.cpp:875 +msgid "Version Control History Merging" +msgstr "Fusione della cronologia del controllo della versione" + +#: optiondialog.cpp:884 smalldialogs.cpp:424 +msgid "History start regular expression:" +msgstr "Avvio cronologia dell'espressione regolare:" + +#: optiondialog.cpp:888 +msgid "" +"Regular expression for the start of the version control history entry.\n" +"Usually this line contains the \"$Log$\"-keyword.\n" +"Default value: \".*\\$Log.*\\$.*\"" +msgstr "" +"Espressione regolare per l'inizio dell'elemento di cronologia del controllo " +"della versione.\n" +"Solitamente questa riga contiene \"$Log$\"-keyword.\n" +"Valore predefinito: \".*\\$Log.*\\$.*\"" + +#: optiondialog.cpp:894 smalldialogs.cpp:453 +msgid "History entry start regular expression:" +msgstr "Espressione regolare di inizio dell'elemento di cronologia:" + +#: optiondialog.cpp:906 +msgid "" +"A version control history entry consists of several lines.\n" +"Specify the regular expression to detect the first line (without the leading " +"comment).\n" +"Use parentheses to group the keys you want to use for sorting.\n" +"If left empty, then KDiff3 assumes that empty lines separate history entries.\n" +"See the documentation for details." +msgstr "" +"Un elemento di cronologia del controllo della versione consiste di diverse " +"linee.\n" +"Specifica l'espressione regolare per individuare la prima riga (senza il " +"commento principale).\n" +"Usa le parentesi per raggruppare le chiavi che si vogliono usare per " +"l'ordinamento.\n" +"Se la parte sinistra è mancante, KDiff3 considera che le linee vuote saparano " +"gli elementi di cronologia.\n" +"Consulta la documentazione per ulteriori dettagli." + +#: optiondialog.cpp:914 +msgid "History merge sorting" +msgstr "Ordinamento della fusione della cronologia" + +#: optiondialog.cpp:916 +msgid "Sort version control history by a key." +msgstr "Ordina la cronologia del controllo di versione per chiavi." + +#: optiondialog.cpp:926 +msgid "History entry start sort key order:" +msgstr "" +"Ordine della chiave d'ordinamento d'inizio dell'elemento di cronologia:" + +#: optiondialog.cpp:930 +msgid "" +"Each parentheses used in the regular expression for the history start entry\n" +"groups a key that can be used for sorting.\n" +"Specify the list of keys (that are numbered in order of occurrence\n" +"starting with 1) using ',' as separator (e.g. \"4,5,6,1,2,3,7\").\n" +"If left empty, then no sorting will be done.\n" +"See the documentation for details." +msgstr "" +"Ogni parentesi usata nell'espressione regolare per la voce di avvio della " +"cronologia\n" +"raggruppa una chiave che può essere usata per l'ordinamento.\n" +"Specifica la lista delle chiavi (che sono numerate in ordine di avvenimento\n" +"iniziando con 1) usando ',' come separatore (p.e. \"4,5,6,1,2,3,7\").\n" +"Consulta la documentazione per i ulteriori dettagli." + +#: optiondialog.cpp:941 +msgid "Merge version control history on merge start" +msgstr "Fondi la cronologia del controllo di versione all'inizio della fusione" + +#: optiondialog.cpp:943 +msgid "Run version control history automerge on merge start." +msgstr "" +"Avvia l'autofusione della cronologia del controllo di versione all'inizio della " +"fusione." + +#: optiondialog.cpp:947 +msgid "Test your regular expressions" +msgstr "Prova le tue espressioni regolari" + +#: optiondialog.cpp:952 +msgid "Irrelevant merge command:" +msgstr "Comando di fusione irrilevante:" + +#: optiondialog.cpp:956 +msgid "" +"If specified this script is run after automerge\n" +"when no other relevant changes were detected.\n" +"Called with the parameters: filename1 filename2 filename3" +msgstr "" +"Se specificato questo script è avviato dopo la fusione automatica\n" +"quando non sono rilevati altri cambiamenti rilevanti.\n" +"Chiamati con i paramentri: filename1 filename2 filename3" + +#: optiondialog.cpp:966 +msgid "Directory Merge" +msgstr "Fusione di directory" + +#: optiondialog.cpp:975 +msgid "Recursive directories" +msgstr "Anche sottodirectory" + +#: optiondialog.cpp:977 +msgid "Whether to analyze subdirectories or not." +msgstr "Per scegliere se analizzare anche le sottodirectory o no." + +#: optiondialog.cpp:979 +msgid "File pattern(s):" +msgstr "Tipi di file:" + +#: optiondialog.cpp:984 +msgid "" +"Pattern(s) of files to be analyzed. \n" +"Wildcards: '*' and '?'\n" +"Several Patterns can be specified by using the separator: ';'" +msgstr "" +"Categorie di file da analizzare. \n" +"Caratteri jolly ammessi: \"*\" e \"?\"\n" +"Puoi specificare più categorie separandole con un \";\"" + +#: optiondialog.cpp:990 +msgid "File-anti-pattern(s):" +msgstr "File da escludere:" + +#: optiondialog.cpp:995 +msgid "" +"Pattern(s) of files to be excluded from analysis. \n" +"Wildcards: '*' and '?'\n" +"Several Patterns can be specified by using the separator: ';'" +msgstr "" +"Categorie di file da non analizzare. \n" +"Caratteri jolly ammessi: \"*\" e \"?\"\n" +"Puoi specificare più categorie separandole con un \";\"" + +#: optiondialog.cpp:1001 +msgid "Dir-anti-pattern(s):" +msgstr "Directory da escludere:" + +#: optiondialog.cpp:1006 +msgid "" +"Pattern(s) of directories to be excluded from analysis. \n" +"Wildcards: '*' and '?'\n" +"Several Patterns can be specified by using the separator: ';'" +msgstr "" +"Categorie di directory da non analizzare. \n" +"Caratteri jolly ammessi: \"*\" e \"?\"\n" +"Puoi specificare più categorie separandole con un \";\"" + +#: optiondialog.cpp:1012 +msgid "Use .cvsignore" +msgstr "Utilizza .cvsignore" + +#: optiondialog.cpp:1015 +msgid "" +"Extends the antipattern to anything that would be ignored by CVS.\n" +"Via local \".cvsignore\"-files this can be directory specific." +msgstr "" +"Escludi anche tutto quello che sarebbe ignorato dal CVS.\n" +"Puoi usare un file \".cvsignore\" diverso per ogni directory." + +#: optiondialog.cpp:1020 +msgid "Find hidden files and directories" +msgstr "Esamina file e directory nascosti" + +#: optiondialog.cpp:1023 +msgid "Finds files and directories with the hidden attribute." +msgstr "Esamina file e directory con l'attributo \"nascosto\"." + +#: optiondialog.cpp:1025 +msgid "Finds files and directories starting with '.'." +msgstr "Esamina file e directory che iniziano con \".\"." + +#: optiondialog.cpp:1029 +msgid "Follow file links" +msgstr "Segui i link dei file" + +#: optiondialog.cpp:1032 +msgid "" +"On: Compare the file the link points to.\n" +"Off: Compare the links." +msgstr "" +"Attivo: Confronta il file a cui punta il link.\n" +"Non attivo: Confronta i link." + +#: optiondialog.cpp:1037 +msgid "Follow directory links" +msgstr "Segui i link delle directory" + +#: optiondialog.cpp:1040 +msgid "" +"On: Compare the directory the link points to.\n" +"Off: Compare the links." +msgstr "" +"Attivo: Confronta la directory a cui punta il link.\n" +"Non attivo: Confronta i link." + +#: optiondialog.cpp:1056 +msgid "Case sensitive filename comparison" +msgstr "Confronto nomi file sensibili alle maiuscole/minuscole" + +#: optiondialog.cpp:1059 +msgid "" +"The directory comparison will compare files or directories when their names " +"match.\n" +"Set this option if the case of the names must match. (Default for Windows is " +"off, otherwise on.)" +msgstr "" +"Il confronto tra cartelle confronterà file o cartelle quando i loro nomi " +"coincidono.\n" +"Imposta questa opzione se il caso dei nomi deve coincidere. (l'opzione " +"predefinita per Windows è off, altrimenti on.)" + +#: optiondialog.cpp:1063 +msgid "File Comparison Mode" +msgstr "Modalità di confronto file" + +#: optiondialog.cpp:1067 +msgid "Binary comparison" +msgstr "Confronto binario" + +#: optiondialog.cpp:1068 +msgid "Binary comparison of each file. (Default)" +msgstr "Confronto binario per ogni file. (predefinito)" + +#: optiondialog.cpp:1070 +msgid "Full analysis" +msgstr "Analisi completa" + +#: optiondialog.cpp:1071 +msgid "" +"Do a full analysis and show statistics information in extra columns.\n" +"(Slower than a binary comparison, much slower for binary files.)" +msgstr "" +"Esegue analisi completa e mostra informazioni statistiche in nuove colonne.\n" +"(Più lento del confronto binario, lentissimo su file binari.)" + +#: optiondialog.cpp:1074 +msgid "Trust the modification date (unsafe)" +msgstr "Basati sulla data di modifica (non sicuro)" + +#: optiondialog.cpp:1075 +msgid "" +"Assume that files are equal if the modification date and file length are " +"equal.\n" +"Useful for big directories or slow networks." +msgstr "" +"Assumi che i file sono uguali se hanno la stessa data e dimensione.\n" +"Utile per confrontare grandi directory o per connessioni lente." + +#: optiondialog.cpp:1078 +msgid "Trust the size (unsafe)" +msgstr "Basati sulla dimensione (non sicuro)" + +#: optiondialog.cpp:1079 +msgid "" +"Assume that files are equal if their file lengths are equal.\n" +"Useful for big directories or slow networks when the date is modified during " +"download." +msgstr "" +"Assumi che i file sono uguali se hanno la stessa dimensione.\n" +"Utile per confrontare grandi directory o per connessioni lente,\n" +"quando la data viene modificata durante il download." + +#: optiondialog.cpp:1083 +msgid "Synchronize directories" +msgstr "Sincronizza le directory" + +#: optiondialog.cpp:1086 +msgid "" +"Offers to store files in both directories so that\n" +"both directories are the same afterwards.\n" +"Works only when comparing two directories without specifying a destination." +msgstr "" +"Permette di memorizzare i file in entrambe le\n" +"directory, che poi risulteranno uguali.\n" +"Funziona solo quando si confrontano due directory\n" +"senza specificare una destinazione." + +#: optiondialog.cpp:1092 +msgid "White space differences considered equal" +msgstr "Se diversi per spazi bianchi sono considerati uguali" + +#: optiondialog.cpp:1095 +msgid "" +"If files differ only by white space consider them equal.\n" +"This is only active when full analysis is chosen." +msgstr "" +"Considera uguali i file diversi solo per spazi bianchi.\n" +"Funziona solo quando si effettua un'analisi completa." + +#: optiondialog.cpp:1101 +msgid "Copy newer instead of merging (unsafe)" +msgstr "Copia il più recente invece di fondere (non sicuro)" + +#: optiondialog.cpp:1104 +msgid "" +"Don't look inside, just take the newer file.\n" +"(Use this only if you know what you are doing!)\n" +"Only effective when comparing two directories." +msgstr "" +"Non guarda i contenuti, prende il più recente.\n" +"(Utilizza questo metodo solo a ragion veduta!)\n" +"Ha effetto solo quando si confrontano due directory." + +#: optiondialog.cpp:1109 +msgid "Backup files (.orig)" +msgstr "File di backup (.orig)" + +#: optiondialog.cpp:1112 +msgid "" +"When a file would be saved over an old file, then the old file\n" +"will be renamed with a '.orig'-extension instead of being deleted." +msgstr "" +"Quando decidi di salvare un file sovrascrivendone\n" +"uno precedente, quello vecchio non verrà cancellato,\n" +"ma salvato con l'estensione \".orig\"." + +#: optiondialog.cpp:1176 +msgid "Regional Settings" +msgstr "Impostazioni locali" + +#: optiondialog.cpp:1272 +msgid "Language (restart required)" +msgstr "Lingua (bisogna riavviare kdiff3)" + +#: optiondialog.cpp:1304 +msgid "" +"Choose the language of the GUI-strings or \"Auto\".\n" +"For a change of language to take place, quit and restart KDiff3." +msgstr "" +"Scegli una lingua dell'interfaccia grafica o \"Auto\".\n" +"Affinché la lingua venga cambiata, devi uscire e riavviare KDiff3." + +#: optiondialog.cpp:1322 +msgid "Use the same encoding for everything:" +msgstr "Usa la stessa codifica per tutto:" + +#: optiondialog.cpp:1325 +msgid "" +"Enable this allows to change all encodings by changing the first only.\n" +"Disable this if different individual settings are needed." +msgstr "" +"Permette di cambiare tutte le codifiche cambiando solo la prima.\n" +"Disattivala se servono impostazioni differenziate." + +#: optiondialog.cpp:1330 +msgid "Note: Local Encoding is " +msgstr "Nota: La codifica locale è " + +#: optiondialog.cpp:1334 +msgid "File Encoding for A:" +msgstr "Codifica per file A:" + +#: optiondialog.cpp:1340 +msgid "" +"If enabled then Unicode (UTF-16 or UTF-8) encoding will be detected.\n" +"If the file encoding is not detected then the selected encoding will be used as " +"fallback.\n" +"(Unicode detection depends on the first bytes of a file - the byte order mark " +"\"BOM\".)" +msgstr "" +"Se abilitato, la codifica Unicode (UTF-16 o UTF-8) verrà abilitata.\n" +"Se la codifica del file non viene rilevata, la codifica selezionata verrà usata " +"come riserva.\n" +"(la rilevazione unicode dipende dal primo byte di un file - l'indicazione " +"dell'ordine dei byte \"BOM\")." + +#: optiondialog.cpp:1344 optiondialog.cpp:1353 optiondialog.cpp:1362 +msgid "Auto Detect Unicode" +msgstr "Autorileva Unicode" + +#: optiondialog.cpp:1349 +msgid "File Encoding for B:" +msgstr "Codifica per file B:" + +#: optiondialog.cpp:1358 +msgid "File Encoding for C:" +msgstr "Codifica per file C:" + +#: optiondialog.cpp:1367 +msgid "File Encoding for Merge Output and Saving:" +msgstr "Codifica per i file fusione e salvataggio:" + +#: optiondialog.cpp:1371 +msgid "Auto Select" +msgstr "Seleziona automaticamente" + +#: optiondialog.cpp:1374 +msgid "" +"If enabled then the encoding from the input files is used.\n" +"In ambiguous cases a dialog will ask the user to choose the encoding for " +"saving." +msgstr "" +"Se selezionato viene usata la codifica dai file di input.\n" +"In casi ambigui una finestra di dialogo chiederà all'utente di scegliere la " +"codifica per il salvataggio." + +#: optiondialog.cpp:1378 +msgid "File Encoding for Preprocessor Files:" +msgstr "Codifica per i file sottoposti al preprocessore:" + +#: optiondialog.cpp:1389 +msgid "Right To Left Language" +msgstr "Lingue scritte da destra a sin." + +#: optiondialog.cpp:1392 +msgid "" +"Some languages are read from right to left.\n" +"This setting will change the viewer and editor accordingly." +msgstr "" +"Alcune lingue si scrivono da destra a sinistra.\n" +"Questa opzione cambia editor e visualizzazione per adattarvisi." + +#: optiondialog.cpp:1402 +msgid "Integration" +msgstr "Integrazione" + +#: optiondialog.cpp:1402 +msgid "Integration Settings" +msgstr "Impostazioni di integrazione" + +#: optiondialog.cpp:1412 +msgid "Command line options to ignore:" +msgstr "Opzioni di riga di comando da ignorare:" + +#: optiondialog.cpp:1417 +msgid "" +"List of command line options that should be ignored when KDiff3 is used by " +"other tools.\n" +"Several values can be specified if separated via ';'\n" +"This will suppress the \"Unknown option\"-error." +msgstr "" +"Lista delle opzioni da riga di comando che dovrebbero essere ignorate quando " +"KDiff3 viene usato da altri strumenti.\n" +"Molti valori possono essere specificati se separati con ';'\n" +"Questo elimina l'errore \"Opzione sconosciuta\"." + +#: optiondialog.cpp:1480 +msgid "" +"You selected a variable width font.\n" +"\n" +"Because this program doesn't handle variable width fonts\n" +"correctly, you might experience problems while editing.\n" +"\n" +"Do you want to continue or do you want to select another font." +msgstr "" +"Hai selezionato un font a spaziatura variabile.\n" +"\n" +"Poiché questo programma non gestisce correttamente questo\n" +"tipo di font, potresti avere problemi nel modificare i file.\n" +"\n" +"Vuoi continuare o preferisci cambiare font?" + +#: optiondialog.cpp:1484 +msgid "Incompatible Font" +msgstr "Font incompatibile " + +#: optiondialog.cpp:1485 +msgid "Continue at Own Risk" +msgstr "Continua a tuo rischio" + +#: optiondialog.cpp:1485 +msgid "Select Another Font" +msgstr "Scegli un altro font" + +#: optiondialog.cpp:1521 +msgid "This resets all options. Not only those of the current topic." +msgstr "" +"Verranno ripristinate tutte le opzioni.\n" +"Non solo quelle relative a questo argomento." + +#: pdiff.cpp:258 +msgid "PreprocessorCmd: " +msgstr "Cmd-Preprocess.:" + +#: pdiff.cpp:263 +msgid "" +"The following option(s) you selected might change data:\n" +msgstr "" +"Tra le opzioni selezionate, queste potrebbero modificare dei dati:\n" + +#: pdiff.cpp:264 +msgid "" +"\n" +"Most likely this is not wanted during a merge.\n" +"Do you want to disable these settings or continue with these settings active?" +msgstr "" +"\n" +"Di solito non si desidera che ciò accada durante una fusione.\n" +"Vuoi disabilitare queste opzioni o continuare mantenendole in funzione?" + +#: pdiff.cpp:266 +msgid "Option Unsafe for Merging" +msgstr "Opzioni non sicure per fusione" + +#: pdiff.cpp:267 +msgid "Use These Options During Merge" +msgstr "Utilizza queste opzioni durante la fusione" + +#: pdiff.cpp:267 +msgid "Disable Unsafe Options" +msgstr "Disattiva opzioni non sicure" + +#: pdiff.cpp:297 +msgid "Loading A" +msgstr "Sto caricando A" + +#: pdiff.cpp:301 +msgid "Loading B" +msgstr "Sto caricando B" + +#: pdiff.cpp:318 pdiff.cpp:344 +msgid "Diff: A <-> B" +msgstr "Diff: A <-> B" + +#: pdiff.cpp:324 pdiff.cpp:366 +msgid "Linediff: A <-> B" +msgstr "Diff. righe: A <-> B" + +#: pdiff.cpp:335 +msgid "Loading C" +msgstr "Sto caricando C" + +#: pdiff.cpp:347 +msgid "Diff: B <-> C" +msgstr "Diff: B <-> C" + +#: pdiff.cpp:350 +msgid "Diff: A <-> C" +msgstr "Diff: A <-> C" + +#: pdiff.cpp:369 +msgid "Linediff: B <-> C" +msgstr "Diff. righe: B <-> C" + +#: pdiff.cpp:372 +msgid "Linediff: A <-> C" +msgstr "Diff. righe: A <-> C" + +#: pdiff.cpp:513 +msgid "All input files contain the same text, but are not binary equal." +msgstr "" +"Tutti i file in input contengono lo stesso testo, ma non sono uguali a livello " +"binario." + +#: pdiff.cpp:515 pdiff.cpp:517 pdiff.cpp:519 +msgid "" +"Files %1 and %2 are binary equal.\n" +msgstr "" +"I file %1 e %2 sono uguali a livello binario.\n" + +#: pdiff.cpp:516 pdiff.cpp:518 pdiff.cpp:520 +msgid "" +"Files %1 and %2 have equal text, but are not binary equal. \n" +msgstr "" +"I file %1 e %2 contengono lo stesso testo, ma non sono uguali a livello " +"binario. \n" + +#: pdiff.cpp:530 +msgid "" +"Some inputfiles don't seem to be pure textfiles.\n" +"Note that the KDiff3-merge was not meant for binary data.\n" +"Continue at your own risk." +msgstr "" +"Alcuni file di input non sembrano file di testo puri.\n" +"Tieni conto che la fusione di KDiff3 non ha senso per file binari.\n" +"Se vuoi continuare, lo fai a tuo rischio e pericolo." + +#: pdiff.cpp:979 +msgid "Abort" +msgstr "Interrompi" + +#: pdiff.cpp:985 pdiff.cpp:1073 +msgid "Opening files..." +msgstr "Apertura dei file..." + +#: pdiff.cpp:1050 pdiff.cpp:1121 +msgid "File open error" +msgstr "Errore nell'apertura del file" + +#: pdiff.cpp:1153 +msgid "Cutting selection..." +msgstr "Taglio selezione..." + +#: pdiff.cpp:1174 +msgid "Copying selection to clipboard..." +msgstr "Copia selezione negli appunti..." + +#: pdiff.cpp:1190 +msgid "Inserting clipboard contents..." +msgstr "Inserimento dagli appunti..." + +#: pdiff.cpp:1713 +msgid "Save && Continue" +msgstr "Salva e continua" + +#: pdiff.cpp:1713 +msgid "Continue Without Saving" +msgstr "Continua senza salvare" + +#: pdiff.cpp:1920 +msgid "Search complete." +msgstr "Ricerca completata." + +#: pdiff.cpp:1920 +msgid "Search Complete" +msgstr "Ricerca completata." + +#: pdiff.cpp:2144 +msgid "Nothing is selected in either diff input window." +msgstr "" +"Non è selezionato niente neanche nella finestra di input delle differenze." + +#: pdiff.cpp:2144 +msgid "Error while adding manual diff range" +msgstr "Errore nell'aggiungere intervalli di differenza manuali" + +#. i18n: file kdiff3_part.rc line 4 +#: rc.cpp:3 +#, no-c-format +msgid "&KDiff3" +msgstr "&KDiff3" + +#. i18n: file kdiff3_part.rc line 13 +#: rc.cpp:6 +#, no-c-format +msgid "Configure KDiff3" +msgstr "Configura KDiff3" + +#. i18n: file kdiff3_shell.rc line 7 +#: rc.cpp:15 +#, no-c-format +msgid "&Directory" +msgstr "&Directory" + +#. i18n: file kdiff3_shell.rc line 30 +#: rc.cpp:18 +#, no-c-format +msgid "Current Item Merge Operation" +msgstr "Operazione di fusione su questo file/dir." + +#. i18n: file kdiff3_shell.rc line 38 +#: rc.cpp:21 +#, no-c-format +msgid "Current Item Sync Operation" +msgstr "Operazione di sincronizzazione su questo file/dir." + +#. i18n: file kdiff3_shell.rc line 50 +#: rc.cpp:24 +#, no-c-format +msgid "&Movement" +msgstr "&Va" + +#. i18n: file kdiff3_shell.rc line 61 +#: rc.cpp:27 +#, no-c-format +msgid "D&iffview" +msgstr "VistaD&iff" + +#. i18n: file kdiff3_shell.rc line 73 +#: rc.cpp:30 +#, no-c-format +msgid "&Merge" +msgstr "F&usione" + +#. i18n: file kdiff3_shell.rc line 95 +#: rc.cpp:33 +#, no-c-format +msgid "&Window" +msgstr "Fine&stra" + +#: smalldialogs.cpp:53 +msgid "A (Base):" +msgstr "A (Base):" + +#: smalldialogs.cpp:59 smalldialogs.cpp:75 smalldialogs.cpp:91 +#: smalldialogs.cpp:134 +msgid "File..." +msgstr "File..." + +#: smalldialogs.cpp:61 smalldialogs.cpp:77 smalldialogs.cpp:93 +#: smalldialogs.cpp:136 +msgid "Dir..." +msgstr "Directory..." + +#: smalldialogs.cpp:86 +msgid "C (Optional):" +msgstr "C (Opzionale):" + +#: smalldialogs.cpp:108 +msgid "Swap/Copy Names ..." +msgstr "Scambia/copia Nomi..." + +#: smalldialogs.cpp:114 smalldialogs.cpp:115 smalldialogs.cpp:116 +msgid "Swap %1<->%2" +msgstr "Scambia %1<->%2" + +#: smalldialogs.cpp:117 smalldialogs.cpp:118 smalldialogs.cpp:119 +msgid "Copy %1->Output" +msgstr "Copia %1->Output" + +#: smalldialogs.cpp:120 smalldialogs.cpp:121 smalldialogs.cpp:122 +msgid "Swap %1<->Output" +msgstr "Scambia %1<->Output" + +#: smalldialogs.cpp:129 +msgid "Output (optional):" +msgstr "Output (Opzionale):" + +#: smalldialogs.cpp:158 +msgid "Configure..." +msgstr "Configura..." + +#: smalldialogs.cpp:347 +msgid "Search text:" +msgstr "Testo da cercare:" + +#: smalldialogs.cpp:354 +msgid "Case sensitive" +msgstr "Maiuscole/minuscole" + +#: smalldialogs.cpp:357 +msgid "Search A" +msgstr "Cerca in A" + +#: smalldialogs.cpp:362 +msgid "Search B" +msgstr "Cerca in B" + +#: smalldialogs.cpp:367 +msgid "Search C" +msgstr "Cerca in C" + +#: smalldialogs.cpp:372 +msgid "Search output" +msgstr "Cerca nell'output" + +#: smalldialogs.cpp:377 +msgid "&Search" +msgstr "&Cerca" + +#: smalldialogs.cpp:394 +msgid "Regular Expression Tester" +msgstr "Tester espressione regolare" + +#: smalldialogs.cpp:405 +msgid "Example auto merge line:" +msgstr "Esempio riga di fusione automatica:" + +#: smalldialogs.cpp:407 +msgid "For auto merge test copy a line as used in your files." +msgstr "Per il test fusione automatica copia una riga come fai nei tuoi file." + +#: smalldialogs.cpp:413 smalldialogs.cpp:442 smalldialogs.cpp:479 +msgid "Match result:" +msgstr "Risultato confronto:" + +#: smalldialogs.cpp:432 +msgid "Example history start line (with leading comment):" +msgstr "Esempio di riga di avvio cronologia (con relativo commento):" + +#: smalldialogs.cpp:435 +msgid "" +"Copy a history start line as used in your files,\n" +"including the leading comment." +msgstr "" +"Copia una riga di avvio cronologia come fai nei tuoi file,\n" +"includendo il relativo commento." + +#: smalldialogs.cpp:461 +msgid "History sort key order:" +msgstr "Ordine della chiave d'ordinamento cronologico:" + +#: smalldialogs.cpp:469 +msgid "Example history entry start line (without leading comment):" +msgstr "Esempio di riga di avvio cronologia (senza relativo commento):" + +#: smalldialogs.cpp:471 +msgid "" +"Copy a history entry start line as used in your files,\n" +"but omit the leading comment." +msgstr "" +"Copia una riga di avvio voce di cronologia come fai nei tuoi file,\n" +"ma ometti il relativo commento." + +#: smalldialogs.cpp:486 +msgid "Sort key result:" +msgstr "Ordina il risultato per chiave:" + +#: smalldialogs.cpp:537 smalldialogs.cpp:547 smalldialogs.cpp:568 +msgid "Match success." +msgstr "Confronto con successo." + +#: smalldialogs.cpp:541 smalldialogs.cpp:551 smalldialogs.cpp:574 +msgid "Match failed." +msgstr "Confronto fallito." + +#: smalldialogs.cpp:559 +msgid "Opening and closing parentheses don't match in regular expression." +msgstr "Aprire e chiudere parentesi non confronta le espressioni regolari." diff --git a/po/ja.po b/po/ja.po new file mode 100644 index 0000000..249599f --- /dev/null +++ b/po/ja.po @@ -0,0 +1,2445 @@ +# translation of kdiff3.po to Japanese +# Copyright (C) 2004 Free Software Foundation, Inc. +# SATOH Satoru , 2004. +# +msgid "" +msgstr "" +"Project-Id-Version: kdiff3\n" +"POT-Creation-Date: 2006-11-05 08:45+0100\n" +"PO-Revision-Date: 2006-04-14 21:25+0900\n" +"Last-Translator: Yukiko Bando \n" +"Language-Team: Japanese \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: KBabel 1.0.2\n" + +#: _translatorinfo.cpp:1 +msgid "" +"_: NAME OF TRANSLATORS\n" +"Your names" +msgstr "SATOH Satoru" + +#: _translatorinfo.cpp:3 +msgid "" +"_: EMAIL OF TRANSLATORS\n" +"Your emails" +msgstr "ss@kde.gr.jp" + +#: diff.cpp:246 +msgid "Writing clipboard data to temp file failed." +msgstr "クリップボードã®ãƒ‡ãƒ¼ã‚¿ã‚’一時ファイルã«æ›¸ãè¾¼ã‚ã¾ã›ã‚“ã§ã—ãŸã€‚" + +#: diff.cpp:250 +msgid "From Clipboard" +msgstr "クリップボードã‹ã‚‰" + +#: diff.cpp:491 +msgid "" +"Preprocessing possibly failed. Check this command:\n" +"\n" +" %1\n" +"\n" +"The preprocessing command will be disabled now." +msgstr "" + +#: diff.cpp:526 +msgid "" +"The line-matching-preprocessing possibly failed. Check this command:\n" +"\n" +" %1\n" +"\n" +"The line-matching-preprocessing command will be disabled now." +msgstr "" + +#: diff.cpp:1631 diff.cpp:1645 +msgid "" +"Data loss error:\n" +"If it is reproducable please contact the author.\n" +msgstr "" +"データæ失エラー:\n" +"ã‚‚ã—å†ç¾ã™ã‚‹ã‚ˆã†ãªã‚‰ä½œè€…ã«ã‚³ãƒ³ã‚¿ã‚¯ãƒˆã‚’ã¨ã£ã¦ãã ã•ã„\n" + +#: diff.cpp:1633 diff.cpp:1647 +msgid "Severe Internal Error" +msgstr "深刻ãªå†…部エラー" + +#: difftextwindow.cpp:1643 kdiff3.cpp:753 +msgid "Top line" +msgstr "上部行" + +#: difftextwindow.cpp:1653 +msgid "End" +msgstr "最後" + +#: directorymergewindow.cpp:142 +msgid "Mix of links and normal files." +msgstr "リンクã®ãƒŸãƒƒã‚¯ã‚¹ã¨æ™®é€šã®ãƒ•ã‚¡ã‚¤ãƒ«" + +#: directorymergewindow.cpp:149 +msgid "Link: " +msgstr "リンク: " + +#: directorymergewindow.cpp:157 +msgid "Size. " +msgstr "å®¹é‡ " + +#: directorymergewindow.cpp:170 +msgid "Date & Size: " +msgstr "日付ã¨å®¹é‡: " + +#: directorymergewindow.cpp:179 directorymergewindow.cpp:185 +msgid "Creating temp copy of %1 failed." +msgstr "%1 ã®ä¸€æ™‚コピー作æˆã«å¤±æ•—" + +#: directorymergewindow.cpp:196 directorymergewindow.cpp:204 +msgid "Opening %1 failed." +msgstr "%1 ã‚’é–‹ã‘ã¾ã›ã‚“" + +#: directorymergewindow.cpp:208 +msgid "Comparing file..." +msgstr "ファイルを比較中..." + +#: directorymergewindow.cpp:218 directorymergewindow.cpp:224 +#, c-format +msgid "Error reading from %1" +msgstr "%1 ã‹ã‚‰èª­ã¿è¾¼ã¿æ™‚ã«ã‚¨ãƒ©ãƒ¼" + +#: directorymergewindow.cpp:282 +msgid "Name" +msgstr "åå‰" + +#: directorymergewindow.cpp:286 +msgid "Operation" +msgstr "æ“作" + +#: directorymergewindow.cpp:287 +msgid "Status" +msgstr "状態" + +#: directorymergewindow.cpp:288 +msgid "Unsolved" +msgstr "未解決" + +#: directorymergewindow.cpp:289 +msgid "Solved" +msgstr "解決済ã¿" + +#: directorymergewindow.cpp:290 +msgid "Nonwhite" +msgstr "空白以外" + +#: directorymergewindow.cpp:291 +msgid "White" +msgstr "空白" + +#: directorymergewindow.cpp:319 +msgid "" +"You are currently doing a directory merge. Are you sure, you want to abort the " +"merge and rescan the directory?" +msgstr "今ディレクトリマージ中ã§ã™. 本当ã«ãƒžãƒ¼ã‚¸ã‚’中止ã—ã€ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªã‚’å†ã‚¹ã‚­ãƒ£ãƒ³ã—ã¾ã™ã‹?" + +#: directorymergewindow.cpp:320 directorymergewindow.cpp:2868 +msgid "Rescan" +msgstr "å†ã‚¹ã‚­ãƒ£ãƒ³" + +#: directorymergewindow.cpp:320 kdiff3.cpp:603 pdiff.cpp:979 +msgid "Continue Merging" +msgstr "マージを続行" + +#: directorymergewindow.cpp:462 +msgid "Opening of directories failed:" +msgstr "ディレクトリオープンã«å¤±æ•—:" + +#: directorymergewindow.cpp:465 +msgid "" +"Dir A \"%1\" does not exist or is not a directory.\n" +msgstr "" +"ディレクトリ A %1 ã¯å­˜åœ¨ã—ãªã„ã‹ã€ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªã§ã¯ã‚ã‚Šã¾ã›ã‚“\n" + +#: directorymergewindow.cpp:468 +msgid "" +"Dir B \"%1\" does not exist or is not a directory.\n" +msgstr "" +"ディレクトリ B %1 ã¯å­˜åœ¨ã—ãªã„ã‹ã€ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªã§ã¯ã‚ã‚Šã¾ã›ã‚“\n" + +#: directorymergewindow.cpp:471 +msgid "" +"Dir C \"%1\" does not exist or is not a directory.\n" +msgstr "" +"ディレクトリ C %1 ã¯å­˜åœ¨ã—ãªã„ã‹ã€ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªã§ã¯ã‚ã‚Šã¾ã›ã‚“\n" + +#: directorymergewindow.cpp:473 +msgid "Directory Open Error" +msgstr "ディレクトリオープンエラー" + +#: directorymergewindow.cpp:481 +msgid "" +"The destination directory must not be the same as A or B when three directories " +"are merged.\n" +"Check again before continuing." +msgstr "" +"三ã¤ã®ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªã‚’マージã™ã‚‹éš›ã€ãƒžãƒ¼ã‚¸å…ˆãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªã¯ A / B ã¨åŒã˜ã§ã‚ã£ã¦ã¯ã„ã‘ã¾ã›ã‚“.\n" +"続行ã™ã‚‹å‰ã«ã‚‚ã†ä¸€åº¦èª¿ã¹ã¦ãã ã•ã„" + +#: directorymergewindow.cpp:483 +msgid "Parameter Warning" +msgstr "パラメータ警告" + +#: directorymergewindow.cpp:488 +msgid "Scanning directories..." +msgstr "ディレクトリをスキャン中..." + +#: directorymergewindow.cpp:537 +msgid "Reading Directory A" +msgstr "ディレクトリ A を読ã¿è¾¼ã¿ä¸­" + +#: directorymergewindow.cpp:559 +msgid "Reading Directory B" +msgstr "ディレクトリ B を読ã¿è¾¼ã¿ä¸­" + +#: directorymergewindow.cpp:581 +msgid "Reading Directory C" +msgstr "ディレクトリ C を読ã¿è¾¼ã¿ä¸­" + +#: directorymergewindow.cpp:607 +msgid "Some subdirectories were not readable in" +msgstr "ã„ãã¤ã‹ã®ã‚µãƒ–ディレクトリãŒèª­ã¿è¾¼ã¿ä¸å¯ã§ã—ãŸ" + +#: directorymergewindow.cpp:612 +msgid "Check the permissions of the subdirectories." +msgstr "サブディレクトリã®è¨±å¯å±žæ€§ã‚’確ã‹ã‚ã¦ãã ã•ã„" + +#: directorymergewindow.cpp:646 kdiff3.cpp:552 kdiff3.cpp:636 kdiff3.cpp:661 +#: kdiff3.cpp:934 kdiff3.cpp:955 pdiff.cpp:1059 pdiff.cpp:1131 pdiff.cpp:1169 +#: pdiff.cpp:1185 pdiff.cpp:1215 pdiff.cpp:1226 +msgid "Ready." +msgstr "準備完了." + +#: directorymergewindow.cpp:660 +msgid "Directory Comparison Status" +msgstr "ディレクトリ比較状態" + +#: directorymergewindow.cpp:661 +msgid "Number of subdirectories:" +msgstr "サブディレクトリ数:" + +#: directorymergewindow.cpp:662 +msgid "Number of equal files:" +msgstr "ç­‰ã—ã„ファイルã®æ•°:" + +#: directorymergewindow.cpp:663 +msgid "Number of different files:" +msgstr "ç•°ãªã‚‹ãƒ•ã‚¡ã‚¤ãƒ«ã®æ•°:" + +#: directorymergewindow.cpp:666 +msgid "Number of manual merges:" +msgstr "手作業ã§ã®ãƒžãƒ¼ã‚¸æ•°:" + +#: directorymergewindow.cpp:802 +msgid "This affects all merge operations." +msgstr "ã“ã‚Œã¯ã™ã¹ã¦ã®ãƒžãƒ¼ã‚¸æ“作ã«å½±éŸ¿ã—ã¾ã™" + +#: directorymergewindow.cpp:803 +msgid "Changing All Merge Operations" +msgstr "ã™ã¹ã¦ã®ãƒžãƒ¼ã‚¸æ“作を更新中" + +#: directorymergewindow.cpp:803 mergeresultwindow.cpp:287 +msgid "C&ontinue" +msgstr "続行(&O)" + +#: directorymergewindow.cpp:1169 +msgid "Processing " +msgstr "処ç†ä¸­" + +#: directorymergewindow.cpp:1647 directorymergewindow.cpp:1653 +msgid "To do." +msgstr "To do." + +#: directorymergewindow.cpp:1756 directorymergewindow.cpp:2899 +msgid "Copy A to B" +msgstr "A ã‚’ B ã«ã‚³ãƒ”ー" + +#: directorymergewindow.cpp:1757 directorymergewindow.cpp:2900 +msgid "Copy B to A" +msgstr "B ã‚’ A ã«ã‚³ãƒ”ー" + +#: directorymergewindow.cpp:1758 directorymergewindow.cpp:2901 +msgid "Delete A" +msgstr "A を削除" + +#: directorymergewindow.cpp:1759 directorymergewindow.cpp:2902 +msgid "Delete B" +msgstr "B を削除" + +#: directorymergewindow.cpp:1760 +msgid "Delete A & B" +msgstr "A 㨠B を削除" + +#: directorymergewindow.cpp:1761 directorymergewindow.cpp:2904 +msgid "Merge to A" +msgstr "A ã«ãƒžãƒ¼ã‚¸" + +#: directorymergewindow.cpp:1762 directorymergewindow.cpp:2905 +msgid "Merge to B" +msgstr "B ã«ãƒžãƒ¼ã‚¸" + +#: directorymergewindow.cpp:1763 +msgid "Merge to A & B" +msgstr "A 㨠B ã«ãƒžãƒ¼ã‚¸" + +#: directorymergewindow.cpp:1767 directorymergewindow.cpp:2896 +msgid "Delete (if exists)" +msgstr "(存在ã™ã‚Œã°)削除" + +#: directorymergewindow.cpp:1768 directorymergewindow.cpp:1769 +#: directorymergewindow.cpp:2895 optiondialog.cpp:809 smalldialogs.cpp:102 +msgid "Merge" +msgstr "マージ" + +#: directorymergewindow.cpp:1768 directorymergewindow.cpp:1769 +msgid "Merge (manual)" +msgstr "マージ (手作業)" + +#: directorymergewindow.cpp:1770 +msgid "Error: Conflicting File Types" +msgstr "エラー: ファイルタイプãŒè¡çªã—ã¦ã„ã¾ã™" + +#: directorymergewindow.cpp:1771 +msgid "Error: Dates are equal but files are not." +msgstr "エラー: 日付ã¯ç­‰ã—ã„ã§ã™ãŒãƒ•ã‚¡ã‚¤ãƒ«ã¯ãã†ã§ã‚ã‚Šã¾ã›ã‚“" + +#: directorymergewindow.cpp:1795 directorymergewindow.cpp:1824 +#: directorymergewindow.cpp:1849 +msgid "This operation is currently not possible." +msgstr "ã“ã®æ“作ã¯ä»Šã¯ã§ãã¾ã›ã‚“" + +#: directorymergewindow.cpp:1795 directorymergewindow.cpp:1824 +#: directorymergewindow.cpp:1849 directorymergewindow.cpp:2106 +msgid "Operation Not Possible" +msgstr "æ“作ä¸å¯" + +#: directorymergewindow.cpp:1888 +msgid "" +"This should never happen: \n" +"\n" +"mergeResultSaved: m_pMFI=0\n" +"\n" +"If you know how to reproduce this, please contact the program author." +msgstr "" +"èµ·ã‚Šå¾—ãªã„ã¯ãš: \n" +"\n" +"mergeResultSaved: m_pMFI=0\n" +"\n" +"å†ç¾æ–¹æ³•ãŒã‚ã‹ã£ãŸãªã‚‰ãƒ—ログラム作者ã«ã‚³ãƒ³ã‚¿ã‚¯ãƒˆã‚’å–ã£ã¦ãã ã•ã„" + +#: directorymergewindow.cpp:1888 +msgid "Program Error" +msgstr "プログラムエラー" + +#: directorymergewindow.cpp:1899 +msgid "" +"An error occurred while copying.\n" +msgstr "" +"コピー中ã«ã‚¨ãƒ©ãƒ¼ç™ºç”Ÿ\n" + +#: directorymergewindow.cpp:1900 directorymergewindow.cpp:2306 +msgid "Merge Error" +msgstr "マージエラー" + +#: directorymergewindow.cpp:1905 directorymergewindow.cpp:2311 +msgid "Error." +msgstr "エラー" + +#: directorymergewindow.cpp:1910 directorymergewindow.cpp:2202 +#: directorymergewindow.cpp:2242 +msgid "Done." +msgstr "完了" + +#: directorymergewindow.cpp:1933 +msgid "Not saved." +msgstr "未ä¿å­˜" + +#: directorymergewindow.cpp:1968 +msgid "Unknown merge operation. (This must never happen!)" +msgstr "ä¸æ˜Žãªãƒžãƒ¼ã‚¸æ“作 (èµ·ã‚Šå¾—ãªã„ã¯ãš!)" + +#: directorymergewindow.cpp:2000 +msgid "Unknown merge operation." +msgstr "ä¸æ˜Žãªãƒžãƒ¼ã‚¸æ“作" + +#: directorymergewindow.cpp:2015 +msgid "" +"The merge is about to begin.\n" +"\n" +"Choose \"Do it\" if you have read the instructions and know what you are " +"doing.\n" +"Choosing \"Simulate it\" will tell you what would happen.\n" +"\n" +"Be aware that this program still has beta status and there is NO WARRANTY " +"whatsoever! Make backups of your vital data!" +msgstr "" +"マージ準備完了\n" +"\n" +"説明を読んã§ä½•ã‚’ã—ã¦ã„ã‚‹ã‹ã‚ã‹ã£ã¦ã„ã‚‹ãªã‚‰ \"実行\" ã‚’é¸æŠžã—ã¦ãã ã•ã„\n" +"\n" +"何ãŒèµ·ãã‚‹ã‹çŸ¥ã‚ŠãŸã„ãªã‚‰ \"試行\" ã‚’é¸æŠžã—ã¦ãã ã•ã„\n" +"\n" +"ã“ã®ãƒ—ログラムã¯ã¾ã Î²æ®µéšŽã§ä½•ãŒèµ·ãã¦ã‚‚ç„¡ä¿è¨¼ã ã¨ã„ã†ã“ã¨ã«æ³¨æ„ã—ã¦ãã ã•ã„!é‡è¦ãªãƒ‡ãƒ¼ã‚¿ã¯ãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—ã‚’ã¨ã£ã¦ãã ã•ã„!" + +#: directorymergewindow.cpp:2020 +msgid "Starting Merge" +msgstr "マージ開始" + +#: directorymergewindow.cpp:2020 +msgid "Do It" +msgstr "実行" + +#: directorymergewindow.cpp:2020 +msgid "Simulate It" +msgstr "試行" + +#: directorymergewindow.cpp:2046 +msgid "" +"The highlighted item has a different type in the different directories. Select " +"what to do." +msgstr "強調表示ã•ã‚ŒãŸé …ç›®ã¯ç•°ãªã‚‹ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªã®ç•°ãªã‚‹ã‚¿ã‚¤ãƒ—ã§ã™.何をã™ã‚‹ã‹é¸æŠžã—ã¦ãã ã•ã„" + +#: directorymergewindow.cpp:2055 +msgid "" +"The modification dates of the file are equal but the files are not. Select what " +"to do." +msgstr "ファイルã®æ›´æ–°æ—¥æ™‚ã¯ç­‰ã—ã„ã§ã™ãŒãƒ•ã‚¡ã‚¤ãƒ«ã¯ç•°ãªã£ã¦ã„ã¾ã™. 何をã™ã‚‹ã‹é¸æŠžã—ã¦ãã ã•ã„" + +#: directorymergewindow.cpp:2106 +msgid "" +"This operation is currently not possible because directory merge is currently " +"running." +msgstr "ディレクトリマージ中ãªã®ã§ã“ã®æ“作を実行ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“" + +#: directorymergewindow.cpp:2166 +msgid "" +"There was an error in the last step.\n" +"Do you want to continue with the item that caused the error or do you want to " +"skip this item?" +msgstr "" +"最終段階ã§ã‚¨ãƒ©ãƒ¼ç™ºç”Ÿ.\n" +"エラーを起ã—ãŸé …ç›®ã«ã¤ã„ã¦ç¶šè¡Œã—ã¾ã™ã‹? ãã‚Œã¨ã‚‚スキップã—ã¾ã™ã‹?" + +#: directorymergewindow.cpp:2168 +msgid "Continue merge after an error" +msgstr "エラー後ã«ã‚‚マージ続行" + +#: directorymergewindow.cpp:2168 +msgid "Continue With Last Item" +msgstr "最後ã®é …ç›®ã«ã¤ã„ã¦ç¶šè¡Œ" + +#: directorymergewindow.cpp:2168 +msgid "Skip Item" +msgstr "項目をスキップ" + +#: directorymergewindow.cpp:2202 +msgid "Skipped." +msgstr "スキップã•ã‚Œã¾ã—ãŸ" + +#: directorymergewindow.cpp:2209 directorymergewindow.cpp:2435 +msgid "In progress..." +msgstr "進行中..." + +#: directorymergewindow.cpp:2257 +msgid "Merge operation complete." +msgstr "マージæ“作完了" + +#: directorymergewindow.cpp:2257 directorymergewindow.cpp:2260 +msgid "Merge Complete" +msgstr "マージ完了" + +#: directorymergewindow.cpp:2269 +msgid "" +"Simulated merge complete: Check if you agree with the proposed operations." +msgstr "マージ試行完了: å…ˆã®æ“作をã—ã¦ã‚‚よã„ã‹ç¢ºèªã—ã¦ãã ã•ã„." + +#: directorymergewindow.cpp:2305 +msgid "" +"An error occurred. Press OK to see detailed information.\n" +msgstr "" +"エラー発生. 詳細情報を見るã«ã¯ OK をクリックã—ã¦ãã ã•ã„\n" + +#: directorymergewindow.cpp:2348 +msgid "Error: While deleting %1: Creating backup failed." +msgstr "エラー: %1 削除中: ãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—作æˆå¤±æ•—" + +#: directorymergewindow.cpp:2355 +msgid "delete directory recursively( %1 )" +msgstr "å†å¸°çš„ã«ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªã‚’削除 ( %1 )" + +#: directorymergewindow.cpp:2357 +msgid "delete( %1 )" +msgstr "削除( %1 )" + +#: directorymergewindow.cpp:2372 +msgid "Error: delete dir operation failed while trying to read the directory." +msgstr "エラー: ディレクトリ読ã¿è¾¼ã¿ä¸­ã«ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªå‰Šé™¤å¤±æ•—" + +#: directorymergewindow.cpp:2391 +msgid "Error: rmdir( %1 ) operation failed." +msgstr "エラー: rmdir( %1 ) æ“作失敗" + +#: directorymergewindow.cpp:2401 +msgid "Error: delete operation failed." +msgstr "エラー: 削除失敗" + +#: directorymergewindow.cpp:2427 +msgid "manual merge( %1, %2, %3 -> %4)" +msgstr "手作業ã§ã®ãƒžãƒ¼ã‚¸( %1, %2, %3 -> %4)" + +#: directorymergewindow.cpp:2430 +msgid "" +" Note: After a manual merge the user should continue by pressing F7." +msgstr " 注æ„: 手作業ã§ã®ãƒžãƒ¼ã‚¸å¾Œã«ç¶šè¡Œã™ã‚‹ã«ã¯ F7 を押ã—ã¦ãã ã•ã„" + +#: directorymergewindow.cpp:2453 +msgid "Error: copy( %1 -> %2 ) failed.Deleting existing destination failed." +msgstr "エラー: copy( %1 -> %2 )失敗. 既存ã®ã‚³ãƒ”ー先ã®å‰Šé™¤ã«å¤±æ•—" + +#: directorymergewindow.cpp:2463 +msgid "copyLink( %1 -> %2 )" +msgstr "copyLink( %1 -> %2 )" + +#: directorymergewindow.cpp:2474 +msgid "Error: copyLink failed: Remote links are not yet supported." +msgstr "エラー: copyLink 失敗: リモートリンクã¯æœªã‚µãƒãƒ¼ãƒˆã§ã™" + +#: directorymergewindow.cpp:2480 +msgid "Error: copyLink failed." +msgstr "エラー: copyLink 失敗" + +#: directorymergewindow.cpp:2500 +msgid "copy( %1 -> %2 )" +msgstr "copy( %1 -> %2 )" + +#: directorymergewindow.cpp:2526 +msgid "Error during rename( %1 -> %2 ): Cannot delete existing destination." +msgstr "rename( %1 -> %2 ) 中ã«ã‚¨ãƒ©ãƒ¼: 既存ã®ã‚³ãƒ”ー先を削除ã§ãã¾ã›ã‚“" + +#: directorymergewindow.cpp:2532 +msgid "rename( %1 -> %2 )" +msgstr "rename( %1 -> %2 )" + +#: directorymergewindow.cpp:2541 +msgid "Error: Rename failed." +msgstr "エラー: å称変更失敗" + +#: directorymergewindow.cpp:2559 +msgid "Error during makeDir of %1. Cannot delete existing file." +msgstr "makeDir %1 中ã«ã‚¨ãƒ©ãƒ¼. 既存ファイルを削除ã§ãã¾ã›ã‚“" + +#: directorymergewindow.cpp:2575 +msgid "makeDir( %1 )" +msgstr "makeDir( %1 )" + +#: directorymergewindow.cpp:2585 +msgid "Error while creating directory." +msgstr "ディレクトリ作æˆä¸­ã«ã‚¨ãƒ©ãƒ¼" + +#: directorymergewindow.cpp:2608 directorymergewindow.cpp:2725 +msgid "Dest" +msgstr "å…ˆ" + +#: directorymergewindow.cpp:2612 directorymergewindow.cpp:2650 +msgid "Dir" +msgstr "ディレクトリ" + +#: directorymergewindow.cpp:2613 +msgid "Type" +msgstr "タイプ" + +#: directorymergewindow.cpp:2614 +msgid "Size" +msgstr "容é‡" + +#: directorymergewindow.cpp:2615 +msgid "Attr" +msgstr "属性" + +#: directorymergewindow.cpp:2616 +msgid "Last Modification" +msgstr "最終更新" + +#: directorymergewindow.cpp:2617 +msgid "Link-Destination" +msgstr "リンク先" + +#: directorymergewindow.cpp:2667 +msgid "not available" +msgstr "利用ä¸å¯" + +#: directorymergewindow.cpp:2687 +msgid "A (Dest): " +msgstr "A (å…ˆ): " + +#: directorymergewindow.cpp:2690 +msgid "A (Base): " +msgstr "A (å…ƒ): " + +#: directorymergewindow.cpp:2696 +msgid "B (Dest): " +msgstr "B (å…ˆ): " + +#: directorymergewindow.cpp:2704 +msgid "C (Dest): " +msgstr "C (å…ˆ): " + +#: directorymergewindow.cpp:2710 +msgid "Dest: " +msgstr "å…ˆ: " + +#: directorymergewindow.cpp:2775 +#, fuzzy +msgid "Save Directory Merge State As..." +msgstr "ディレクトリマージ" + +#: directorymergewindow.cpp:2862 +msgid "Start/Continue Directory Merge" +msgstr "ディレクトリマージを開始/続行" + +#: directorymergewindow.cpp:2863 +msgid "Run Operation for Current Item" +msgstr "ç¾åœ¨ã®é …ç›®ã«ã¤ã„ã¦æ“作を実行" + +#: directorymergewindow.cpp:2864 +msgid "Compare Selected File" +msgstr "é¸æŠžãƒ•ã‚¡ã‚¤ãƒ«ã‚’比較 " + +#: directorymergewindow.cpp:2865 +msgid "Merge Current File" +msgstr "ç¾åœ¨ã®ãƒ•ã‚¡ã‚¤ãƒ«ã‚’マージ " + +#: directorymergewindow.cpp:2866 +msgid "Fold All Subdirs" +msgstr "ã™ã¹ã¦ã®ã‚µãƒ–ディレクトリをãŸãŸã¿è¾¼ã¿" + +#: directorymergewindow.cpp:2867 +msgid "Unfold All Subdirs" +msgstr "ã™ã¹ã¦ã®ã‚µãƒ–ディレクトリを展開" + +#: directorymergewindow.cpp:2871 +msgid "Choose A for All Items" +msgstr "ã™ã¹ã¦ã®é …ç›®ã«ã¤ã„㦠A ã‚’é¸æŠž" + +#: directorymergewindow.cpp:2872 +msgid "Choose B for All Items" +msgstr "ã™ã¹ã¦ã®é …ç›®ã«ã¤ã„㦠B ã‚’é¸æŠž" + +#: directorymergewindow.cpp:2873 +msgid "Choose C for All Items" +msgstr "ã™ã¹ã¦ã®é …ç›®ã«ã¤ã„㦠C ã‚’é¸æŠž" + +#: directorymergewindow.cpp:2874 +msgid "Auto-Choose Operation for All Items" +msgstr "ã™ã¹ã¦ã®é …ç›®ã«ã¤ã„ã¦è‡ªå‹•é¸æŠž" + +#: directorymergewindow.cpp:2875 +msgid "No Operation for All Items" +msgstr "ã™ã¹ã¦ã®é …ç›®ã«ã¤ã„ã¦æ“作ãªã—" + +#: directorymergewindow.cpp:2880 +msgid "Show Identical Files" +msgstr "ç­‰ã—ã„ファイルを表示" + +#: directorymergewindow.cpp:2881 +msgid "Show Different Files" +msgstr "ç•°ãªã‚‹ãƒ•ã‚¡ã‚¤ãƒ«ã‚’表示" + +#: directorymergewindow.cpp:2882 +msgid "Show Files only in A" +msgstr "A ã«ã®ã¿å­˜åœ¨ã™ã‚‹ãƒ•ã‚¡ã‚¤ãƒ«ã‚’表示" + +#: directorymergewindow.cpp:2883 +msgid "Show Files only in B" +msgstr "B ã«ã®ã¿å­˜åœ¨ã™ã‚‹ãƒ•ã‚¡ã‚¤ãƒ«ã‚’表示" + +#: directorymergewindow.cpp:2884 +msgid "Show Files only in C" +msgstr "C ã«ã®ã¿å­˜åœ¨ã™ã‚‹ãƒ•ã‚¡ã‚¤ãƒ«ã‚’表示" + +#: directorymergewindow.cpp:2888 +msgid "Compare Explicitly Selected Files" +msgstr "明示的ã«é¸æŠžã—ãŸãƒ•ã‚¡ã‚¤ãƒ«ã‚’比較 " + +#: directorymergewindow.cpp:2889 +msgid "Merge Explicitly Selected Files" +msgstr "明示的ã«é¸æŠžã—ãŸãƒ•ã‚¡ã‚¤ãƒ«ã‚’マージ " + +#: directorymergewindow.cpp:2891 directorymergewindow.cpp:2898 +msgid "Do Nothing" +msgstr "何もã—ãªã„" + +#: directorymergewindow.cpp:2892 +msgid "A" +msgstr "A" + +#: directorymergewindow.cpp:2893 +msgid "B" +msgstr "B" + +#: directorymergewindow.cpp:2894 +msgid "C" +msgstr "C" + +#: directorymergewindow.cpp:2903 +msgid "Delete A && B" +msgstr "A 㨠B を削除" + +#: directorymergewindow.cpp:2906 +msgid "Merge to A && B" +msgstr "A 㨠B ã«ãƒžãƒ¼ã‚¸" + +#: fileaccess.cpp:595 +msgid "" +"While trying to make a backup, deleting an older backup failed. \n" +"Filename: " +msgstr "" +"ãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—作æˆä¸­ã€å¤ã„ãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—を削除ã«å¤±æ•—.\n" +"ファイルå: " + +#: fileaccess.cpp:602 +msgid "" +"While trying to make a backup, renaming failed. \n" +"Filenames: " +msgstr "" +"ãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—作æˆä¸­ã€åå‰å¤‰æ›´ã«å¤±æ•—\n" +"ファイルå: " + +#: fileaccess.cpp:624 +#, c-format +msgid "Getting file status: %1" +msgstr "ファイルã®çŠ¶æ…‹ã‚’å–得中: %1" + +#: fileaccess.cpp:667 +#, c-format +msgid "Reading file: %1" +msgstr "ファイルを読ã¿è¾¼ã¿ä¸­: %1" + +#: fileaccess.cpp:703 +#, c-format +msgid "Writing file: %1" +msgstr "ファイルã«æ›¸ãè¾¼ã¿ä¸­: %1" + +#: fileaccess.cpp:731 +msgid "Out of memory" +msgstr "メモリãŒè¶³ã‚Šã¾ã›ã‚“" + +#: fileaccess.cpp:766 +#, c-format +msgid "Making directory: %1" +msgstr "ディレクトリ作æˆä¸­: %1" + +#: fileaccess.cpp:786 +#, c-format +msgid "Removing directory: %1" +msgstr "ディレクトリ削除中: %1" + +#: fileaccess.cpp:801 +#, c-format +msgid "Removing file: %1" +msgstr "ファイル削除中: %1" + +#: fileaccess.cpp:817 +msgid "Creating symbolic link: %1 -> %2" +msgstr "シンボリックリンク作æˆä¸­: %1 -> %2" + +#: fileaccess.cpp:843 +msgid "Renaming file: %1 -> %2" +msgstr "ファイルã®å称変更中: %1 -> %2" + +#: fileaccess.cpp:879 +msgid "Copying file: %1 -> %2" +msgstr "ファイルをコピー中: %1 -> %2" + +#: fileaccess.cpp:893 +#, c-format +msgid "" +"Error during file copy operation: Opening file for reading failed. Filename: %1" +msgstr "ファイルコピー中ã«ã‚¨ãƒ©ãƒ¼: ファイル読ã¿è¾¼ã¿ã«å¤±æ•—. ファイルå: %1" + +#: fileaccess.cpp:899 +#, c-format +msgid "" +"Error during file copy operation: Opening file for writing failed. Filename: %1" +msgstr "ファイルコピー中ã«ã‚¨ãƒ©ãƒ¼: ファイル書ãè¾¼ã¿ã«å¤±æ•—. ファイルå: %1" + +#: fileaccess.cpp:914 +#, c-format +msgid "Error during file copy operation: Reading failed. Filename: %1" +msgstr "ファイルコピー中ã«ã‚¨ãƒ©ãƒ¼: 読ã¿è¾¼ã¿ã«å¤±æ•—. ファイルå: %1" + +#: fileaccess.cpp:923 +#, c-format +msgid "Error during file copy operation: Writing failed. Filename: %1" +msgstr "ファイルコピー中ã«ã‚¨ãƒ©ãƒ¼: 書ãè¾¼ã¿ã«å¤±æ•—. ファイルå: %1" + +#: fileaccess.cpp:1219 +msgid "Reading directory: " +msgstr "ディレクトリを読ã¿è¾¼ã¿ä¸­: " + +#: fileaccess.cpp:1348 +#, c-format +msgid "Listing directory: %1" +msgstr "ディレクトリをリスト中: %1" + +#: kdiff3.cpp:142 +msgid "Current Configuration:" +msgstr "ç¾åœ¨ã®è¨­å®š:" + +#: kdiff3.cpp:147 +msgid "Config Option Error:" +msgstr "設定オプションエラー:" + +#: kdiff3.cpp:187 +msgid "Option --auto used, but no output file specified." +msgstr "オプション --auto を使用ã—ã¦ã„ã¾ã™ãŒå‡ºåŠ›ãƒ•ã‚¡ã‚¤ãƒ«ãŒæœªæŒ‡å®šã§ã™" + +#: kdiff3.cpp:323 +msgid "Option --auto ignored for directory comparison." +msgstr "オプション --auto ã¯ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªæ¯”較時ã«ã¯ç„¡è¦–ã•ã‚Œã¾ã™" + +#: kdiff3.cpp:359 +msgid "Saving failed." +msgstr "ä¿å­˜ã«å¤±æ•—" + +#: kdiff3.cpp:386 pdiff.cpp:1041 pdiff.cpp:1112 +msgid "Opening of these files failed:" +msgstr "ファイルを開ã‘ã¾ã›ã‚“ã§ã—ãŸ:" + +#: kdiff3.cpp:395 +msgid "File Open Error" +msgstr "ファイルを開ãéš›ã«ã‚¨ãƒ©ãƒ¼" + +#: kdiff3.cpp:418 +msgid "Opens documents for comparison..." +msgstr "比較ã®ãŸã‚ã«æ–‡æ›¸ã‚’é–‹ã„ã¦ã„ã¾ã™..." + +#: kdiff3.cpp:423 +msgid "Saves the merge result. All conflicts must be solved!" +msgstr "マージçµæžœã‚’ä¿å­˜. ã™ã¹ã¦ã®è¡çªã‚’回é¿ã—ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“!" + +#: kdiff3.cpp:425 +msgid "Saves the current document as..." +msgstr "ç¾åœ¨ã®æ–‡æ›¸ã‚’別åã§ä¿å­˜..." + +#: kdiff3.cpp:427 +msgid "Print the differences" +msgstr "差異をå°åˆ·" + +#: kdiff3.cpp:429 +msgid "Quits the application" +msgstr "アプリケーションを終了" + +#: kdiff3.cpp:431 +msgid "Cuts the selected section and puts it to the clipboard" +msgstr "é¸æŠžã•ã‚ŒãŸç¯„囲を切りå–りクリップボードã¸" + +#: kdiff3.cpp:433 +msgid "Copies the selected section to the clipboard" +msgstr "é¸æŠžã•ã‚ŒãŸç¯„囲をコピーã—クリップボードã¸" + +#: kdiff3.cpp:435 +msgid "Pastes the clipboard contents to actual position" +msgstr "クリップボードã®å†…容をç¾åœ¨ã®ä½ç½®ã«è²¼ã‚Šä»˜ã‘" + +#: kdiff3.cpp:437 +msgid "Select everything in current window" +msgstr "ç¾åœ¨ã®ã‚¦ã‚£ãƒ³ãƒ‰ã‚¦ã®ã™ã¹ã¦ã‚’é¸æŠž" + +#: kdiff3.cpp:439 +msgid "Search for a string" +msgstr "文字列を検索" + +#: kdiff3.cpp:441 +msgid "Search again for the string" +msgstr "文字列をå†æ¤œç´¢" + +#: kdiff3.cpp:443 +msgid "Enables/disables the toolbar" +msgstr "ツールãƒãƒ¼ã‚’有効/無効ã«" + +#: kdiff3.cpp:445 +msgid "Enables/disables the statusbar" +msgstr "ステータスãƒãƒ¼ã‚’有効/無効ã«" + +#: kdiff3.cpp:449 +msgid "Configure KDiff3..." +msgstr "KDiff3 を設定..." + +#: kdiff3.cpp:470 +msgid "Go to Current Delta" +msgstr "ç•°ãªã‚‹éƒ¨åˆ†ã«ç§»å‹•" + +#: kdiff3.cpp:471 +msgid "Go to First Delta" +msgstr "最åˆã®ç•°ãªã‚‹éƒ¨åˆ†ã«ç§»å‹•" + +#: kdiff3.cpp:472 +msgid "Go to Last Delta" +msgstr "最後ã®ç•°ãªã‚‹éƒ¨åˆ†ã«ç§»å‹•" + +#: kdiff3.cpp:473 +msgid "(Skips white space differences when \"Show White Space\" is disabled.)" +msgstr "(\"空白文字を表示\"ãŒç„¡åŠ¹ãªã¨ãã¯ç©ºç™½ã®å·®ç•°ã‚’スキップã™ã‚‹)" + +#: kdiff3.cpp:474 +msgid "" +"(Does not skip white space differences even when \"Show White Space\" is " +"disabled.)" +msgstr "(\"空白文字を表示\"ãŒç„¡åŠ¹ãªã¨ãも空白ã®å·®ç•°ã‚’スキップã—ãªã„)" + +#: kdiff3.cpp:475 +msgid "Go to Previous Delta" +msgstr "å‰ã®ç•°ãªã‚‹éƒ¨åˆ†ã«ç§»å‹•" + +#: kdiff3.cpp:477 +msgid "Go to Next Delta" +msgstr "次ã®ç•°ãªã‚‹éƒ¨åˆ†ã«ç§»å‹•" + +#: kdiff3.cpp:479 +msgid "Go to Previous Conflict" +msgstr "å‰ã®è¡çªéƒ¨åˆ†ã«ç§»å‹•" + +#: kdiff3.cpp:481 +msgid "Go to Next Conflict" +msgstr "次ã®è¡çªéƒ¨åˆ†ã«ç§»å‹•" + +#: kdiff3.cpp:483 +msgid "Go to Previous Unsolved Conflict" +msgstr "å‰ã®æœªè§£æ±ºã®è¡çªéƒ¨åˆ†ã«ç§»å‹•" + +#: kdiff3.cpp:485 +msgid "Go to Next Unsolved Conflict" +msgstr "次ã®æœªè§£æ±ºã®è¡çªéƒ¨åˆ†ã«ç§»å‹•" + +#: kdiff3.cpp:487 +msgid "Select Line(s) From A" +msgstr "A ã‹ã‚‰ã®é¸æŠžè¡Œ" + +#: kdiff3.cpp:488 +msgid "Select Line(s) From B" +msgstr "B ã‹ã‚‰ã®é¸æŠžè¡Œ" + +#: kdiff3.cpp:489 +msgid "Select Line(s) From C" +msgstr "C ã‹ã‚‰ã®é¸æŠžè¡Œ" + +#: kdiff3.cpp:490 +msgid "Automatically Go to Next Unsolved Conflict After Source Selection" +msgstr "ソースé¸æŠžå¾Œã«æ¬¡ã®æœªè§£æ±ºã®è¡çªéƒ¨åˆ†ã«è‡ªå‹•çš„ã«ç§»å‹•" + +#: kdiff3.cpp:492 +msgid "Show Space && Tabulator Characters for Differences" +msgstr "スペース/タブ文字ã®å·®ç•°ã‚’表示 " + +#: kdiff3.cpp:493 +msgid "Show White Space" +msgstr "空白文字を表示" + +#: kdiff3.cpp:495 +msgid "Show Line Numbers" +msgstr "行番å·ã‚’表示" + +#: kdiff3.cpp:496 +msgid "Choose A Everywhere" +msgstr "常㫠A ã‚’é¸æŠž" + +#: kdiff3.cpp:497 +msgid "Choose B Everywhere" +msgstr "常㫠B ã‚’é¸æŠž" + +#: kdiff3.cpp:498 +msgid "Choose C Everywhere" +msgstr "常㫠C ã‚’é¸æŠž" + +#: kdiff3.cpp:499 +msgid "Choose A for All Unsolved Conflicts" +msgstr "未解決ã®è¡çªã«ã¤ã„ã¦å¸¸ã« A ã‚’é¸æŠž" + +#: kdiff3.cpp:500 +msgid "Choose B for All Unsolved Conflicts" +msgstr "未解決ã®è¡çªã«ã¤ã„ã¦å¸¸ã« B ã‚’é¸æŠž" + +#: kdiff3.cpp:501 +msgid "Choose C for All Unsolved Conflicts" +msgstr "未解決ã®è¡çªã«ã¤ã„ã¦å¸¸ã« C ã‚’é¸æŠž" + +#: kdiff3.cpp:502 +msgid "Choose A for All Unsolved Whitespace Conflicts" +msgstr "未解決ã®ç©ºç™½ã®è¡çªã«ã¤ã„ã¦å¸¸ã« A ã‚’é¸æŠž" + +#: kdiff3.cpp:503 +msgid "Choose B for All Unsolved Whitespace Conflicts" +msgstr "未解決ã®ç©ºç™½ã®è¡çªã«ã¤ã„ã¦å¸¸ã« B ã‚’é¸æŠž" + +#: kdiff3.cpp:504 +msgid "Choose C for All Unsolved Whitespace Conflicts" +msgstr "未解決ã®ç©ºç™½ã®è¡çªã«ã¤ã„ã¦å¸¸ã« C ã‚’é¸æŠž" + +#: kdiff3.cpp:505 +msgid "Automatically Solve Simple Conflicts" +msgstr "å˜ç´”ãªè¡çªã«ã¤ã„ã¦è‡ªå‹•çš„ã«è§£æ±º" + +#: kdiff3.cpp:506 +msgid "Set Deltas to Conflicts" +msgstr "è¡çªã«ã¤ã„ã¦ç•°ãªã‚‹éƒ¨åˆ†ã¨ã—ã¦è¨­å®š" + +#: kdiff3.cpp:507 +msgid "Run Regular Expression Auto Merge" +msgstr "" + +#: kdiff3.cpp:508 +#, fuzzy +msgid "Automatically Solve History Conflicts" +msgstr "å˜ç´”ãªè¡çªã«ã¤ã„ã¦è‡ªå‹•çš„ã«è§£æ±º" + +#: kdiff3.cpp:509 +msgid "Split Diff At Selection" +msgstr "é¸æŠžã—ãŸå·®ç•°ã‚’分離" + +#: kdiff3.cpp:510 +msgid "Join Selected Diffs" +msgstr "é¸æŠžã—ãŸå·®ç•°ã‚’çµåˆ" + +#: kdiff3.cpp:512 +msgid "Show Window A" +msgstr "ウィンドウ A を表示" + +#: kdiff3.cpp:513 +msgid "Show Window B" +msgstr "ウィンドウ B を表示" + +#: kdiff3.cpp:514 +msgid "Show Window C" +msgstr "ウィンドウ C を表示" + +#: kdiff3.cpp:515 kdiff3.cpp:526 +msgid "Focus Next Window" +msgstr "次ã®ã‚¦ã‚£ãƒ³ãƒ‰ã‚¦ã«ãƒ•ã‚©ãƒ¼ã‚«ã‚¹" + +#: kdiff3.cpp:517 +msgid "Normal Overview" +msgstr "ã™ã¹ã¦æ¯”較 (標準)" + +#: kdiff3.cpp:518 +msgid "A vs. B Overview" +msgstr "A 㨠B を比較" + +#: kdiff3.cpp:519 +msgid "A vs. C Overview" +msgstr "A 㨠C を比較" + +#: kdiff3.cpp:520 +msgid "B vs. C Overview" +msgstr "B 㨠C を比較" + +#: kdiff3.cpp:521 +msgid "Word Wrap Diff Windows" +msgstr "Diffウィンドウã§è¡Œã‚’折り返ã™" + +#: kdiff3.cpp:522 +msgid "Add Manual Diff Alignment" +msgstr "" + +#: kdiff3.cpp:523 +msgid "Clear All Manual Diff Alignments" +msgstr "" + +#: kdiff3.cpp:528 +msgid "Focus Prev Window" +msgstr "å‰ã®ã‚¦ã‚£ãƒ³ãƒ‰ã‚¦ã«ãƒ•ã‚©ãƒ¼ã‚«ã‚¹" + +#: kdiff3.cpp:529 +msgid "Toggle Split Orientation" +msgstr "分割軸を切り替ãˆ" + +#: kdiff3.cpp:531 +msgid "Dir && Text Split Screen View" +msgstr "ディレクトリ/テキスト分割画é¢è¡¨ç¤º" + +#: kdiff3.cpp:533 +msgid "Toggle Between Dir && Text View" +msgstr "ディレクトリ/テキスト表示を切り替ãˆ" + +#: kdiff3.cpp:582 pdiff.cpp:1712 +msgid "The merge result hasn't been saved." +msgstr "マージçµæžœã¯ä¿å­˜ã•ã‚Œã¾ã›ã‚“ã§ã—ãŸ." + +#: kdiff3.cpp:583 +msgid "Save && Quit" +msgstr "ä¿å­˜/終了" + +#: kdiff3.cpp:583 +msgid "Quit Without Saving" +msgstr "ä¿å­˜ã—ãªã„ã§çµ‚了" + +#: kdiff3.cpp:591 pdiff.cpp:1721 +msgid "Saving the merge result failed." +msgstr "マージçµæžœä¿å­˜ã«å¤±æ•—" + +#: kdiff3.cpp:602 pdiff.cpp:978 +msgid "" +"You are currently doing a directory merge. Are you sure, you want to abort?" +msgstr "ディレクトリマージ実行中ã§ã™. 本当ã«ä¸­æ­¢ã—ã¾ã™ã‹?" + +#: kdiff3.cpp:625 +msgid "Saving file..." +msgstr "ファイルをä¿å­˜ä¸­..." + +#: kdiff3.cpp:642 +msgid "Saving file with a new filename..." +msgstr "åå‰ã‚’付ã‘ã¦ãƒ•ã‚¡ã‚¤ãƒ«ã‚’ä¿å­˜ä¸­..." + +#: kdiff3.cpp:732 +msgid "Printing..." +msgstr "å°åˆ·ä¸­..." + +#: kdiff3.cpp:738 kdiff3.cpp:900 +msgid "Printing aborted." +msgstr "å°åˆ·ã‚’中止ã—ã¾ã—ãŸã€‚" + +#: kdiff3.cpp:870 +msgid "Selection" +msgstr "é¸æŠž" + +#: kdiff3.cpp:896 +msgid "Printing completed." +msgstr "å°åˆ·ãŒå®Œäº†ã—ã¾ã—ãŸã€‚" + +#: kdiff3.cpp:906 +msgid "Exiting..." +msgstr "終了中..." + +#: kdiff3.cpp:918 +msgid "Toggling toolbar..." +msgstr "ツールãƒãƒ¼åˆ‡ã‚Šæ›¿ãˆä¸­..." + +#: kdiff3.cpp:939 +msgid "Toggle the statusbar..." +msgstr "ステータスãƒãƒ¼ã®è¡¨ç¤ºã‚’切り替ãˆ..." + +#: kdiff3_part.cpp:155 kdiff3_part.cpp:224 +msgid "Couldn't find files for comparison." +msgstr "比較ã™ã‚‹ãƒ•ã‚¡ã‚¤ãƒ«ã‚’見ã¤ã‘ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“ã§ã—ãŸ" + +#: kdiff3_part.cpp:291 +msgid "KDiff3Part" +msgstr "KDiff3Part" + +#: kdiff3_shell.cpp:78 +msgid "" +"Could not find our part!\n" +"This usually happens due to an installation problem. Please read the " +"README-file in the source package for details." +msgstr "" +"パーツを見ã¤ã‘られã¾ã›ã‚“ã§ã—ãŸ\n" +"普通ã“ã‚Œã¯ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã®å•é¡Œã§ã™. 詳細ã«ã¤ã„ã¦ã¯ã‚½ãƒ¼ã‚¹ãƒ‘ッケージ㮠README ファイルをå‚ç…§ã®ã“ã¨" + +#: main.cpp:35 +msgid "Tool for Comparison and Merge of Files and Directories" +msgstr "ファイルã¨ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªã‚’比較/マージã™ã‚‹ãŸã‚ã®ãƒ„ール" + +#: main.cpp:40 +msgid "Merge the input." +msgstr "入力をマージ" + +#: main.cpp:42 +msgid "Explicit base file. For compatibility with certain tools." +msgstr "既存ツールã¨ã®äº’æ›æ€§ã®ãŸã‚ã®ã€æ˜Žç¤ºçš„ãªãƒ™ãƒ¼ã‚¹ãƒ•ã‚¡ã‚¤ãƒ«" + +#: main.cpp:44 +msgid "Output file. Implies -m. E.g.: -o newfile.txt" +msgstr "出力ファイル. -m ãŒå¿…è¦ã¨ãªã‚‹. 例: -o newfile.txt" + +#: main.cpp:45 +msgid "Output file, again. (For compatibility with certain tools.)" +msgstr "出力ファイル (既存ツールã¨ã®äº’æ›æ€§ã®ãŸã‚)" + +#: main.cpp:46 +msgid "No GUI if all conflicts are auto-solvable. (Needs -o file)" +msgstr "ã™ã¹ã¦ã®è¡çªã‚’自動回é¿ã§ããŸã¨ãã« GUI を使用ã—ãªã„ (-o file ãŒå¿…è¦)" + +#: main.cpp:47 +msgid "Don't solve conflicts automatically. (For compatibility...)" +msgstr "è¡çªã®è‡ªå‹•å›žé¿ã‚’使用ã—ãªã„ (互æ›æ€§ã®ãŸã‚...)" + +#: main.cpp:48 +#, fuzzy +msgid "Visible name replacement for input file 1 (base)." +msgstr "表示ã•ã‚Œã‚‹ä»£æ›¿å. 一度設定ã™ã‚‹ã¨ã™ã¹ã¦ã®å…¥åŠ›ã«é©ç”¨" + +#: main.cpp:49 +#, fuzzy +msgid "Visible name replacement for input file 2." +msgstr "表示ã•ã‚Œã‚‹ä»£æ›¿å. 一度設定ã™ã‚‹ã¨ã™ã¹ã¦ã®å…¥åŠ›ã«é©ç”¨" + +#: main.cpp:50 +#, fuzzy +msgid "Visible name replacement for input file 3." +msgstr "表示ã•ã‚Œã‚‹ä»£æ›¿å. 一度設定ã™ã‚‹ã¨ã™ã¹ã¦ã®å…¥åŠ›ã«é©ç”¨" + +#: main.cpp:52 +#, fuzzy +msgid "Alternative visible name replacement. Supply this once for every input." +msgstr "表示ã•ã‚Œã‚‹ä»£æ›¿å. 一度設定ã™ã‚‹ã¨ã™ã¹ã¦ã®å…¥åŠ›ã«é©ç”¨" + +#: main.cpp:53 +msgid "" +"Override a config setting. Use once for every setting. E.g.: --cs " +"\"AutoAdvance=1\"" +msgstr "" + +#: main.cpp:54 +msgid "Show list of config settings and current values." +msgstr "" + +#: main.cpp:55 +msgid "Use a different config file." +msgstr "ç•°ãªã‚‹è¨­å®šãƒ•ã‚¡ã‚¤ãƒ«ã‚’使用" + +#: main.cpp:59 +msgid "file1 to open (base, if not specified via --base)" +msgstr "é–‹ã file1 (ベース, --base ãŒæœªæŒ‡å®šã®å ´åˆ)" + +#: main.cpp:60 +msgid "file2 to open" +msgstr "é–‹ã file2" + +#: main.cpp:61 +msgid "file3 to open" +msgstr "é–‹ã file3" + +#: main.cpp:93 +msgid "Ignored. (User defined.)" +msgstr "" + +#. i18n: file kdiff3_part.rc line 16 +#: main.cpp:173 rc.cpp:9 +#, no-c-format +msgid "KDiff3" +msgstr "KDiff3" + +#: main.cpp:186 +msgid "+ Many thanks to those who reported bugs and contributed ideas!" +msgstr "" + +#: mergeresultwindow.cpp:136 mergeresultwindow.cpp:939 +#: mergeresultwindow.cpp:953 mergeresultwindow.cpp:965 +#: mergeresultwindow.cpp:977 +msgid "Number of remaining unsolved conflicts: %1 (of which %2 are whitespace)" +msgstr "未解決ã®è¡çªã®æ•°: %1 (内 %2 ã¯ç©ºç™½)" + +#: mergeresultwindow.cpp:285 +msgid "" +"The output has been modified.\n" +"If you continue your changes will be lost." +msgstr "" +"出力ãŒæ›´æ–°ã•ã‚Œã¾ã—ãŸ\n" +"続行ã™ã‚‹ã¨æ›´æ–°å†…容ã¯å¤±ã‚ã‚Œã¾ã™" + +#: mergeresultwindow.cpp:797 pdiff.cpp:511 +msgid "All input files are binary equal." +msgstr "ã™ã¹ã¦ã®å…¥åŠ›ãƒ•ã‚¡ã‚¤ãƒ«ãƒã‚¤ãƒŠãƒªã¯åŒã˜ã§ã™" + +#: mergeresultwindow.cpp:799 +msgid "All input files contain the same text." +msgstr "ã™ã¹ã¦ã®å…¥åŠ›ãƒ•ã‚¡ã‚¤ãƒ«ã¯åŒã˜ãƒ†ã‚­ã‚¹ãƒˆã§ã™" + +#: mergeresultwindow.cpp:801 +msgid "" +"Files A and B are binary equal.\n" +msgstr "" +"ファイル A 㨠B ã¯åŒã˜ãƒã‚¤ãƒŠãƒªã§ã™\n" + +#: mergeresultwindow.cpp:802 +msgid "" +"Files A and B have equal text. \n" +msgstr "" +"ファイル A 㨠B ã¯åŒã˜ãƒ†ã‚­ã‚¹ãƒˆã§ã™\n" + +#: mergeresultwindow.cpp:803 +msgid "" +"Files A and C are binary equal.\n" +msgstr "" +"ファイル A 㨠C ã¯åŒã˜ãƒã‚¤ãƒŠãƒªã§ã™\n" + +#: mergeresultwindow.cpp:804 +msgid "" +"Files A and C have equal text. \n" +msgstr "" +"ファイル A 㨠C ã¯åŒã˜ãƒ†ã‚­ã‚¹ãƒˆã§ã™\n" + +#: mergeresultwindow.cpp:805 +msgid "" +"Files B and C are binary equal.\n" +msgstr "" +"ファイル B 㨠C ã¯åŒã˜ãƒã‚¤ãƒŠãƒªã§ã™\n" + +#: mergeresultwindow.cpp:806 +msgid "" +"Files B and C have equal text. \n" +msgstr "" +"ファイル B 㨠C ã¯åŒã˜ãƒ†ã‚­ã‚¹ãƒˆã§ã™\n" + +#: mergeresultwindow.cpp:812 +msgid "Total number of conflicts: " +msgstr "è¡çªã®ç·è¨ˆ: " + +#: mergeresultwindow.cpp:813 +msgid "" +"\n" +"Nr of automatically solved conflicts: " +msgstr "" +"\n" +"自動的ã«è§£æ±ºã•ã‚ŒãŸè¡çªã®æ•°: " + +#: mergeresultwindow.cpp:814 +msgid "" +"\n" +"Nr of unsolved conflicts: " +msgstr "" +"\n" +"未解決ã®è¡çªã®æ•°: " + +#: mergeresultwindow.cpp:816 +msgid "Conflicts" +msgstr "è¡çª" + +#: mergeresultwindow.cpp:1652 +msgid "" +msgstr "<ソース行ãªã—>" + +#: mergeresultwindow.cpp:1660 +msgid "" +msgstr "<マージè¡çª (空白ã®ã¿)>" + +#: mergeresultwindow.cpp:1662 mergeresultwindow.cpp:2427 +msgid "" +msgstr "<マージè¡çª>" + +#: mergeresultwindow.cpp:2635 +msgid "" +"Not all conflicts are solved yet.\n" +"File not saved.\n" +msgstr "" +"ã™ã¹ã¦ã®è¡çªãŒã¾ã è§£æ±ºã•ã‚Œã¦ã„ã¾ã›ã‚“\n" +"ファイルã¯ä¿å­˜ã•ã‚Œã¾ã›ã‚“\n" + +#: mergeresultwindow.cpp:2637 +msgid "Conflicts Left" +msgstr "è¡çª(å·¦)" + +#: mergeresultwindow.cpp:2649 +msgid "" +"\n" +"\n" +"Creating backup failed. File not saved." +msgstr "" +"\n" +"\n" +"ãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—ファイルã®ä½œæˆã«å¤±æ•—。ファイルã¯ä¿å­˜ã•ã‚Œã¾ã›ã‚“。" + +#: mergeresultwindow.cpp:2649 mergeresultwindow.cpp:2689 +msgid "File Save Error" +msgstr "ファイルä¿å­˜ã‚¨ãƒ©ãƒ¼" + +#: mergeresultwindow.cpp:2689 +msgid "Error while writing." +msgstr "書ãè¾¼ã¿ä¸­ã«ã‚¨ãƒ©ãƒ¼" + +#: mergeresultwindow.cpp:3020 +msgid "Output" +msgstr "出力" + +#: mergeresultwindow.cpp:3032 mergeresultwindow.cpp:3139 +msgid "[Modified]" +msgstr "[æ›´æ–°]" + +#: mergeresultwindow.cpp:3039 +#, fuzzy +msgid "Encoding for saving" +msgstr "C ã®ãƒ•ã‚¡ã‚¤ãƒ«ã®ã‚¨ãƒ³ã‚³ãƒ¼ãƒ‡ã‚£ãƒ³ã‚°:" + +#: mergeresultwindow.cpp:3075 mergeresultwindow.cpp:3081 +#: mergeresultwindow.cpp:3087 +msgid "Codec from" +msgstr "" + +#: optiondialog.cpp:362 +msgid "Unicode, 8 bit" +msgstr "Unicode, 8 bit" + +#: optiondialog.cpp:363 +msgid "Unicode" +msgstr "Unicode" + +#: optiondialog.cpp:364 +msgid "Latin1" +msgstr "Latin1" + +#: optiondialog.cpp:383 +msgid "Change this if non-ASCII characters are not displayed correctly." +msgstr "éž ASCII 文字ãŒé©åˆ‡ã«è¡¨ç¤ºã•ã‚Œãªã‘ã‚Œã°ã€ã“れを変更ã—ã¦ãã ã•ã„。" + +#: optiondialog.cpp:510 +msgid "Editor & Diff Output Font" +msgstr "エディタ/Diff 出力フォント" + +#: optiondialog.cpp:531 +msgid "Italic font for deltas" +msgstr "ç•°ãªã‚‹éƒ¨åˆ†ã‚’イタリック体ã§è¡¨ç¤º" + +#: optiondialog.cpp:534 +msgid "" +"Selects the italic version of the font for differences.\n" +"If the font doesn't support italic characters, then this does nothing." +msgstr "" +"差異を表示ã™ã‚‹ã®ã«ãƒ•ã‚©ãƒ³ãƒˆã®ã‚¤ã‚¿ãƒªãƒƒã‚¯ä½“ã‚’é¸æŠž\n" +"イタリック体ãŒå«ã¾ã‚Œã¦ã„ãªã‘ã‚Œã°ã€é€šå¸¸ã®ã¾ã¾ã§ã™" + +#: optiondialog.cpp:542 +msgid "Color" +msgstr "色" + +#: optiondialog.cpp:542 +msgid "Colors Settings" +msgstr "色ã®è¨­å®š" + +#: optiondialog.cpp:556 +msgid "Editor and Diff Views:" +msgstr "エディタ/Diff ビュー:" + +#: optiondialog.cpp:564 +msgid "Foreground color:" +msgstr "å‰æ™¯è‰²:" + +#: optiondialog.cpp:570 +msgid "Background color:" +msgstr "背景色:" + +#: optiondialog.cpp:578 +msgid "Diff background color:" +msgstr "Diff 背景色:" + +#: optiondialog.cpp:585 +msgid "Color A:" +msgstr "色 (A):" + +#: optiondialog.cpp:592 +msgid "Color B:" +msgstr "色 (B):" + +#: optiondialog.cpp:599 +msgid "Color C:" +msgstr "色 (C):" + +#: optiondialog.cpp:605 +msgid "Conflict color:" +msgstr "色 (è¡çª):" + +#: optiondialog.cpp:612 +msgid "Current range background color:" +msgstr "ç¾åœ¨ã®ç¯„囲ã§ã®èƒŒæ™¯è‰²:" + +#: optiondialog.cpp:619 +msgid "Current range diff background color:" +msgstr "ç¾åœ¨ã®ç¯„囲ã§ã® diff 背景色:" + +#: optiondialog.cpp:625 +msgid "Color for manually aligned difference ranges:" +msgstr "" + +#: optiondialog.cpp:630 +msgid "Directory Comparison View:" +msgstr "ディレクトリ比較ビュー:" + +#: optiondialog.cpp:636 +msgid "Newest file color:" +msgstr "最も新ã—ã„ファイルã®è‰²:" + +#: optiondialog.cpp:639 +msgid "" +"Changing this color will only be effective when starting the next directory " +"comparison." +msgstr "ã“ã®è‰²ã®å¤‰æ›´ã¯æ¬¡ã®ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªæ¯”較を開始ã—ãŸã¨ãã«æœ‰åŠ¹ã«ãªã‚Šã¾ã™ã€‚" + +#: optiondialog.cpp:644 +msgid "Oldest file color:" +msgstr "最もå¤ã„ファイルã®è‰²:" + +#: optiondialog.cpp:651 +msgid "Middle age file color:" +msgstr "中間ã®ãƒ•ã‚¡ã‚¤ãƒ«ã®è‰²:" + +#: optiondialog.cpp:658 +msgid "Color for missing files:" +msgstr "欠è½ã—ãŸãƒ•ã‚¡ã‚¤ãƒ«ã®è‰²:" + +#: optiondialog.cpp:670 +msgid "Editor" +msgstr "エディタ" + +#: optiondialog.cpp:670 +msgid "Editor Behavior" +msgstr "エディタã®å‹•ä½œ" + +#: optiondialog.cpp:680 +msgid "Tab inserts spaces" +msgstr "タブã§ç©ºç™½ã‚’挿入" + +#: optiondialog.cpp:683 +msgid "" +"On: Pressing tab generates the appropriate number of spaces.\n" +"Off: A Tab-character will be inserted." +msgstr "" +"オン: タブを押ã™ã¨é©åˆ‡ãªæ•°ã®ç©ºç™½ã‚’挿入\n" +"オフ: タブãã®ã‚‚ã®ã‚’挿入" + +#: optiondialog.cpp:689 +msgid "Tab size:" +msgstr "タブサイズ:" + +#: optiondialog.cpp:694 +msgid "Auto indentation" +msgstr "自動字下ã’" + +#: optiondialog.cpp:697 +msgid "" +"On: The indentation of the previous line is used for a new line.\n" +msgstr "" +"オン: æ–°è¦æ”¹è¡Œã«å‰ã®è¡Œã®å­—下ã’を使ã†\n" + +#: optiondialog.cpp:701 +msgid "Auto copy selection" +msgstr "é¸æŠžã‚’自動的ã«ã‚³ãƒ”ー" + +#: optiondialog.cpp:704 +msgid "" +"On: Any selection is immediately written to the clipboard.\n" +"Off: You must explicitely copy e.g. via Ctrl-C." +msgstr "" +"オン: ã™ã¹ã¦ã®é¸æŠžã¯å³åº§ã«ã‚¯ãƒªãƒƒãƒ—ボードã¸\n" +"オフ: 明示的ãªã‚³ãƒ”ーãŒå¿…è¦. 例: Ctrl-C ã§" + +#: optiondialog.cpp:709 +msgid "Line end style:" +msgstr "改行コード:" + +#: optiondialog.cpp:721 +msgid "" +"Sets the line endings for when an edited file is saved.\n" +"DOS/Windows: CR+LF; UNIX: LF; with CR=0D, LF=0A" +msgstr "" +"編集ã—ãŸãƒ•ã‚¡ã‚¤ãƒ«ã®ä¿å­˜æ™‚ã«ä½¿ç”¨ã™ã‚‹æ”¹è¡Œã‚³ãƒ¼ãƒ‰ã‚’設定ã—ã¾ã™ã€‚\n" +"DOS/Windows: CR+LF; UNIX: LF; with CR=0D, LF=0A" + +#: optiondialog.cpp:732 +#, fuzzy +msgid "Diff" +msgstr "KDiff3" + +#: optiondialog.cpp:732 +#, fuzzy +msgid "Diff Settings" +msgstr "Diff/マージã®è¨­å®š" + +#: optiondialog.cpp:743 +msgid "Preserve carriage return" +msgstr "キャリッジリターンをä¿å­˜" + +#: optiondialog.cpp:746 +msgid "" +"Show carriage return characters '\\r' if they exist.\n" +"Helps to compare files that were modified under different operating systems." +msgstr "" +"キャリッジリターンãŒã‚れ㰠`\\r` ã¨è¡¨ç¤º\n" +"ç•°ãªã‚‹ OS ã§æ›´æ–°ã•ã‚ŒãŸãƒ•ã‚¡ã‚¤ãƒ«ã‚’比較ã™ã‚‹ã®ã‚’手助ã‘" + +#: optiondialog.cpp:751 +msgid "Ignore numbers" +msgstr "数字を無視" + +#: optiondialog.cpp:754 +msgid "" +"Ignore number characters during line matching phase. (Similar to Ignore white " +"space.)\n" +"Might help to compare files with numeric data." +msgstr "" +"行マッãƒæ™‚ã«æ•°å­—ã®é•ã„を無視. (空白を無視ã«é¡žä¼¼)\n" +"数字データファイルã®æ¯”較を手助ã‘" + +#: optiondialog.cpp:759 +msgid "Ignore C/C++ comments" +msgstr "C/C++ コメントを無視 " + +#: optiondialog.cpp:761 +msgid "Treat C/C++ comments like white space." +msgstr "C/C++ コメントを空白ã¨åŒã˜ã‚ˆã†ã«æ‰±ã†" + +#: optiondialog.cpp:765 +msgid "Ignore case" +msgstr "大文字å°æ–‡å­—ã®å·®ã‚’無視" + +#: optiondialog.cpp:768 +msgid "Treat case differences like white space changes. ('a'<=>'A')" +msgstr "大文字å°æ–‡å­—ã®å·®ã‚’空白ã¨åŒã˜ã‚ˆã†ã«æ‰±ã† ('a' <=>'A')" + +#: optiondialog.cpp:772 +msgid "Preprocessor command:" +msgstr "プリプロセッサコマンド:" + +#: optiondialog.cpp:776 +msgid "User defined pre-processing. (See the docs for details.)" +msgstr "ユーザ定義プリプロセッサ (詳細ã«ã¤ã„ã¦ã¯æ–‡æ›¸ã‚’å‚ç…§)" + +#: optiondialog.cpp:779 +msgid "Line-matching preprocessor command:" +msgstr "行マッãƒãƒ—リプロセッサコマンド:" + +#: optiondialog.cpp:783 +msgid "" +"This pre-processor is only used during line matching.\n" +"(See the docs for details.)" +msgstr "" +"ã“ã®ãƒ—リプロセッサã¯è¡Œãƒžãƒƒãƒæ™‚ã«ã ã‘使ã‚ã‚Œã¾ã™\n" +"(詳細ã«ã¤ã„ã¦ã¯æ–‡æ›¸ã‚’å‚ç…§)" + +#: optiondialog.cpp:786 +msgid "Try hard (slower)" +msgstr "厳密ã«è©¦è¡Œ(é…ã„)" + +#: optiondialog.cpp:789 +msgid "" +"Enables the --minimal option for the external diff.\n" +"The analysis of big files will be much slower." +msgstr "" +"外部 diff コマンドã«ã¤ã„㦠--minimal オプションを有効ã«\n" +"大ããªãƒ•ã‚¡ã‚¤ãƒ«ã§ã¯è§£æžãŒã‚ˆã‚Šé…ããªã‚Šã¾ã™" + +#: optiondialog.cpp:794 +msgid "Auto advance delay (ms):" +msgstr "自動å‰é€²é…延(ミリ秒):" + +#: optiondialog.cpp:799 +msgid "" +"When in Auto-Advance mode the result of the current selection is shown \n" +"for the specified time, before jumping to the next conflict. Range: 0-2000 ms" +msgstr "" +"自動å‰é€²ãƒ¢ãƒ¼ãƒ‰ã§ã¯é¸æŠžçµæžœãŒã€æ¬¡ã®è¡çªã«è¡Œãå‰ã«æŒ‡å®šæ™‚é–“ã”ã¨ã«\n" +"表示ã•ã‚Œã¾ã™ (レンジ: 0-2000 ミリ秒)" + +#: optiondialog.cpp:809 +#, fuzzy +msgid "Merge Settings" +msgstr "Diff/マージã®è¨­å®š" + +#: optiondialog.cpp:822 +msgid "White space 2-file merge default:" +msgstr "空白 2 ファイルマージ標準:" + +#: optiondialog.cpp:826 optiondialog.cpp:839 +msgid "Manual Choice" +msgstr "手作業ã§ã®é¸æŠž" + +#: optiondialog.cpp:830 optiondialog.cpp:844 +msgid "" +"Allow the merge algorithm to automatically select an input for white-space-only " +"changes." +msgstr "マージアルゴリズムãŒç©ºç™½ã®å¤‰æ›´ã ã‘ã«ã¤ã„ã¦å…¥åŠ›ã‚’自動的ã«é¸æŠžã™ã‚‹ã‚ˆã†ã«" + +#: optiondialog.cpp:835 +msgid "White space 3-file merge default:" +msgstr "空白 3 ファイルマージ標準:" + +#: optiondialog.cpp:849 +msgid "Automatic Merge Regular Expression" +msgstr "" + +#: optiondialog.cpp:858 smalldialogs.cpp:397 +msgid "Auto merge regular expression:" +msgstr "" + +#: optiondialog.cpp:862 +msgid "" +"Regular expression for lines where KDiff3 should automatically choose one " +"source.\n" +"When a line with a conflict matches the regular expression then\n" +"- if available - C, otherwise B will be chosen." +msgstr "" + +#: optiondialog.cpp:868 +msgid "Run regular expression auto merge on merge start" +msgstr "" + +#: optiondialog.cpp:870 +msgid "" +"Run the merge for auto merge regular expressions\n" +"immediately when a merge starts.\n" +msgstr "" + +#: optiondialog.cpp:875 +msgid "Version Control History Merging" +msgstr "" + +#: optiondialog.cpp:884 smalldialogs.cpp:424 +msgid "History start regular expression:" +msgstr "" + +#: optiondialog.cpp:888 +msgid "" +"Regular expression for the start of the version control history entry.\n" +"Usually this line contains the \"$Log$\"-keyword.\n" +"Default value: \".*\\$Log.*\\$.*\"" +msgstr "" + +#: optiondialog.cpp:894 smalldialogs.cpp:453 +msgid "History entry start regular expression:" +msgstr "" + +#: optiondialog.cpp:906 +msgid "" +"A version control history entry consists of several lines.\n" +"Specify the regular expression to detect the first line (without the leading " +"comment).\n" +"Use parentheses to group the keys you want to use for sorting.\n" +"If left empty, then KDiff3 assumes that empty lines separate history entries.\n" +"See the documentation for details." +msgstr "" + +#: optiondialog.cpp:914 +msgid "History merge sorting" +msgstr "" + +#: optiondialog.cpp:916 +msgid "Sort version control history by a key." +msgstr "" + +#: optiondialog.cpp:926 +msgid "History entry start sort key order:" +msgstr "" + +#: optiondialog.cpp:930 +msgid "" +"Each parentheses used in the regular expression for the history start entry\n" +"groups a key that can be used for sorting.\n" +"Specify the list of keys (that are numbered in order of occurrence\n" +"starting with 1) using ',' as separator (e.g. \"4,5,6,1,2,3,7\").\n" +"If left empty, then no sorting will be done.\n" +"See the documentation for details." +msgstr "" + +#: optiondialog.cpp:941 +msgid "Merge version control history on merge start" +msgstr "" + +#: optiondialog.cpp:943 +msgid "Run version control history automerge on merge start." +msgstr "" + +#: optiondialog.cpp:947 +msgid "Test your regular expressions" +msgstr "" + +#: optiondialog.cpp:952 +msgid "Irrelevant merge command:" +msgstr "" + +#: optiondialog.cpp:956 +msgid "" +"If specified this script is run after automerge\n" +"when no other relevant changes were detected.\n" +"Called with the parameters: filename1 filename2 filename3" +msgstr "" + +#: optiondialog.cpp:966 +msgid "Directory Merge" +msgstr "ディレクトリマージ" + +#: optiondialog.cpp:975 +msgid "Recursive directories" +msgstr "ディレクトリをå†å¸°" + +#: optiondialog.cpp:977 +msgid "Whether to analyze subdirectories or not." +msgstr "サブディレクトリを解æžã™ã‚‹ã‹ã©ã†ã‹" + +#: optiondialog.cpp:979 +msgid "File pattern(s):" +msgstr "ファイルパターン:" + +#: optiondialog.cpp:984 +msgid "" +"Pattern(s) of files to be analyzed. \n" +"Wildcards: '*' and '?'\n" +"Several Patterns can be specified by using the separator: ';'" +msgstr "" +"解æžã™ã‚‹ãƒ•ã‚¡ã‚¤ãƒ«ã®ãƒ‘ターン\n" +"ワイルドカード: `*` 㨠`?`\n" +"複数ã®ãƒ‘ターン㯠`:` ã§åŒºåˆ‡ã£ã¦æŒ‡å®šã§ãã¾ã™" + +#: optiondialog.cpp:990 +msgid "File-anti-pattern(s):" +msgstr "ファイルå¦å®šãƒ‘ターン:" + +#: optiondialog.cpp:995 +msgid "" +"Pattern(s) of files to be excluded from analysis. \n" +"Wildcards: '*' and '?'\n" +"Several Patterns can be specified by using the separator: ';'" +msgstr "" +"解æžã‹ã‚‰é™¤å¤–ã™ã‚‹ãƒ•ã‚¡ã‚¤ãƒ«ã®ãƒ‘ターン\n" +"ワイルドカード: `*` 㨠`?`\n" +"複数ã®ãƒ‘ターン㯠`:` ã§åŒºåˆ‡ã£ã¦æŒ‡å®šã§ãã¾ã™" + +#: optiondialog.cpp:1001 +msgid "Dir-anti-pattern(s):" +msgstr "ディレクトリå¦å®šãƒ‘ターン:" + +#: optiondialog.cpp:1006 +msgid "" +"Pattern(s) of directories to be excluded from analysis. \n" +"Wildcards: '*' and '?'\n" +"Several Patterns can be specified by using the separator: ';'" +msgstr "" +"解æžã‹ã‚‰é™¤å¤–ã™ã‚‹ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªã®ãƒ‘ターン\n" +"ワイルドカード: `*` 㨠`?`\n" +"複数ã®ãƒ‘ターン㯠`:` ã§åŒºåˆ‡ã£ã¦æŒ‡å®šã§ãã¾ã™" + +#: optiondialog.cpp:1012 +msgid "Use .cvsignore" +msgstr ".cvsignore を使用" + +#: optiondialog.cpp:1015 +msgid "" +"Extends the antipattern to anything that would be ignored by CVS.\n" +"Via local \".cvsignore\"-files this can be directory specific." +msgstr "" +"CVS ã§ç„¡è¦–ã•ã‚Œã‚‹ã™ã¹ã¦ã«ã¤ã„ã¦å¦å®šãƒ‘ターンを拡張\n" +"ローカル㮠\".cvsignore\" ファイルã«ã‚ˆã£ã¦ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªå›ºæœ‰ã«åˆ©ç”¨ã§ãã¾ã™" + +#: optiondialog.cpp:1020 +msgid "Find hidden files and directories" +msgstr "éš ã—ファイルã¨ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªã‚’検索 " + +#: optiondialog.cpp:1023 +msgid "Finds files and directories with the hidden attribute." +msgstr "éš ã—属性をæŒã¤ãƒ•ã‚¡ã‚¤ãƒ«ã¨ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªã‚’検索" + +#: optiondialog.cpp:1025 +msgid "Finds files and directories starting with '.'." +msgstr "`.` ã§å§‹ã¾ã‚‹ãƒ•ã‚¡ã‚¤ãƒ«ã¨ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªã‚’検索" + +#: optiondialog.cpp:1029 +msgid "Follow file links" +msgstr "ファイルリンクを追跡" + +#: optiondialog.cpp:1032 +msgid "" +"On: Compare the file the link points to.\n" +"Off: Compare the links." +msgstr "" +"オン: ファイルã®ãƒªãƒ³ã‚¯å…ˆã‚’比較\n" +"オフ: リンクを比較" + +#: optiondialog.cpp:1037 +msgid "Follow directory links" +msgstr "ディレクトリリンクを追跡" + +#: optiondialog.cpp:1040 +msgid "" +"On: Compare the directory the link points to.\n" +"Off: Compare the links." +msgstr "" +"オン: ディレクトリã®ãƒªãƒ³ã‚¯å…ˆã‚’比較\n" +"オフ: リンクを比較" + +#: optiondialog.cpp:1056 +msgid "Case sensitive filename comparison" +msgstr "大文字å°æ–‡å­—を区別ã—ã¦ãƒ•ã‚¡ã‚¤ãƒ«åを比較" + +#: optiondialog.cpp:1059 +msgid "" +"The directory comparison will compare files or directories when their names " +"match.\n" +"Set this option if the case of the names must match. (Default for Windows is " +"off, otherwise on.)" +msgstr "" +"ディレクトリ比較ã¯åå‰ãŒä¸€è‡´ã™ã‚‹ãƒ•ã‚¡ã‚¤ãƒ«ãŠã‚ˆã³ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªã‚’比較ã—ã¾ã™ã€‚\n" +"åå‰ã®å¤§æ–‡å­—å°æ–‡å­—も一致ã—ãªã‘ã‚Œã°ãªã‚‰ãªã„å ´åˆã¯ã€ã“ã®ã‚ªãƒ—ションを有効ã«ã—ã¦ãã ã•ã„。\n" +"(Windowsã®æ¨™æº–ã¯ã‚ªãƒ•ã€ãã®ä»–ã¯ã‚ªãƒ³ã§ã™)" + +#: optiondialog.cpp:1063 +msgid "File Comparison Mode" +msgstr "ファイル比較モード" + +#: optiondialog.cpp:1067 +msgid "Binary comparison" +msgstr "ãƒã‚¤ãƒŠãƒªæ¯”較" + +#: optiondialog.cpp:1068 +msgid "Binary comparison of each file. (Default)" +msgstr "ãã‚Œãžã‚Œã®ãƒ•ã‚¡ã‚¤ãƒ«ã‚’ãƒã‚¤ãƒŠãƒªæ¯”較ã—ã¾ã™ã€‚(標準)" + +#: optiondialog.cpp:1070 +msgid "Full analysis" +msgstr "完全分æž" + +#: optiondialog.cpp:1071 +msgid "" +"Do a full analysis and show statistics information in extra columns.\n" +"(Slower than a binary comparison, much slower for binary files.)" +msgstr "" +"完全ãªæ¯”較を実行ã—ã€çµ±è¨ˆæƒ…報を別ã®ã‚«ãƒ©ãƒ ã«è¡¨ç¤ºã—ã¾ã™ã€‚\n" +"(ãƒã‚¤ãƒŠãƒªæ¯”較よりé…ãã€ãƒã‚¤ãƒŠãƒªãƒ•ã‚¡ã‚¤ãƒ«ã®å ´åˆã¯éžå¸¸ã«æ™‚é–“ãŒã‹ã‹ã‚Šã¾ã™)" + +#: optiondialog.cpp:1074 +msgid "Trust the modification date (unsafe)" +msgstr "更新日時を信用 (安全ã§ã¯ã‚ã‚Šã¾ã›ã‚“)" + +#: optiondialog.cpp:1075 +msgid "" +"Assume that files are equal if the modification date and file length are " +"equal.\n" +"Useful for big directories or slow networks." +msgstr "" +"ファイルã®æ›´æ–°æ—¥æ™‚ã¨ãƒ•ã‚¡ã‚¤ãƒ«é•·ãŒç­‰ã—ã‘ã‚Œã°åŒã˜ã‚‚ã®ã¨è¦‹ãªã™\n" +"大ããªãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªã‚„é…ã„ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã§æœ‰åŠ¹" + +#: optiondialog.cpp:1078 +msgid "Trust the size (unsafe)" +msgstr "容é‡ã‚’信用 (安全ã§ã¯ã‚ã‚Šã¾ã›ã‚“)" + +#: optiondialog.cpp:1079 +msgid "" +"Assume that files are equal if their file lengths are equal.\n" +"Useful for big directories or slow networks when the date is modified during " +"download." +msgstr "" +"ファイル長ãŒç­‰ã—ã„ãªã‚‰ãƒ•ã‚¡ã‚¤ãƒ«ã¯åŒã˜ã¨è¦‹ãªã™\n" +"大ããªãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªã‚„ダウンロード間ã«æ›´æ–°æ—¥æ™‚ãŒå¤‰ã‚るよã†ãªé…ã„ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã§æœ‰åŠ¹" + +#: optiondialog.cpp:1083 +msgid "Synchronize directories" +msgstr "ディレクトリをåŒæœŸ" + +#: optiondialog.cpp:1086 +msgid "" +"Offers to store files in both directories so that\n" +"both directories are the same afterwards.\n" +"Works only when comparing two directories without specifying a destination." +msgstr "" +"両ディレクトリã«ä»¥å¾ŒåŒã˜ã«ãªã‚‹ã‚ˆã†ã«ãƒ•ã‚¡ã‚¤ãƒ«ã‚’ç½®ã\n" +"æ–¹å‘を未指定ã§äºŒã¤ã®ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªã‚’比較ã™ã‚‹éš›ã®ã¿æ©Ÿèƒ½ã—ã¾ã™" + +#: optiondialog.cpp:1092 +msgid "White space differences considered equal" +msgstr "空白ã®é•ã„を無視" + +#: optiondialog.cpp:1095 +msgid "" +"If files differ only by white space consider them equal.\n" +"This is only active when full analysis is chosen." +msgstr "" +"ファイルã®å·®ç•°ãŒç©ºç™½ã ã‘ã®å ´åˆã¯ç­‰ã—ã„ã‚‚ã®ã¨è¦‹ãªã—ã¾ã™ã€‚\n" +"ã“ã®ã‚ªãƒ—ションã¯å®Œå…¨åˆ†æžãŒé¸æŠžã•ã‚Œã¦ã„ã‚‹ã¨ãã«ã®ã¿ã‚¢ã‚¯ãƒ†ã‚£ãƒ–ã«ãªã‚Šã¾ã™ã€‚" + +#: optiondialog.cpp:1101 +msgid "Copy newer instead of merging (unsafe)" +msgstr "マージã§ã¯ãªãより新ã—ã„ã‚‚ã®ã‚’コピー (安全ã§ã¯ã‚ã‚Šã¾ã›ã‚“)" + +#: optiondialog.cpp:1104 +msgid "" +"Don't look inside, just take the newer file.\n" +"(Use this only if you know what you are doing!)\n" +"Only effective when comparing two directories." +msgstr "" +"内容見ãšã«å˜ã«ã‚ˆã‚Šæ–°ã—ã„ファイルをã¨ã‚Šã¾ã™\n" +"(何をã—ã¦ã„ã‚‹ã®ã‹ã‚ã‹ã£ã¦ã„ã‚‹å ´åˆã ã‘使用ã—ã¦ãã ã•ã„!)\n" +"二ã¤ã®ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªã‚’比較ã—ã¦ã„ã‚‹ã¨ãã®ã¿æœ‰åŠ¹ã§ã™" + +#: optiondialog.cpp:1109 +msgid "Backup files (.orig)" +msgstr "ãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—ファイル (.orig)" + +#: optiondialog.cpp:1112 +msgid "" +"When a file would be saved over an old file, then the old file\n" +"will be renamed with a '.orig'-extension instead of being deleted." +msgstr "å¤ã„ファイルも削除ã›ãšã« '.orig' æ‹¡å¼µå­ã‚’付ã‘ã¦ä¿å­˜ã•ã‚Œã¾ã™" + +#: optiondialog.cpp:1176 +msgid "Regional Settings" +msgstr "言語ã®è¨­å®š" + +#: optiondialog.cpp:1272 +msgid "Language (restart required)" +msgstr "言語 (å†ã‚¹ã‚¿ãƒ¼ãƒˆãŒå¿…è¦)" + +#: optiondialog.cpp:1304 +msgid "" +"Choose the language of the GUI-strings or \"Auto\".\n" +"For a change of language to take place, quit and restart KDiff3." +msgstr "" + +#: optiondialog.cpp:1322 +msgid "Use the same encoding for everything:" +msgstr "ã™ã¹ã¦ã«åŒã˜ã‚¨ãƒ³ã‚³ãƒ¼ãƒ‡ã‚£ãƒ³ã‚°ã‚’使用:" + +#: optiondialog.cpp:1325 +msgid "" +"Enable this allows to change all encodings by changing the first only.\n" +"Disable this if different individual settings are needed." +msgstr "" +"ã“ã®ã‚ªãƒ—ションを有効ã«ã™ã‚‹ã¨ã€æœ€åˆã‚’変更ã™ã‚‹ã ã‘ã§ã™ã¹ã¦ã®ã‚¨ãƒ³ã‚³ãƒ¼ãƒ‡ã‚£ãƒ³ã‚°ã‚’åŒæ™‚ã«å¤‰æ›´ã§ãã¾ã™ã€‚\n" +"ãã‚Œãžã‚Œã«å€‹åˆ¥ã«è¨­å®šã™ã‚‹å¿…è¦ãŒã‚ã‚‹å ´åˆã¯ã€ã“れを無効ã«ã—ã¦ãã ã•ã„。" + +#: optiondialog.cpp:1330 +msgid "Note: Local Encoding is " +msgstr "ç¾åœ¨ã®ãƒ­ã‚«ãƒ¼ãƒ«ã‚¨ãƒ³ã‚³ãƒ¼ãƒ‡ã‚£ãƒ³ã‚°: " + +#: optiondialog.cpp:1334 +msgid "File Encoding for A:" +msgstr "A ã®ãƒ•ã‚¡ã‚¤ãƒ«ã®ã‚¨ãƒ³ã‚³ãƒ¼ãƒ‡ã‚£ãƒ³ã‚°:" + +#: optiondialog.cpp:1340 +msgid "" +"If enabled then Unicode (UTF-16 or UTF-8) encoding will be detected.\n" +"If the file encoding is not detected then the selected encoding will be used as " +"fallback.\n" +"(Unicode detection depends on the first bytes of a file - the byte order mark " +"\"BOM\".)" +msgstr "" + +#: optiondialog.cpp:1344 optiondialog.cpp:1353 optiondialog.cpp:1362 +msgid "Auto Detect Unicode" +msgstr "" + +#: optiondialog.cpp:1349 +msgid "File Encoding for B:" +msgstr "B ã®ãƒ•ã‚¡ã‚¤ãƒ«ã®ã‚¨ãƒ³ã‚³ãƒ¼ãƒ‡ã‚£ãƒ³ã‚°:" + +#: optiondialog.cpp:1358 +msgid "File Encoding for C:" +msgstr "C ã®ãƒ•ã‚¡ã‚¤ãƒ«ã®ã‚¨ãƒ³ã‚³ãƒ¼ãƒ‡ã‚£ãƒ³ã‚°:" + +#: optiondialog.cpp:1367 +msgid "File Encoding for Merge Output and Saving:" +msgstr "マージ出力ã¨ä¿å­˜æ™‚ã®ã‚¨ãƒ³ã‚³ãƒ¼ãƒ‡ã‚£ãƒ³ã‚°:" + +#: optiondialog.cpp:1371 +#, fuzzy +msgid "Auto Select" +msgstr "é¸æŠžã‚’自動的ã«ã‚³ãƒ”ー" + +#: optiondialog.cpp:1374 +msgid "" +"If enabled then the encoding from the input files is used.\n" +"In ambiguous cases a dialog will ask the user to choose the encoding for " +"saving." +msgstr "" + +#: optiondialog.cpp:1378 +msgid "File Encoding for Preprocessor Files:" +msgstr "プリプロセッサファイルã®ã‚¨ãƒ³ã‚³ãƒ¼ãƒ‡ã‚£ãƒ³ã‚°:" + +#: optiondialog.cpp:1389 +msgid "Right To Left Language" +msgstr "å³ã‹ã‚‰å·¦ã«èª­ã‚€è¨€èªž" + +#: optiondialog.cpp:1392 +msgid "" +"Some languages are read from right to left.\n" +"This setting will change the viewer and editor accordingly." +msgstr "" + +#: optiondialog.cpp:1402 +msgid "Integration" +msgstr "çµ±åˆ" + +#: optiondialog.cpp:1402 +msgid "Integration Settings" +msgstr "çµ±åˆã®è¨­å®š" + +#: optiondialog.cpp:1412 +msgid "Command line options to ignore:" +msgstr "無視ã™ã‚‹ã‚³ãƒžãƒ³ãƒ‰ãƒ©ã‚¤ãƒ³ã‚ªãƒ—ション:" + +#: optiondialog.cpp:1417 +msgid "" +"List of command line options that should be ignored when KDiff3 is used by " +"other tools.\n" +"Several values can be specified if separated via ';'\n" +"This will suppress the \"Unknown option\"-error." +msgstr "" +"KDiff3ãŒä»–ã®ãƒ„ールã«ã‚ˆã£ã¦ä½¿ç”¨ã•ã‚Œã‚‹ã¨ãã«ç„¡è¦–ã™ã¹ãコマンドラインオプションã®ãƒªã‚¹ãƒˆã§ã™ã€‚\n" +"複数ã®ã‚ªãƒ—ションã¯ã‚»ãƒŸã‚³ãƒ­ãƒ³(;)ã§åŒºåˆ‡ã£ã¦æŒ‡å®šã—ã¦ãã ã•ã„。\n" +"ã“ã‚Œã«ã‚ˆã£ã¦ \"ä¸æ˜Žãªã‚ªãƒ—ション\" エラーを抑制ã§ãã¾ã™ã€‚" + +#: optiondialog.cpp:1480 +msgid "" +"You selected a variable width font.\n" +"\n" +"Because this program doesn't handle variable width fonts\n" +"correctly, you might experience problems while editing.\n" +"\n" +"Do you want to continue or do you want to select another font." +msgstr "" +"å¯å¤‰å¹…ãªãƒ•ã‚©ãƒ³ãƒˆã‚’é¸æŠžã—ã¦ã„ã¾ã™\n" +"\n" +"ã“ã®ãƒ—ログラムã¯å¯å¤‰å¹…フォントをé©åˆ‡ã«æ‰±ãˆãªã„ã®ã§ã€ç·¨é›†ä¸­ã«\n" +"å•é¡ŒãŒèµ·ã‚‹ã“ã¨ãŒã‚ã‚Šã¾ã™\n" +"\n" +"続行ã™ã‚‹ã‹ã€ä»–ã®ãƒ•ã‚©ãƒ³ãƒˆã‚’é¸æŠžã—ã¦ãã ã•ã„" + +#: optiondialog.cpp:1484 +msgid "Incompatible Font" +msgstr "éžäº’æ›ãªãƒ•ã‚©ãƒ³ãƒˆ" + +#: optiondialog.cpp:1485 +msgid "Continue at Own Risk" +msgstr "自己責任ã§ç¶šè¡Œ" + +#: optiondialog.cpp:1485 +msgid "Select Another Font" +msgstr "ä»–ã®ãƒ•ã‚©ãƒ³ãƒˆã‚’é¸æŠž" + +#: optiondialog.cpp:1521 +msgid "This resets all options. Not only those of the current topic." +msgstr "ç¾åœ¨ã®ãƒˆãƒ”ックã ã‘ã§ãªãã™ã¹ã¦ã®ã‚ªãƒ—ションをリセット" + +#: pdiff.cpp:258 +msgid "PreprocessorCmd: " +msgstr "プリプロセッサコマンド: " + +#: pdiff.cpp:263 +msgid "" +"The following option(s) you selected might change data:\n" +msgstr "" + +#: pdiff.cpp:264 +msgid "" +"\n" +"Most likely this is not wanted during a merge.\n" +"Do you want to disable these settings or continue with these settings active?" +msgstr "" + +#: pdiff.cpp:266 +msgid "Option Unsafe for Merging" +msgstr "" + +#: pdiff.cpp:267 +msgid "Use These Options During Merge" +msgstr "" + +#: pdiff.cpp:267 +msgid "Disable Unsafe Options" +msgstr "" + +#: pdiff.cpp:297 +msgid "Loading A" +msgstr "A を読ã¿è¾¼ã¿ä¸­" + +#: pdiff.cpp:301 +msgid "Loading B" +msgstr "B を読ã¿è¾¼ã¿ä¸­" + +#: pdiff.cpp:318 pdiff.cpp:344 +msgid "Diff: A <-> B" +msgstr "Diff: A <-> B" + +#: pdiff.cpp:324 pdiff.cpp:366 +msgid "Linediff: A <-> B" +msgstr "Linediff: A <-> B" + +#: pdiff.cpp:335 +msgid "Loading C" +msgstr "C を読ã¿è¾¼ã¿ä¸­" + +#: pdiff.cpp:347 +msgid "Diff: B <-> C" +msgstr "Diff: B <-> C" + +#: pdiff.cpp:350 +msgid "Diff: A <-> C" +msgstr "Diff: A <-> C" + +#: pdiff.cpp:369 +msgid "Linediff: B <-> C" +msgstr "Linediff: B <-> C" + +#: pdiff.cpp:372 +msgid "Linediff: A <-> C" +msgstr "Linediff: A <-> C" + +#: pdiff.cpp:513 +msgid "All input files contain the same text, but are not binary equal." +msgstr "ã™ã¹ã¦ã®å…¥åŠ›ãƒ•ã‚¡ã‚¤ãƒ«ã®ãƒ†ã‚­ã‚¹ãƒˆã¯åŒã˜ã§ã™ãŒã€ãƒã‚¤ãƒŠãƒªçš„ã«ç­‰ã—ãã‚ã‚Šã¾ã›ã‚“。" + +#: pdiff.cpp:515 pdiff.cpp:517 pdiff.cpp:519 +msgid "" +"Files %1 and %2 are binary equal.\n" +msgstr "" +"ファイル %1 㨠%2 ã¯ãƒã‚¤ãƒŠãƒªçš„ã«åŒã˜ã§ã™ã€‚\n" + +#: pdiff.cpp:516 pdiff.cpp:518 pdiff.cpp:520 +msgid "" +"Files %1 and %2 have equal text, but are not binary equal. \n" +msgstr "" +"ファイル %1 㨠%2 ã®ãƒ†ã‚­ã‚¹ãƒˆã¯åŒã˜ã§ã™ãŒã€ãƒã‚¤ãƒŠãƒªçš„ã«ç­‰ã—ãã‚ã‚Šã¾ã›ã‚“。\n" + +#: pdiff.cpp:530 +msgid "" +"Some inputfiles don't seem to be pure textfiles.\n" +"Note that the KDiff3-merge was not meant for binary data.\n" +"Continue at your own risk." +msgstr "" +"入力ファイルã®ã„ãã¤ã‹ã¯ãƒ†ã‚­ã‚¹ãƒˆãƒ•ã‚¡ã‚¤ãƒ«ã§ã¯ãªã„よã†ã§ã™\n" +"KDiff3 マージã¯ãƒã‚¤ãƒŠãƒªãƒ‡ãƒ¼ã‚¿ã‚’æ„図ã—ãŸã‚‚ã®ã§ã¯ãªã„ã“ã¨ã«æ³¨æ„ã—ã¦ãã ã•ã„\n" +"自己責任ã§ç¶šè¡Œã—ã¦ãã ã•ã„" + +#: pdiff.cpp:979 +msgid "Abort" +msgstr "中止" + +#: pdiff.cpp:985 pdiff.cpp:1073 +msgid "Opening files..." +msgstr "ファイルを開ã„ã¦ã„ã¾ã™..." + +#: pdiff.cpp:1050 pdiff.cpp:1121 +msgid "File open error" +msgstr "ファイルオープンエラー" + +#: pdiff.cpp:1153 +msgid "Cutting selection..." +msgstr "é¸æŠžç¯„囲を切りå–ã‚Š..." + +#: pdiff.cpp:1174 +msgid "Copying selection to clipboard..." +msgstr "é¸æŠžç¯„囲をクリップボードã«ã‚³ãƒ”ー..." + +#: pdiff.cpp:1190 +msgid "Inserting clipboard contents..." +msgstr "クリップボードã®å†…容を挿入..." + +#: pdiff.cpp:1713 +msgid "Save && Continue" +msgstr "ä¿å­˜/続行" + +#: pdiff.cpp:1713 +msgid "Continue Without Saving" +msgstr "ä¿å­˜ã—ãªã„ã§ç¶šè¡Œ" + +#: pdiff.cpp:1920 +msgid "Search complete." +msgstr "検索完了" + +#: pdiff.cpp:1920 +msgid "Search Complete" +msgstr "検索完了" + +#: pdiff.cpp:2144 +msgid "Nothing is selected in either diff input window." +msgstr "" + +#: pdiff.cpp:2144 +#, fuzzy +msgid "Error while adding manual diff range" +msgstr "ディレクトリ作æˆä¸­ã«ã‚¨ãƒ©ãƒ¼" + +#. i18n: file kdiff3_part.rc line 4 +#: rc.cpp:3 +#, no-c-format +msgid "&KDiff3" +msgstr "KDiff3(&K)" + +#. i18n: file kdiff3_part.rc line 13 +#: rc.cpp:6 +#, no-c-format +msgid "Configure KDiff3" +msgstr "KDiff3 を設定" + +#. i18n: file kdiff3_shell.rc line 7 +#: rc.cpp:15 +#, no-c-format +msgid "&Directory" +msgstr "ディレクトリ(&D)" + +#. i18n: file kdiff3_shell.rc line 30 +#: rc.cpp:18 +#, no-c-format +msgid "Current Item Merge Operation" +msgstr "ç¾åœ¨ã®é …ç›®ã®ãƒžãƒ¼ã‚¸æ“作" + +#. i18n: file kdiff3_shell.rc line 38 +#: rc.cpp:21 +#, no-c-format +msgid "Current Item Sync Operation" +msgstr "ç¾åœ¨ã®é …ç›®ã®åŒæœŸæ“作" + +#. i18n: file kdiff3_shell.rc line 50 +#: rc.cpp:24 +#, no-c-format +msgid "&Movement" +msgstr "移動(&M)" + +#. i18n: file kdiff3_shell.rc line 61 +#: rc.cpp:27 +#, no-c-format +msgid "D&iffview" +msgstr "Diffビュー(&I)" + +#. i18n: file kdiff3_shell.rc line 73 +#: rc.cpp:30 +#, no-c-format +msgid "&Merge" +msgstr "マージ(&M)" + +#. i18n: file kdiff3_shell.rc line 95 +#: rc.cpp:33 +#, no-c-format +msgid "&Window" +msgstr "ウィンドウ(&W)" + +#: smalldialogs.cpp:53 +msgid "A (Base):" +msgstr "A (ベース):" + +#: smalldialogs.cpp:59 smalldialogs.cpp:75 smalldialogs.cpp:91 +#: smalldialogs.cpp:134 +msgid "File..." +msgstr "ファイル..." + +#: smalldialogs.cpp:61 smalldialogs.cpp:77 smalldialogs.cpp:93 +#: smalldialogs.cpp:136 +msgid "Dir..." +msgstr "ディレクトリ..." + +#: smalldialogs.cpp:86 +msgid "C (Optional):" +msgstr "C (オプション):" + +#: smalldialogs.cpp:108 +msgid "Swap/Copy Names ..." +msgstr "åå‰ã®äº¤æ›/コピー..." + +#: smalldialogs.cpp:114 smalldialogs.cpp:115 smalldialogs.cpp:116 +msgid "Swap %1<->%2" +msgstr "äº¤æ› %1<->%2" + +#: smalldialogs.cpp:117 smalldialogs.cpp:118 smalldialogs.cpp:119 +msgid "Copy %1->Output" +msgstr "コピー %1->出力" + +#: smalldialogs.cpp:120 smalldialogs.cpp:121 smalldialogs.cpp:122 +msgid "Swap %1<->Output" +msgstr "äº¤æ› %1<->出力" + +#: smalldialogs.cpp:129 +msgid "Output (optional):" +msgstr "出力 (オプション):" + +#: smalldialogs.cpp:158 +msgid "Configure..." +msgstr "設定..." + +#: smalldialogs.cpp:347 +msgid "Search text:" +msgstr "検索テキスト:" + +#: smalldialogs.cpp:354 +msgid "Case sensitive" +msgstr "大文字ã¨å°æ–‡å­—を区別" + +#: smalldialogs.cpp:357 +msgid "Search A" +msgstr "A を検索" + +#: smalldialogs.cpp:362 +msgid "Search B" +msgstr "B を検索" + +#: smalldialogs.cpp:367 +msgid "Search C" +msgstr "C を検索" + +#: smalldialogs.cpp:372 +msgid "Search output" +msgstr "検索出力" + +#: smalldialogs.cpp:377 +msgid "&Search" +msgstr "検索(&S)" + +#: smalldialogs.cpp:394 +msgid "Regular Expression Tester" +msgstr "" + +#: smalldialogs.cpp:405 +msgid "Example auto merge line:" +msgstr "" + +#: smalldialogs.cpp:407 +msgid "For auto merge test copy a line as used in your files." +msgstr "" + +#: smalldialogs.cpp:413 smalldialogs.cpp:442 smalldialogs.cpp:479 +msgid "Match result:" +msgstr "" + +#: smalldialogs.cpp:432 +msgid "Example history start line (with leading comment):" +msgstr "" + +#: smalldialogs.cpp:435 +msgid "" +"Copy a history start line as used in your files,\n" +"including the leading comment." +msgstr "" + +#: smalldialogs.cpp:461 +msgid "History sort key order:" +msgstr "" + +#: smalldialogs.cpp:469 +msgid "Example history entry start line (without leading comment):" +msgstr "" + +#: smalldialogs.cpp:471 +msgid "" +"Copy a history entry start line as used in your files,\n" +"but omit the leading comment." +msgstr "" + +#: smalldialogs.cpp:486 +msgid "Sort key result:" +msgstr "" + +#: smalldialogs.cpp:537 smalldialogs.cpp:547 smalldialogs.cpp:568 +msgid "Match success." +msgstr "" + +#: smalldialogs.cpp:541 smalldialogs.cpp:551 smalldialogs.cpp:574 +#, fuzzy +msgid "Match failed." +msgstr "ä¿å­˜ã«å¤±æ•—" + +#: smalldialogs.cpp:559 +msgid "Opening and closing parentheses don't match in regular expression." +msgstr "" + +#~ msgid "Diff and Merge" +#~ msgstr "Diff/マージ" + +#, fuzzy +#~ msgid "Save Directory Merge State ..." +#~ msgstr "ディレクトリマージ" + +#, fuzzy +#~ msgid "Load Directory Merge State ..." +#~ msgstr "ディレクトリマージ" diff --git a/po/ka.po b/po/ka.po new file mode 100644 index 0000000..ae91c69 --- /dev/null +++ b/po/ka.po @@ -0,0 +1,2526 @@ +# translation of kdiff3.po to Georgian +# +# Rusudan Tsiskreli , 2006. +# რუსუდáƒáƒœ ცისკრელი , 2006. +msgid "" +msgstr "" +"Project-Id-Version: kdiff3\n" +"POT-Creation-Date: 2006-11-05 08:45+0100\n" +"PO-Revision-Date: 2006-03-28 01:44+0400\n" +"Last-Translator: Giasher \n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: KBabel 1.11.2\n" + +#: _translatorinfo.cpp:1 +msgid "" +"_: NAME OF TRANSLATORS\n" +"Your names" +msgstr "რუსუდáƒáƒœ ცისკრელი" + +#: _translatorinfo.cpp:3 +msgid "" +"_: EMAIL OF TRANSLATORS\n" +"Your emails" +msgstr "tsiskreli@gmail.com" + +#: diff.cpp:246 +msgid "Writing clipboard data to temp file failed." +msgstr "ბუფერის მáƒáƒœáƒáƒªáƒ”მის დრáƒáƒ”ბით ფáƒáƒ˜áƒšáƒ¨áƒ˜ ჩáƒáƒ¬áƒ”რრვერ შედგáƒ." + +#: diff.cpp:250 +msgid "From Clipboard" +msgstr "გáƒáƒªáƒ•áƒšáƒ˜áƒ¡ ბუფერიდáƒáƒœ " + +#: diff.cpp:491 +msgid "" +"Preprocessing possibly failed. Check this command:\n" +"\n" +" %1\n" +"\n" +"The preprocessing command will be disabled now." +msgstr "" +"გáƒáƒ’რძელებრშესáƒáƒ«áƒšáƒáƒ ვერ შედგრშემáƒáƒ¬áƒ›áƒ”ბáƒ. შეáƒáƒ›áƒáƒ¬áƒ›áƒ”თ ეს ბრძáƒáƒœáƒ”ბáƒ:\n" +"\n" +" %1\n" +"\n" +"გáƒáƒ’რძელების ბრძáƒáƒœáƒ”ბრáƒáƒ®áƒšáƒ გáƒáƒ›áƒáƒ˜áƒ áƒ—ვებáƒ." + +#: diff.cpp:526 +msgid "" +"The line-matching-preprocessing possibly failed. Check this command:\n" +"\n" +" %1\n" +"\n" +"The line-matching-preprocessing command will be disabled now." +msgstr "" +"ხáƒáƒ–თრდáƒáƒ›áƒ—ხვევრáƒáƒšáƒ‘áƒáƒ— ვერ შედგáƒ. შეáƒáƒ›áƒáƒ¬áƒ›áƒ”თ ეს ბრძáƒáƒœáƒ”ბáƒ:\n" +"\n" +" %1\n" +"\n" +"ხáƒáƒ–თრდáƒáƒ›áƒ—ხვევრáƒáƒ®áƒšáƒ გáƒáƒ›áƒáƒ˜áƒ áƒ—ვებáƒ." + +#: diff.cpp:1631 diff.cpp:1645 +msgid "" +"Data loss error:\n" +"If it is reproducable please contact the author.\n" +msgstr "" +"მáƒáƒœáƒáƒªáƒ”მების დáƒáƒ™áƒáƒ áƒ’ვის შეცდáƒáƒ›áƒ:\n" +"თუ ეს მეáƒáƒ áƒ“ებáƒ, გთხáƒáƒ•áƒ— დáƒáƒ£áƒ™áƒáƒ•áƒ¨áƒ˜áƒ áƒ“ეთ áƒáƒ•áƒ¢áƒáƒ áƒ¡.\n" + +#: diff.cpp:1633 diff.cpp:1647 +msgid "Severe Internal Error" +msgstr "მკáƒáƒªáƒ áƒ˜ შინáƒáƒ’áƒáƒœáƒ˜ შეცდáƒáƒ›áƒ" + +#: difftextwindow.cpp:1643 kdiff3.cpp:753 +#, fuzzy +msgid "Top line" +msgstr "ზედრხáƒáƒ–ი %1" + +#: difftextwindow.cpp:1653 +msgid "End" +msgstr "დáƒáƒ¡áƒáƒ¡áƒ áƒ£áƒšáƒ˜" + +#: directorymergewindow.cpp:142 +msgid "Mix of links and normal files." +msgstr "ბმულების დრჩáƒáƒ£áƒšáƒ”ბრივი ფáƒáƒ˜áƒšáƒ”ბის ნáƒáƒ áƒ”ვი." + +#: directorymergewindow.cpp:149 +msgid "Link: " +msgstr "ბმული: " + +#: directorymergewindow.cpp:157 +msgid "Size. " +msgstr "ზáƒáƒ›áƒ. " + +#: directorymergewindow.cpp:170 +msgid "Date & Size: " +msgstr "თáƒáƒ áƒ˜áƒ¦áƒ˜ დრზáƒáƒ›áƒ: " + +#: directorymergewindow.cpp:179 directorymergewindow.cpp:185 +msgid "Creating temp copy of %1 failed." +msgstr "%1-ს დრáƒáƒ”ბითი áƒáƒ¡áƒšáƒ˜áƒ¡ შექმნრვერ შედგáƒ." + +#: directorymergewindow.cpp:196 directorymergewindow.cpp:204 +msgid "Opening %1 failed." +msgstr "%1-ს გáƒáƒ®áƒ¡áƒœáƒ ვერ შედგáƒ." + +#: directorymergewindow.cpp:208 +msgid "Comparing file..." +msgstr "ფáƒáƒ˜áƒšáƒ”ბის შედáƒáƒ áƒ”ბáƒ..." + +#: directorymergewindow.cpp:218 directorymergewindow.cpp:224 +#, c-format +msgid "Error reading from %1" +msgstr "%1-ს წáƒáƒ™áƒ˜áƒ—ხვის შეცდáƒáƒ›áƒ" + +#: directorymergewindow.cpp:282 +msgid "Name" +msgstr "სáƒáƒ®áƒ”ლი" + +#: directorymergewindow.cpp:286 +msgid "Operation" +msgstr "áƒáƒžáƒ”რáƒáƒªáƒ˜áƒ" + +#: directorymergewindow.cpp:287 +msgid "Status" +msgstr "სტáƒáƒ¢áƒ£áƒ¡áƒ˜" + +#: directorymergewindow.cpp:288 +msgid "Unsolved" +msgstr "გáƒáƒ“áƒáƒ£áƒ­áƒ áƒ”ლი" + +#: directorymergewindow.cpp:289 +msgid "Solved" +msgstr "გáƒáƒ“áƒáƒ­áƒ áƒ˜áƒšáƒ˜" + +#: directorymergewindow.cpp:290 +msgid "Nonwhite" +msgstr "áƒáƒ áƒáƒ—ეთრი" + +#: directorymergewindow.cpp:291 +msgid "White" +msgstr "თეთრი" + +#: directorymergewindow.cpp:319 +msgid "" +"You are currently doing a directory merge. Are you sure, you want to abort the " +"merge and rescan the directory?" +msgstr "" +"თქვენ áƒáƒ®áƒšáƒ დირექტáƒáƒ áƒ˜áƒ”ბის შერწყმáƒáƒ¡ áƒáƒ®áƒáƒ áƒªáƒ˜áƒ”ლებთ.დáƒáƒ áƒ¬áƒ›áƒ£áƒœáƒ”ბული ხáƒáƒ áƒ— რáƒáƒ› გსურთ " +"შერწყმის შეწყვეტრდრდირექტáƒáƒ áƒ˜áƒ˜áƒ¡ თáƒáƒ•áƒ˜áƒ“áƒáƒœ სკáƒáƒœáƒ˜áƒ áƒ”ბáƒ?" + +#: directorymergewindow.cpp:320 directorymergewindow.cpp:2868 +msgid "Rescan" +msgstr "თáƒáƒ•áƒ˜áƒ“áƒáƒœ სკáƒáƒœáƒ˜áƒ áƒ”ბáƒ" + +#: directorymergewindow.cpp:320 kdiff3.cpp:603 pdiff.cpp:979 +msgid "Continue Merging" +msgstr "შერწყმის გáƒáƒ’რძელებáƒ" + +#: directorymergewindow.cpp:462 +msgid "Opening of directories failed:" +msgstr "დირექტáƒáƒ áƒ˜áƒ˜áƒ¡ გáƒáƒ®áƒ¡áƒœáƒ ვერ შედგáƒ:" + +#: directorymergewindow.cpp:465 +msgid "" +"Dir A \"%1\" does not exist or is not a directory.\n" +msgstr "" +"Dir A \"%1\" áƒáƒ  áƒáƒ áƒ¡áƒ”ბáƒáƒ‘ს áƒáƒœ áƒáƒ  áƒáƒ áƒ˜áƒ¡ დირექტáƒáƒ áƒ˜áƒ.\n" + +#: directorymergewindow.cpp:468 +msgid "" +"Dir B \"%1\" does not exist or is not a directory.\n" +msgstr "" +"Dir B \"%1\" áƒáƒ  áƒáƒ áƒ¡áƒ”ბáƒáƒ‘ს áƒáƒœ áƒáƒ  áƒáƒ áƒ˜áƒ¡ დირექტáƒáƒ áƒ˜áƒ.\n" + +#: directorymergewindow.cpp:471 +msgid "" +"Dir C \"%1\" does not exist or is not a directory.\n" +msgstr "" +"Dir C \"%1\" áƒáƒ  áƒáƒ áƒ¡áƒ”ბáƒáƒ‘ს áƒáƒœ áƒáƒ  áƒáƒ áƒ˜áƒ¡ დირექტáƒáƒ áƒ˜áƒ.\n" + +#: directorymergewindow.cpp:473 +msgid "Directory Open Error" +msgstr "დირექტáƒáƒ áƒ˜áƒ˜áƒ¡ გáƒáƒ®áƒ¡áƒœáƒ˜áƒ¡ შეცდáƒáƒ›áƒ" + +#: directorymergewindow.cpp:481 +msgid "" +"The destination directory must not be the same as A or B when three directories " +"are merged.\n" +"Check again before continuing." +msgstr "" +"დáƒáƒœáƒ˜áƒ¨áƒœáƒ£áƒšáƒ”ბის დირექტáƒáƒ áƒ˜áƒ áƒáƒ  უნდრიყáƒáƒ¡ იგივე A áƒáƒœ B რáƒáƒ“ესáƒáƒª ხდებრსáƒáƒ›áƒ˜ " +"დირექტáƒáƒ áƒ˜áƒ˜áƒ¡ შერწყმáƒ.\n" +"გáƒáƒ’რძელებáƒáƒ›áƒ“ე კიდევ შეáƒáƒ›áƒáƒ¬áƒ›áƒ”თ." + +#: directorymergewindow.cpp:483 +msgid "Parameter Warning" +msgstr "გáƒáƒ¤áƒ áƒ—ხილების პáƒáƒ áƒáƒ›áƒ”ტრი" + +#: directorymergewindow.cpp:488 +msgid "Scanning directories..." +msgstr "დირექტáƒáƒ áƒ˜áƒ”ბის სკáƒáƒœáƒ˜áƒ áƒ”ბáƒ..." + +#: directorymergewindow.cpp:537 +msgid "Reading Directory A" +msgstr "დირექტáƒáƒ áƒ˜áƒ A-ს წáƒáƒ™áƒ˜áƒ—ხვáƒ" + +#: directorymergewindow.cpp:559 +msgid "Reading Directory B" +msgstr "დირექტáƒáƒ áƒ˜áƒ B-ს წáƒáƒ™áƒ˜áƒ—ხვáƒ" + +#: directorymergewindow.cpp:581 +msgid "Reading Directory C" +msgstr "დირექტáƒáƒ áƒ˜áƒ C-ს წáƒáƒ™áƒ˜áƒ—ხვáƒ" + +#: directorymergewindow.cpp:607 +msgid "Some subdirectories were not readable in" +msgstr "ზáƒáƒ’იერთი ქვედირექტáƒáƒ áƒ˜áƒ˜áƒ¡ წáƒáƒ™áƒ˜áƒ—ხვრვერ გáƒáƒœáƒ®áƒáƒ áƒªáƒ˜áƒ”ლდáƒ" + +#: directorymergewindow.cpp:612 +msgid "Check the permissions of the subdirectories." +msgstr "ქვედირექტáƒáƒ áƒ˜áƒ”ბის უფლებების შემáƒáƒ¬áƒ›áƒ”ბáƒ." + +#: directorymergewindow.cpp:646 kdiff3.cpp:552 kdiff3.cpp:636 kdiff3.cpp:661 +#: kdiff3.cpp:934 kdiff3.cpp:955 pdiff.cpp:1059 pdiff.cpp:1131 pdiff.cpp:1169 +#: pdiff.cpp:1185 pdiff.cpp:1215 pdiff.cpp:1226 +msgid "Ready." +msgstr "მზáƒáƒ“." + +#: directorymergewindow.cpp:660 +msgid "Directory Comparison Status" +msgstr "დირექტáƒáƒ áƒ˜áƒ˜áƒ¡ შედáƒáƒ áƒ”ბის სტáƒáƒ¢áƒ£áƒ¡áƒ˜" + +#: directorymergewindow.cpp:661 +msgid "Number of subdirectories:" +msgstr "ქვედირექტáƒáƒ áƒ˜áƒ”ბის რáƒáƒáƒ“ენáƒáƒ‘áƒ:" + +#: directorymergewindow.cpp:662 +msgid "Number of equal files:" +msgstr "ტáƒáƒšáƒ˜ ფáƒáƒ˜áƒšáƒ”ბის რáƒáƒáƒ“ენáƒáƒ‘áƒ:" + +#: directorymergewindow.cpp:663 +msgid "Number of different files:" +msgstr "გáƒáƒœáƒ¡áƒ®áƒ•áƒáƒ•áƒ”ბული ფáƒáƒ˜áƒšáƒ”ბის რáƒáƒáƒ“ენáƒáƒ‘áƒ:" + +#: directorymergewindow.cpp:666 +msgid "Number of manual merges:" +msgstr "ხელით შერწყმების რáƒáƒáƒ“ენáƒáƒ‘áƒ:" + +#: directorymergewindow.cpp:802 +msgid "This affects all merge operations." +msgstr "ეს მáƒáƒ¡áƒ“ის ყველრშერწყმის áƒáƒžáƒ”რáƒáƒªáƒ˜áƒáƒ¡." + +#: directorymergewindow.cpp:803 +msgid "Changing All Merge Operations" +msgstr "ყველრშერწყმის áƒáƒžáƒ”რáƒáƒªáƒ˜áƒ”ბის შეცვლáƒ" + +#: directorymergewindow.cpp:803 mergeresultwindow.cpp:287 +msgid "C&ontinue" +msgstr "&გáƒáƒ’რძელებáƒ" + +#: directorymergewindow.cpp:1169 +msgid "Processing " +msgstr "მიმდინáƒáƒ áƒ”áƒáƒ‘რ" + +#: directorymergewindow.cpp:1647 directorymergewindow.cpp:1653 +msgid "To do." +msgstr "გáƒáƒ¡áƒáƒ™áƒ”თებელი." + +#: directorymergewindow.cpp:1756 directorymergewindow.cpp:2899 +msgid "Copy A to B" +msgstr "A-ს áƒáƒ¡áƒšáƒ˜ B-ში" + +#: directorymergewindow.cpp:1757 directorymergewindow.cpp:2900 +msgid "Copy B to A" +msgstr "B-ს áƒáƒ¡áƒšáƒ˜ A-ში" + +#: directorymergewindow.cpp:1758 directorymergewindow.cpp:2901 +msgid "Delete A" +msgstr "A-ს წáƒáƒ¨áƒšáƒ" + +#: directorymergewindow.cpp:1759 directorymergewindow.cpp:2902 +msgid "Delete B" +msgstr "B-ს წáƒáƒ¨áƒšáƒ" + +#: directorymergewindow.cpp:1760 +msgid "Delete A & B" +msgstr "A დრB-ს წáƒáƒ¨áƒšáƒ" + +#: directorymergewindow.cpp:1761 directorymergewindow.cpp:2904 +msgid "Merge to A" +msgstr "შერწყმრA-სკენ" + +#: directorymergewindow.cpp:1762 directorymergewindow.cpp:2905 +msgid "Merge to B" +msgstr "შერწყმრB-სკენ" + +#: directorymergewindow.cpp:1763 +msgid "Merge to A & B" +msgstr "შერწყმრA დრB-სკენ" + +#: directorymergewindow.cpp:1767 directorymergewindow.cpp:2896 +msgid "Delete (if exists)" +msgstr "წáƒáƒ¨áƒšáƒ (თუ áƒáƒ áƒ¡áƒ”ბáƒáƒ‘ს)" + +#: directorymergewindow.cpp:1768 directorymergewindow.cpp:1769 +#: directorymergewindow.cpp:2895 optiondialog.cpp:809 smalldialogs.cpp:102 +msgid "Merge" +msgstr "შერწყმáƒ" + +#: directorymergewindow.cpp:1768 directorymergewindow.cpp:1769 +msgid "Merge (manual)" +msgstr "შერწყმრ(ხელით)" + +#: directorymergewindow.cpp:1770 +msgid "Error: Conflicting File Types" +msgstr "შეცდáƒáƒ›áƒ: კáƒáƒœáƒ¤áƒšáƒ˜áƒ¥áƒ¢áƒ£áƒ  ფáƒáƒ˜áƒšáƒ—რტიპები" + +#: directorymergewindow.cpp:1771 +msgid "Error: Dates are equal but files are not." +msgstr "შეცდáƒáƒ›áƒ: თáƒáƒ áƒ˜áƒ¦áƒ”ბი იდენტურიáƒ, მáƒáƒ áƒ ფáƒáƒ˜áƒšáƒ”ბი áƒáƒ áƒ." + +#: directorymergewindow.cpp:1795 directorymergewindow.cpp:1824 +#: directorymergewindow.cpp:1849 +msgid "This operation is currently not possible." +msgstr "ეს áƒáƒžáƒ”რáƒáƒªáƒ˜áƒ áƒáƒ®áƒšáƒ შეუძლებელიáƒ." + +#: directorymergewindow.cpp:1795 directorymergewindow.cpp:1824 +#: directorymergewindow.cpp:1849 directorymergewindow.cpp:2106 +msgid "Operation Not Possible" +msgstr "áƒáƒžáƒ”რáƒáƒªáƒ˜áƒ შეუძლებელიáƒ" + +#: directorymergewindow.cpp:1888 +msgid "" +"This should never happen: \n" +"\n" +"mergeResultSaved: m_pMFI=0\n" +"\n" +"If you know how to reproduce this, please contact the program author." +msgstr "" +"ეს áƒáƒ áƒáƒ¡áƒ“რáƒáƒ¡ áƒáƒ  უნდრმáƒáƒ›áƒ®áƒ“áƒáƒ áƒ˜áƒ§áƒ: \n" +"\n" +"mergeResultSaved: m_pMFI=0\n" +"\n" +"თუ იცით რáƒáƒ’áƒáƒ  გáƒáƒœáƒáƒ®áƒáƒ áƒªáƒ˜áƒáƒšáƒáƒ— ეს, გთხáƒáƒ•áƒ— დáƒáƒ£áƒ™áƒáƒ•áƒ¡áƒ˜áƒ áƒ“ეთ პრáƒáƒ’რáƒáƒ›áƒ˜áƒ¡ áƒáƒ•áƒ¢áƒáƒ áƒ¡." + +#: directorymergewindow.cpp:1888 +msgid "Program Error" +msgstr "პრáƒáƒ’რáƒáƒ›áƒ˜áƒ¡ შეცდáƒáƒ›áƒ" + +#: directorymergewindow.cpp:1899 +msgid "" +"An error occurred while copying.\n" +msgstr "" +"áƒáƒ¡áƒšáƒ˜áƒ¡ გáƒáƒ™áƒ”თებისáƒáƒ¡ შეცდáƒáƒ›áƒ მáƒáƒ®áƒ“áƒ.\n" + +#: directorymergewindow.cpp:1900 directorymergewindow.cpp:2306 +msgid "Merge Error" +msgstr "შერწმის შეცდáƒáƒ›áƒ" + +#: directorymergewindow.cpp:1905 directorymergewindow.cpp:2311 +msgid "Error." +msgstr "შეცდáƒáƒ›áƒ." + +#: directorymergewindow.cpp:1910 directorymergewindow.cpp:2202 +#: directorymergewindow.cpp:2242 +msgid "Done." +msgstr "შესრულებულიáƒ." + +#: directorymergewindow.cpp:1933 +msgid "Not saved." +msgstr "áƒáƒ áƒáƒ შენáƒáƒ®áƒ£áƒšáƒ˜." + +#: directorymergewindow.cpp:1968 +msgid "Unknown merge operation. (This must never happen!)" +msgstr "შერწყმის უცნáƒáƒ‘ი áƒáƒžáƒ”რáƒáƒªáƒ˜áƒ. (ეს áƒáƒ áƒáƒ¡áƒ“რáƒáƒ¡ áƒáƒ  უნდრმáƒáƒ›áƒ®áƒ“áƒáƒ áƒ˜áƒ§áƒ!)" + +#: directorymergewindow.cpp:2000 +msgid "Unknown merge operation." +msgstr "შერწყმის უცნáƒáƒ‘ი áƒáƒžáƒ”რáƒáƒªáƒ˜áƒ." + +#: directorymergewindow.cpp:2015 +msgid "" +"The merge is about to begin.\n" +"\n" +"Choose \"Do it\" if you have read the instructions and know what you are " +"doing.\n" +"Choosing \"Simulate it\" will tell you what would happen.\n" +"\n" +"Be aware that this program still has beta status and there is NO WARRANTY " +"whatsoever! Make backups of your vital data!" +msgstr "" +"შერწყმრსáƒáƒªáƒáƒ დáƒáƒ˜áƒ¬áƒ§áƒ”ბáƒ.\n" +"\n" +"áƒáƒ˜áƒ áƒ©áƒ˜áƒ”თ \"გáƒáƒ™áƒ”თებáƒ\" თუ წáƒáƒ˜áƒ™áƒ˜áƒ—ხეთ ინსტრუქცირდრიცით რáƒáƒ¡ áƒáƒ™áƒ”ტებთ.\n" +"\"სიმულáƒáƒªáƒ˜áƒ˜áƒ¡\" áƒáƒ áƒ©áƒ”ვით გáƒáƒ˜áƒ’ებტ რრმáƒáƒ®áƒ“ებáƒ.\n" +"\n" +"გáƒáƒ˜áƒ—ვáƒáƒšáƒ˜áƒ¡áƒ¬áƒ˜áƒœáƒ”თ ეს პრáƒáƒ’რáƒáƒ›áƒ ჯერ კიდევ ბეტáƒáƒ დრáƒáƒ áƒáƒœáƒáƒ”რი გáƒáƒ áƒáƒœáƒ¢áƒ˜áƒ áƒáƒ  áƒáƒ áƒ¡áƒ”ბáƒáƒ‘ს! " +"სáƒáƒ¡áƒ˜áƒªáƒáƒªáƒ®áƒšáƒ მნიშვნელáƒáƒ‘ის მáƒáƒœáƒáƒªáƒ”მების სáƒáƒ áƒ”ზერვრáƒáƒ¡áƒšáƒ”ბი გáƒáƒáƒ™áƒ”თეთ!" + +#: directorymergewindow.cpp:2020 +msgid "Starting Merge" +msgstr "შერწყმის დáƒáƒ¬áƒ§áƒ”ბáƒ" + +#: directorymergewindow.cpp:2020 +msgid "Do It" +msgstr "გáƒáƒáƒ™áƒ”თე" + +#: directorymergewindow.cpp:2020 +msgid "Simulate It" +msgstr "სიმულáƒáƒªáƒ˜áƒ" + +#: directorymergewindow.cpp:2046 +msgid "" +"The highlighted item has a different type in the different directories. Select " +"what to do." +msgstr "" +"მáƒáƒ áƒ™áƒ˜áƒ áƒ”ბული ელემენტი სხვáƒáƒ“áƒáƒ¡áƒ®áƒ•áƒ დირექტáƒáƒ áƒ˜áƒ”ბში სხვáƒáƒ“áƒáƒ¡áƒ®áƒ•áƒáƒ. áƒáƒ˜áƒ áƒ©áƒ˜áƒ”თ რრქნáƒáƒ—." + +#: directorymergewindow.cpp:2055 +msgid "" +"The modification dates of the file are equal but the files are not. Select what " +"to do." +msgstr "" +"ფáƒáƒ˜áƒšáƒ˜áƒ¡ მáƒáƒ“იფიკáƒáƒªáƒ˜áƒ˜áƒ¡ თáƒáƒ áƒ˜áƒ¦áƒ”ბი იდენტურირმáƒáƒ áƒ ფáƒáƒ˜áƒšáƒ”ბი áƒáƒ áƒ. áƒáƒ˜áƒ áƒ©áƒ˜áƒ”თ რრგáƒáƒáƒ™áƒ”თáƒáƒ—." + +#: directorymergewindow.cpp:2106 +msgid "" +"This operation is currently not possible because directory merge is currently " +"running." +msgstr "" +"áƒáƒžáƒ”რáƒáƒªáƒ˜áƒ áƒáƒ®áƒšáƒ შეუძლებელიáƒ, რáƒáƒ“გáƒáƒœ დირექტáƒáƒ áƒ˜áƒáƒ—რშერწყმრუკვე გáƒáƒ¨áƒ•áƒ”ბულიáƒ." + +#: directorymergewindow.cpp:2166 +msgid "" +"There was an error in the last step.\n" +"Do you want to continue with the item that caused the error or do you want to " +"skip this item?" +msgstr "" +"უკáƒáƒœáƒáƒ¡áƒ™áƒœáƒ”ლ ნáƒáƒ‘იჯში შეცდáƒáƒ›áƒ მáƒáƒ®áƒ“áƒ.\n" +"გსურთ áƒáƒ› ელემენტით გáƒáƒ’რძელებáƒ, რáƒáƒ›áƒšáƒ˜áƒ¡ გáƒáƒ›áƒáƒª გდებრშეცდáƒáƒ›áƒ, თუ გსურთ გáƒáƒ“áƒáƒáƒ®áƒ¢áƒ”თ " +"მáƒáƒ¡?" + +#: directorymergewindow.cpp:2168 +msgid "Continue merge after an error" +msgstr "შეცდáƒáƒ›áƒ˜áƒ¡ შემდეგ შერწმის გáƒáƒ’რძელებáƒ" + +#: directorymergewindow.cpp:2168 +msgid "Continue With Last Item" +msgstr "უკáƒáƒœáƒáƒ¡áƒ™áƒœáƒ”ლი ელემენტით გáƒáƒ’რძელებáƒ" + +#: directorymergewindow.cpp:2168 +msgid "Skip Item" +msgstr "ელემენტის გáƒáƒªáƒ“ენáƒ" + +#: directorymergewindow.cpp:2202 +msgid "Skipped." +msgstr "გáƒáƒªáƒ“ენილიáƒ." + +#: directorymergewindow.cpp:2209 directorymergewindow.cpp:2435 +msgid "In progress..." +msgstr "მიმდინáƒáƒ áƒ”áƒáƒ‘ს..." + +#: directorymergewindow.cpp:2257 +msgid "Merge operation complete." +msgstr "შერწყმის áƒáƒžáƒ”რáƒáƒªáƒ˜áƒ დáƒáƒ¡áƒ áƒ£áƒšáƒ“áƒ." + +#: directorymergewindow.cpp:2257 directorymergewindow.cpp:2260 +msgid "Merge Complete" +msgstr "შერწყმრდáƒáƒ¡áƒ áƒ£áƒšáƒ“áƒ" + +#: directorymergewindow.cpp:2269 +msgid "" +"Simulated merge complete: Check if you agree with the proposed operations." +msgstr "" +"შერწყმის სიმულáƒáƒªáƒ˜áƒ დáƒáƒ¡áƒ áƒ£áƒšáƒ“áƒ: შეáƒáƒ›áƒáƒ¬áƒ›áƒ”თ თუ ეთáƒáƒœáƒ®áƒ›áƒ”ბით შემáƒáƒ—áƒáƒ•áƒáƒ–ებულ áƒáƒžáƒ”რáƒáƒªáƒ˜áƒ”ბს." + +#: directorymergewindow.cpp:2305 +msgid "" +"An error occurred. Press OK to see detailed information.\n" +msgstr "" +"შეცდáƒáƒ›áƒ მáƒáƒ®áƒ“áƒ. დáƒáƒáƒ¬áƒ™áƒáƒžáƒ£áƒœáƒ”თ OK დეტáƒáƒšáƒ£áƒ áƒ˜ ცნáƒáƒ‘ების სáƒáƒœáƒáƒ®áƒáƒ•áƒáƒ“.\n" + +#: directorymergewindow.cpp:2348 +msgid "Error: While deleting %1: Creating backup failed." +msgstr "შეცდáƒáƒ›áƒ: %1-ს წáƒáƒ¡áƒšáƒ˜áƒ¡ დრáƒáƒ¡: სáƒáƒ áƒ”ზერვრáƒáƒ¡áƒšáƒ˜áƒ¡ შექმნრვერ შედგáƒ." + +#: directorymergewindow.cpp:2355 +msgid "delete directory recursively( %1 )" +msgstr "დირექტáƒáƒ áƒ˜áƒ˜áƒ¡ რეკურსიულáƒáƒ“ წáƒáƒ¨áƒšáƒ( %1 )" + +#: directorymergewindow.cpp:2357 +msgid "delete( %1 )" +msgstr "წáƒáƒ¨áƒšáƒ( %1 )" + +#: directorymergewindow.cpp:2372 +msgid "Error: delete dir operation failed while trying to read the directory." +msgstr "შეცდáƒáƒ›áƒ: დირექტáƒáƒ áƒ˜áƒ˜áƒ¡ წáƒáƒ¨áƒšáƒ˜áƒ¡ áƒáƒžáƒ”რáƒáƒªáƒ˜áƒ ვერ შედგრწáƒáƒ™áƒ˜áƒ—ხვის მცდელáƒáƒ‘ისáƒáƒ¡." + +#: directorymergewindow.cpp:2391 +msgid "Error: rmdir( %1 ) operation failed." +msgstr "შეცდáƒáƒ›áƒ: rmdir( %1 ) áƒáƒžáƒ”რáƒáƒªáƒ˜áƒ ვერ შედგáƒ." + +#: directorymergewindow.cpp:2401 +msgid "Error: delete operation failed." +msgstr "შეცდáƒáƒ›áƒ: წáƒáƒ¨áƒšáƒ˜áƒ¡ áƒáƒžáƒžáƒ”რáƒáƒªáƒ˜áƒ ვერ შედგáƒ." + +#: directorymergewindow.cpp:2427 +msgid "manual merge( %1, %2, %3 -> %4)" +msgstr "ხელით შერწყმáƒ( %1, %2, %3 -> %4)" + +#: directorymergewindow.cpp:2430 +msgid "" +" Note: After a manual merge the user should continue by pressing F7." +msgstr "" +" გáƒáƒ˜áƒ—ვáƒáƒšáƒ˜áƒ¡áƒ¬áƒ˜áƒœáƒ”თ: ხელით შერწყმის შემდეგ მáƒáƒ›áƒ®áƒ›áƒáƒ áƒ”ბელმრუნდრგáƒáƒáƒ’რძელáƒáƒ¡ F7-ის " +"დáƒáƒ­áƒ”რით." + +#: directorymergewindow.cpp:2453 +msgid "Error: copy( %1 -> %2 ) failed.Deleting existing destination failed." +msgstr "" +"შეცდáƒáƒ›áƒ: áƒáƒ¡áƒšáƒ˜( %1 -> %2 ) ვერ შედგáƒ.áƒáƒ áƒ¡áƒ”ბული დáƒáƒœáƒ˜áƒ¨áƒœáƒ£áƒšáƒ”ბის ფáƒáƒ˜áƒšáƒ˜áƒ¡ წáƒáƒ¨áƒšáƒ ვერ " +"შედგáƒ." + +#: directorymergewindow.cpp:2463 +msgid "copyLink( %1 -> %2 )" +msgstr "copyLink( %1 -> %2 )" + +#: directorymergewindow.cpp:2474 +msgid "Error: copyLink failed: Remote links are not yet supported." +msgstr "" +"შეცდáƒáƒ›áƒ copyLink ვერ შედგáƒ: დáƒáƒ¨áƒáƒ áƒ”ბული ბმულები ჯერ áƒáƒ  áƒáƒ áƒ˜áƒ¡ მხáƒáƒ áƒ“áƒáƒ­áƒ”რილი." + +#: directorymergewindow.cpp:2480 +msgid "Error: copyLink failed." +msgstr "შეცდáƒáƒ›áƒ: copyLink ვერ შედგáƒ." + +#: directorymergewindow.cpp:2500 +msgid "copy( %1 -> %2 )" +msgstr "áƒáƒ¡áƒšáƒ˜( %1 -> %2 )" + +#: directorymergewindow.cpp:2526 +msgid "Error during rename( %1 -> %2 ): Cannot delete existing destination." +msgstr "" +"შეცდáƒáƒ›áƒ სáƒáƒ®áƒ”ლის გáƒáƒ“áƒáƒ áƒ¥áƒ›áƒ”ვისáƒáƒ¡( %1 -> %2 ): áƒáƒ áƒ¡áƒ”ბული დáƒáƒœáƒ˜áƒ¨áƒœáƒ£áƒšáƒ”ბის წáƒáƒ¨áƒšáƒ " +"შეუძლებელიáƒ." + +#: directorymergewindow.cpp:2532 +msgid "rename( %1 -> %2 )" +msgstr "rename( %1 -> %2 )" + +#: directorymergewindow.cpp:2541 +msgid "Error: Rename failed." +msgstr "შეცდáƒáƒ›áƒ: სáƒáƒ®áƒ”ლის გáƒáƒ“áƒáƒ áƒ¥áƒ›áƒ”ვრვერ შედგáƒ." + +#: directorymergewindow.cpp:2559 +msgid "Error during makeDir of %1. Cannot delete existing file." +msgstr "შეცდáƒáƒ›áƒ %1-ს makeDir-ის დრáƒáƒ¡. áƒáƒ áƒ¡áƒ”ბული ფáƒáƒ˜áƒšáƒ˜áƒ¡ წáƒáƒ¨áƒšáƒ შეუძლებელიáƒ," + +#: directorymergewindow.cpp:2575 +msgid "makeDir( %1 )" +msgstr "makeDir( %1 )" + +#: directorymergewindow.cpp:2585 +msgid "Error while creating directory." +msgstr "დირექტáƒáƒ áƒ˜áƒ˜áƒ¡ შექმნისáƒáƒ¡ შეცდáƒáƒ›áƒ." + +#: directorymergewindow.cpp:2608 directorymergewindow.cpp:2725 +msgid "Dest" +msgstr "Dest" + +#: directorymergewindow.cpp:2612 directorymergewindow.cpp:2650 +msgid "Dir" +msgstr "Dir" + +#: directorymergewindow.cpp:2613 +msgid "Type" +msgstr "ტიპი" + +#: directorymergewindow.cpp:2614 +msgid "Size" +msgstr "ზáƒáƒ›áƒ" + +#: directorymergewindow.cpp:2615 +msgid "Attr" +msgstr "Attr" + +#: directorymergewindow.cpp:2616 +msgid "Last Modification" +msgstr "უკáƒáƒœáƒáƒ¡áƒ™áƒœáƒ”ლáƒáƒ“ ჩáƒáƒ¡áƒ¬áƒáƒ áƒ”ბულიáƒ" + +#: directorymergewindow.cpp:2617 +msgid "Link-Destination" +msgstr "ბმულის დáƒáƒœáƒ˜áƒ¨áƒœáƒ£áƒšáƒ”ბáƒ" + +#: directorymergewindow.cpp:2667 +msgid "not available" +msgstr "ხელმიუწვდáƒáƒ›áƒ”ლიáƒ" + +#: directorymergewindow.cpp:2687 +msgid "A (Dest): " +msgstr "A (Dest): " + +#: directorymergewindow.cpp:2690 +msgid "A (Base): " +msgstr "A (ფუძე): " + +#: directorymergewindow.cpp:2696 +msgid "B (Dest): " +msgstr "B (Dest): " + +#: directorymergewindow.cpp:2704 +msgid "C (Dest): " +msgstr "C (Dest): " + +#: directorymergewindow.cpp:2710 +msgid "Dest: " +msgstr "Dest:" + +#: directorymergewindow.cpp:2775 +#, fuzzy +msgid "Save Directory Merge State As..." +msgstr "დირექტáƒáƒ áƒ˜áƒáƒ—რშერწყმáƒ" + +#: directorymergewindow.cpp:2862 +msgid "Start/Continue Directory Merge" +msgstr "დირექტáƒáƒ áƒ˜áƒ˜áƒ¡ შერწყმის დáƒáƒ¬áƒ§áƒ”ბáƒ/გáƒáƒ’რძელებáƒ" + +#: directorymergewindow.cpp:2863 +msgid "Run Operation for Current Item" +msgstr "მიმდინáƒáƒ áƒ” ელემენტიდáƒáƒœ áƒáƒžáƒ”რáƒáƒªáƒ˜áƒ˜áƒ¡ გáƒáƒ¨áƒ•áƒ”ბáƒ" + +#: directorymergewindow.cpp:2864 +msgid "Compare Selected File" +msgstr "მáƒáƒœáƒ˜áƒ¨áƒœáƒ£áƒšáƒ˜ ფáƒáƒ˜áƒšáƒ”ბის შედáƒáƒ áƒ”ბáƒ" + +#: directorymergewindow.cpp:2865 +msgid "Merge Current File" +msgstr "მიმდინáƒáƒ áƒ” ფáƒáƒ˜áƒšáƒ˜áƒ¡ შერწყმáƒ" + +#: directorymergewindow.cpp:2866 +msgid "Fold All Subdirs" +msgstr "ყველრქვედირექტáƒáƒ áƒ˜áƒ˜áƒ¡ ჩáƒáƒ™áƒ”ცვáƒ" + +#: directorymergewindow.cpp:2867 +msgid "Unfold All Subdirs" +msgstr "ყველრქვედირექტáƒáƒ áƒ˜áƒ˜áƒ¡ áƒáƒ áƒ©áƒáƒ™áƒ”ცვáƒ" + +#: directorymergewindow.cpp:2871 +msgid "Choose A for All Items" +msgstr "A -თვის ყველრელემენტების áƒáƒ áƒ©áƒ”ვáƒ" + +#: directorymergewindow.cpp:2872 +msgid "Choose B for All Items" +msgstr "B -თვის ყველრელემენტების áƒáƒ áƒ©áƒ”ვáƒ" + +#: directorymergewindow.cpp:2873 +msgid "Choose C for All Items" +msgstr "C -თვის ყველრელემენტების áƒáƒ áƒ©áƒ”ვáƒ" + +#: directorymergewindow.cpp:2874 +msgid "Auto-Choose Operation for All Items" +msgstr "ყველრელემენტების áƒáƒžáƒ”რáƒáƒªáƒ˜áƒ”ბის áƒáƒ•áƒ¢áƒ-áƒáƒ áƒ©áƒ”ვáƒ" + +#: directorymergewindow.cpp:2875 +msgid "No Operation for All Items" +msgstr "ყველრელემენტისთვის áƒáƒ áƒáƒ•áƒ˜áƒ—áƒáƒ áƒ˜ áƒáƒžáƒ”რáƒáƒªáƒ˜áƒ" + +#: directorymergewindow.cpp:2880 +msgid "Show Identical Files" +msgstr "" + +#: directorymergewindow.cpp:2881 +#, fuzzy +msgid "Show Different Files" +msgstr "გáƒáƒœáƒ¡áƒ®áƒ•áƒáƒ•áƒ”ბული ფáƒáƒ˜áƒšáƒ”ბის რáƒáƒáƒ“ენáƒáƒ‘áƒ:" + +#: directorymergewindow.cpp:2882 +msgid "Show Files only in A" +msgstr "" + +#: directorymergewindow.cpp:2883 +msgid "Show Files only in B" +msgstr "" + +#: directorymergewindow.cpp:2884 +msgid "Show Files only in C" +msgstr "" + +#: directorymergewindow.cpp:2888 +#, fuzzy +msgid "Compare Explicitly Selected Files" +msgstr "მáƒáƒœáƒ˜áƒ¨áƒœáƒ£áƒšáƒ˜ ფáƒáƒ˜áƒšáƒ”ბის შედáƒáƒ áƒ”ბáƒ" + +#: directorymergewindow.cpp:2889 +#, fuzzy +msgid "Merge Explicitly Selected Files" +msgstr "მáƒáƒœáƒ˜áƒ¨áƒœáƒ£áƒšáƒ˜ ფáƒáƒ˜áƒšáƒ”ბის შედáƒáƒ áƒ”ბáƒ" + +#: directorymergewindow.cpp:2891 directorymergewindow.cpp:2898 +msgid "Do Nothing" +msgstr "áƒáƒ áƒáƒ¤áƒ áƒ˜áƒ¡ áƒáƒ  გáƒáƒ™áƒ”თებáƒ" + +#: directorymergewindow.cpp:2892 +msgid "A" +msgstr "A" + +#: directorymergewindow.cpp:2893 +msgid "B" +msgstr "B" + +#: directorymergewindow.cpp:2894 +msgid "C" +msgstr "C" + +#: directorymergewindow.cpp:2903 +msgid "Delete A && B" +msgstr "A დრB წáƒáƒ¨áƒšáƒ" + +#: directorymergewindow.cpp:2906 +msgid "Merge to A && B" +msgstr "შერწყმრA დრB-სკენ" + +#: fileaccess.cpp:595 +msgid "" +"While trying to make a backup, deleting an older backup failed. \n" +"Filename: " +msgstr "" +"სáƒáƒ áƒ”ზერვრáƒáƒ¡áƒšáƒ˜áƒ¡ გáƒáƒ™áƒ”თების მცდელáƒáƒ‘ისáƒáƒ¡, ძველი სáƒáƒ áƒ”ზერვრáƒáƒ¡áƒšáƒ˜áƒ¡ წáƒáƒ¨áƒšáƒ ვერ შედგáƒ. \n" +"ფáƒáƒ˜áƒšáƒ˜áƒ¡ სáƒáƒ®áƒ”ლი: " + +#: fileaccess.cpp:602 +msgid "" +"While trying to make a backup, renaming failed. \n" +"Filenames: " +msgstr "" +"სáƒáƒ áƒ”ზერვრáƒáƒ¡áƒšáƒ˜áƒ¡ გáƒáƒ™áƒ”თების მცდელáƒáƒ‘ისáƒáƒ¡, სáƒáƒ®áƒ”ლის გáƒáƒ“áƒáƒ áƒ¥áƒ›áƒ”ვრვერ შედგáƒ. \n" +"ფáƒáƒ˜áƒšáƒ˜áƒ¡ სáƒáƒ®áƒ”ლები: " + +#: fileaccess.cpp:624 +#, c-format +msgid "Getting file status: %1" +msgstr "ფáƒáƒ˜áƒšáƒ˜áƒ¡ მდგáƒáƒ›áƒáƒ áƒ”áƒáƒ‘ის მიღებáƒ: %1" + +#: fileaccess.cpp:667 +#, c-format +msgid "Reading file: %1" +msgstr "ფáƒáƒ˜áƒšáƒ˜áƒ¡ წáƒáƒ™áƒ˜áƒ—ხვáƒ: %1" + +#: fileaccess.cpp:703 +#, c-format +msgid "Writing file: %1" +msgstr "ფáƒáƒ˜áƒšáƒ˜áƒ¡ ჩáƒáƒ¬áƒ”რáƒ: %1" + +#: fileaccess.cpp:731 +msgid "Out of memory" +msgstr "მეხსიერებრáƒáƒ áƒáƒ სáƒáƒ™áƒ›áƒáƒ áƒ˜áƒ¡áƒ˜" + +#: fileaccess.cpp:766 +#, c-format +msgid "Making directory: %1" +msgstr "დირექტáƒáƒ áƒ˜áƒ˜áƒ¡ შექმნáƒ: %1" + +#: fileaccess.cpp:786 +#, c-format +msgid "Removing directory: %1" +msgstr "დირექტáƒáƒ áƒ˜áƒ˜áƒ¡ წáƒáƒ¨áƒšáƒ: %1" + +#: fileaccess.cpp:801 +#, c-format +msgid "Removing file: %1" +msgstr "ფáƒáƒ˜áƒšáƒ˜áƒ¡ წáƒáƒ¨áƒšáƒ: %1" + +#: fileaccess.cpp:817 +msgid "Creating symbolic link: %1 -> %2" +msgstr "სიმბáƒáƒšáƒ£áƒ áƒ˜ ბმულის შექმნáƒ: %1 -> %2" + +#: fileaccess.cpp:843 +msgid "Renaming file: %1 -> %2" +msgstr "ფáƒáƒ˜áƒšáƒ˜áƒ¡ სáƒáƒ®áƒ”ლის გáƒáƒ“áƒáƒ áƒ¥áƒ›áƒ”ვáƒ: %1 -> %2" + +#: fileaccess.cpp:879 +msgid "Copying file: %1 -> %2" +msgstr "ფáƒáƒ˜áƒšáƒ˜áƒ¡ áƒáƒ¡áƒšáƒ˜: %1 -> %2" + +#: fileaccess.cpp:893 +#, c-format +msgid "" +"Error during file copy operation: Opening file for reading failed. Filename: %1" +msgstr "" +"შეცდáƒáƒ›áƒ áƒáƒ¡áƒšáƒ˜áƒ¡ გáƒáƒ™áƒ”თების áƒáƒžáƒ”რáƒáƒªáƒ˜áƒ˜áƒ¡áƒáƒ¡: ფáƒáƒ˜áƒšáƒ˜áƒ¡ წáƒáƒ¡áƒáƒ™áƒ˜áƒ—ხáƒáƒ“ გáƒáƒ®áƒ¡áƒœáƒ ვერ შედგáƒ. ფáƒáƒ˜áƒšáƒ˜áƒ¡ " +"სáƒáƒ®áƒ”ლი: %1" + +#: fileaccess.cpp:899 +#, c-format +msgid "" +"Error during file copy operation: Opening file for writing failed. Filename: %1" +msgstr "" +"შეცდáƒáƒ›áƒ áƒáƒ¡áƒšáƒ˜áƒ¡ გáƒáƒ™áƒ”თების áƒáƒžáƒ”რáƒáƒªáƒ˜áƒ˜áƒ¡áƒáƒ¡: ფáƒáƒ˜áƒšáƒ˜áƒ¡ ჩáƒáƒ¡áƒáƒ¬áƒ”რáƒáƒ“ გáƒáƒ®áƒ¡áƒœáƒ ვერ შედგáƒ. ფáƒáƒ˜áƒšáƒ˜áƒ¡ " +"სáƒáƒ®áƒ”ლი: %1" + +#: fileaccess.cpp:914 +#, c-format +msgid "Error during file copy operation: Reading failed. Filename: %1" +msgstr "" +"შეცდáƒáƒ›áƒ áƒáƒ¡áƒšáƒ˜áƒ¡ გáƒáƒ™áƒ”თების áƒáƒžáƒ”რáƒáƒªáƒ˜áƒ˜áƒ¡áƒáƒ¡: წáƒáƒ™áƒ˜áƒ—ხვრვერ შედგáƒ. ფáƒáƒ˜áƒšáƒ˜áƒ¡ სáƒáƒ®áƒ”ლი: %1" + +#: fileaccess.cpp:923 +#, c-format +msgid "Error during file copy operation: Writing failed. Filename: %1" +msgstr "" +"შეცდáƒáƒ›áƒ áƒáƒ¡áƒšáƒ˜áƒ¡ გáƒáƒ™áƒ”თების áƒáƒžáƒ”რáƒáƒªáƒ˜áƒ˜áƒ¡áƒáƒ¡: ჩáƒáƒ¬áƒ”რრვერ შედგáƒ. ფáƒáƒ˜áƒšáƒ˜áƒ¡ სáƒáƒ®áƒ”ლი: %1" + +#: fileaccess.cpp:1219 +msgid "Reading directory: " +msgstr "დირექტáƒáƒ áƒ˜áƒ˜áƒ¡ წáƒáƒ™áƒ˜áƒ—ხვáƒ:" + +#: fileaccess.cpp:1348 +#, c-format +msgid "Listing directory: %1" +msgstr "დირექტáƒáƒ áƒ˜áƒ˜áƒ¡ სიáƒ: %1" + +#: kdiff3.cpp:142 +#, fuzzy +msgid "Current Configuration:" +msgstr "მიმდინáƒáƒ áƒ” ელემენტის სინქრáƒáƒœáƒ˜áƒ–áƒáƒªáƒ˜áƒ˜áƒ¡ áƒáƒžáƒ”რáƒáƒªáƒ˜áƒ" + +#: kdiff3.cpp:147 +#, fuzzy +msgid "Config Option Error:" +msgstr "ფáƒáƒ˜áƒšáƒ˜áƒ¡ გáƒáƒ®áƒ¡áƒœáƒ˜áƒ¡ შეცდáƒáƒ›áƒ" + +#: kdiff3.cpp:187 +msgid "Option --auto used, but no output file specified." +msgstr "" +"პáƒáƒ áƒáƒ›áƒ”ტრი --auto გáƒáƒ›áƒáƒ§áƒ”ნებულიáƒ, მáƒáƒ’რáƒáƒ› გáƒáƒ›áƒáƒœáƒáƒ¢áƒáƒœáƒ˜ ფáƒáƒ˜áƒšáƒ˜ áƒáƒ áƒáƒ მითითებული." + +#: kdiff3.cpp:323 +msgid "Option --auto ignored for directory comparison." +msgstr "პáƒáƒ áƒáƒ›áƒ”ტრი --auto დირექტáƒáƒ áƒ˜áƒ”ბის შედáƒáƒ áƒ”ბისთვის იგნáƒáƒ áƒ˜áƒ áƒ”ბულიáƒ." + +#: kdiff3.cpp:359 +msgid "Saving failed." +msgstr "შენáƒáƒ®áƒ•áƒ ვერ შედგáƒ." + +#: kdiff3.cpp:386 pdiff.cpp:1041 pdiff.cpp:1112 +msgid "Opening of these files failed:" +msgstr "áƒáƒ› ფáƒáƒ˜áƒšáƒ”ბის გáƒáƒ®áƒ¡áƒœáƒ ვერ შედგáƒ:" + +#: kdiff3.cpp:395 +msgid "File Open Error" +msgstr "ფáƒáƒ˜áƒšáƒ˜áƒ¡ გáƒáƒ®áƒ¡áƒœáƒ˜áƒ¡ შეცდáƒáƒ›áƒ" + +#: kdiff3.cpp:418 +msgid "Opens documents for comparison..." +msgstr "ხსნის დáƒáƒ™áƒ£áƒ›áƒ”ნტებს შესáƒáƒ“áƒáƒ áƒ”ბლáƒáƒ“..." + +#: kdiff3.cpp:423 +msgid "Saves the merge result. All conflicts must be solved!" +msgstr "ინáƒáƒ®áƒáƒ•áƒ¡ შერწყმის შედეგებს. ყველრკáƒáƒœáƒ¤áƒšáƒ˜áƒ¥áƒ¢áƒ˜ უნდრგáƒáƒ“áƒáƒ˜áƒ­áƒ áƒáƒ¡!" + +#: kdiff3.cpp:425 +msgid "Saves the current document as..." +msgstr "მიმდინáƒáƒ áƒ” დáƒáƒ™áƒ£áƒ›áƒ”ნტს ინáƒáƒ®áƒáƒ•áƒ¡ რáƒáƒ’áƒáƒ áƒª..." + +#: kdiff3.cpp:427 +msgid "Print the differences" +msgstr "" + +#: kdiff3.cpp:429 +msgid "Quits the application" +msgstr "პრáƒáƒ’რáƒáƒ›áƒ˜áƒ¡ დáƒáƒ®áƒ£áƒ áƒ•áƒ" + +#: kdiff3.cpp:431 +msgid "Cuts the selected section and puts it to the clipboard" +msgstr "ჭრის მáƒáƒœáƒ˜áƒ¨áƒœáƒ£áƒš სექციáƒáƒ¡ დრგáƒáƒªáƒ•áƒšáƒ˜áƒ— ბუფერში áƒáƒ—áƒáƒ•áƒ¡áƒ”ბს" + +#: kdiff3.cpp:433 +msgid "Copies the selected section to the clipboard" +msgstr "მáƒáƒœáƒ˜áƒ¨áƒœáƒ£áƒš სექციის áƒáƒ¡áƒšáƒ¡ ქმნის გáƒáƒªáƒ•áƒšáƒ˜áƒ— ბუფერში" + +#: kdiff3.cpp:435 +msgid "Pastes the clipboard contents to actual position" +msgstr "გáƒáƒªáƒ•áƒšáƒ˜áƒ¡ ბუფერის შემáƒáƒ“გენლáƒáƒ‘áƒáƒ¡ სვáƒáƒ›áƒ¡ მიმდინáƒáƒ áƒ” პáƒáƒ–იციáƒáƒ–ე" + +#: kdiff3.cpp:437 +msgid "Select everything in current window" +msgstr "" + +#: kdiff3.cpp:439 +msgid "Search for a string" +msgstr "სტრიქáƒáƒœáƒ˜áƒ¡ ძიებáƒ" + +#: kdiff3.cpp:441 +msgid "Search again for the string" +msgstr "სტრიქáƒáƒœáƒ˜áƒ¡ თáƒáƒ•áƒ˜áƒ“áƒáƒœ ძიებáƒ" + +#: kdiff3.cpp:443 +msgid "Enables/disables the toolbar" +msgstr "ხელსáƒáƒ¬áƒ§áƒáƒ—რპáƒáƒœáƒ”ლს რთáƒáƒ•áƒ¡" + +#: kdiff3.cpp:445 +msgid "Enables/disables the statusbar" +msgstr "სტáƒáƒ¢áƒ£áƒ¡áƒ˜áƒ¡ ველს რთáƒáƒ•áƒ¡" + +#: kdiff3.cpp:449 +msgid "Configure KDiff3..." +msgstr "KDiff3 კáƒáƒœáƒ¤áƒ˜áƒ’ურáƒáƒªáƒ˜áƒ..." + +#: kdiff3.cpp:470 +msgid "Go to Current Delta" +msgstr "მიმდინáƒáƒ áƒ” დელტáƒáƒ–ე გáƒáƒ“áƒáƒ¡áƒ•áƒšáƒ" + +#: kdiff3.cpp:471 +msgid "Go to First Delta" +msgstr "პირველ დელტáƒáƒ–ე გáƒáƒ“áƒáƒ¡áƒ•áƒšáƒ" + +#: kdiff3.cpp:472 +msgid "Go to Last Delta" +msgstr "უკáƒáƒœáƒáƒ¡áƒ™áƒœáƒ”ლ დელტáƒáƒ–ე გáƒáƒ“áƒáƒ¡áƒ•áƒšáƒ" + +#: kdiff3.cpp:473 +msgid "(Skips white space differences when \"Show White Space\" is disabled.)" +msgstr "" + +#: kdiff3.cpp:474 +msgid "" +"(Does not skip white space differences even when \"Show White Space\" is " +"disabled.)" +msgstr "" + +#: kdiff3.cpp:475 +msgid "Go to Previous Delta" +msgstr "წინრდელტáƒáƒ–ე გáƒáƒ“áƒáƒ¡áƒ•áƒšáƒ" + +#: kdiff3.cpp:477 +msgid "Go to Next Delta" +msgstr "შემდეგ დელტáƒáƒ–ე გáƒáƒ“áƒáƒ¡áƒ•áƒšáƒ" + +#: kdiff3.cpp:479 +msgid "Go to Previous Conflict" +msgstr "წინრკáƒáƒœáƒ¤áƒšáƒ˜áƒ¥áƒ¢áƒ–ე გáƒáƒ“áƒáƒ¡áƒ•áƒšáƒ" + +#: kdiff3.cpp:481 +msgid "Go to Next Conflict" +msgstr "შემდეგ კáƒáƒœáƒ¤áƒšáƒ˜áƒ¥áƒ¢áƒ–ე გáƒáƒ“áƒáƒ¡áƒ•áƒšáƒ" + +#: kdiff3.cpp:483 +msgid "Go to Previous Unsolved Conflict" +msgstr "წინრგáƒáƒ“áƒáƒ£áƒ­áƒ áƒ”ლ კáƒáƒœáƒ¤áƒšáƒ˜áƒ¥áƒ¢áƒ–ე გáƒáƒ“áƒáƒ¡áƒ•áƒšáƒ" + +#: kdiff3.cpp:485 +msgid "Go to Next Unsolved Conflict" +msgstr "შემდეგ გáƒáƒ“áƒáƒ£áƒ­áƒ áƒ”ლ კáƒáƒœáƒ¤áƒšáƒ˜áƒ¥áƒ¢áƒ–ე გáƒáƒ“áƒáƒ¡áƒ•áƒšáƒ" + +#: kdiff3.cpp:487 +msgid "Select Line(s) From A" +msgstr "áƒáƒ˜áƒ áƒ©áƒ˜áƒ”თ ხáƒáƒ–(ებ)ი A-დáƒáƒœ" + +#: kdiff3.cpp:488 +msgid "Select Line(s) From B" +msgstr "áƒáƒ˜áƒ áƒ©áƒ˜áƒ”თ ხáƒáƒ–(ებ)ი B-დáƒáƒœ" + +#: kdiff3.cpp:489 +msgid "Select Line(s) From C" +msgstr "áƒáƒ˜áƒ áƒ©áƒ˜áƒ”თ ხáƒáƒ–(ებ)ი C-დáƒáƒœ" + +#: kdiff3.cpp:490 +msgid "Automatically Go to Next Unsolved Conflict After Source Selection" +msgstr "წყáƒáƒ áƒáƒ¡ áƒáƒ áƒ©áƒ”ვისáƒáƒ¡ áƒáƒ•áƒ¢áƒáƒ›áƒáƒ¢áƒ£áƒ áƒáƒ“ გáƒáƒ“áƒáƒ¡áƒ•áƒšáƒ შემდეგ გáƒáƒ“áƒáƒ£áƒ­áƒ áƒ”ლ კáƒáƒœáƒ¤áƒšáƒ˜áƒ™áƒ¢áƒ–ე" + +#: kdiff3.cpp:492 +msgid "Show Space && Tabulator Characters for Differences" +msgstr "ღáƒáƒ áƒ”ბის ჩვენებრდრტáƒáƒ‘ულáƒáƒªáƒ˜áƒ˜áƒ¡ სიმბáƒáƒšáƒáƒ”ბის გáƒáƒœáƒ¡áƒ®áƒ•áƒáƒ•áƒ”ბისთვის" + +#: kdiff3.cpp:493 +msgid "Show White Space" +msgstr "" + +#: kdiff3.cpp:495 +msgid "Show Line Numbers" +msgstr "ხáƒáƒ–ების ნáƒáƒ›áƒ áƒ”ბის ჩვენებáƒ" + +#: kdiff3.cpp:496 +msgid "Choose A Everywhere" +msgstr "ყველგáƒáƒœ A-ს áƒáƒ áƒ©áƒ”ვáƒ" + +#: kdiff3.cpp:497 +msgid "Choose B Everywhere" +msgstr "ყველგáƒáƒœ B-ს áƒáƒ áƒ©áƒ”ვáƒ" + +#: kdiff3.cpp:498 +msgid "Choose C Everywhere" +msgstr "ყველგáƒáƒœ C-ს áƒáƒ áƒ©áƒ”ვáƒ" + +#: kdiff3.cpp:499 +msgid "Choose A for All Unsolved Conflicts" +msgstr "A-ს áƒáƒ áƒ©áƒ”ვრყველრგáƒáƒ“áƒáƒ£áƒ­áƒ áƒ”ლი კáƒáƒœáƒ¤áƒšáƒ˜áƒ¥áƒ¢áƒ˜áƒ¡áƒ—ვის" + +#: kdiff3.cpp:500 +msgid "Choose B for All Unsolved Conflicts" +msgstr "B-ს áƒáƒ áƒ©áƒ”ვრყველრგáƒáƒ“áƒáƒ£áƒ­áƒ áƒ”ლი კáƒáƒœáƒ¤áƒšáƒ˜áƒ¥áƒ¢áƒ˜áƒ¡áƒ—ვის" + +#: kdiff3.cpp:501 +msgid "Choose C for All Unsolved Conflicts" +msgstr "C-ს áƒáƒ áƒ©áƒ”ვრყველრგáƒáƒ“áƒáƒ£áƒ­áƒ áƒ”ლი კáƒáƒœáƒ¤áƒšáƒ˜áƒ¥áƒ¢áƒ˜áƒ¡áƒ—ვის" + +#: kdiff3.cpp:502 +msgid "Choose A for All Unsolved Whitespace Conflicts" +msgstr "" + +#: kdiff3.cpp:503 +msgid "Choose B for All Unsolved Whitespace Conflicts" +msgstr "" + +#: kdiff3.cpp:504 +msgid "Choose C for All Unsolved Whitespace Conflicts" +msgstr "" + +#: kdiff3.cpp:505 +msgid "Automatically Solve Simple Conflicts" +msgstr "მáƒáƒ áƒ¢áƒ˜áƒ•áƒ˜ კáƒáƒœáƒ¤áƒšáƒ˜áƒ¥áƒ¢áƒ”ბის áƒáƒ•áƒ áƒáƒ›áƒáƒ¢áƒ£áƒ áƒáƒ“ გáƒáƒ“áƒáƒ­áƒ áƒ" + +#: kdiff3.cpp:506 +msgid "Set Deltas to Conflicts" +msgstr "კáƒáƒœáƒ¤áƒšáƒ˜áƒ¥áƒ¢áƒ”ბისთვის დელტáƒáƒ¡ მინიჭებáƒ" + +#: kdiff3.cpp:507 +msgid "Run Regular Expression Auto Merge" +msgstr "" + +#: kdiff3.cpp:508 +#, fuzzy +msgid "Automatically Solve History Conflicts" +msgstr "მáƒáƒ áƒ¢áƒ˜áƒ•áƒ˜ კáƒáƒœáƒ¤áƒšáƒ˜áƒ¥áƒ¢áƒ”ბის áƒáƒ•áƒ áƒáƒ›áƒáƒ¢áƒ£áƒ áƒáƒ“ გáƒáƒ“áƒáƒ­áƒ áƒ" + +#: kdiff3.cpp:509 +msgid "Split Diff At Selection" +msgstr "" + +#: kdiff3.cpp:510 +#, fuzzy +msgid "Join Selected Diffs" +msgstr "მáƒáƒœáƒ˜áƒ¨áƒœáƒ£áƒšáƒ˜ ფáƒáƒ˜áƒšáƒ”ბის შედáƒáƒ áƒ”ბáƒ" + +#: kdiff3.cpp:512 +msgid "Show Window A" +msgstr "ფáƒáƒœáƒ¯áƒáƒ áƒ A-ს ჩვენებრ" + +#: kdiff3.cpp:513 +msgid "Show Window B" +msgstr "ფáƒáƒœáƒ¯áƒáƒ áƒ B-ს ჩვენებáƒ" + +#: kdiff3.cpp:514 +msgid "Show Window C" +msgstr "ფáƒáƒœáƒ¯áƒáƒ áƒ C-ს ჩვენებáƒ" + +#: kdiff3.cpp:515 kdiff3.cpp:526 +msgid "Focus Next Window" +msgstr "ფáƒáƒ™áƒ£áƒ¡áƒ˜ შემდეგ ფáƒáƒœáƒ¯áƒáƒ áƒáƒ–ე" + +#: kdiff3.cpp:517 +msgid "Normal Overview" +msgstr "ჩვეულებრივი გáƒáƒ“áƒáƒ®áƒ”დვáƒ" + +#: kdiff3.cpp:518 +msgid "A vs. B Overview" +msgstr "A წინáƒáƒáƒ¦áƒ›áƒ“ეგ B გáƒáƒ“áƒáƒ®áƒ”დვáƒ" + +#: kdiff3.cpp:519 +msgid "A vs. C Overview" +msgstr "A წინáƒáƒáƒ¦áƒ›áƒ“ეგ C გáƒáƒ“áƒáƒ®áƒ”დვáƒ" + +#: kdiff3.cpp:520 +msgid "B vs. C Overview" +msgstr "B წინáƒáƒáƒ¦áƒ›áƒ“ეგ C გáƒáƒ“áƒáƒ®áƒ”დვáƒ" + +#: kdiff3.cpp:521 +msgid "Word Wrap Diff Windows" +msgstr "Word Wrap Diff ფáƒáƒœáƒ¯áƒ áƒ”ბი" + +#: kdiff3.cpp:522 +msgid "Add Manual Diff Alignment" +msgstr "" + +#: kdiff3.cpp:523 +msgid "Clear All Manual Diff Alignments" +msgstr "" + +#: kdiff3.cpp:528 +msgid "Focus Prev Window" +msgstr "ფáƒáƒ™áƒ£áƒ¡áƒ˜ წინრფáƒáƒœáƒ¯áƒáƒ áƒáƒ–ე" + +#: kdiff3.cpp:529 +msgid "Toggle Split Orientation" +msgstr "გáƒáƒ®áƒšáƒ”ჩვის áƒáƒ áƒ˜áƒ”ნტáƒáƒªáƒ˜áƒ˜áƒ¡ გáƒáƒ“áƒáƒ áƒ—ვáƒ" + +#: kdiff3.cpp:531 +msgid "Dir && Text Split Screen View" +msgstr "დირექტáƒáƒ áƒ˜áƒ˜áƒ¡áƒ დრტექსტი გáƒáƒœáƒšáƒáƒ’ების ეკრáƒáƒœáƒ˜áƒ¡ ხედი" + +#: kdiff3.cpp:533 +msgid "Toggle Between Dir && Text View" +msgstr "დირექტáƒáƒ áƒ˜áƒáƒ—რდრტექსტის ხედებს შáƒáƒ áƒ˜áƒ¡ გáƒáƒ“áƒáƒ áƒ—ვáƒ" + +#: kdiff3.cpp:582 pdiff.cpp:1712 +msgid "The merge result hasn't been saved." +msgstr "შერწყმის შედეგები áƒáƒ  იყრშენáƒáƒ®áƒ£áƒšáƒ˜." + +#: kdiff3.cpp:583 +msgid "Save && Quit" +msgstr "შენáƒáƒ®áƒ•áƒ დრგáƒáƒ¡áƒ•áƒšáƒ" + +#: kdiff3.cpp:583 +msgid "Quit Without Saving" +msgstr "გáƒáƒ¡áƒ•áƒšáƒ შენáƒáƒ®áƒ•áƒ˜áƒ¡ გáƒáƒ áƒ”შე" + +#: kdiff3.cpp:591 pdiff.cpp:1721 +msgid "Saving the merge result failed." +msgstr "შერწყმის შედეგების შენáƒáƒ®áƒ•áƒ ვერ შედგáƒ." + +#: kdiff3.cpp:602 pdiff.cpp:978 +msgid "" +"You are currently doing a directory merge. Are you sure, you want to abort?" +msgstr "თქვენ áƒáƒ®áƒšáƒ დირექტáƒáƒ áƒ˜áƒáƒ—რშერწყმáƒáƒ¡ áƒáƒ™áƒ”თებთ. ნáƒáƒ›áƒ“ვილáƒáƒ“ გსურთ შეწყვეტáƒ?" + +#: kdiff3.cpp:625 +msgid "Saving file..." +msgstr "ფáƒáƒ˜áƒšáƒ˜áƒ¡ შენáƒáƒ®áƒ•áƒ..." + +#: kdiff3.cpp:642 +msgid "Saving file with a new filename..." +msgstr "ფáƒáƒ˜áƒšáƒ˜áƒ¡ áƒáƒ®áƒáƒšáƒ˜ სáƒáƒ®áƒ”ლით შენáƒáƒ®áƒ•áƒ..." + +#: kdiff3.cpp:732 +#, fuzzy +msgid "Printing..." +msgstr "გáƒáƒ›áƒáƒ¡áƒ•áƒšáƒ..." + +#: kdiff3.cpp:738 kdiff3.cpp:900 +msgid "Printing aborted." +msgstr "" + +#: kdiff3.cpp:870 +msgid "Selection" +msgstr "" + +#: kdiff3.cpp:896 +#, fuzzy +msgid "Printing completed." +msgstr "შერწყმის áƒáƒžáƒ”რáƒáƒªáƒ˜áƒ დáƒáƒ¡áƒ áƒ£áƒšáƒ“áƒ." + +#: kdiff3.cpp:906 +msgid "Exiting..." +msgstr "გáƒáƒ›áƒáƒ¡áƒ•áƒšáƒ..." + +#: kdiff3.cpp:918 +msgid "Toggling toolbar..." +msgstr "ხელსáƒáƒ¬áƒ§áƒáƒ—რპáƒáƒœáƒ”ლის გáƒáƒ“áƒáƒ áƒ—ვáƒ..." + +#: kdiff3.cpp:939 +msgid "Toggle the statusbar..." +msgstr "სტáƒáƒ¢áƒ£áƒ¡áƒ˜áƒ¡ ზáƒáƒšáƒ˜áƒ¡ გáƒáƒ“áƒáƒ áƒ—ვáƒ..." + +#: kdiff3_part.cpp:155 kdiff3_part.cpp:224 +msgid "Couldn't find files for comparison." +msgstr "შსáƒáƒ“áƒáƒ áƒ”ბელი ფáƒáƒ˜áƒšáƒ”ბი ვერ მáƒáƒ˜áƒ«áƒ”ბნáƒ." + +#: kdiff3_part.cpp:291 +msgid "KDiff3Part" +msgstr "KDiff3Part" + +#: kdiff3_shell.cpp:78 +msgid "" +"Could not find our part!\n" +"This usually happens due to an installation problem. Please read the " +"README-file in the source package for details." +msgstr "" +"ჩვენი ნáƒáƒ¬áƒ˜áƒšáƒ˜ ვერ მáƒáƒ˜áƒ«áƒ”ბნáƒ!\n" +"ეს რáƒáƒ’áƒáƒ áƒª წესი დáƒáƒ§áƒ”ნების პრáƒáƒ‘ლემების გáƒáƒ›áƒ ხდებáƒ. გთხáƒáƒ•áƒ— წáƒáƒ˜áƒ™áƒ˜áƒ—ხáƒáƒ— README-ფáƒáƒ˜áƒšáƒ˜ " +"წყáƒáƒ áƒáƒ¡ პáƒáƒ™áƒ”ტში დáƒáƒ›áƒáƒ¡áƒ¢áƒ”ბითი ცნáƒáƒ‘ებისთვის." + +#: main.cpp:35 +msgid "Tool for Comparison and Merge of Files and Directories" +msgstr "ფáƒáƒ˜áƒšáƒ”ბის დრსáƒáƒ¥áƒáƒ¦áƒáƒšáƒ“ეების შედáƒáƒ áƒ”ბის დრშერწყმის ხელსáƒáƒ¬áƒ§áƒáƒ”ბი" + +#: main.cpp:40 +msgid "Merge the input." +msgstr "შეტáƒáƒœáƒ˜áƒ¡ შერწყმáƒ." + +#: main.cpp:42 +msgid "Explicit base file. For compatibility with certain tools." +msgstr "" + +#: main.cpp:44 +msgid "Output file. Implies -m. E.g.: -o newfile.txt" +msgstr "გáƒáƒ›áƒáƒœáƒáƒ¢áƒáƒœáƒ˜áƒ¡ ფáƒáƒ˜áƒšáƒ˜. Implies -m. E.g.: -o newfile.txt" + +#: main.cpp:45 +msgid "Output file, again. (For compatibility with certain tools.)" +msgstr "" +"გáƒáƒ›áƒáƒœáƒáƒ¢áƒáƒœáƒ˜áƒ¡ ფáƒáƒ˜áƒšáƒ˜, თáƒáƒ•áƒ˜áƒ“áƒáƒœ. (გáƒáƒœáƒ¡áƒáƒ–ღვრულ ხელსáƒáƒ¬áƒ§áƒáƒ¡áƒ—áƒáƒœ თáƒáƒ•áƒ¡áƒ”ბáƒáƒ“áƒáƒ‘ისთვის.)" + +#: main.cpp:46 +msgid "No GUI if all conflicts are auto-solvable. (Needs -o file)" +msgstr "GUI-ს გáƒáƒ áƒ”შე თუ ყველრკáƒáƒœáƒ¤áƒšáƒ˜áƒ¥áƒ¢áƒ გáƒáƒ“áƒáƒ­áƒ áƒáƒ“იáƒ. (სსáƒáƒ­áƒ˜áƒ áƒáƒ”ბს -o ფáƒáƒ˜áƒšáƒ¡)" + +#: main.cpp:47 +msgid "Don't solve conflicts automatically. (For compatibility...)" +msgstr "კáƒáƒœáƒ¤áƒšáƒ˜áƒ¥áƒ¢áƒ”ბის áƒáƒ•áƒ¢áƒáƒ›áƒáƒ¢áƒ£áƒ áƒáƒ“ áƒáƒ  გáƒáƒ“áƒáƒ­áƒ áƒ. (თáƒáƒ•áƒ¡áƒ”ბáƒáƒ“áƒáƒ‘ისთვის...)" + +#: main.cpp:48 +msgid "Visible name replacement for input file 1 (base)." +msgstr "ხილული სáƒáƒ®áƒ”ლის ჩáƒáƒœáƒáƒªáƒ•áƒšáƒ”ბრ1 ფáƒáƒ˜áƒšáƒ˜áƒ¡áƒ—ვის (სáƒáƒ‘áƒáƒ–ისáƒ)." + +#: main.cpp:49 +msgid "Visible name replacement for input file 2." +msgstr "ხილული სáƒáƒ®áƒ”ლის ჩáƒáƒœáƒáƒªáƒ•áƒšáƒ”ბრ2 ფáƒáƒ˜áƒšáƒ˜áƒ¡áƒ—ვის." + +#: main.cpp:50 +msgid "Visible name replacement for input file 3." +msgstr "ხილული სáƒáƒ®áƒ”ლის ჩáƒáƒœáƒáƒªáƒ•áƒšáƒ”ბრ3 ფáƒáƒ˜áƒšáƒ˜áƒ¡áƒ—ვის." + +#: main.cpp:52 +msgid "Alternative visible name replacement. Supply this once for every input." +msgstr "" +"áƒáƒšáƒ¢áƒ”რნáƒáƒ¢áƒ˜áƒ£áƒšáƒ˜ ხილული სáƒáƒ®áƒ”ლის ჩáƒáƒœáƒáƒªáƒ•áƒšáƒ”ბáƒ. მიუთითეთ ერთხელ ყáƒáƒ•áƒ”ლი შეყვáƒáƒœáƒ˜áƒ¡áƒ—ვის." + +#: main.cpp:53 +msgid "" +"Override a config setting. Use once for every setting. E.g.: --cs " +"\"AutoAdvance=1\"" +msgstr "" + +#: main.cpp:54 +msgid "Show list of config settings and current values." +msgstr "" + +#: main.cpp:55 +#, fuzzy +msgid "Use a different config file." +msgstr "გáƒáƒœáƒ¡áƒ®áƒ•áƒáƒ•áƒ”ბული ფáƒáƒ˜áƒšáƒ”ბის რáƒáƒáƒ“ენáƒáƒ‘áƒ:" + +#: main.cpp:59 +msgid "file1 to open (base, if not specified via --base)" +msgstr "ფáƒáƒ˜áƒšáƒ˜3-ის გáƒáƒ®áƒ¡áƒœáƒ (სáƒáƒ¤áƒ£áƒ«áƒ•áƒ”ლი, თუ áƒáƒ áƒáƒ მითითებული --base)" + +#: main.cpp:60 +msgid "file2 to open" +msgstr "ფáƒáƒ˜áƒšáƒ˜2-ის გáƒáƒ®áƒ¡áƒœáƒ" + +#: main.cpp:61 +msgid "file3 to open" +msgstr "ფáƒáƒ˜áƒšáƒ˜3-ის გáƒáƒ®áƒ¡áƒœáƒ" + +#: main.cpp:93 +msgid "Ignored. (User defined.)" +msgstr "" + +#. i18n: file kdiff3_part.rc line 16 +#: main.cpp:173 rc.cpp:9 +#, no-c-format +msgid "KDiff3" +msgstr "KDiff3" + +#: main.cpp:186 +msgid "+ Many thanks to those who reported bugs and contributed ideas!" +msgstr "" +"+ დიდი მáƒáƒ“ლáƒáƒ‘რმáƒáƒ— ვინც გვáƒáƒ¢áƒ§áƒáƒ‘ინებს ბზიკების შესáƒáƒ®áƒ”ბ დრგვáƒáƒ¬áƒáƒ“ებს იდეებს!" + +#: mergeresultwindow.cpp:136 mergeresultwindow.cpp:939 +#: mergeresultwindow.cpp:953 mergeresultwindow.cpp:965 +#: mergeresultwindow.cpp:977 +msgid "Number of remaining unsolved conflicts: %1 (of which %2 are whitespace)" +msgstr "" +"დáƒáƒ áƒ©áƒ”ნილი გáƒáƒ“áƒáƒ£áƒ­áƒ áƒ”ლი კáƒáƒœáƒ¤áƒšáƒ˜áƒ¥áƒ¢áƒ”ბის რáƒáƒáƒ“ენáƒáƒ‘áƒ: %1 (სáƒáƒ˜áƒ“áƒáƒœáƒáƒª %2 áƒáƒ áƒ˜áƒ¡ ღáƒáƒ áƒ˜)" + +#: mergeresultwindow.cpp:285 +msgid "" +"The output has been modified.\n" +"If you continue your changes will be lost." +msgstr "" +"გáƒáƒ›áƒáƒœáƒáƒ¢áƒáƒœáƒ˜ ჩáƒáƒ¡áƒ¬áƒáƒ áƒ”ბულიáƒ.\n" +"თუ გáƒáƒáƒ’რძელებთ ცვლილებები დáƒáƒ’ეკáƒáƒ áƒ’ებáƒáƒ—." + +#: mergeresultwindow.cpp:797 pdiff.cpp:511 +msgid "All input files are binary equal." +msgstr "ყველრშეტáƒáƒœáƒ˜áƒšáƒ˜ ბáƒáƒ˜áƒšáƒ˜áƒ¡ ბინáƒáƒ áƒ˜ ტáƒáƒšáƒ˜áƒ." + +#: mergeresultwindow.cpp:799 +msgid "All input files contain the same text." +msgstr "ყველრშეტáƒáƒœáƒ˜áƒšáƒ˜ ფáƒáƒ˜áƒšáƒ˜áƒ¡ შეიცáƒáƒ•áƒ¡ ერთიდáƒáƒ˜áƒ’ივე ტექსტი." + +#: mergeresultwindow.cpp:801 +msgid "" +"Files A and B are binary equal.\n" +msgstr "" +"A დრB ბინáƒáƒ áƒ£áƒšáƒáƒ“ ტáƒáƒšáƒ˜áƒ.\n" + +#: mergeresultwindow.cpp:802 +msgid "" +"Files A and B have equal text. \n" +msgstr "" +"A დრB áƒáƒ¥áƒ•áƒ— ერთიდáƒáƒ˜áƒ’ივე ტექსტი. \n" + +#: mergeresultwindow.cpp:803 +msgid "" +"Files A and C are binary equal.\n" +msgstr "" +"A დრC ბინáƒáƒ áƒ£áƒšáƒáƒ“ ტáƒáƒšáƒ˜áƒ.\n" + +#: mergeresultwindow.cpp:804 +msgid "" +"Files A and C have equal text. \n" +msgstr "" +"A დრC áƒáƒ¥áƒ•áƒ— ერთიდáƒáƒ˜áƒ’ივე ტექსტი. \n" + +#: mergeresultwindow.cpp:805 +msgid "" +"Files B and C are binary equal.\n" +msgstr "" +"B დრC ბინáƒáƒ áƒ£áƒšáƒáƒ“ ტáƒáƒšáƒ˜áƒ.\n" + +#: mergeresultwindow.cpp:806 +msgid "" +"Files B and C have equal text. \n" +msgstr "" +"B დრC áƒáƒ¥áƒ•áƒ— ერთიდáƒáƒ˜áƒ’ივე ტექსტი. \n" + +#: mergeresultwindow.cpp:812 +msgid "Total number of conflicts: " +msgstr "კáƒáƒœáƒ¤áƒšáƒ˜áƒ¥áƒ¢áƒ”ბის სრული რáƒáƒáƒ“ენáƒáƒ‘áƒ: " + +#: mergeresultwindow.cpp:813 +msgid "" +"\n" +"Nr of automatically solved conflicts: " +msgstr "" +"\n" +"áƒáƒ•áƒ¢áƒáƒ›áƒáƒ¢áƒ£áƒ áƒáƒ“ გáƒáƒ“áƒáƒ­áƒ áƒ˜áƒšáƒ˜ კáƒáƒœáƒ¤áƒšáƒ˜áƒ¥áƒ¢áƒ”ბის რáƒáƒáƒ“ენáƒáƒ‘áƒ: " + +#: mergeresultwindow.cpp:814 +msgid "" +"\n" +"Nr of unsolved conflicts: " +msgstr "" +"\n" +"გáƒáƒ“áƒáƒ£áƒ­áƒ áƒ”ლი კáƒáƒœáƒ¤áƒšáƒ˜áƒ¥áƒ¢áƒ”ბის რáƒáƒáƒ“ენáƒáƒ‘áƒ: " + +#: mergeresultwindow.cpp:816 +msgid "Conflicts" +msgstr "კáƒáƒœáƒ¤áƒšáƒ˜áƒ¥áƒ¢áƒ”ბი" + +#: mergeresultwindow.cpp:1652 +msgid "" +msgstr "" + +#: mergeresultwindow.cpp:1660 +msgid "" +msgstr "" + +#: mergeresultwindow.cpp:1662 mergeresultwindow.cpp:2427 +msgid "" +msgstr "" + +#: mergeresultwindow.cpp:2635 +msgid "" +"Not all conflicts are solved yet.\n" +"File not saved.\n" +msgstr "" +"ყველრკáƒáƒœáƒ¤áƒšáƒ˜áƒ¥áƒ¢áƒ˜ ჯერ áƒáƒ áƒáƒ გáƒáƒ“áƒáƒ­áƒ áƒ˜áƒšáƒ˜.\n" +"ფáƒáƒ˜áƒšáƒ˜ áƒáƒ áƒáƒ შენáƒáƒ®áƒ£áƒšáƒ˜.\n" + +#: mergeresultwindow.cpp:2637 +msgid "Conflicts Left" +msgstr "დáƒáƒ áƒ©áƒ”ნილი კáƒáƒœáƒ¤áƒšáƒ˜áƒ¥áƒ¢áƒ”ბი" + +#: mergeresultwindow.cpp:2649 +msgid "" +"\n" +"\n" +"Creating backup failed. File not saved." +msgstr "" +"\n" +"\n" +"სáƒáƒ áƒ”ზერვრáƒáƒ¡áƒšáƒ˜áƒ¡ შექმნრვერ შედგáƒ. ფáƒáƒ˜áƒšáƒ˜ áƒáƒ áƒáƒ შენáƒáƒ®áƒ£áƒšáƒ˜." + +#: mergeresultwindow.cpp:2649 mergeresultwindow.cpp:2689 +msgid "File Save Error" +msgstr "ფáƒáƒ˜áƒšáƒ˜áƒ¡ შენáƒáƒ®áƒ•áƒ˜áƒ¡ შეცდáƒáƒ›áƒ" + +#: mergeresultwindow.cpp:2689 +msgid "Error while writing." +msgstr "ჩáƒáƒ¬áƒ”რისáƒáƒ¡ შეცდáƒáƒ›áƒ." + +#: mergeresultwindow.cpp:3020 +msgid "Output" +msgstr "გáƒáƒ›áƒáƒœáƒáƒ¢áƒáƒœáƒ˜" + +#: mergeresultwindow.cpp:3032 mergeresultwindow.cpp:3139 +msgid "[Modified]" +msgstr "[ჩáƒáƒ¡áƒ¬áƒáƒ áƒ”ბულიáƒ]" + +#: mergeresultwindow.cpp:3039 +#, fuzzy +msgid "Encoding for saving" +msgstr "ფáƒáƒ˜áƒšáƒ˜áƒ¡ კáƒáƒ“ირებრC-თვის:" + +#: mergeresultwindow.cpp:3075 mergeresultwindow.cpp:3081 +#: mergeresultwindow.cpp:3087 +msgid "Codec from" +msgstr "" + +#: optiondialog.cpp:362 +msgid "Unicode, 8 bit" +msgstr "უნიკáƒáƒ“ი, 8 bit" + +#: optiondialog.cpp:363 +msgid "Unicode" +msgstr "უნიკáƒáƒ“ი" + +#: optiondialog.cpp:364 +msgid "Latin1" +msgstr "Latin1" + +#: optiondialog.cpp:383 +msgid "Change this if non-ASCII characters are not displayed correctly." +msgstr "შეცვáƒáƒšáƒ” თუ áƒáƒ áƒ ASCII სიმბáƒáƒšáƒáƒ”ბი áƒáƒ  áƒáƒ˜áƒ¡áƒáƒ®áƒ”ბრმáƒáƒ áƒ—ებულáƒáƒ“." + +#: optiondialog.cpp:510 +msgid "Editor & Diff Output Font" +msgstr "რედáƒáƒ¥áƒ¢áƒáƒ áƒ˜ დრDiff გáƒáƒ›áƒáƒœáƒáƒ¢áƒáƒœáƒ˜áƒ¡ შრიფტი" + +#: optiondialog.cpp:531 +msgid "Italic font for deltas" +msgstr "დელტáƒáƒ¡áƒ—ვის კურსივი" + +#: optiondialog.cpp:534 +msgid "" +"Selects the italic version of the font for differences.\n" +"If the font doesn't support italic characters, then this does nothing." +msgstr "" +"ირჩევს კურსივ შრიფტებს გáƒáƒœáƒ¡áƒ®áƒ•áƒáƒ•áƒ”ბისთვის.\n" +"თუ შრიფტს áƒáƒ  áƒáƒ¥áƒ•áƒ¡ კურსივის მხáƒáƒ áƒ“áƒáƒ­áƒ”რáƒ, მáƒáƒ¨áƒ˜áƒœ ეს áƒáƒ áƒáƒ¤áƒ”რს áƒáƒ  áƒáƒ™áƒ”თებს." + +#: optiondialog.cpp:542 +msgid "Color" +msgstr "ფერი" + +#: optiondialog.cpp:542 +#, fuzzy +msgid "Colors Settings" +msgstr "რეგიáƒáƒœáƒáƒšáƒ£áƒ áƒ˜ პáƒáƒ áƒáƒ›áƒ”ტრები" + +#: optiondialog.cpp:556 +msgid "Editor and Diff Views:" +msgstr "" + +#: optiondialog.cpp:564 +msgid "Foreground color:" +msgstr "ზედáƒáƒžáƒ˜áƒ áƒ˜áƒ¡ ფერი:" + +#: optiondialog.cpp:570 +msgid "Background color:" +msgstr "ფáƒáƒœáƒ˜áƒ¡ ფერი:" + +#: optiondialog.cpp:578 +msgid "Diff background color:" +msgstr "Diff ფáƒáƒœáƒ˜áƒ¡ ფერი:" + +#: optiondialog.cpp:585 +msgid "Color A:" +msgstr "ფერი A:" + +#: optiondialog.cpp:592 +msgid "Color B:" +msgstr "ფერი B:" + +#: optiondialog.cpp:599 +msgid "Color C:" +msgstr "ფერი C:" + +#: optiondialog.cpp:605 +msgid "Conflict color:" +msgstr "კáƒáƒœáƒ¤áƒšáƒ˜áƒ¥áƒ¢áƒ˜áƒ¡ ფერი:" + +#: optiondialog.cpp:612 +msgid "Current range background color:" +msgstr "მიმდინáƒáƒ áƒ” შუáƒáƒšáƒ”დის ფáƒáƒœáƒ˜áƒ¡ ფერი:" + +#: optiondialog.cpp:619 +msgid "Current range diff background color:" +msgstr "მიმდინáƒáƒ áƒ” შუáƒáƒšáƒ”დის diff ფáƒáƒœáƒ˜áƒ¡ ფერი:" + +#: optiondialog.cpp:625 +msgid "Color for manually aligned difference ranges:" +msgstr "" + +#: optiondialog.cpp:630 +#, fuzzy +msgid "Directory Comparison View:" +msgstr "დირექტáƒáƒ áƒ˜áƒ˜áƒ¡ შედáƒáƒ áƒ”ბის სტáƒáƒ¢áƒ£áƒ¡áƒ˜" + +#: optiondialog.cpp:636 +msgid "Newest file color:" +msgstr "" + +#: optiondialog.cpp:639 +msgid "" +"Changing this color will only be effective when starting the next directory " +"comparison." +msgstr "" + +#: optiondialog.cpp:644 +msgid "Oldest file color:" +msgstr "" + +#: optiondialog.cpp:651 +msgid "Middle age file color:" +msgstr "" + +#: optiondialog.cpp:658 +msgid "Color for missing files:" +msgstr "" + +#: optiondialog.cpp:670 +msgid "Editor" +msgstr "რედáƒáƒ¥áƒ¢áƒáƒ áƒ˜" + +#: optiondialog.cpp:670 +msgid "Editor Behavior" +msgstr "რედáƒáƒ¥áƒ¢áƒáƒ áƒ˜áƒ¡ ქცევáƒ" + +#: optiondialog.cpp:680 +msgid "Tab inserts spaces" +msgstr "Tab სვáƒáƒ•áƒ¡ ღáƒáƒ áƒ”ბს" + +#: optiondialog.cpp:683 +msgid "" +"On: Pressing tab generates the appropriate number of spaces.\n" +"Off: A Tab-character will be inserted." +msgstr "" +"ჩáƒáƒ áƒ—ულიáƒ: tab-ის დáƒáƒ­áƒ”რრáƒáƒ’ენერირებს ღáƒáƒ áƒ”ბის გáƒáƒœáƒ¡áƒáƒ–ღვრულ რáƒáƒáƒ“ენáƒáƒ‘áƒáƒ¡.\n" +"გáƒáƒ›áƒáƒ áƒ—ულიáƒ: ტáƒáƒ‘ულáƒáƒªáƒ˜áƒ˜áƒ¡ სიმბáƒáƒšáƒ იქნებრჩáƒáƒ¡áƒ›áƒ£áƒšáƒ˜." + +#: optiondialog.cpp:689 +msgid "Tab size:" +msgstr "ჩáƒáƒœáƒáƒ áƒ—ის ზáƒáƒ›áƒ:" + +#: optiondialog.cpp:694 +msgid "Auto indentation" +msgstr "áƒáƒ•áƒ¢áƒ შეწევáƒ" + +#: optiondialog.cpp:697 +msgid "" +"On: The indentation of the previous line is used for a new line.\n" +msgstr "" +"ჩáƒáƒ áƒ—ულიáƒ: წინრხáƒáƒ–ის შეწევრგáƒáƒ›áƒáƒ˜áƒ§áƒ”ნებრáƒáƒ®áƒáƒšáƒ˜ ხáƒáƒ–ისთვის.\n" + +#: optiondialog.cpp:701 +msgid "Auto copy selection" +msgstr "მáƒáƒœáƒ˜áƒ¨áƒ•áƒœáƒ˜áƒ¡ áƒáƒ•áƒ¢áƒ áƒáƒ¡áƒšáƒ˜" + +#: optiondialog.cpp:704 +msgid "" +"On: Any selection is immediately written to the clipboard.\n" +"Off: You must explicitely copy e.g. via Ctrl-C." +msgstr "" +"ჩáƒáƒ áƒ—ულიáƒ: ნებისმიერი მáƒáƒœáƒ˜áƒ¨áƒ•áƒœáƒ ჯდებრგáƒáƒªáƒ•áƒšáƒ˜áƒ¡ ბუფერში.\n" +"გáƒáƒ›áƒáƒ áƒ—ულიáƒ: თქვენ áƒáƒ¡áƒšáƒ˜ უნდრგáƒáƒáƒ™áƒ”თáƒáƒ— მáƒáƒ’. Ctrl-C." + +#: optiondialog.cpp:709 +msgid "Line end style:" +msgstr "ხáƒáƒ–ის დáƒáƒ¡áƒáƒ áƒ£áƒšáƒ˜áƒ¡ სტილი:" + +#: optiondialog.cpp:721 +msgid "" +"Sets the line endings for when an edited file is saved.\n" +"DOS/Windows: CR+LF; UNIX: LF; with CR=0D, LF=0A" +msgstr "" +"áƒáƒ§áƒ”ნებს ხáƒáƒ–ის ბáƒáƒšáƒáƒ¡ რáƒáƒ“ესáƒáƒª რედáƒáƒ¥áƒ¢áƒ£áƒ áƒ”ბული ფáƒáƒ˜áƒšáƒ˜ ინáƒáƒ®áƒ”ბáƒ.\n" +"DOS/Windows: CR+LF; UNIX: LF; with CR=0D, LF=0A" + +#: optiondialog.cpp:732 +#, fuzzy +msgid "Diff" +msgstr "KDiff3" + +#: optiondialog.cpp:732 +#, fuzzy +msgid "Diff Settings" +msgstr "Diff & შერწყმის პáƒáƒ áƒáƒ›áƒ”ტრები" + +#: optiondialog.cpp:743 +msgid "Preserve carriage return" +msgstr "" + +#: optiondialog.cpp:746 +msgid "" +"Show carriage return characters '\\r' if they exist.\n" +"Helps to compare files that were modified under different operating systems." +msgstr "" + +#: optiondialog.cpp:751 +msgid "Ignore numbers" +msgstr "რáƒáƒªáƒ®áƒ•áƒ”ბის იგნáƒáƒ áƒ˜áƒ áƒ”ბáƒ" + +#: optiondialog.cpp:754 +msgid "" +"Ignore number characters during line matching phase. (Similar to Ignore white " +"space.)\n" +"Might help to compare files with numeric data." +msgstr "" +"რიცხვების იგნáƒáƒ áƒ˜áƒ áƒ”ბრფრáƒáƒ–ების შედáƒáƒ áƒ”ბისáƒáƒ¡. (იგივე ნáƒáƒ”რáƒáƒ“ რáƒáƒ’áƒáƒ  ღáƒáƒ áƒ”ბის " +"იგნáƒáƒ áƒ˜áƒ áƒ”ბáƒ.)\n" +"შეიძლებრდáƒáƒ’ეხმáƒáƒ áƒáƒ— ციფრული მáƒáƒœáƒáƒªáƒ”მებით ფáƒáƒ˜áƒšáƒ”ბის შედáƒáƒ áƒ”ბისáƒáƒ¡." + +#: optiondialog.cpp:759 +msgid "Ignore C/C++ comments" +msgstr "C/C++ კáƒáƒ›áƒ”ნტáƒáƒ áƒ”ბის იგნáƒáƒ áƒ˜áƒ áƒ”ბáƒ" + +#: optiondialog.cpp:761 +msgid "Treat C/C++ comments like white space." +msgstr "C/C++ კáƒáƒ›áƒ”ნტáƒáƒ áƒ”ბის ღáƒáƒ áƒ”ბáƒáƒ“ გáƒáƒœáƒ®áƒ˜áƒšáƒ•áƒ." + +#: optiondialog.cpp:765 +msgid "Ignore case" +msgstr "რეგისტრის იგნáƒáƒ áƒ˜áƒ áƒ”ბáƒ" + +#: optiondialog.cpp:768 +msgid "Treat case differences like white space changes. ('a'<=>'A')" +msgstr "რეგისტრის სხვáƒáƒáƒ‘ის ღáƒáƒ áƒ”ბáƒáƒ“ გáƒáƒœáƒ®áƒ˜áƒšáƒ•áƒ. ('a'<=>'A')" + +#: optiondialog.cpp:772 +msgid "Preprocessor command:" +msgstr "Preprocessor ბრძáƒáƒœáƒ”ბáƒ:" + +#: optiondialog.cpp:776 +msgid "User defined pre-processing. (See the docs for details.)" +msgstr "" +"მáƒáƒ›áƒ®áƒ›áƒáƒ áƒ”ბლის მიერ გáƒáƒœáƒ¡áƒáƒ–ღვრული processing. (დეტáƒáƒšáƒ”ბისთვის იხ. დáƒáƒ™áƒ£áƒ›áƒ”ნტáƒáƒªáƒ˜áƒ.)" + +#: optiondialog.cpp:779 +msgid "Line-matching preprocessor command:" +msgstr "ხáƒáƒ–ის დáƒáƒ›áƒ—ხვევის preprocessor ბრძáƒáƒœáƒ”ბáƒ:" + +#: optiondialog.cpp:783 +msgid "" +"This pre-processor is only used during line matching.\n" +"(See the docs for details.)" +msgstr "" + +#: optiondialog.cpp:786 +msgid "Try hard (slower)" +msgstr "მáƒáƒ’რáƒáƒ“ ცდრ(ნელიáƒ)" + +#: optiondialog.cpp:789 +msgid "" +"Enables the --minimal option for the external diff.\n" +"The analysis of big files will be much slower." +msgstr "" +"გáƒáƒ áƒ” diff-სთვის რთáƒáƒ•áƒ¡ --minimal პáƒáƒ áƒáƒ›áƒ”ტრს.\n" +"დიდი ფáƒáƒ˜áƒšáƒ”ბის áƒáƒœáƒáƒšáƒ˜áƒ–ი ბევრáƒáƒ“ შენელდებáƒ." + +#: optiondialog.cpp:794 +msgid "Auto advance delay (ms):" +msgstr "" + +#: optiondialog.cpp:799 +msgid "" +"When in Auto-Advance mode the result of the current selection is shown \n" +"for the specified time, before jumping to the next conflict. Range: 0-2000 ms" +msgstr "" + +#: optiondialog.cpp:809 +#, fuzzy +msgid "Merge Settings" +msgstr "Diff & შერწყმის პáƒáƒ áƒáƒ›áƒ”ტრები" + +#: optiondialog.cpp:822 +msgid "White space 2-file merge default:" +msgstr "" + +#: optiondialog.cpp:826 optiondialog.cpp:839 +msgid "Manual Choice" +msgstr "ხელით áƒáƒ áƒ©áƒ”ვáƒ" + +#: optiondialog.cpp:830 optiondialog.cpp:844 +msgid "" +"Allow the merge algorithm to automatically select an input for white-space-only " +"changes." +msgstr "" + +#: optiondialog.cpp:835 +msgid "White space 3-file merge default:" +msgstr "" + +#: optiondialog.cpp:849 +msgid "Automatic Merge Regular Expression" +msgstr "" + +#: optiondialog.cpp:858 smalldialogs.cpp:397 +msgid "Auto merge regular expression:" +msgstr "" + +#: optiondialog.cpp:862 +msgid "" +"Regular expression for lines where KDiff3 should automatically choose one " +"source.\n" +"When a line with a conflict matches the regular expression then\n" +"- if available - C, otherwise B will be chosen." +msgstr "" + +#: optiondialog.cpp:868 +msgid "Run regular expression auto merge on merge start" +msgstr "" + +#: optiondialog.cpp:870 +msgid "" +"Run the merge for auto merge regular expressions\n" +"immediately when a merge starts.\n" +msgstr "" + +#: optiondialog.cpp:875 +msgid "Version Control History Merging" +msgstr "" + +#: optiondialog.cpp:884 smalldialogs.cpp:424 +msgid "History start regular expression:" +msgstr "" + +#: optiondialog.cpp:888 +msgid "" +"Regular expression for the start of the version control history entry.\n" +"Usually this line contains the \"$Log$\"-keyword.\n" +"Default value: \".*\\$Log.*\\$.*\"" +msgstr "" + +#: optiondialog.cpp:894 smalldialogs.cpp:453 +msgid "History entry start regular expression:" +msgstr "" + +#: optiondialog.cpp:906 +msgid "" +"A version control history entry consists of several lines.\n" +"Specify the regular expression to detect the first line (without the leading " +"comment).\n" +"Use parentheses to group the keys you want to use for sorting.\n" +"If left empty, then KDiff3 assumes that empty lines separate history entries.\n" +"See the documentation for details." +msgstr "" + +#: optiondialog.cpp:914 +msgid "History merge sorting" +msgstr "" + +#: optiondialog.cpp:916 +msgid "Sort version control history by a key." +msgstr "" + +#: optiondialog.cpp:926 +msgid "History entry start sort key order:" +msgstr "" + +#: optiondialog.cpp:930 +msgid "" +"Each parentheses used in the regular expression for the history start entry\n" +"groups a key that can be used for sorting.\n" +"Specify the list of keys (that are numbered in order of occurrence\n" +"starting with 1) using ',' as separator (e.g. \"4,5,6,1,2,3,7\").\n" +"If left empty, then no sorting will be done.\n" +"See the documentation for details." +msgstr "" + +#: optiondialog.cpp:941 +msgid "Merge version control history on merge start" +msgstr "" + +#: optiondialog.cpp:943 +msgid "Run version control history automerge on merge start." +msgstr "" + +#: optiondialog.cpp:947 +msgid "Test your regular expressions" +msgstr "" + +#: optiondialog.cpp:952 +msgid "Irrelevant merge command:" +msgstr "" + +#: optiondialog.cpp:956 +msgid "" +"If specified this script is run after automerge\n" +"when no other relevant changes were detected.\n" +"Called with the parameters: filename1 filename2 filename3" +msgstr "" + +#: optiondialog.cpp:966 +msgid "Directory Merge" +msgstr "დირექტáƒáƒ áƒ˜áƒáƒ—რშერწყმáƒ" + +#: optiondialog.cpp:975 +msgid "Recursive directories" +msgstr "დირექტáƒáƒ áƒ˜áƒáƒ—რრეკურსიáƒ" + +#: optiondialog.cpp:977 +msgid "Whether to analyze subdirectories or not." +msgstr "ქვესáƒáƒ¥áƒáƒ¦áƒáƒšáƒ“ეები გáƒáƒáƒœáƒáƒšáƒ˜áƒ–დეს თუ áƒáƒ áƒ." + +#: optiondialog.cpp:979 +msgid "File pattern(s):" +msgstr "ფáƒáƒ˜áƒšáƒ˜áƒ¡ შáƒáƒ‘ლáƒáƒœ(ებ)ი:" + +#: optiondialog.cpp:984 +msgid "" +"Pattern(s) of files to be analyzed. \n" +"Wildcards: '*' and '?'\n" +"Several Patterns can be specified by using the separator: ';'" +msgstr "" +"გáƒáƒ¡áƒáƒáƒœáƒáƒšáƒ˜áƒ–ებელი ფáƒáƒ˜áƒšáƒ”ბის შáƒáƒ‘ლáƒáƒœ(ებ)ი.\n" +"Wildcards: '*' დრ'?'\n" +"რáƒáƒ›áƒ“ენიმე შáƒáƒ‘ლáƒáƒœáƒ˜áƒ¡ მითითებრშეიძლებრ';' გáƒáƒ›áƒ§áƒáƒ¤áƒ˜áƒ—" + +#: optiondialog.cpp:990 +msgid "File-anti-pattern(s):" +msgstr "ფáƒáƒ˜áƒšáƒ˜áƒ¡-áƒáƒœáƒ¢áƒ˜-შáƒáƒ‘ლáƒáƒœ(ებ)ი:" + +#: optiondialog.cpp:995 +msgid "" +"Pattern(s) of files to be excluded from analysis. \n" +"Wildcards: '*' and '?'\n" +"Several Patterns can be specified by using the separator: ';'" +msgstr "" +"áƒáƒ áƒ გáƒáƒ¡áƒáƒáƒœáƒáƒšáƒ˜áƒ–ებელი ფáƒáƒ˜áƒšáƒ”ბის შáƒáƒ‘ლáƒáƒœ(ებ)ი.\n" +"Wildcards: '*' დრ'?'\n" +"რáƒáƒ›áƒ“ენიმე შáƒáƒ‘ლáƒáƒœáƒ˜áƒ¡ მითითებრშეიძლებრ';' გáƒáƒ›áƒ§áƒáƒ¤áƒ˜áƒ—" + +#: optiondialog.cpp:1001 +msgid "Dir-anti-pattern(s):" +msgstr "Dir-áƒáƒœáƒ¢áƒ˜-შáƒáƒ‘ლáƒáƒœ(ებ)ი:" + +#: optiondialog.cpp:1006 +msgid "" +"Pattern(s) of directories to be excluded from analysis. \n" +"Wildcards: '*' and '?'\n" +"Several Patterns can be specified by using the separator: ';'" +msgstr "" +"áƒáƒ áƒ გáƒáƒ¡áƒáƒáƒœáƒáƒšáƒ˜áƒ–ებელი დირექტáƒáƒ áƒ˜áƒ”ბის შáƒáƒ‘ლáƒáƒœ(ებ)ი.\n" +"Wildcards: '*' დრ'?'\n" +"რáƒáƒ›áƒ“ენიმე შáƒáƒ‘ლáƒáƒœáƒ˜áƒ¡ მითითებრშეიძლებრ';' გáƒáƒ›áƒ§áƒáƒ¤áƒ˜áƒ—" + +#: optiondialog.cpp:1012 +msgid "Use .cvsignore" +msgstr ".cvsignore-ის გáƒáƒ›áƒáƒ§áƒ”ნებáƒ" + +#: optiondialog.cpp:1015 +msgid "" +"Extends the antipattern to anything that would be ignored by CVS.\n" +"Via local \".cvsignore\"-files this can be directory specific." +msgstr "" + +#: optiondialog.cpp:1020 +msgid "Find hidden files and directories" +msgstr "დáƒáƒ›áƒáƒšáƒ£áƒšáƒ˜ ფáƒáƒ˜áƒšáƒ”ბის დრდირექტáƒáƒ áƒ˜áƒ”ბის ძიებáƒ" + +#: optiondialog.cpp:1023 +msgid "Finds files and directories with the hidden attribute." +msgstr "ფáƒáƒ˜áƒšáƒ”ბის დრდირექტáƒáƒ áƒ˜áƒ”ბის ძიებრდáƒáƒ›áƒáƒšáƒ£áƒšáƒ˜ áƒáƒ¢áƒ áƒ˜áƒ‘უტით." + +#: optiondialog.cpp:1025 +msgid "Finds files and directories starting with '.'." +msgstr "'.'-ით დáƒáƒ¬áƒ§áƒ”ბული ფáƒáƒ˜áƒšáƒ”ბის დრდირექტáƒáƒ áƒ˜áƒ”ბის ძიებáƒ." + +#: optiondialog.cpp:1029 +msgid "Follow file links" +msgstr "ფáƒáƒ˜áƒšáƒ—რბმულზე გáƒáƒ“áƒáƒ¡áƒ•áƒšáƒ" + +#: optiondialog.cpp:1032 +msgid "" +"On: Compare the file the link points to.\n" +"Off: Compare the links." +msgstr "" +"ჩáƒáƒ áƒ—ულიáƒ: იმ ფáƒáƒ˜áƒšáƒ—რშედáƒáƒ áƒ”ბრრáƒáƒ–ეც მიუთითებს ბმული.\n" +"გáƒáƒ›áƒáƒ áƒ—ულიáƒ: ბმულების შედáƒáƒ áƒ”ბáƒ." + +#: optiondialog.cpp:1037 +msgid "Follow directory links" +msgstr "დირექტáƒáƒ áƒ˜áƒáƒ—რბმულზე გáƒáƒ“áƒáƒ¡áƒ•áƒšáƒ" + +#: optiondialog.cpp:1040 +msgid "" +"On: Compare the directory the link points to.\n" +"Off: Compare the links." +msgstr "" +"ჩáƒáƒ áƒ—ულიáƒ: იმ დირექტáƒáƒ áƒ˜áƒáƒ—რშედáƒáƒ áƒ”ბრრáƒáƒ–ეც მიუთითებს ბმული.\n" +"გáƒáƒ›áƒáƒ áƒ—ულიáƒ: ბმულების შედáƒáƒ áƒ”ბáƒ." + +#: optiondialog.cpp:1056 +msgid "Case sensitive filename comparison" +msgstr "" + +#: optiondialog.cpp:1059 +msgid "" +"The directory comparison will compare files or directories when their names " +"match.\n" +"Set this option if the case of the names must match. (Default for Windows is " +"off, otherwise on.)" +msgstr "" + +#: optiondialog.cpp:1063 +msgid "File Comparison Mode" +msgstr "ფáƒáƒ˜áƒšáƒ—რშედáƒáƒ áƒ”ბის რეჟიმი" + +#: optiondialog.cpp:1067 +msgid "Binary comparison" +msgstr "áƒáƒ áƒáƒ‘ითი შედáƒáƒ áƒ”ბáƒ" + +#: optiondialog.cpp:1068 +msgid "Binary comparison of each file. (Default)" +msgstr "ყáƒáƒ•áƒ”ლი ფáƒáƒ˜áƒšáƒ˜áƒ¡ áƒáƒ áƒáƒ‘ითი შედáƒáƒ áƒ”ბáƒ. (ნáƒáƒ’ულისხმები)" + +#: optiondialog.cpp:1070 +msgid "Full analysis" +msgstr "სრული áƒáƒœáƒáƒšáƒ˜áƒ–ი" + +#: optiondialog.cpp:1071 +msgid "" +"Do a full analysis and show statistics information in extra columns.\n" +"(Slower than a binary comparison, much slower for binary files.)" +msgstr "" +"სრული áƒáƒœáƒáƒšáƒ˜áƒ–ის გáƒáƒ™áƒ”თებრდრსტáƒáƒ¢áƒ˜áƒ¡áƒ¢áƒ˜áƒ™áƒ£áƒ áƒ˜ ინფáƒáƒ áƒ›áƒáƒªáƒ˜áƒ˜áƒ¡ ექსტრრსვეტში áƒáƒ¡áƒáƒ®áƒ•áƒ.\n" +"(უფრრნელირვიდრე ბინáƒáƒ áƒ£áƒšáƒ˜ შედáƒáƒ áƒ”ბáƒ, ბევრáƒáƒ“ ნელი ბინáƒáƒ áƒ£áƒšáƒ˜ ფáƒáƒ˜áƒšáƒ”ბისთვის.)" + +#: optiondialog.cpp:1074 +msgid "Trust the modification date (unsafe)" +msgstr "მáƒáƒ“იფიცირების თáƒáƒ áƒ˜áƒ¦áƒ˜ ნდáƒáƒ‘რ(áƒáƒ áƒáƒ სáƒáƒœáƒ“áƒ)" + +#: optiondialog.cpp:1075 +msgid "" +"Assume that files are equal if the modification date and file length are " +"equal.\n" +"Useful for big directories or slow networks." +msgstr "" +"თუ მáƒáƒ“იფიცირების თáƒáƒ áƒ˜áƒ¦áƒ˜ დრფáƒáƒ˜áƒšáƒ˜áƒ¡ ზáƒáƒ›áƒ ტáƒáƒšáƒ˜áƒ, მáƒáƒ— იდენტურáƒáƒ“ მიჩნევáƒ.\n" +"კáƒáƒ áƒ’ირდიდი დირექტáƒáƒ áƒ˜áƒ”ბისთვის დრნელი ქსელებისთვის." + +#: optiondialog.cpp:1078 +msgid "Trust the size (unsafe)" +msgstr "ზáƒáƒ›áƒ˜áƒ¡ ნდáƒáƒ‘რ(áƒáƒ áƒáƒ სáƒáƒœáƒ“áƒ)" + +#: optiondialog.cpp:1079 +msgid "" +"Assume that files are equal if their file lengths are equal.\n" +"Useful for big directories or slow networks when the date is modified during " +"download." +msgstr "" +"თუ ფáƒáƒ˜áƒšáƒ˜áƒ¡ ზáƒáƒ›áƒ ტáƒáƒšáƒ˜áƒ, მáƒáƒ— იდენტურáƒáƒ“ მიჩნევáƒ.\n" +"კáƒáƒ áƒ’ირდიდი დირექტáƒáƒ áƒ˜áƒ”ბისთვის დრნელი ქსელებისთვის, რáƒáƒ“ესáƒáƒª მáƒáƒ“იფიკáƒáƒªáƒ˜áƒ˜áƒ¡ დრრ" +"ჩáƒáƒ›áƒáƒ¥áƒáƒ©áƒ•áƒ˜áƒ¡áƒáƒ¡ იცვლებáƒ." + +#: optiondialog.cpp:1083 +msgid "Synchronize directories" +msgstr "დირექტáƒáƒ áƒ˜áƒ”ბის სინქრáƒáƒœáƒ˜áƒ–áƒáƒªáƒ˜áƒ" + +#: optiondialog.cpp:1086 +msgid "" +"Offers to store files in both directories so that\n" +"both directories are the same afterwards.\n" +"Works only when comparing two directories without specifying a destination." +msgstr "" + +#: optiondialog.cpp:1092 +msgid "White space differences considered equal" +msgstr "ინტერვáƒáƒšáƒ”ბის სხვáƒáƒáƒ‘ის ტáƒáƒšáƒáƒ“ ჩáƒáƒ—ვლáƒ" + +#: optiondialog.cpp:1095 +msgid "" +"If files differ only by white space consider them equal.\n" +"This is only active when full analysis is chosen." +msgstr "" +"თუ ფáƒáƒ˜áƒšáƒ”ბი მხáƒáƒšáƒáƒ“ ინტერვáƒáƒšáƒ”ბით გáƒáƒœáƒ¡áƒ®áƒ•áƒáƒ•áƒ“ებáƒ, მáƒáƒ—ი ტáƒáƒšáƒáƒ“ ჩáƒáƒ—თვლáƒ.\n" +"ეს áƒáƒ¥áƒ¢áƒ˜áƒ£áƒ áƒ˜áƒ მხáƒáƒšáƒáƒ“ თუ სრული áƒáƒœáƒáƒšáƒ˜áƒ–ირáƒáƒ áƒ©áƒ”ული." + +#: optiondialog.cpp:1101 +msgid "Copy newer instead of merging (unsafe)" +msgstr "შერწმის ნáƒáƒªáƒ•áƒšáƒáƒ“ áƒáƒ®áƒšáƒ˜áƒ¡ áƒáƒ¡áƒšáƒ˜ (სáƒáƒ®áƒ˜áƒ¤áƒáƒ—áƒ)" + +#: optiondialog.cpp:1104 +msgid "" +"Don't look inside, just take the newer file.\n" +"(Use this only if you know what you are doing!)\n" +"Only effective when comparing two directories." +msgstr "" +"შიგნით ნუ ჩáƒáƒ˜áƒ®áƒ”დáƒáƒ•áƒ¢, მხáƒáƒšáƒáƒ“ áƒáƒ˜áƒ¦áƒ”თ áƒáƒ®áƒáƒšáƒ˜ ფáƒáƒ˜áƒšáƒ˜.\n" +"(გáƒáƒ›áƒáƒ˜áƒ§áƒ”ნეთ ეს მáƒáƒ áƒ¢áƒ მáƒáƒ¨áƒ˜áƒœ თუ იცით რáƒáƒ¡ áƒáƒ™áƒ”თებთ!)\n" +"მáƒáƒ¨áƒ˜áƒœáƒáƒ ეფექტური, რáƒáƒ“ესáƒáƒª áƒáƒ  დირექტáƒáƒ áƒ˜áƒáƒ¡ áƒáƒ“áƒáƒ áƒ”ბთ." + +#: optiondialog.cpp:1109 +msgid "Backup files (.orig)" +msgstr "სáƒáƒ áƒ”ზერვრáƒáƒ¡áƒšáƒ˜áƒ¡ ფáƒáƒ˜áƒšáƒ˜ (.orig)" + +#: optiondialog.cpp:1112 +msgid "" +"When a file would be saved over an old file, then the old file\n" +"will be renamed with a '.orig'-extension instead of being deleted." +msgstr "" +"რáƒáƒ“ესáƒáƒª ფáƒáƒ˜áƒšáƒ˜ ძველ ფáƒáƒ˜áƒšáƒ–ე უნდრიქნáƒáƒ¡ შენáƒáƒ®áƒ£áƒšáƒ˜, მáƒáƒ¨áƒ˜áƒœ ძველ ფáƒáƒ˜áƒšáƒ¡\n" +"სáƒáƒ®áƒ”ლი გáƒáƒ“áƒáƒ”რქმევრ'.orig' გáƒáƒ¤áƒáƒ áƒ—áƒáƒ•áƒ”ბით იმის მáƒáƒ’ივრáƒáƒ“ რáƒáƒ› წáƒáƒ˜áƒ¨áƒáƒšáƒáƒ¡." + +#: optiondialog.cpp:1176 +msgid "Regional Settings" +msgstr "რეგიáƒáƒœáƒáƒšáƒ£áƒ áƒ˜ პáƒáƒ áƒáƒ›áƒ”ტრები" + +#: optiondialog.cpp:1272 +msgid "Language (restart required)" +msgstr "ენრ(გáƒáƒ“áƒáƒ¢áƒ•áƒ˜áƒ áƒ—ვáƒáƒ სáƒáƒ­áƒ˜áƒ áƒ)" + +#: optiondialog.cpp:1304 +msgid "" +"Choose the language of the GUI-strings or \"Auto\".\n" +"For a change of language to take place, quit and restart KDiff3." +msgstr "" +"GUI-სტრიქáƒáƒœáƒ˜áƒ¡áƒ—ვის ენის შეცვლრáƒáƒœ \"áƒáƒ•áƒ¢áƒ\".\n" +"ენის ცვლილებრრáƒáƒ› გáƒáƒáƒ¥áƒ¢áƒ˜áƒ£áƒ áƒ“ეს დáƒáƒ®áƒ£áƒ áƒ”თ დრგáƒáƒ“áƒáƒ¢áƒ•áƒ˜áƒ áƒ—ეთ KDiff3." + +#: optiondialog.cpp:1322 +msgid "Use the same encoding for everything:" +msgstr "ყველáƒáƒ¡áƒ—ვის იგივე კáƒáƒ“ირების გáƒáƒ›áƒáƒ§áƒ”ნებáƒ:" + +#: optiondialog.cpp:1325 +msgid "" +"Enable this allows to change all encodings by changing the first only.\n" +"Disable this if different individual settings are needed." +msgstr "" +"áƒáƒ›áƒ˜áƒ¡ ჩáƒáƒ áƒ—ვრსáƒáƒ¡áƒ£áƒáƒšáƒ”ბáƒáƒ¡ გáƒáƒ«áƒšáƒ”ვთ ყველრკáƒáƒ“ირებრშეცვáƒáƒšáƒáƒ— მხáƒáƒšáƒáƒ“ პირველის " +"შეცვლით.\n" +"გáƒáƒ›áƒáƒ áƒ—ეთ ეს თუ გáƒáƒœáƒ¡áƒ®áƒ•áƒáƒ•áƒ”ბული ინდივიდუáƒáƒšáƒ£áƒ áƒ£áƒ˜ პáƒáƒ áƒáƒ›áƒ”ტრებირსáƒáƒ­áƒ˜áƒ áƒ." + +#: optiondialog.cpp:1330 +msgid "Note: Local Encoding is " +msgstr "შენიშვნáƒ: ლáƒáƒ™áƒáƒšáƒ£áƒ áƒ˜ კáƒáƒ“ირებრáƒáƒ áƒ˜áƒ¡" + +#: optiondialog.cpp:1334 +msgid "File Encoding for A:" +msgstr "ფáƒáƒ˜áƒšáƒ˜áƒ¡ კáƒáƒ“ირებრA-თვის:" + +#: optiondialog.cpp:1340 +msgid "" +"If enabled then Unicode (UTF-16 or UTF-8) encoding will be detected.\n" +"If the file encoding is not detected then the selected encoding will be used as " +"fallback.\n" +"(Unicode detection depends on the first bytes of a file - the byte order mark " +"\"BOM\".)" +msgstr "" + +#: optiondialog.cpp:1344 optiondialog.cpp:1353 optiondialog.cpp:1362 +msgid "Auto Detect Unicode" +msgstr "" + +#: optiondialog.cpp:1349 +msgid "File Encoding for B:" +msgstr "ფáƒáƒ˜áƒšáƒ˜áƒ¡ კáƒáƒ“ირებრB-თვის:" + +#: optiondialog.cpp:1358 +msgid "File Encoding for C:" +msgstr "ფáƒáƒ˜áƒšáƒ˜áƒ¡ კáƒáƒ“ირებრC-თვის:" + +#: optiondialog.cpp:1367 +msgid "File Encoding for Merge Output and Saving:" +msgstr "ფáƒáƒ˜áƒšáƒ˜áƒ¡ კáƒáƒ“ირებრგáƒáƒ›áƒáƒœáƒáƒ¢áƒáƒœáƒ˜áƒ¡ შერწყმისრდრშენáƒáƒ®áƒ•áƒ˜áƒ¡áƒ—ვის:" + +#: optiondialog.cpp:1371 +#, fuzzy +msgid "Auto Select" +msgstr "მáƒáƒœáƒ˜áƒ¨áƒ•áƒœáƒ˜áƒ¡ áƒáƒ•áƒ¢áƒ áƒáƒ¡áƒšáƒ˜" + +#: optiondialog.cpp:1374 +msgid "" +"If enabled then the encoding from the input files is used.\n" +"In ambiguous cases a dialog will ask the user to choose the encoding for " +"saving." +msgstr "" + +#: optiondialog.cpp:1378 +msgid "File Encoding for Preprocessor Files:" +msgstr "ფáƒáƒ˜áƒšáƒ˜áƒ¡ კáƒáƒ“ირებრ-პრეპრáƒáƒªáƒ”სáƒáƒ áƒ˜áƒ¡ ფáƒáƒ˜áƒšáƒ”ბისთვის:" + +#: optiondialog.cpp:1389 +msgid "Right To Left Language" +msgstr "მáƒáƒ áƒ¯áƒ•áƒœáƒ˜áƒ“áƒáƒœ მáƒáƒ áƒªáƒ®áƒœáƒ˜áƒ• ენáƒ" + +#: optiondialog.cpp:1392 +msgid "" +"Some languages are read from right to left.\n" +"This setting will change the viewer and editor accordingly." +msgstr "" +"ზáƒáƒ’ი ენრმáƒáƒ áƒ¯áƒ•áƒœáƒ˜áƒ“áƒáƒœ მáƒáƒ áƒªáƒ®áƒœáƒ˜áƒ• იკითხებáƒ.\n" +"ეს პáƒáƒ áƒáƒ›áƒ”ტრი შეცვლის ხედს დრრედáƒáƒ¥áƒ¢áƒáƒ áƒ¡." + +#: optiondialog.cpp:1402 +#, fuzzy +msgid "Integration" +msgstr "áƒáƒžáƒ”რáƒáƒªáƒ˜áƒ" + +#: optiondialog.cpp:1402 +#, fuzzy +msgid "Integration Settings" +msgstr "რეგიáƒáƒœáƒáƒšáƒ£áƒ áƒ˜ პáƒáƒ áƒáƒ›áƒ”ტრები" + +#: optiondialog.cpp:1412 +msgid "Command line options to ignore:" +msgstr "" + +#: optiondialog.cpp:1417 +msgid "" +"List of command line options that should be ignored when KDiff3 is used by " +"other tools.\n" +"Several values can be specified if separated via ';'\n" +"This will suppress the \"Unknown option\"-error." +msgstr "" + +#: optiondialog.cpp:1480 +msgid "" +"You selected a variable width font.\n" +"\n" +"Because this program doesn't handle variable width fonts\n" +"correctly, you might experience problems while editing.\n" +"\n" +"Do you want to continue or do you want to select another font." +msgstr "" +"თქვენ áƒáƒ˜áƒ áƒ©áƒ˜áƒ”თ შრიფტის ცვლáƒáƒ“ი სიგáƒáƒœáƒ”.\n" +"\n" +"რáƒáƒ“გáƒáƒœ ეს პრáƒáƒ’რáƒáƒ›áƒ ვერ áƒáƒ›áƒ£áƒ¨áƒáƒ•áƒ”ბს შრიფტის ცვლáƒáƒ“ სიგáƒáƒœáƒ”ს\n" +"სწáƒáƒ áƒáƒ“, თქვენ შეიძლებრრედáƒáƒ¥áƒ¢áƒ˜áƒ áƒ”ბისáƒáƒ¡ პრáƒáƒ‘ლემები შეგექმნáƒáƒ—.\n" +"\n" +"გსურთ გáƒáƒáƒ’რძელáƒáƒ— თუ სხვრშრიფტს áƒáƒ˜áƒ áƒ©áƒ”ვთ." + +#: optiondialog.cpp:1484 +msgid "Incompatible Font" +msgstr "შეუთáƒáƒ•áƒ¡áƒ”ბელი შრიფტი" + +#: optiondialog.cpp:1485 +msgid "Continue at Own Risk" +msgstr "სáƒáƒ™áƒ£áƒ—áƒáƒ áƒ˜ თáƒáƒ•áƒ˜áƒ¡ იმედáƒáƒ— გáƒáƒ’რძელებáƒ" + +#: optiondialog.cpp:1485 +msgid "Select Another Font" +msgstr "სხვრშრიფტის áƒáƒ›áƒáƒ áƒ©áƒ”ვáƒ" + +#: optiondialog.cpp:1521 +msgid "This resets all options. Not only those of the current topic." +msgstr "" +"ეს ყველრპáƒáƒ áƒáƒ›áƒ”ტრს სáƒáƒ¬áƒ§áƒ˜áƒ¡ მდგáƒáƒ›áƒáƒ áƒ”áƒáƒ‘áƒáƒ–ე áƒáƒ‘რუნებს. áƒáƒ áƒ მხáƒáƒšáƒáƒ“ მიმდინáƒáƒ áƒ” თემისáƒáƒ¡." + +#: pdiff.cpp:258 +msgid "PreprocessorCmd: " +msgstr "PreprocessorCmd: " + +#: pdiff.cpp:263 +msgid "" +"The following option(s) you selected might change data:\n" +msgstr "" +"შემდეგმრპáƒáƒ áƒáƒ›áƒ”ტრ(ებ)მáƒ, რáƒáƒ›áƒšáƒ”ბიც áƒáƒ˜áƒ áƒ©áƒ˜áƒ”თ, შეიძლებრშეცვáƒáƒšáƒáƒ¡ მáƒáƒœáƒáƒªáƒ”მები:\n" + +#: pdiff.cpp:264 +msgid "" +"\n" +"Most likely this is not wanted during a merge.\n" +"Do you want to disable these settings or continue with these settings active?" +msgstr "" +"\n" +"რáƒáƒ’áƒáƒ áƒª ჩáƒáƒœáƒ¡ ეს შერწყმისáƒáƒ¡ áƒáƒ áƒáƒ სáƒáƒ­áƒ˜áƒ áƒ.\n" +"გსურთ áƒáƒ› პáƒáƒ áƒáƒ›áƒ”ტრების გáƒáƒ›áƒáƒ áƒ—ვრთუ áƒáƒ¥áƒ¢áƒ˜áƒ£áƒ áƒ˜ პáƒáƒ áƒáƒ›áƒ”ტრებით გáƒáƒ’რძელებáƒ?" + +#: pdiff.cpp:266 +msgid "Option Unsafe for Merging" +msgstr "პáƒáƒ áƒáƒ›áƒ”ტრი შერწყმისთვის áƒáƒ áƒáƒ უსáƒáƒ¤áƒ áƒ—ხáƒ" + +#: pdiff.cpp:267 +msgid "Use These Options During Merge" +msgstr "შერწყმისáƒáƒ¡ áƒáƒ› პáƒáƒ áƒáƒ›áƒ”ტრების გáƒáƒ›áƒáƒ§áƒ”ნებáƒ" + +#: pdiff.cpp:267 +msgid "Disable Unsafe Options" +msgstr "სáƒáƒ®áƒ˜áƒ¤áƒáƒ—რპáƒáƒ áƒáƒ›áƒ”ტრების გáƒáƒ›áƒáƒ áƒ—ვáƒ" + +#: pdiff.cpp:297 +msgid "Loading A" +msgstr "იტვირთებრA" + +#: pdiff.cpp:301 +msgid "Loading B" +msgstr "იტვირთებრB" + +#: pdiff.cpp:318 pdiff.cpp:344 +msgid "Diff: A <-> B" +msgstr "Diff: A <-> B" + +#: pdiff.cpp:324 pdiff.cpp:366 +msgid "Linediff: A <-> B" +msgstr "Linediff: A <-> B" + +#: pdiff.cpp:335 +msgid "Loading C" +msgstr "იტვირთებრC" + +#: pdiff.cpp:347 +msgid "Diff: B <-> C" +msgstr "Diff: B <-> C" + +#: pdiff.cpp:350 +msgid "Diff: A <-> C" +msgstr "Diff: A <-> C" + +#: pdiff.cpp:369 +msgid "Linediff: B <-> C" +msgstr "Linediff: B <-> C" + +#: pdiff.cpp:372 +msgid "Linediff: A <-> C" +msgstr "Linediff: A <-> C" + +#: pdiff.cpp:513 +#, fuzzy +msgid "All input files contain the same text, but are not binary equal." +msgstr "ყველრშეტáƒáƒœáƒ˜áƒšáƒ˜ ფáƒáƒ˜áƒšáƒ˜áƒ¡ შეიცáƒáƒ•áƒ¡ ერთიდáƒáƒ˜áƒ’ივე ტექსტი." + +#: pdiff.cpp:515 pdiff.cpp:517 pdiff.cpp:519 +#, fuzzy +msgid "" +"Files %1 and %2 are binary equal.\n" +msgstr "" +"B დრC ბინáƒáƒ áƒ£áƒšáƒáƒ“ ტáƒáƒšáƒ˜áƒ.\n" + +#: pdiff.cpp:516 pdiff.cpp:518 pdiff.cpp:520 +#, fuzzy +msgid "" +"Files %1 and %2 have equal text, but are not binary equal. \n" +msgstr "" +"A დრB ბინáƒáƒ áƒ£áƒšáƒáƒ“ ტáƒáƒšáƒ˜áƒ.\n" + +#: pdiff.cpp:530 +msgid "" +"Some inputfiles don't seem to be pure textfiles.\n" +"Note that the KDiff3-merge was not meant for binary data.\n" +"Continue at your own risk." +msgstr "" +"ზáƒáƒ’ი შეტáƒáƒœáƒ˜áƒ¡ ფáƒáƒ˜áƒšáƒ˜ áƒáƒ  áƒáƒ áƒ˜áƒ¡ მხáƒáƒšáƒáƒ“ ტექსტური ფáƒáƒ˜áƒšáƒ˜.\n" +"გáƒáƒ˜áƒ—ვáƒáƒšáƒ˜áƒ¡áƒ¬áƒ˜áƒœáƒ”თ რáƒáƒ› KDiff3-შერწყმრáƒáƒ  გულისხმáƒáƒ‘ს ბინáƒáƒ áƒ£áƒš მáƒáƒœáƒáƒªáƒ”მებს.\n" +"გáƒáƒáƒ’რძელეთ სáƒáƒ™áƒ£áƒ—áƒáƒ áƒ˜ თáƒáƒ•áƒ˜áƒ¡ იმედáƒáƒ—." + +#: pdiff.cpp:979 +msgid "Abort" +msgstr "შეწყვეტáƒ" + +#: pdiff.cpp:985 pdiff.cpp:1073 +msgid "Opening files..." +msgstr "ფáƒáƒ˜áƒšáƒ—რგáƒáƒ®áƒ¡áƒœáƒ..." + +#: pdiff.cpp:1050 pdiff.cpp:1121 +msgid "File open error" +msgstr "ფáƒáƒ˜áƒšáƒ˜áƒ¡ გáƒáƒ®áƒ¡áƒœáƒ˜áƒ¡ შეცდáƒáƒ›áƒ" + +#: pdiff.cpp:1153 +msgid "Cutting selection..." +msgstr "მáƒáƒœáƒ˜áƒ¨áƒœáƒ£áƒšáƒ˜ ფრáƒáƒ’მენტის მáƒáƒ­áƒ áƒ..." + +#: pdiff.cpp:1174 +msgid "Copying selection to clipboard..." +msgstr "მáƒáƒœáƒ˜áƒ¨áƒœáƒ£áƒšáƒ˜áƒ¡ გáƒáƒªáƒ•áƒšáƒ˜áƒ— ბიფერში გáƒáƒœáƒ—áƒáƒ•áƒ¡áƒ”ბáƒ..." + +#: pdiff.cpp:1190 +msgid "Inserting clipboard contents..." +msgstr "გáƒáƒªáƒ•áƒšáƒ˜áƒ¡ ბუფერის შიგთáƒáƒ•áƒ¡áƒ˜áƒ¡ ჩáƒáƒ¡áƒ›áƒ..." + +#: pdiff.cpp:1713 +msgid "Save && Continue" +msgstr "შენáƒáƒ®áƒ•áƒ დრგáƒáƒ’რძელებáƒ" + +#: pdiff.cpp:1713 +msgid "Continue Without Saving" +msgstr "შენáƒáƒ®áƒ•áƒ˜áƒ¡ გáƒáƒ áƒ”შე გáƒáƒ’რძელებáƒ" + +#: pdiff.cpp:1920 +msgid "Search complete." +msgstr "ძიებრდáƒáƒ¡áƒ áƒ£áƒšáƒ“áƒ." + +#: pdiff.cpp:1920 +msgid "Search Complete" +msgstr "ძიებრდáƒáƒ¡áƒ áƒ£áƒšáƒ“áƒ" + +#: pdiff.cpp:2144 +msgid "Nothing is selected in either diff input window." +msgstr "" + +#: pdiff.cpp:2144 +#, fuzzy +msgid "Error while adding manual diff range" +msgstr "დირექტáƒáƒ áƒ˜áƒ˜áƒ¡ შექმნისáƒáƒ¡ შეცდáƒáƒ›áƒ." + +#. i18n: file kdiff3_part.rc line 4 +#: rc.cpp:3 +#, no-c-format +msgid "&KDiff3" +msgstr "&KDiff3" + +#. i18n: file kdiff3_part.rc line 13 +#: rc.cpp:6 +#, no-c-format +msgid "Configure KDiff3" +msgstr "KDiff3 კáƒáƒœáƒ¤áƒ˜áƒ’ურáƒáƒªáƒ˜áƒ" + +#. i18n: file kdiff3_shell.rc line 7 +#: rc.cpp:15 +#, no-c-format +msgid "&Directory" +msgstr "&დირექტáƒáƒ áƒ˜áƒ" + +#. i18n: file kdiff3_shell.rc line 30 +#: rc.cpp:18 +#, no-c-format +msgid "Current Item Merge Operation" +msgstr "მიმდინáƒáƒ áƒ” ელემენტის შერწყმის áƒáƒžáƒ”რáƒáƒªáƒ˜áƒ" + +#. i18n: file kdiff3_shell.rc line 38 +#: rc.cpp:21 +#, no-c-format +msgid "Current Item Sync Operation" +msgstr "მიმდინáƒáƒ áƒ” ელემენტის სინქრáƒáƒœáƒ˜áƒ–áƒáƒªáƒ˜áƒ˜áƒ¡ áƒáƒžáƒ”რáƒáƒªáƒ˜áƒ" + +#. i18n: file kdiff3_shell.rc line 50 +#: rc.cpp:24 +#, no-c-format +msgid "&Movement" +msgstr "&მáƒáƒ«áƒ áƒáƒáƒ‘áƒ" + +#. i18n: file kdiff3_shell.rc line 61 +#: rc.cpp:27 +#, no-c-format +msgid "D&iffview" +msgstr "D&iffview" + +#. i18n: file kdiff3_shell.rc line 73 +#: rc.cpp:30 +#, no-c-format +msgid "&Merge" +msgstr "შ&ერწყმáƒ" + +#. i18n: file kdiff3_shell.rc line 95 +#: rc.cpp:33 +#, no-c-format +msgid "&Window" +msgstr "&ფáƒáƒœáƒ¯áƒáƒ áƒ" + +#: smalldialogs.cpp:53 +msgid "A (Base):" +msgstr "A (ფუძე):" + +#: smalldialogs.cpp:59 smalldialogs.cpp:75 smalldialogs.cpp:91 +#: smalldialogs.cpp:134 +msgid "File..." +msgstr "ფáƒáƒ˜áƒšáƒ˜..." + +#: smalldialogs.cpp:61 smalldialogs.cpp:77 smalldialogs.cpp:93 +#: smalldialogs.cpp:136 +msgid "Dir..." +msgstr "Dir..." + +#: smalldialogs.cpp:86 +msgid "C (Optional):" +msgstr "C (áƒáƒ áƒáƒ¡áƒáƒ•áƒáƒšáƒ“ებულáƒ_:" + +#: smalldialogs.cpp:108 +msgid "Swap/Copy Names ..." +msgstr "" + +#: smalldialogs.cpp:114 smalldialogs.cpp:115 smalldialogs.cpp:116 +msgid "Swap %1<->%2" +msgstr "" + +#: smalldialogs.cpp:117 smalldialogs.cpp:118 smalldialogs.cpp:119 +msgid "Copy %1->Output" +msgstr "" + +#: smalldialogs.cpp:120 smalldialogs.cpp:121 smalldialogs.cpp:122 +msgid "Swap %1<->Output" +msgstr "" + +#: smalldialogs.cpp:129 +msgid "Output (optional):" +msgstr "გáƒáƒ›áƒáƒœáƒáƒ¢áƒáƒœáƒ˜ (áƒáƒ áƒáƒ¡áƒáƒ•áƒáƒšáƒ“ებულáƒ):" + +#: smalldialogs.cpp:158 +msgid "Configure..." +msgstr "კáƒáƒœáƒ¤áƒ˜áƒ’ურáƒáƒªáƒ˜áƒ..." + +#: smalldialogs.cpp:347 +msgid "Search text:" +msgstr "ტექსტის ძიებáƒ:" + +#: smalldialogs.cpp:354 +msgid "Case sensitive" +msgstr "რეგისტრისáƒáƒ“მი მგძნáƒáƒ‘იáƒáƒ áƒ”" + +#: smalldialogs.cpp:357 +msgid "Search A" +msgstr "ძიებრA" + +#: smalldialogs.cpp:362 +msgid "Search B" +msgstr "ძიებრB" + +#: smalldialogs.cpp:367 +msgid "Search C" +msgstr "ძიებრC" + +#: smalldialogs.cpp:372 +msgid "Search output" +msgstr "გáƒáƒ›áƒáƒœáƒáƒ¢áƒáƒœáƒ˜áƒ¡ ძიებáƒ" + +#: smalldialogs.cpp:377 +msgid "&Search" +msgstr "ძიე&ბáƒ" + +#: smalldialogs.cpp:394 +msgid "Regular Expression Tester" +msgstr "" + +#: smalldialogs.cpp:405 +msgid "Example auto merge line:" +msgstr "" + +#: smalldialogs.cpp:407 +msgid "For auto merge test copy a line as used in your files." +msgstr "" + +#: smalldialogs.cpp:413 smalldialogs.cpp:442 smalldialogs.cpp:479 +msgid "Match result:" +msgstr "" + +#: smalldialogs.cpp:432 +msgid "Example history start line (with leading comment):" +msgstr "" + +#: smalldialogs.cpp:435 +msgid "" +"Copy a history start line as used in your files,\n" +"including the leading comment." +msgstr "" + +#: smalldialogs.cpp:461 +msgid "History sort key order:" +msgstr "" + +#: smalldialogs.cpp:469 +msgid "Example history entry start line (without leading comment):" +msgstr "" + +#: smalldialogs.cpp:471 +msgid "" +"Copy a history entry start line as used in your files,\n" +"but omit the leading comment." +msgstr "" + +#: smalldialogs.cpp:486 +msgid "Sort key result:" +msgstr "" + +#: smalldialogs.cpp:537 smalldialogs.cpp:547 smalldialogs.cpp:568 +msgid "Match success." +msgstr "" + +#: smalldialogs.cpp:541 smalldialogs.cpp:551 smalldialogs.cpp:574 +#, fuzzy +msgid "Match failed." +msgstr "შენáƒáƒ®áƒ•áƒ ვერ შედგáƒ." + +#: smalldialogs.cpp:559 +msgid "Opening and closing parentheses don't match in regular expression." +msgstr "" + +#, fuzzy +#~ msgid "Diff and Merge" +#~ msgstr "Diff & შერწყმáƒ" + +#, fuzzy +#~ msgid "Save Directory Merge State ..." +#~ msgstr "დირექტáƒáƒ áƒ˜áƒáƒ—რშერწყმáƒ" + +#, fuzzy +#~ msgid "Load Directory Merge State ..." +#~ msgstr "დირექტáƒáƒ áƒ˜áƒáƒ—რშერწყმáƒ" + +#, fuzzy +#~ msgid "Synchronize Directories" +#~ msgstr "დირექტáƒáƒ áƒ˜áƒ”ბის სინქრáƒáƒœáƒ˜áƒ–áƒáƒªáƒ˜áƒ" + +#, fuzzy +#~ msgid "Copy Newer Files Instead of Merging" +#~ msgstr "შერწმის ნáƒáƒªáƒ•áƒšáƒáƒ“ áƒáƒ®áƒšáƒ˜áƒ¡ áƒáƒ¡áƒšáƒ˜ (სáƒáƒ®áƒ˜áƒ¤áƒáƒ—áƒ)" + +#~ msgid "List only deltas" +#~ msgstr "მხáƒáƒšáƒáƒ“ დელტების ჩáƒáƒ›áƒáƒ—ვლáƒ" + +#~ msgid "Files and directories without change will not appear in the list." +#~ msgstr "ფáƒáƒ˜áƒšáƒ”ბი დრდირექტáƒáƒ áƒ˜áƒ”ბი ცვლილებების გáƒáƒ áƒ”შე სიáƒáƒ¨áƒ˜ áƒáƒ  áƒáƒ˜áƒ¡áƒáƒ®áƒ”ბáƒ." + +#, fuzzy +#~ msgid "no selection" +#~ msgstr "მáƒáƒœáƒ˜áƒ¨áƒ•áƒœáƒ˜áƒ¡ áƒáƒ•áƒ¢áƒ áƒáƒ¡áƒšáƒ˜" + +#, fuzzy +#~ msgid "Manually match lines" +#~ msgstr "ხელით áƒáƒ áƒ©áƒ”ვáƒ" + +#~ msgid "Has no effect. For compatibility with certain tools." +#~ msgstr "áƒáƒ áƒ áƒáƒ¥áƒ•áƒ¡ ეფექტი. გáƒáƒœáƒ¡áƒáƒ–ღვრულ ხელსáƒáƒ¬áƒ§áƒáƒ”ბთáƒáƒœ თáƒáƒ•áƒ¡áƒ”ბáƒáƒ“áƒáƒ‘ისთვის." + +#~ msgid "For compatibility with certain tools." +#~ msgstr "გáƒáƒœáƒ¡áƒáƒ–ღვრულ ხელსáƒáƒ¬áƒ§áƒáƒ”ბთáƒáƒœ თáƒáƒ•áƒ¡áƒ”ბáƒáƒ“áƒáƒ‘ისთვის." + +#~ msgid "Colors in Editor & Diff Output" +#~ msgstr "ფერები რედáƒáƒ¥áƒ¢áƒáƒ áƒ¨áƒ˜ დრDiff გáƒáƒ›áƒáƒœáƒáƒ¢áƒáƒœáƒ¨áƒ˜" diff --git a/po/kdiff3.pot b/po/kdiff3.pot new file mode 100644 index 0000000..3cd029c --- /dev/null +++ b/po/kdiff3.pot @@ -0,0 +1,2249 @@ +# SOME DESCRIPTIVE TITLE. +# This file is put in the public domain. +# FIRST AUTHOR , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2006-05-14 15:14+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: _translatorinfo.cpp:1 +msgid "" +"_: NAME OF TRANSLATORS\n" +"Your names" +msgstr "" + +#: _translatorinfo.cpp:3 +msgid "" +"_: EMAIL OF TRANSLATORS\n" +"Your emails" +msgstr "" + +#: diff.cpp:245 +msgid "Writing clipboard data to temp file failed." +msgstr "" + +#: diff.cpp:249 +msgid "From Clipboard" +msgstr "" + +#: diff.cpp:451 +msgid "" +"Preprocessing possibly failed. Check this command:\n" +"\n" +" %1\n" +"\n" +"The preprocessing command will be disabled now." +msgstr "" + +#: diff.cpp:486 +msgid "" +"The line-matching-preprocessing possibly failed. Check this command:\n" +"\n" +" %1\n" +"\n" +"The line-matching-preprocessing command will be disabled now." +msgstr "" + +#: diff.cpp:1587 diff.cpp:1601 +msgid "" +"Data loss error:\n" +"If it is reproducable please contact the author.\n" +msgstr "" + +#: diff.cpp:1589 diff.cpp:1603 +msgid "Severe Internal Error" +msgstr "" + +#: difftextwindow.cpp:1637 kdiff3.cpp:743 +msgid "Top line" +msgstr "" + +#: difftextwindow.cpp:1647 +msgid "End" +msgstr "" + +#: directorymergewindow.cpp:142 +msgid "Mix of links and normal files." +msgstr "" + +#: directorymergewindow.cpp:149 +msgid "Link: " +msgstr "" + +#: directorymergewindow.cpp:157 +msgid "Size. " +msgstr "" + +#: directorymergewindow.cpp:170 +msgid "Date & Size: " +msgstr "" + +#: directorymergewindow.cpp:179 directorymergewindow.cpp:185 +msgid "Creating temp copy of %1 failed." +msgstr "" + +#: directorymergewindow.cpp:196 directorymergewindow.cpp:204 +msgid "Opening %1 failed." +msgstr "" + +#: directorymergewindow.cpp:208 +msgid "Comparing file..." +msgstr "" + +#: directorymergewindow.cpp:218 directorymergewindow.cpp:224 +msgid "Error reading from %1" +msgstr "" + +#: directorymergewindow.cpp:282 +msgid "Name" +msgstr "" + +#: directorymergewindow.cpp:286 +msgid "Operation" +msgstr "" + +#: directorymergewindow.cpp:287 +msgid "Status" +msgstr "" + +#: directorymergewindow.cpp:288 +msgid "Unsolved" +msgstr "" + +#: directorymergewindow.cpp:289 +msgid "Solved" +msgstr "" + +#: directorymergewindow.cpp:290 +msgid "Nonwhite" +msgstr "" + +#: directorymergewindow.cpp:291 +msgid "White" +msgstr "" + +#: directorymergewindow.cpp:319 +msgid "" +"You are currently doing a directory merge. Are you sure, you want to abort " +"the merge and rescan the directory?" +msgstr "" + +#: directorymergewindow.cpp:320 directorymergewindow.cpp:2864 +msgid "Rescan" +msgstr "" + +#: directorymergewindow.cpp:320 kdiff3.cpp:594 pdiff.cpp:965 +msgid "Continue Merging" +msgstr "" + +#: directorymergewindow.cpp:462 +msgid "Opening of directories failed:" +msgstr "" + +#: directorymergewindow.cpp:465 +msgid "Dir A \"%1\" does not exist or is not a directory.\n" +msgstr "" + +#: directorymergewindow.cpp:468 +msgid "Dir B \"%1\" does not exist or is not a directory.\n" +msgstr "" + +#: directorymergewindow.cpp:471 +msgid "Dir C \"%1\" does not exist or is not a directory.\n" +msgstr "" + +#: directorymergewindow.cpp:473 +msgid "Directory Open Error" +msgstr "" + +#: directorymergewindow.cpp:481 +msgid "" +"The destination directory must not be the same as A or B when three " +"directories are merged.\n" +"Check again before continuing." +msgstr "" + +#: directorymergewindow.cpp:483 +msgid "Parameter Warning" +msgstr "" + +#: directorymergewindow.cpp:488 +msgid "Scanning directories..." +msgstr "" + +#: directorymergewindow.cpp:537 +msgid "Reading Directory A" +msgstr "" + +#: directorymergewindow.cpp:559 +msgid "Reading Directory B" +msgstr "" + +#: directorymergewindow.cpp:581 +msgid "Reading Directory C" +msgstr "" + +#: directorymergewindow.cpp:607 +msgid "Some subdirectories were not readable in" +msgstr "" + +#: directorymergewindow.cpp:612 +msgid "Check the permissions of the subdirectories." +msgstr "" + +#: directorymergewindow.cpp:646 kdiff3.cpp:547 kdiff3.cpp:627 kdiff3.cpp:651 +#: kdiff3.cpp:924 kdiff3.cpp:945 pdiff.cpp:1045 pdiff.cpp:1117 pdiff.cpp:1155 +#: pdiff.cpp:1171 pdiff.cpp:1201 pdiff.cpp:1212 +msgid "Ready." +msgstr "" + +#: directorymergewindow.cpp:660 +msgid "Directory Comparison Status" +msgstr "" + +#: directorymergewindow.cpp:661 +msgid "Number of subdirectories:" +msgstr "" + +#: directorymergewindow.cpp:662 +msgid "Number of equal files:" +msgstr "" + +#: directorymergewindow.cpp:663 +msgid "Number of different files:" +msgstr "" + +#: directorymergewindow.cpp:666 +msgid "Number of manual merges:" +msgstr "" + +#: directorymergewindow.cpp:802 +msgid "This affects all merge operations." +msgstr "" + +#: directorymergewindow.cpp:803 +msgid "Changing All Merge Operations" +msgstr "" + +#: directorymergewindow.cpp:803 mergeresultwindow.cpp:285 +msgid "C&ontinue" +msgstr "" + +#: directorymergewindow.cpp:1169 +msgid "Processing " +msgstr "" + +#: directorymergewindow.cpp:1644 directorymergewindow.cpp:1650 +msgid "To do." +msgstr "" + +#: directorymergewindow.cpp:1752 directorymergewindow.cpp:2895 +msgid "Copy A to B" +msgstr "" + +#: directorymergewindow.cpp:1753 directorymergewindow.cpp:2896 +msgid "Copy B to A" +msgstr "" + +#: directorymergewindow.cpp:1754 directorymergewindow.cpp:2897 +msgid "Delete A" +msgstr "" + +#: directorymergewindow.cpp:1755 directorymergewindow.cpp:2898 +msgid "Delete B" +msgstr "" + +#: directorymergewindow.cpp:1756 +msgid "Delete A & B" +msgstr "" + +#: directorymergewindow.cpp:1757 directorymergewindow.cpp:2900 +msgid "Merge to A" +msgstr "" + +#: directorymergewindow.cpp:1758 directorymergewindow.cpp:2901 +msgid "Merge to B" +msgstr "" + +#: directorymergewindow.cpp:1759 +msgid "Merge to A & B" +msgstr "" + +#: directorymergewindow.cpp:1763 directorymergewindow.cpp:2892 +msgid "Delete (if exists)" +msgstr "" + +#: directorymergewindow.cpp:1764 directorymergewindow.cpp:1765 +#: directorymergewindow.cpp:2891 smalldialogs.cpp:102 +msgid "Merge" +msgstr "" + +#: directorymergewindow.cpp:1764 directorymergewindow.cpp:1765 +msgid "Merge (manual)" +msgstr "" + +#: directorymergewindow.cpp:1766 +msgid "Error: Conflicting File Types" +msgstr "" + +#: directorymergewindow.cpp:1767 +msgid "Error: Dates are equal but files are not." +msgstr "" + +#: directorymergewindow.cpp:1791 directorymergewindow.cpp:1820 +#: directorymergewindow.cpp:1845 +msgid "This operation is currently not possible." +msgstr "" + +#: directorymergewindow.cpp:1791 directorymergewindow.cpp:1820 +#: directorymergewindow.cpp:1845 directorymergewindow.cpp:2102 +msgid "Operation Not Possible" +msgstr "" + +#: directorymergewindow.cpp:1884 +msgid "" +"This should never happen: \n" +"\n" +"mergeResultSaved: m_pMFI=0\n" +"\n" +"If you know how to reproduce this, please contact the program author." +msgstr "" + +#: directorymergewindow.cpp:1884 +msgid "Program Error" +msgstr "" + +#: directorymergewindow.cpp:1895 +msgid "An error occurred while copying.\n" +msgstr "" + +#: directorymergewindow.cpp:1896 directorymergewindow.cpp:2302 +msgid "Merge Error" +msgstr "" + +#: directorymergewindow.cpp:1901 directorymergewindow.cpp:2307 +msgid "Error." +msgstr "" + +#: directorymergewindow.cpp:1906 directorymergewindow.cpp:2198 +#: directorymergewindow.cpp:2238 +msgid "Done." +msgstr "" + +#: directorymergewindow.cpp:1929 +msgid "Not saved." +msgstr "" + +#: directorymergewindow.cpp:1964 +msgid "Unknown merge operation. (This must never happen!)" +msgstr "" + +#: directorymergewindow.cpp:1996 +msgid "Unknown merge operation." +msgstr "" + +#: directorymergewindow.cpp:2011 +msgid "" +"The merge is about to begin.\n" +"\n" +"Choose \"Do it\" if you have read the instructions and know what you are " +"doing.\n" +"Choosing \"Simulate it\" will tell you what would happen.\n" +"\n" +"Be aware that this program still has beta status and there is NO WARRANTY " +"whatsoever! Make backups of your vital data!" +msgstr "" + +#: directorymergewindow.cpp:2016 +msgid "Starting Merge" +msgstr "" + +#: directorymergewindow.cpp:2016 +msgid "Do It" +msgstr "" + +#: directorymergewindow.cpp:2016 +msgid "Simulate It" +msgstr "" + +#: directorymergewindow.cpp:2042 +msgid "" +"The highlighted item has a different type in the different directories. " +"Select what to do." +msgstr "" + +#: directorymergewindow.cpp:2051 +msgid "" +"The modification dates of the file are equal but the files are not. Select " +"what to do." +msgstr "" + +#: directorymergewindow.cpp:2102 +msgid "" +"This operation is currently not possible because directory merge is " +"currently running." +msgstr "" + +#: directorymergewindow.cpp:2162 +msgid "" +"There was an error in the last step.\n" +"Do you want to continue with the item that caused the error or do you want " +"to skip this item?" +msgstr "" + +#: directorymergewindow.cpp:2164 +msgid "Continue merge after an error" +msgstr "" + +#: directorymergewindow.cpp:2164 +msgid "Continue With Last Item" +msgstr "" + +#: directorymergewindow.cpp:2164 +msgid "Skip Item" +msgstr "" + +#: directorymergewindow.cpp:2198 +msgid "Skipped." +msgstr "" + +#: directorymergewindow.cpp:2205 directorymergewindow.cpp:2431 +msgid "In progress..." +msgstr "" + +#: directorymergewindow.cpp:2253 +msgid "Merge operation complete." +msgstr "" + +#: directorymergewindow.cpp:2253 directorymergewindow.cpp:2256 +msgid "Merge Complete" +msgstr "" + +#: directorymergewindow.cpp:2265 +msgid "" +"Simulated merge complete: Check if you agree with the proposed operations." +msgstr "" + +#: directorymergewindow.cpp:2301 +msgid "An error occurred. Press OK to see detailed information.\n" +msgstr "" + +#: directorymergewindow.cpp:2344 +msgid "Error: While deleting %1: Creating backup failed." +msgstr "" + +#: directorymergewindow.cpp:2351 +msgid "delete directory recursively( %1 )" +msgstr "" + +#: directorymergewindow.cpp:2353 +msgid "delete( %1 )" +msgstr "" + +#: directorymergewindow.cpp:2368 +msgid "Error: delete dir operation failed while trying to read the directory." +msgstr "" + +#: directorymergewindow.cpp:2387 +msgid "Error: rmdir( %1 ) operation failed." +msgstr "" + +#: directorymergewindow.cpp:2397 +msgid "Error: delete operation failed." +msgstr "" + +#: directorymergewindow.cpp:2423 +msgid "manual merge( %1, %2, %3 -> %4)" +msgstr "" + +#: directorymergewindow.cpp:2426 +msgid "" +" Note: After a manual merge the user should continue by pressing F7." +msgstr "" + +#: directorymergewindow.cpp:2449 +msgid "Error: copy( %1 -> %2 ) failed.Deleting existing destination failed." +msgstr "" + +#: directorymergewindow.cpp:2459 +msgid "copyLink( %1 -> %2 )" +msgstr "" + +#: directorymergewindow.cpp:2470 +msgid "Error: copyLink failed: Remote links are not yet supported." +msgstr "" + +#: directorymergewindow.cpp:2476 +msgid "Error: copyLink failed." +msgstr "" + +#: directorymergewindow.cpp:2496 +msgid "copy( %1 -> %2 )" +msgstr "" + +#: directorymergewindow.cpp:2522 +msgid "Error during rename( %1 -> %2 ): Cannot delete existing destination." +msgstr "" + +#: directorymergewindow.cpp:2528 +msgid "rename( %1 -> %2 )" +msgstr "" + +#: directorymergewindow.cpp:2537 +msgid "Error: Rename failed." +msgstr "" + +#: directorymergewindow.cpp:2555 +msgid "Error during makeDir of %1. Cannot delete existing file." +msgstr "" + +#: directorymergewindow.cpp:2571 +msgid "makeDir( %1 )" +msgstr "" + +#: directorymergewindow.cpp:2581 +msgid "Error while creating directory." +msgstr "" + +#: directorymergewindow.cpp:2604 directorymergewindow.cpp:2721 +msgid "Dest" +msgstr "" + +#: directorymergewindow.cpp:2608 directorymergewindow.cpp:2646 +msgid "Dir" +msgstr "" + +#: directorymergewindow.cpp:2609 +msgid "Type" +msgstr "" + +#: directorymergewindow.cpp:2610 +msgid "Size" +msgstr "" + +#: directorymergewindow.cpp:2611 +msgid "Attr" +msgstr "" + +#: directorymergewindow.cpp:2612 +msgid "Last Modification" +msgstr "" + +#: directorymergewindow.cpp:2613 +msgid "Link-Destination" +msgstr "" + +#: directorymergewindow.cpp:2663 +msgid "not available" +msgstr "" + +#: directorymergewindow.cpp:2683 +msgid "A (Dest): " +msgstr "" + +#: directorymergewindow.cpp:2686 +msgid "A (Base): " +msgstr "" + +#: directorymergewindow.cpp:2692 +msgid "B (Dest): " +msgstr "" + +#: directorymergewindow.cpp:2700 +msgid "C (Dest): " +msgstr "" + +#: directorymergewindow.cpp:2706 +msgid "Dest: " +msgstr "" + +#: directorymergewindow.cpp:2771 +msgid "Save Directory Merge State As..." +msgstr "" + +#: directorymergewindow.cpp:2858 +msgid "Start/Continue Directory Merge" +msgstr "" + +#: directorymergewindow.cpp:2859 +msgid "Run Operation for Current Item" +msgstr "" + +#: directorymergewindow.cpp:2860 +msgid "Compare Selected File" +msgstr "" + +#: directorymergewindow.cpp:2861 +msgid "Merge Current File" +msgstr "" + +#: directorymergewindow.cpp:2862 +msgid "Fold All Subdirs" +msgstr "" + +#: directorymergewindow.cpp:2863 +msgid "Unfold All Subdirs" +msgstr "" + +#: directorymergewindow.cpp:2867 +msgid "Choose A for All Items" +msgstr "" + +#: directorymergewindow.cpp:2868 +msgid "Choose B for All Items" +msgstr "" + +#: directorymergewindow.cpp:2869 +msgid "Choose C for All Items" +msgstr "" + +#: directorymergewindow.cpp:2870 +msgid "Auto-Choose Operation for All Items" +msgstr "" + +#: directorymergewindow.cpp:2871 +msgid "No Operation for All Items" +msgstr "" + +#: directorymergewindow.cpp:2876 +msgid "Show Identical Files" +msgstr "" + +#: directorymergewindow.cpp:2877 +msgid "Show Different Files" +msgstr "" + +#: directorymergewindow.cpp:2878 +msgid "Show Files only in A" +msgstr "" + +#: directorymergewindow.cpp:2879 +msgid "Show Files only in B" +msgstr "" + +#: directorymergewindow.cpp:2880 +msgid "Show Files only in C" +msgstr "" + +#: directorymergewindow.cpp:2884 +msgid "Compare Explicitly Selected Files" +msgstr "" + +#: directorymergewindow.cpp:2885 +msgid "Merge Explicitly Selected Files" +msgstr "" + +#: directorymergewindow.cpp:2887 directorymergewindow.cpp:2894 +msgid "Do Nothing" +msgstr "" + +#: directorymergewindow.cpp:2888 +msgid "A" +msgstr "" + +#: directorymergewindow.cpp:2889 +msgid "B" +msgstr "" + +#: directorymergewindow.cpp:2890 +msgid "C" +msgstr "" + +#: directorymergewindow.cpp:2899 +msgid "Delete A && B" +msgstr "" + +#: directorymergewindow.cpp:2902 +msgid "Merge to A && B" +msgstr "" + +#: fileaccess.cpp:567 +msgid "" +"While trying to make a backup, deleting an older backup failed. \n" +"Filename: " +msgstr "" + +#: fileaccess.cpp:574 +msgid "" +"While trying to make a backup, renaming failed. \n" +"Filenames: " +msgstr "" + +#: fileaccess.cpp:596 +msgid "Getting file status: %1" +msgstr "" + +#: fileaccess.cpp:639 +msgid "Reading file: %1" +msgstr "" + +#: fileaccess.cpp:675 +msgid "Writing file: %1" +msgstr "" + +#: fileaccess.cpp:703 +msgid "Out of memory" +msgstr "" + +#: fileaccess.cpp:738 +msgid "Making directory: %1" +msgstr "" + +#: fileaccess.cpp:758 +msgid "Removing directory: %1" +msgstr "" + +#: fileaccess.cpp:773 +msgid "Removing file: %1" +msgstr "" + +#: fileaccess.cpp:789 +msgid "Creating symbolic link: %1 -> %2" +msgstr "" + +#: fileaccess.cpp:815 +msgid "Renaming file: %1 -> %2" +msgstr "" + +#: fileaccess.cpp:851 +msgid "Copying file: %1 -> %2" +msgstr "" + +#: fileaccess.cpp:865 +msgid "" +"Error during file copy operation: Opening file for reading failed. Filename: " +"%1" +msgstr "" + +#: fileaccess.cpp:871 +msgid "" +"Error during file copy operation: Opening file for writing failed. Filename: " +"%1" +msgstr "" + +#: fileaccess.cpp:886 +msgid "Error during file copy operation: Reading failed. Filename: %1" +msgstr "" + +#: fileaccess.cpp:895 +msgid "Error during file copy operation: Writing failed. Filename: %1" +msgstr "" + +#: fileaccess.cpp:1191 +msgid "Reading directory: " +msgstr "" + +#: fileaccess.cpp:1320 +msgid "Listing directory: %1" +msgstr "" + +#: kdiff3.cpp:142 +msgid "Current Configuration:" +msgstr "" + +#: kdiff3.cpp:147 +msgid "Config Option Error:" +msgstr "" + +#: kdiff3.cpp:187 +msgid "Option --auto used, but no output file specified." +msgstr "" + +#: kdiff3.cpp:318 +msgid "Option --auto ignored for directory comparison." +msgstr "" + +#: kdiff3.cpp:354 +msgid "Saving failed." +msgstr "" + +#: kdiff3.cpp:381 pdiff.cpp:1027 pdiff.cpp:1098 +msgid "Opening of these files failed:" +msgstr "" + +#: kdiff3.cpp:390 +msgid "File Open Error" +msgstr "" + +#: kdiff3.cpp:413 +msgid "Opens documents for comparison..." +msgstr "" + +#: kdiff3.cpp:418 +msgid "Saves the merge result. All conflicts must be solved!" +msgstr "" + +#: kdiff3.cpp:420 +msgid "Saves the current document as..." +msgstr "" + +#: kdiff3.cpp:422 +msgid "Print the differences" +msgstr "" + +#: kdiff3.cpp:424 +msgid "Quits the application" +msgstr "" + +#: kdiff3.cpp:426 +msgid "Cuts the selected section and puts it to the clipboard" +msgstr "" + +#: kdiff3.cpp:428 +msgid "Copies the selected section to the clipboard" +msgstr "" + +#: kdiff3.cpp:430 +msgid "Pastes the clipboard contents to actual position" +msgstr "" + +#: kdiff3.cpp:432 +msgid "Select everything in current window" +msgstr "" + +#: kdiff3.cpp:434 +msgid "Search for a string" +msgstr "" + +#: kdiff3.cpp:436 +msgid "Search again for the string" +msgstr "" + +#: kdiff3.cpp:438 +msgid "Enables/disables the toolbar" +msgstr "" + +#: kdiff3.cpp:440 +msgid "Enables/disables the statusbar" +msgstr "" + +#: kdiff3.cpp:444 +msgid "Configure KDiff3..." +msgstr "" + +#: kdiff3.cpp:465 +msgid "Go to Current Delta" +msgstr "" + +#: kdiff3.cpp:466 +msgid "Go to First Delta" +msgstr "" + +#: kdiff3.cpp:467 +msgid "Go to Last Delta" +msgstr "" + +#: kdiff3.cpp:468 +msgid "(Skips white space differences when \"Show White Space\" is disabled.)" +msgstr "" + +#: kdiff3.cpp:469 +msgid "" +"(Does not skip white space differences even when \"Show White Space\" is " +"disabled.)" +msgstr "" + +#: kdiff3.cpp:470 +msgid "Go to Previous Delta" +msgstr "" + +#: kdiff3.cpp:472 +msgid "Go to Next Delta" +msgstr "" + +#: kdiff3.cpp:474 +msgid "Go to Previous Conflict" +msgstr "" + +#: kdiff3.cpp:476 +msgid "Go to Next Conflict" +msgstr "" + +#: kdiff3.cpp:478 +msgid "Go to Previous Unsolved Conflict" +msgstr "" + +#: kdiff3.cpp:480 +msgid "Go to Next Unsolved Conflict" +msgstr "" + +#: kdiff3.cpp:482 +msgid "Select Line(s) From A" +msgstr "" + +#: kdiff3.cpp:483 +msgid "Select Line(s) From B" +msgstr "" + +#: kdiff3.cpp:484 +msgid "Select Line(s) From C" +msgstr "" + +#: kdiff3.cpp:485 +msgid "Automatically Go to Next Unsolved Conflict After Source Selection" +msgstr "" + +#: kdiff3.cpp:487 +msgid "Show Space && Tabulator Characters for Differences" +msgstr "" + +#: kdiff3.cpp:488 +msgid "Show White Space" +msgstr "" + +#: kdiff3.cpp:490 +msgid "Show Line Numbers" +msgstr "" + +#: kdiff3.cpp:491 +msgid "Choose A Everywhere" +msgstr "" + +#: kdiff3.cpp:492 +msgid "Choose B Everywhere" +msgstr "" + +#: kdiff3.cpp:493 +msgid "Choose C Everywhere" +msgstr "" + +#: kdiff3.cpp:494 +msgid "Choose A for All Unsolved Conflicts" +msgstr "" + +#: kdiff3.cpp:495 +msgid "Choose B for All Unsolved Conflicts" +msgstr "" + +#: kdiff3.cpp:496 +msgid "Choose C for All Unsolved Conflicts" +msgstr "" + +#: kdiff3.cpp:497 +msgid "Choose A for All Unsolved Whitespace Conflicts" +msgstr "" + +#: kdiff3.cpp:498 +msgid "Choose B for All Unsolved Whitespace Conflicts" +msgstr "" + +#: kdiff3.cpp:499 +msgid "Choose C for All Unsolved Whitespace Conflicts" +msgstr "" + +#: kdiff3.cpp:500 +msgid "Automatically Solve Simple Conflicts" +msgstr "" + +#: kdiff3.cpp:501 +msgid "Set Deltas to Conflicts" +msgstr "" + +#: kdiff3.cpp:502 +msgid "Run Regular Expression Auto Merge" +msgstr "" + +#: kdiff3.cpp:503 +msgid "Automatically Solve History Conflicts" +msgstr "" + +#: kdiff3.cpp:504 +msgid "Split Diff At Selection" +msgstr "" + +#: kdiff3.cpp:505 +msgid "Join Selected Diffs" +msgstr "" + +#: kdiff3.cpp:507 +msgid "Show Window A" +msgstr "" + +#: kdiff3.cpp:508 +msgid "Show Window B" +msgstr "" + +#: kdiff3.cpp:509 +msgid "Show Window C" +msgstr "" + +#: kdiff3.cpp:510 kdiff3.cpp:521 +msgid "Focus Next Window" +msgstr "" + +#: kdiff3.cpp:512 +msgid "Normal Overview" +msgstr "" + +#: kdiff3.cpp:513 +msgid "A vs. B Overview" +msgstr "" + +#: kdiff3.cpp:514 +msgid "A vs. C Overview" +msgstr "" + +#: kdiff3.cpp:515 +msgid "B vs. C Overview" +msgstr "" + +#: kdiff3.cpp:516 +msgid "Word Wrap Diff Windows" +msgstr "" + +#: kdiff3.cpp:517 +msgid "Add Manual Diff Alignment" +msgstr "" + +#: kdiff3.cpp:518 +msgid "Clear All Manual Diff Alignments" +msgstr "" + +#: kdiff3.cpp:523 +msgid "Focus Prev Window" +msgstr "" + +#: kdiff3.cpp:524 +msgid "Toggle Split Orientation" +msgstr "" + +#: kdiff3.cpp:526 +msgid "Dir && Text Split Screen View" +msgstr "" + +#: kdiff3.cpp:528 +msgid "Toggle Between Dir && Text View" +msgstr "" + +#: kdiff3.cpp:573 pdiff.cpp:1698 +msgid "The merge result hasn't been saved." +msgstr "" + +#: kdiff3.cpp:574 +msgid "Save && Quit" +msgstr "" + +#: kdiff3.cpp:574 +msgid "Quit Without Saving" +msgstr "" + +#: kdiff3.cpp:582 pdiff.cpp:1707 +msgid "Saving the merge result failed." +msgstr "" + +#: kdiff3.cpp:593 pdiff.cpp:964 +msgid "" +"You are currently doing a directory merge. Are you sure, you want to abort?" +msgstr "" + +#: kdiff3.cpp:616 +msgid "Saving file..." +msgstr "" + +#: kdiff3.cpp:633 +msgid "Saving file with a new filename..." +msgstr "" + +#: kdiff3.cpp:722 +msgid "Printing..." +msgstr "" + +#: kdiff3.cpp:728 kdiff3.cpp:890 +msgid "Printing aborted." +msgstr "" + +#: kdiff3.cpp:860 +msgid "Selection" +msgstr "" + +#: kdiff3.cpp:886 +msgid "Printing completed." +msgstr "" + +#: kdiff3.cpp:896 +msgid "Exiting..." +msgstr "" + +#: kdiff3.cpp:908 +msgid "Toggling toolbar..." +msgstr "" + +#: kdiff3.cpp:929 +msgid "Toggle the statusbar..." +msgstr "" + +#: kdiff3_part.cpp:155 kdiff3_part.cpp:224 +msgid "Couldn't find files for comparison." +msgstr "" + +#: kdiff3_part.cpp:291 +msgid "KDiff3Part" +msgstr "" + +#: kdiff3_shell.cpp:78 +msgid "" +"Could not find our part!\n" +"This usually happens due to an installation problem. Please read the README-" +"file in the source package for details." +msgstr "" + +#: main.cpp:35 +msgid "Tool for Comparison and Merge of Files and Directories" +msgstr "" + +#: main.cpp:40 +msgid "Merge the input." +msgstr "" + +#: main.cpp:42 +msgid "Explicit base file. For compatibility with certain tools." +msgstr "" + +#: main.cpp:44 +msgid "Output file. Implies -m. E.g.: -o newfile.txt" +msgstr "" + +#: main.cpp:45 +msgid "Output file, again. (For compatibility with certain tools.)" +msgstr "" + +#: main.cpp:46 +msgid "No GUI if all conflicts are auto-solvable. (Needs -o file)" +msgstr "" + +#: main.cpp:47 +msgid "Don't solve conflicts automatically. (For compatibility...)" +msgstr "" + +#: main.cpp:48 +msgid "Visible name replacement for input file 1 (base)." +msgstr "" + +#: main.cpp:49 +msgid "Visible name replacement for input file 2." +msgstr "" + +#: main.cpp:50 +msgid "Visible name replacement for input file 3." +msgstr "" + +#: main.cpp:52 +msgid "Alternative visible name replacement. Supply this once for every input." +msgstr "" + +#: main.cpp:53 +msgid "" +"Override a config setting. Use once for every setting. E.g.: --cs " +"\"AutoAdvance=1\"" +msgstr "" + +#: main.cpp:54 +msgid "Show list of config settings and current values." +msgstr "" + +#: main.cpp:55 +msgid "Use a different config file." +msgstr "" + +#: main.cpp:59 +msgid "file1 to open (base, if not specified via --base)" +msgstr "" + +#: main.cpp:60 +msgid "file2 to open" +msgstr "" + +#: main.cpp:61 +msgid "file3 to open" +msgstr "" + +#: main.cpp:93 +msgid "Ignored. (User defined.)" +msgstr "" + +#. i18n: file kdiff3_part.rc line 16 +#: main.cpp:171 rc.cpp:9 +#, no-c-format +msgid "KDiff3" +msgstr "" + +#: main.cpp:184 +msgid "+ Many thanks to those who reported bugs and contributed ideas!" +msgstr "" + +#: mergeresultwindow.cpp:133 mergeresultwindow.cpp:937 +#: mergeresultwindow.cpp:951 mergeresultwindow.cpp:963 +#: mergeresultwindow.cpp:975 +msgid "Number of remaining unsolved conflicts: %1 (of which %2 are whitespace)" +msgstr "" + +#: mergeresultwindow.cpp:283 +msgid "" +"The output has been modified.\n" +"If you continue your changes will be lost." +msgstr "" + +#: mergeresultwindow.cpp:795 pdiff.cpp:507 +msgid "All input files are binary equal." +msgstr "" + +#: mergeresultwindow.cpp:797 +msgid "All input files contain the same text." +msgstr "" + +#: mergeresultwindow.cpp:799 +msgid "Files A and B are binary equal.\n" +msgstr "" + +#: mergeresultwindow.cpp:800 +msgid "Files A and B have equal text. \n" +msgstr "" + +#: mergeresultwindow.cpp:801 +msgid "Files A and C are binary equal.\n" +msgstr "" + +#: mergeresultwindow.cpp:802 +msgid "Files A and C have equal text. \n" +msgstr "" + +#: mergeresultwindow.cpp:803 +msgid "Files B and C are binary equal.\n" +msgstr "" + +#: mergeresultwindow.cpp:804 +msgid "Files B and C have equal text. \n" +msgstr "" + +#: mergeresultwindow.cpp:810 +msgid "Total number of conflicts: " +msgstr "" + +#: mergeresultwindow.cpp:811 +msgid "" +"\n" +"Nr of automatically solved conflicts: " +msgstr "" + +#: mergeresultwindow.cpp:812 +msgid "" +"\n" +"Nr of unsolved conflicts: " +msgstr "" + +#: mergeresultwindow.cpp:814 +msgid "Conflicts" +msgstr "" + +#: mergeresultwindow.cpp:1650 +msgid "" +msgstr "" + +#: mergeresultwindow.cpp:1658 +msgid "" +msgstr "" + +#: mergeresultwindow.cpp:1660 mergeresultwindow.cpp:2446 +msgid "" +msgstr "" + +#: mergeresultwindow.cpp:1730 +msgid "Output" +msgstr "" + +#: mergeresultwindow.cpp:1732 +msgid "[Modified]" +msgstr "" + +#: mergeresultwindow.cpp:2656 +msgid "" +"Not all conflicts are solved yet.\n" +"File not saved.\n" +msgstr "" + +#: mergeresultwindow.cpp:2658 +msgid "Conflicts Left" +msgstr "" + +#: mergeresultwindow.cpp:2670 +msgid "" +"\n" +"\n" +"Creating backup failed. File not saved." +msgstr "" + +#: mergeresultwindow.cpp:2670 mergeresultwindow.cpp:2710 +msgid "File Save Error" +msgstr "" + +#: mergeresultwindow.cpp:2710 +msgid "Error while writing." +msgstr "" + +#: optiondialog.cpp:361 +msgid "Unicode, 8 bit" +msgstr "" + +#: optiondialog.cpp:362 +msgid "Unicode" +msgstr "" + +#: optiondialog.cpp:363 +msgid "Latin1" +msgstr "" + +#: optiondialog.cpp:382 +msgid "Change this if non-ASCII characters are not displayed correctly." +msgstr "" + +#: optiondialog.cpp:507 +msgid "Editor & Diff Output Font" +msgstr "" + +#: optiondialog.cpp:528 +msgid "Italic font for deltas" +msgstr "" + +#: optiondialog.cpp:531 +msgid "" +"Selects the italic version of the font for differences.\n" +"If the font doesn't support italic characters, then this does nothing." +msgstr "" + +#: optiondialog.cpp:539 +msgid "Color" +msgstr "" + +#: optiondialog.cpp:539 +msgid "Colors Settings" +msgstr "" + +#: optiondialog.cpp:553 +msgid "Editor and Diff Views:" +msgstr "" + +#: optiondialog.cpp:561 +msgid "Foreground color:" +msgstr "" + +#: optiondialog.cpp:567 +msgid "Background color:" +msgstr "" + +#: optiondialog.cpp:575 +msgid "Diff background color:" +msgstr "" + +#: optiondialog.cpp:582 +msgid "Color A:" +msgstr "" + +#: optiondialog.cpp:589 +msgid "Color B:" +msgstr "" + +#: optiondialog.cpp:596 +msgid "Color C:" +msgstr "" + +#: optiondialog.cpp:602 +msgid "Conflict color:" +msgstr "" + +#: optiondialog.cpp:609 +msgid "Current range background color:" +msgstr "" + +#: optiondialog.cpp:616 +msgid "Current range diff background color:" +msgstr "" + +#: optiondialog.cpp:622 +msgid "Color for manually aligned difference ranges:" +msgstr "" + +#: optiondialog.cpp:627 +msgid "Directory Comparison View:" +msgstr "" + +#: optiondialog.cpp:633 +msgid "Newest file color:" +msgstr "" + +#: optiondialog.cpp:636 +msgid "" +"Changing this color will only be effective when starting the next directory " +"comparison." +msgstr "" + +#: optiondialog.cpp:641 +msgid "Oldest file color:" +msgstr "" + +#: optiondialog.cpp:648 +msgid "Middle age file color:" +msgstr "" + +#: optiondialog.cpp:655 +msgid "Color for missing files:" +msgstr "" + +#: optiondialog.cpp:667 +msgid "Editor" +msgstr "" + +#: optiondialog.cpp:667 +msgid "Editor Behavior" +msgstr "" + +#: optiondialog.cpp:677 +msgid "Tab inserts spaces" +msgstr "" + +#: optiondialog.cpp:680 +msgid "" +"On: Pressing tab generates the appropriate number of spaces.\n" +"Off: A Tab-character will be inserted." +msgstr "" + +#: optiondialog.cpp:686 +msgid "Tab size:" +msgstr "" + +#: optiondialog.cpp:691 +msgid "Auto indentation" +msgstr "" + +#: optiondialog.cpp:694 +msgid "On: The indentation of the previous line is used for a new line.\n" +msgstr "" + +#: optiondialog.cpp:698 +msgid "Auto copy selection" +msgstr "" + +#: optiondialog.cpp:701 +msgid "" +"On: Any selection is immediately written to the clipboard.\n" +"Off: You must explicitely copy e.g. via Ctrl-C." +msgstr "" + +#: optiondialog.cpp:706 +msgid "Line end style:" +msgstr "" + +#: optiondialog.cpp:718 +msgid "" +"Sets the line endings for when an edited file is saved.\n" +"DOS/Windows: CR+LF; UNIX: LF; with CR=0D, LF=0A" +msgstr "" + +#: optiondialog.cpp:729 +msgid "Diff and Merge" +msgstr "" + +#: optiondialog.cpp:729 +msgid "Diff and Merge Settings" +msgstr "" + +#: optiondialog.cpp:740 +msgid "Preserve carriage return" +msgstr "" + +#: optiondialog.cpp:743 +msgid "" +"Show carriage return characters '\\r' if they exist.\n" +"Helps to compare files that were modified under different operating systems." +msgstr "" + +#: optiondialog.cpp:748 +msgid "Ignore numbers" +msgstr "" + +#: optiondialog.cpp:751 +msgid "" +"Ignore number characters during line matching phase. (Similar to Ignore " +"white space.)\n" +"Might help to compare files with numeric data." +msgstr "" + +#: optiondialog.cpp:756 +msgid "Ignore C/C++ comments" +msgstr "" + +#: optiondialog.cpp:758 +msgid "Treat C/C++ comments like white space." +msgstr "" + +#: optiondialog.cpp:762 +msgid "Ignore case" +msgstr "" + +#: optiondialog.cpp:765 +msgid "Treat case differences like white space changes. ('a'<=>'A')" +msgstr "" + +#: optiondialog.cpp:769 +msgid "Preprocessor command:" +msgstr "" + +#: optiondialog.cpp:773 +msgid "User defined pre-processing. (See the docs for details.)" +msgstr "" + +#: optiondialog.cpp:776 +msgid "Line-matching preprocessor command:" +msgstr "" + +#: optiondialog.cpp:780 +msgid "" +"This pre-processor is only used during line matching.\n" +"(See the docs for details.)" +msgstr "" + +#: optiondialog.cpp:783 +msgid "Try hard (slower)" +msgstr "" + +#: optiondialog.cpp:786 +msgid "" +"Enables the --minimal option for the external diff.\n" +"The analysis of big files will be much slower." +msgstr "" + +#: optiondialog.cpp:791 +msgid "Auto advance delay (ms):" +msgstr "" + +#: optiondialog.cpp:796 +msgid "" +"When in Auto-Advance mode the result of the current selection is shown \n" +"for the specified time, before jumping to the next conflict. Range: 0-2000 ms" +msgstr "" + +#: optiondialog.cpp:801 +msgid "White space 2-file merge default:" +msgstr "" + +#: optiondialog.cpp:805 optiondialog.cpp:818 +msgid "Manual Choice" +msgstr "" + +#: optiondialog.cpp:809 optiondialog.cpp:823 +msgid "" +"Allow the merge algorithm to automatically select an input for white-space-" +"only changes." +msgstr "" + +#: optiondialog.cpp:814 +msgid "White space 3-file merge default:" +msgstr "" + +#: optiondialog.cpp:828 +msgid "Automatic Merge Regular Expression" +msgstr "" + +#: optiondialog.cpp:837 smalldialogs.cpp:379 +msgid "Auto merge regular expression:" +msgstr "" + +#: optiondialog.cpp:841 +msgid "" +"Regular expression for lines where KDiff3 should automatically choose one " +"source.\n" +"When a line with a conflict matches the regular expression then\n" +"- if available - C, otherwise B will be chosen." +msgstr "" + +#: optiondialog.cpp:847 +msgid "Run regular expression auto merge on merge start" +msgstr "" + +#: optiondialog.cpp:849 +msgid "" +"Run the merge for auto merge regular expressions\n" +"immediately when a merge starts.\n" +msgstr "" + +#: optiondialog.cpp:854 +msgid "Version Control History Merging" +msgstr "" + +#: optiondialog.cpp:863 smalldialogs.cpp:406 +msgid "History start regular expression:" +msgstr "" + +#: optiondialog.cpp:867 +msgid "" +"Regular expression for the start of the version control history entry.\n" +"Usually this line contains the \"$Log$\"-keyword.\n" +"Default value: \".*\\$Log.*\\$.*\"" +msgstr "" + +#: optiondialog.cpp:873 smalldialogs.cpp:435 +msgid "History entry start regular expression:" +msgstr "" + +#: optiondialog.cpp:885 +msgid "" +"A version control history entry consists of several lines.\n" +"Specify the regular expression to detect the first line (without the leading " +"comment).\n" +"Use parentheses to group the keys you want to use for sorting.\n" +"If left empty, then KDiff3 assumes that empty lines separate history " +"entries.\n" +"See the documentation for details." +msgstr "" + +#: optiondialog.cpp:893 +msgid "History merge sorting" +msgstr "" + +#: optiondialog.cpp:895 +msgid "Sort version control history by a key." +msgstr "" + +#: optiondialog.cpp:905 +msgid "History entry start sort key order:" +msgstr "" + +#: optiondialog.cpp:909 +msgid "" +"Each parentheses used in the regular expression for the history start entry\n" +"groups a key that can be used for sorting.\n" +"Specify the list of keys (that are numbered in order of occurrence\n" +"starting with 1) using ',' as separator (e.g. \"4,5,6,1,2,3,7\").\n" +"If left empty, then no sorting will be done.\n" +"See the documentation for details." +msgstr "" + +#: optiondialog.cpp:920 +msgid "Merge version control history on merge start" +msgstr "" + +#: optiondialog.cpp:922 +msgid "Run version control history automerge on merge start." +msgstr "" + +#: optiondialog.cpp:926 +msgid "Test your regular expressions" +msgstr "" + +#: optiondialog.cpp:931 +msgid "Irrelevant merge command:" +msgstr "" + +#: optiondialog.cpp:935 +msgid "" +"If specified this script is run after automerge\n" +"when no other relevant changes were detected.\n" +"Called with the parameters: filename1 filename2 filename3" +msgstr "" + +#: optiondialog.cpp:945 +msgid "Directory Merge" +msgstr "" + +#: optiondialog.cpp:954 +msgid "Recursive directories" +msgstr "" + +#: optiondialog.cpp:956 +msgid "Whether to analyze subdirectories or not." +msgstr "" + +#: optiondialog.cpp:958 +msgid "File pattern(s):" +msgstr "" + +#: optiondialog.cpp:963 +msgid "" +"Pattern(s) of files to be analyzed. \n" +"Wildcards: '*' and '?'\n" +"Several Patterns can be specified by using the separator: ';'" +msgstr "" + +#: optiondialog.cpp:969 +msgid "File-anti-pattern(s):" +msgstr "" + +#: optiondialog.cpp:974 +msgid "" +"Pattern(s) of files to be excluded from analysis. \n" +"Wildcards: '*' and '?'\n" +"Several Patterns can be specified by using the separator: ';'" +msgstr "" + +#: optiondialog.cpp:980 +msgid "Dir-anti-pattern(s):" +msgstr "" + +#: optiondialog.cpp:985 +msgid "" +"Pattern(s) of directories to be excluded from analysis. \n" +"Wildcards: '*' and '?'\n" +"Several Patterns can be specified by using the separator: ';'" +msgstr "" + +#: optiondialog.cpp:991 +msgid "Use .cvsignore" +msgstr "" + +#: optiondialog.cpp:994 +msgid "" +"Extends the antipattern to anything that would be ignored by CVS.\n" +"Via local \".cvsignore\"-files this can be directory specific." +msgstr "" + +#: optiondialog.cpp:999 +msgid "Find hidden files and directories" +msgstr "" + +#: optiondialog.cpp:1002 +msgid "Finds files and directories with the hidden attribute." +msgstr "" + +#: optiondialog.cpp:1004 +msgid "Finds files and directories starting with '.'." +msgstr "" + +#: optiondialog.cpp:1008 +msgid "Follow file links" +msgstr "" + +#: optiondialog.cpp:1011 +msgid "" +"On: Compare the file the link points to.\n" +"Off: Compare the links." +msgstr "" + +#: optiondialog.cpp:1016 +msgid "Follow directory links" +msgstr "" + +#: optiondialog.cpp:1019 +msgid "" +"On: Compare the directory the link points to.\n" +"Off: Compare the links." +msgstr "" + +#: optiondialog.cpp:1035 +msgid "Case sensitive filename comparison" +msgstr "" + +#: optiondialog.cpp:1038 +msgid "" +"The directory comparison will compare files or directories when their names " +"match.\n" +"Set this option if the case of the names must match. (Default for Windows is " +"off, otherwise on.)" +msgstr "" + +#: optiondialog.cpp:1042 +msgid "File Comparison Mode" +msgstr "" + +#: optiondialog.cpp:1046 +msgid "Binary comparison" +msgstr "" + +#: optiondialog.cpp:1047 +msgid "Binary comparison of each file. (Default)" +msgstr "" + +#: optiondialog.cpp:1049 +msgid "Full analysis" +msgstr "" + +#: optiondialog.cpp:1050 +msgid "" +"Do a full analysis and show statistics information in extra columns.\n" +"(Slower than a binary comparison, much slower for binary files.)" +msgstr "" + +#: optiondialog.cpp:1053 +msgid "Trust the modification date (unsafe)" +msgstr "" + +#: optiondialog.cpp:1054 +msgid "" +"Assume that files are equal if the modification date and file length are " +"equal.\n" +"Useful for big directories or slow networks." +msgstr "" + +#: optiondialog.cpp:1057 +msgid "Trust the size (unsafe)" +msgstr "" + +#: optiondialog.cpp:1058 +msgid "" +"Assume that files are equal if their file lengths are equal.\n" +"Useful for big directories or slow networks when the date is modified during " +"download." +msgstr "" + +#: optiondialog.cpp:1062 +msgid "Synchronize directories" +msgstr "" + +#: optiondialog.cpp:1065 +msgid "" +"Offers to store files in both directories so that\n" +"both directories are the same afterwards.\n" +"Works only when comparing two directories without specifying a destination." +msgstr "" + +#: optiondialog.cpp:1071 +msgid "White space differences considered equal" +msgstr "" + +#: optiondialog.cpp:1074 +msgid "" +"If files differ only by white space consider them equal.\n" +"This is only active when full analysis is chosen." +msgstr "" + +#: optiondialog.cpp:1080 +msgid "Copy newer instead of merging (unsafe)" +msgstr "" + +#: optiondialog.cpp:1083 +msgid "" +"Don't look inside, just take the newer file.\n" +"(Use this only if you know what you are doing!)\n" +"Only effective when comparing two directories." +msgstr "" + +#: optiondialog.cpp:1088 +msgid "Backup files (.orig)" +msgstr "" + +#: optiondialog.cpp:1091 +msgid "" +"When a file would be saved over an old file, then the old file\n" +"will be renamed with a '.orig'-extension instead of being deleted." +msgstr "" + +#: optiondialog.cpp:1118 +msgid "Regional Settings" +msgstr "" + +#: optiondialog.cpp:1214 +msgid "Language (restart required)" +msgstr "" + +#: optiondialog.cpp:1246 +msgid "" +"Choose the language of the GUI-strings or \"Auto\".\n" +"For a change of language to take place, quit and restart KDiff3." +msgstr "" + +#: optiondialog.cpp:1264 +msgid "Use the same encoding for everything:" +msgstr "" + +#: optiondialog.cpp:1267 +msgid "" +"Enable this allows to change all encodings by changing the first only.\n" +"Disable this if different individual settings are needed." +msgstr "" + +#: optiondialog.cpp:1272 +msgid "Note: Local Encoding is " +msgstr "" + +#: optiondialog.cpp:1276 +msgid "File Encoding for A:" +msgstr "" + +#: optiondialog.cpp:1281 +msgid "File Encoding for B:" +msgstr "" + +#: optiondialog.cpp:1286 +msgid "File Encoding for C:" +msgstr "" + +#: optiondialog.cpp:1291 +msgid "File Encoding for Merge Output and Saving:" +msgstr "" + +#: optiondialog.cpp:1296 +msgid "File Encoding for Preprocessor Files:" +msgstr "" + +#: optiondialog.cpp:1305 +msgid "Right To Left Language" +msgstr "" + +#: optiondialog.cpp:1308 +msgid "" +"Some languages are read from right to left.\n" +"This setting will change the viewer and editor accordingly." +msgstr "" + +#: optiondialog.cpp:1318 +msgid "Integration" +msgstr "" + +#: optiondialog.cpp:1318 +msgid "Integration Settings" +msgstr "" + +#: optiondialog.cpp:1328 +msgid "Command line options to ignore:" +msgstr "" + +#: optiondialog.cpp:1333 +msgid "" +"List of command line options that should be ignored when KDiff3 is used by " +"other tools.\n" +"Several values can be specified if separated via ';'\n" +"This will suppress the \"Unknown option\"-error." +msgstr "" + +#: optiondialog.cpp:1386 +msgid "" +"You selected a variable width font.\n" +"\n" +"Because this program doesn't handle variable width fonts\n" +"correctly, you might experience problems while editing.\n" +"\n" +"Do you want to continue or do you want to select another font." +msgstr "" + +#: optiondialog.cpp:1390 +msgid "Incompatible Font" +msgstr "" + +#: optiondialog.cpp:1391 +msgid "Continue at Own Risk" +msgstr "" + +#: optiondialog.cpp:1391 +msgid "Select Another Font" +msgstr "" + +#: optiondialog.cpp:1416 +msgid "This resets all options. Not only those of the current topic." +msgstr "" + +#: pdiff.cpp:258 +msgid "PreprocessorCmd: " +msgstr "" + +#: pdiff.cpp:263 +msgid "The following option(s) you selected might change data:\n" +msgstr "" + +#: pdiff.cpp:264 +msgid "" +"\n" +"Most likely this is not wanted during a merge.\n" +"Do you want to disable these settings or continue with these settings active?" +msgstr "" + +#: pdiff.cpp:266 +msgid "Option Unsafe for Merging" +msgstr "" + +#: pdiff.cpp:267 +msgid "Use These Options During Merge" +msgstr "" + +#: pdiff.cpp:267 +msgid "Disable Unsafe Options" +msgstr "" + +#: pdiff.cpp:297 +msgid "Loading A" +msgstr "" + +#: pdiff.cpp:301 +msgid "Loading B" +msgstr "" + +#: pdiff.cpp:318 pdiff.cpp:344 +msgid "Diff: A <-> B" +msgstr "" + +#: pdiff.cpp:324 pdiff.cpp:366 +msgid "Linediff: A <-> B" +msgstr "" + +#: pdiff.cpp:335 +msgid "Loading C" +msgstr "" + +#: pdiff.cpp:347 +msgid "Diff: B <-> C" +msgstr "" + +#: pdiff.cpp:350 +msgid "Diff: A <-> C" +msgstr "" + +#: pdiff.cpp:369 +msgid "Linediff: B <-> C" +msgstr "" + +#: pdiff.cpp:372 +msgid "Linediff: A <-> C" +msgstr "" + +#: pdiff.cpp:509 +msgid "All input files contain the same text, but are not binary equal." +msgstr "" + +#: pdiff.cpp:511 pdiff.cpp:513 pdiff.cpp:515 +msgid "Files %1 and %2 are binary equal.\n" +msgstr "" + +#: pdiff.cpp:512 pdiff.cpp:514 pdiff.cpp:516 +msgid "Files %1 and %2 have equal text, but are not binary equal. \n" +msgstr "" + +#: pdiff.cpp:526 +msgid "" +"Some inputfiles don't seem to be pure textfiles.\n" +"Note that the KDiff3-merge was not meant for binary data.\n" +"Continue at your own risk." +msgstr "" + +#: pdiff.cpp:965 +msgid "Abort" +msgstr "" + +#: pdiff.cpp:971 pdiff.cpp:1059 +msgid "Opening files..." +msgstr "" + +#: pdiff.cpp:1036 pdiff.cpp:1107 +msgid "File open error" +msgstr "" + +#: pdiff.cpp:1139 +msgid "Cutting selection..." +msgstr "" + +#: pdiff.cpp:1160 +msgid "Copying selection to clipboard..." +msgstr "" + +#: pdiff.cpp:1176 +msgid "Inserting clipboard contents..." +msgstr "" + +#: pdiff.cpp:1699 +msgid "Save && Continue" +msgstr "" + +#: pdiff.cpp:1699 +msgid "Continue Without Saving" +msgstr "" + +#: pdiff.cpp:1906 +msgid "Search complete." +msgstr "" + +#: pdiff.cpp:1906 +msgid "Search Complete" +msgstr "" + +#: pdiff.cpp:2130 +msgid "Nothing is selected in either diff input window." +msgstr "" + +#: pdiff.cpp:2130 +msgid "Error while adding manual diff range" +msgstr "" + +#. i18n: file kdiff3_part.rc line 4 +#: rc.cpp:3 +#, no-c-format +msgid "&KDiff3" +msgstr "" + +#. i18n: file kdiff3_part.rc line 13 +#: rc.cpp:6 +#, no-c-format +msgid "Configure KDiff3" +msgstr "" + +#. i18n: file kdiff3_shell.rc line 7 +#: rc.cpp:15 +#, no-c-format +msgid "&Directory" +msgstr "" + +#. i18n: file kdiff3_shell.rc line 30 +#: rc.cpp:18 +#, no-c-format +msgid "Current Item Merge Operation" +msgstr "" + +#. i18n: file kdiff3_shell.rc line 38 +#: rc.cpp:21 +#, no-c-format +msgid "Current Item Sync Operation" +msgstr "" + +#. i18n: file kdiff3_shell.rc line 50 +#: rc.cpp:24 +#, no-c-format +msgid "&Movement" +msgstr "" + +#. i18n: file kdiff3_shell.rc line 61 +#: rc.cpp:27 +#, no-c-format +msgid "D&iffview" +msgstr "" + +#. i18n: file kdiff3_shell.rc line 73 +#: rc.cpp:30 +#, no-c-format +msgid "&Merge" +msgstr "" + +#. i18n: file kdiff3_shell.rc line 95 +#: rc.cpp:33 +#, no-c-format +msgid "&Window" +msgstr "" + +#: smalldialogs.cpp:53 +msgid "A (Base):" +msgstr "" + +#: smalldialogs.cpp:59 smalldialogs.cpp:75 smalldialogs.cpp:91 +#: smalldialogs.cpp:134 +msgid "File..." +msgstr "" + +#: smalldialogs.cpp:61 smalldialogs.cpp:77 smalldialogs.cpp:93 +#: smalldialogs.cpp:136 +msgid "Dir..." +msgstr "" + +#: smalldialogs.cpp:86 +msgid "C (Optional):" +msgstr "" + +#: smalldialogs.cpp:108 +msgid "Swap/Copy Names ..." +msgstr "" + +#: smalldialogs.cpp:114 smalldialogs.cpp:115 smalldialogs.cpp:116 +msgid "Swap %1<->%2" +msgstr "" + +#: smalldialogs.cpp:117 smalldialogs.cpp:118 smalldialogs.cpp:119 +msgid "Copy %1->Output" +msgstr "" + +#: smalldialogs.cpp:120 smalldialogs.cpp:121 smalldialogs.cpp:122 +msgid "Swap %1<->Output" +msgstr "" + +#: smalldialogs.cpp:129 +msgid "Output (optional):" +msgstr "" + +#: smalldialogs.cpp:158 +msgid "Configure..." +msgstr "" + +#: smalldialogs.cpp:329 +msgid "Search text:" +msgstr "" + +#: smalldialogs.cpp:336 +msgid "Case sensitive" +msgstr "" + +#: smalldialogs.cpp:339 +msgid "Search A" +msgstr "" + +#: smalldialogs.cpp:344 +msgid "Search B" +msgstr "" + +#: smalldialogs.cpp:349 +msgid "Search C" +msgstr "" + +#: smalldialogs.cpp:354 +msgid "Search output" +msgstr "" + +#: smalldialogs.cpp:359 +msgid "&Search" +msgstr "" + +#: smalldialogs.cpp:376 +msgid "Regular Expression Tester" +msgstr "" + +#: smalldialogs.cpp:387 +msgid "Example auto merge line:" +msgstr "" + +#: smalldialogs.cpp:389 +msgid "For auto merge test copy a line as used in your files." +msgstr "" + +#: smalldialogs.cpp:395 smalldialogs.cpp:424 smalldialogs.cpp:461 +msgid "Match result:" +msgstr "" + +#: smalldialogs.cpp:414 +msgid "Example history start line (with leading comment):" +msgstr "" + +#: smalldialogs.cpp:417 +msgid "" +"Copy a history start line as used in your files,\n" +"including the leading comment." +msgstr "" + +#: smalldialogs.cpp:443 +msgid "History sort key order:" +msgstr "" + +#: smalldialogs.cpp:451 +msgid "Example history entry start line (without leading comment):" +msgstr "" + +#: smalldialogs.cpp:453 +msgid "" +"Copy a history entry start line as used in your files,\n" +"but omit the leading comment." +msgstr "" + +#: smalldialogs.cpp:468 +msgid "Sort key result:" +msgstr "" + +#: smalldialogs.cpp:519 smalldialogs.cpp:529 smalldialogs.cpp:550 +msgid "Match success." +msgstr "" + +#: smalldialogs.cpp:523 smalldialogs.cpp:533 smalldialogs.cpp:556 +msgid "Match failed." +msgstr "" + +#: smalldialogs.cpp:541 +msgid "Opening and closing parentheses don't match in regular expression." +msgstr "" diff --git a/po/lt.po b/po/lt.po new file mode 100644 index 0000000..5a982aa --- /dev/null +++ b/po/lt.po @@ -0,0 +1,2604 @@ +# Lithuanian translation of the packate +# Automatically generated, 2005. +# +msgid "" +msgstr "" +"Project-Id-Version: ziogelis 77\n" +"POT-Creation-Date: 2006-11-05 08:45+0100\n" +"PO-Revision-Date: 2005-02-23 01:27+0100\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: _translatorinfo.cpp:1 +#, fuzzy +msgid "" +"_: NAME OF TRANSLATORS\n" +"Your names" +msgstr "nobody" + +#: _translatorinfo.cpp:3 +#, fuzzy +msgid "" +"_: EMAIL OF TRANSLATORS\n" +"Your emails" +msgstr "nobody@nowhere.lt" + +#: diff.cpp:246 +msgid "Writing clipboard data to temp file failed." +msgstr "" + +#: diff.cpp:250 +msgid "From Clipboard" +msgstr "" + +#: diff.cpp:491 +msgid "" +"Preprocessing possibly failed. Check this command:\n" +"\n" +" %1\n" +"\n" +"The preprocessing command will be disabled now." +msgstr "" + +#: diff.cpp:526 +msgid "" +"The line-matching-preprocessing possibly failed. Check this command:\n" +"\n" +" %1\n" +"\n" +"The line-matching-preprocessing command will be disabled now." +msgstr "" + +#: diff.cpp:1631 diff.cpp:1645 +msgid "" +"Data loss error:\n" +"If it is reproducable please contact the author.\n" +msgstr "" + +#: diff.cpp:1633 diff.cpp:1647 +msgid "Severe Internal Error" +msgstr "" + +#: difftextwindow.cpp:1643 kdiff3.cpp:753 +msgid "Top line" +msgstr "" + +#: difftextwindow.cpp:1653 +msgid "End" +msgstr "Pab" + +#: directorymergewindow.cpp:142 +msgid "Mix of links and normal files." +msgstr "" + +#: directorymergewindow.cpp:149 +msgid "Link: " +msgstr "" + +#: directorymergewindow.cpp:157 +msgid "Size. " +msgstr "" + +#: directorymergewindow.cpp:170 +msgid "Date & Size: " +msgstr "" + +#: directorymergewindow.cpp:179 directorymergewindow.cpp:185 +msgid "Creating temp copy of %1 failed." +msgstr "" + +#: directorymergewindow.cpp:196 directorymergewindow.cpp:204 +msgid "Opening %1 failed." +msgstr "" + +#: directorymergewindow.cpp:208 +msgid "Comparing file..." +msgstr "" + +#: directorymergewindow.cpp:218 directorymergewindow.cpp:224 +#, c-format +msgid "Error reading from %1" +msgstr "" + +#: directorymergewindow.cpp:282 +#, fuzzy +msgid "Name" +msgstr "" +"#-#-#-#-# kate.po (kate) #-#-#-#-#\n" +"Vardas\n" +"#-#-#-#-# kcmicons.po (kcmicons) #-#-#-#-#\n" +"Vardas\n" +"#-#-#-#-# kcmkurifilt.po (kcmkurifilt) #-#-#-#-#\n" +"Vardas\n" +"#-#-#-#-# kfontinst.po (kfontinst) #-#-#-#-#\n" +"Vardas\n" +"#-#-#-#-# fontinst.po (fontinst) #-#-#-#-#\n" +"Vardas\n" +"#-#-#-#-# kcmview1394.po (kcmview1394) #-#-#-#-#\n" +"Vardas\n" +"#-#-#-#-# kcminfo.po (kcminfo) #-#-#-#-#\n" +"Pavadinimas\n" +"#-#-#-#-# konqueror.po (konqueror) #-#-#-#-#\n" +"Vardas\n" +"#-#-#-#-# kdcop.po (kdcop) #-#-#-#-#\n" +"Vardas\n" +"#-#-#-#-# kcmnic.po (kcmnic) #-#-#-#-#\n" +"Pavadinimas\n" +"#-#-#-#-# kcminput.po (kcminput) #-#-#-#-#\n" +"Vardas\n" +"#-#-#-#-# knetworkconf.po (knetworkconf) #-#-#-#-#\n" +"Vardas\n" +"#-#-#-#-# kio_print.po (kio_print) #-#-#-#-#\n" +"Pavadinimas\n" +"#-#-#-#-# ksysguard.po (ksysguard) #-#-#-#-#\n" +"Pavadinimas\n" +"#-#-#-#-# kfindpart.po (kfindpart) #-#-#-#-#\n" +"Pavadinimas\n" +"#-#-#-#-# kdeprint.po (kdeprint) #-#-#-#-#\n" +"Vardas\n" +"#-#-#-#-# kio.po (kio) #-#-#-#-#\n" +"Vardas\n" +"#-#-#-#-# kdelibs.po (kdelibs) #-#-#-#-#\n" +"Vardas\n" +"#-#-#-#-# katepart.po (katepart) #-#-#-#-#\n" +"Vardas\n" +"#-#-#-#-# kfilereplace.po (kfilereplace) #-#-#-#-#\n" +"Vardas\n" +"#-#-#-#-# k3b.po (k3b) #-#-#-#-#\n" +"Vardas\n" +"#-#-#-#-# ksysv.po (ksysv) #-#-#-#-#\n" +"Pavadinimas\n" +"#-#-#-#-# kfile_rpm.po (kfile_rpm) #-#-#-#-#\n" +"Pavadinimas\n" +"#-#-#-#-# kfile_deb.po (kfile_deb) #-#-#-#-#\n" +"Pavadinimas\n" +"#-#-#-#-# kmahjongg.po (kmahjongg) #-#-#-#-#\n" +"Vardas\n" +"#-#-#-#-# kbattleship.po (kbattleship) #-#-#-#-#\n" +"Vardas\n" +"#-#-#-#-# konquest.po (konquest) #-#-#-#-#\n" +"Vardas\n" +"#-#-#-#-# kcoloredit.po (kcoloredit) #-#-#-#-#\n" +"Vardas\n" +"#-#-#-#-# kstars.po (kstars) #-#-#-#-#\n" +"Vardas\n" +"#-#-#-#-# kmessedwords.po (kmessedwords) #-#-#-#-#\n" +"Vardas\n" +"#-#-#-#-# kiten.po (kiten) #-#-#-#-#\n" +"Vardas\n" +"#-#-#-#-# kig.po (kig) #-#-#-#-#\n" +"Vardas\n" +"#-#-#-#-# kvoctrain.po (kvoctrain) #-#-#-#-#\n" +"Vardas\n" +"#-#-#-#-# kalarm.po (kalarm) #-#-#-#-#\n" +"Vardas\n" +"#-#-#-#-# multisynk.po (multisynk) #-#-#-#-#\n" +"Vardas\n" +"#-#-#-#-# knode.po (knode) #-#-#-#-#\n" +"Vardas\n" +"#-#-#-#-# kfile_vcf.po (kfile_vcf) #-#-#-#-#\n" +"Vardas\n" +"#-#-#-#-# kontact.po (kontact) #-#-#-#-#\n" +"Vardas\n" +"#-#-#-#-# libkdepim.po (libkdepim) #-#-#-#-#\n" +"Vardas\n" +"#-#-#-#-# korganizer.po (korganizer) #-#-#-#-#\n" +"Vardas\n" +"#-#-#-#-# kaddressbook.po (kaddressbook) #-#-#-#-#\n" +"Vardas\n" +"#-#-#-#-# kmail.po (kmail) #-#-#-#-#\n" +"Vardas\n" +"#-#-#-#-# libkdenetwork.po (libkdenetwork) #-#-#-#-#\n" +"Vardas\n" +"#-#-#-#-# ktnef.po (ktnef) #-#-#-#-#\n" +"Vardas\n" +"#-#-#-#-# kbabel.po (kbabel) #-#-#-#-#\n" +"Vardas\n" +"#-#-#-#-# kcachegrind.po (kcachegrind) #-#-#-#-#\n" +"Pavadinimas\n" +"#-#-#-#-# kgpg.po (kgpg) #-#-#-#-#\n" +"Vardas\n" +"#-#-#-#-# nexscope.po (nexscope) #-#-#-#-#\n" +"Vardas\n" +"#-#-#-#-# kfile_desktop.po (kfile_desktop) #-#-#-#-#\n" +"Vardas\n" +"#-#-#-#-# domtreeviewer.po (domtreeviewer) #-#-#-#-#\n" +"Vardas\n" +"#-#-#-#-# fsview.po (fsview) #-#-#-#-#\n" +"Vardas\n" +"#-#-#-#-# katepybrowse.po (katepybrowse) #-#-#-#-#\n" +"Vardas\n" +"#-#-#-#-# dcoprss.po (dcoprss) #-#-#-#-#\n" +"Pavadinimas\n" +"#-#-#-#-# kopete.po (kopete) #-#-#-#-#\n" +"Pavadinimas\n" +"#-#-#-#-# kget.po (kget) #-#-#-#-#\n" +"Vardas\n" +"#-#-#-#-# kfileshare.po (kfileshare) #-#-#-#-#\n" +"Vardas\n" +"#-#-#-#-# kfile_torrent.po (kfile_torrent) #-#-#-#-#\n" +"Pavadinimas\n" +"#-#-#-#-# krdc.po (krdc) #-#-#-#-#\n" +"Pavadinimas\n" +"#-#-#-#-# noatun.po (noatun) #-#-#-#-#\n" +"Vardas" + +#: directorymergewindow.cpp:286 +msgid "Operation" +msgstr "Operacija" + +#: directorymergewindow.cpp:287 +#, fuzzy +msgid "Status" +msgstr "" +"#-#-#-#-# kdmchooser.po (kdmchooser) #-#-#-#-#\n" +"Statusas\n" +"#-#-#-#-# kdmgreet.po (kdmgreet) #-#-#-#-#\n" +"BÅ«sena\n" +"#-#-#-#-# khelpcenter.po (khelpcenter) #-#-#-#-#\n" +"BÅ«vis\n" +"#-#-#-#-# kcminfo.po (kcminfo) #-#-#-#-#\n" +"Statusas\n" +"#-#-#-#-# konqueror.po (konqueror) #-#-#-#-#\n" +"BÅ«vis\n" +"#-#-#-#-# kcmkded.po (kcmkded) #-#-#-#-#\n" +"BÅ«vis\n" +"#-#-#-#-# ksysguard.po (ksysguard) #-#-#-#-#\n" +"BÅ«klÄ—\n" +"#-#-#-#-# ktorrent.po (ktorrent) #-#-#-#-#\n" +"BÅ«sena\n" +"#-#-#-#-# kbackgammon.po (kbackgammon) #-#-#-#-#\n" +"BÅ«sena\n" +"#-#-#-#-# kstars.po (kstars) #-#-#-#-#\n" +"BÅ«sena\n" +"#-#-#-#-# libkdepim.po (libkdepim) #-#-#-#-#\n" +"BÅ«sena\n" +"#-#-#-#-# korganizer.po (korganizer) #-#-#-#-#\n" +"BÅ«sena\n" +"#-#-#-#-# akregator.po (akregator) #-#-#-#-#\n" +"BÅ«sena\n" +"#-#-#-#-# kmail.po (kmail) #-#-#-#-#\n" +"BÅ«sena\n" +"#-#-#-#-# kbabel.po (kbabel) #-#-#-#-#\n" +"BÅ«sena\n" +"#-#-#-#-# kopete.po (kopete) #-#-#-#-#\n" +"BÅ«sena\n" +"#-#-#-#-# kfileshare.po (kfileshare) #-#-#-#-#\n" +"BÅ«sena\n" +"#-#-#-#-# kpf.po (kpf) #-#-#-#-#\n" +"BÅ«sena\n" +"#-#-#-#-# ksirc.po (ksirc) #-#-#-#-#\n" +"BÅ«sena" + +#: directorymergewindow.cpp:288 +msgid "Unsolved" +msgstr "" + +#: directorymergewindow.cpp:289 +msgid "Solved" +msgstr "" + +#: directorymergewindow.cpp:290 +msgid "Nonwhite" +msgstr "" + +#: directorymergewindow.cpp:291 +msgid "White" +msgstr "" + +#: directorymergewindow.cpp:319 +msgid "" +"You are currently doing a directory merge. Are you sure, you want to abort the " +"merge and rescan the directory?" +msgstr "" + +#: directorymergewindow.cpp:320 directorymergewindow.cpp:2868 +msgid "Rescan" +msgstr "" + +#: directorymergewindow.cpp:320 kdiff3.cpp:603 pdiff.cpp:979 +msgid "Continue Merging" +msgstr "" + +#: directorymergewindow.cpp:462 +msgid "Opening of directories failed:" +msgstr "" + +#: directorymergewindow.cpp:465 +msgid "" +"Dir A \"%1\" does not exist or is not a directory.\n" +msgstr "" + +#: directorymergewindow.cpp:468 +msgid "" +"Dir B \"%1\" does not exist or is not a directory.\n" +msgstr "" + +#: directorymergewindow.cpp:471 +msgid "" +"Dir C \"%1\" does not exist or is not a directory.\n" +msgstr "" + +#: directorymergewindow.cpp:473 +msgid "Directory Open Error" +msgstr "" + +#: directorymergewindow.cpp:481 +msgid "" +"The destination directory must not be the same as A or B when three directories " +"are merged.\n" +"Check again before continuing." +msgstr "" + +#: directorymergewindow.cpp:483 +msgid "Parameter Warning" +msgstr "" + +#: directorymergewindow.cpp:488 +msgid "Scanning directories..." +msgstr "" + +#: directorymergewindow.cpp:537 +msgid "Reading Directory A" +msgstr "" + +#: directorymergewindow.cpp:559 +msgid "Reading Directory B" +msgstr "" + +#: directorymergewindow.cpp:581 +msgid "Reading Directory C" +msgstr "" + +#: directorymergewindow.cpp:607 +msgid "Some subdirectories were not readable in" +msgstr "" + +#: directorymergewindow.cpp:612 +msgid "Check the permissions of the subdirectories." +msgstr "" + +#: directorymergewindow.cpp:646 kdiff3.cpp:552 kdiff3.cpp:636 kdiff3.cpp:661 +#: kdiff3.cpp:934 kdiff3.cpp:955 pdiff.cpp:1059 pdiff.cpp:1131 pdiff.cpp:1169 +#: pdiff.cpp:1185 pdiff.cpp:1215 pdiff.cpp:1226 +#, fuzzy +msgid "Ready." +msgstr "" +"#-#-#-#-# kfindpart.po (kfindpart) #-#-#-#-#\n" +"PasiruoÅ¡Ä™s\n" +"#-#-#-#-# kfilereplace.po (kfilereplace) #-#-#-#-#\n" +"PasirengÄ™s.\n" +"#-#-#-#-# k3b.po (k3b) #-#-#-#-#\n" +"PasirengÄ™s.\n" +"#-#-#-#-# pwmanager.po (pwmanager) #-#-#-#-#\n" +"PasirengÄ™s.\n" +"#-#-#-#-# kdat.po (kdat) #-#-#-#-#\n" +"PasiruoÅ¡Ä™s.\n" +"#-#-#-#-# kcron.po (kcron) #-#-#-#-#\n" +"PasiruoÅ¡Ä™s.\n" +"#-#-#-#-# ksayit.po (ksayit) #-#-#-#-#\n" +"PasirengÄ™s.\n" +"#-#-#-#-# kmouth.po (kmouth) #-#-#-#-#\n" +"PasirengÄ™s.\n" +"#-#-#-#-# kmrml.po (kmrml) #-#-#-#-#\n" +"PasirengÄ™s.\n" +"#-#-#-#-# kcoloredit.po (kcoloredit) #-#-#-#-#\n" +"PasiruoÅ¡Ä™s.\n" +"#-#-#-#-# kverbos.po (kverbos) #-#-#-#-#\n" +"PasirengÄ™s.\n" +"#-#-#-#-# kmail.po (kmail) #-#-#-#-#\n" +"PasirengÄ™s.\n" +"#-#-#-#-# ksync.po (ksync) #-#-#-#-#\n" +"PasirengÄ™s.\n" +"#-#-#-#-# dub.po (dub) #-#-#-#-#\n" +"PasirengÄ™s.\n" +"#-#-#-#-# kopete.po (kopete) #-#-#-#-#\n" +"PasirengÄ™s." + +#: directorymergewindow.cpp:660 +msgid "Directory Comparison Status" +msgstr "" + +#: directorymergewindow.cpp:661 +msgid "Number of subdirectories:" +msgstr "" + +#: directorymergewindow.cpp:662 +msgid "Number of equal files:" +msgstr "" + +#: directorymergewindow.cpp:663 +msgid "Number of different files:" +msgstr "" + +#: directorymergewindow.cpp:666 +msgid "Number of manual merges:" +msgstr "" + +#: directorymergewindow.cpp:802 +msgid "This affects all merge operations." +msgstr "" + +#: directorymergewindow.cpp:803 +msgid "Changing All Merge Operations" +msgstr "" + +#: directorymergewindow.cpp:803 mergeresultwindow.cpp:287 +msgid "C&ontinue" +msgstr "&TÄ™sti" + +#: directorymergewindow.cpp:1169 +msgid "Processing " +msgstr "" + +#: directorymergewindow.cpp:1647 directorymergewindow.cpp:1653 +msgid "To do." +msgstr "" + +#: directorymergewindow.cpp:1756 directorymergewindow.cpp:2899 +msgid "Copy A to B" +msgstr "" + +#: directorymergewindow.cpp:1757 directorymergewindow.cpp:2900 +msgid "Copy B to A" +msgstr "" + +#: directorymergewindow.cpp:1758 directorymergewindow.cpp:2901 +msgid "Delete A" +msgstr "" + +#: directorymergewindow.cpp:1759 directorymergewindow.cpp:2902 +msgid "Delete B" +msgstr "" + +#: directorymergewindow.cpp:1760 +msgid "Delete A & B" +msgstr "" + +#: directorymergewindow.cpp:1761 directorymergewindow.cpp:2904 +msgid "Merge to A" +msgstr "" + +#: directorymergewindow.cpp:1762 directorymergewindow.cpp:2905 +msgid "Merge to B" +msgstr "" + +#: directorymergewindow.cpp:1763 +msgid "Merge to A & B" +msgstr "" + +#: directorymergewindow.cpp:1767 directorymergewindow.cpp:2896 +msgid "Delete (if exists)" +msgstr "" + +#: directorymergewindow.cpp:1768 directorymergewindow.cpp:1769 +#: directorymergewindow.cpp:2895 optiondialog.cpp:809 smalldialogs.cpp:102 +msgid "Merge" +msgstr "" + +#: directorymergewindow.cpp:1768 directorymergewindow.cpp:1769 +msgid "Merge (manual)" +msgstr "" + +#: directorymergewindow.cpp:1770 +msgid "Error: Conflicting File Types" +msgstr "" + +#: directorymergewindow.cpp:1771 +msgid "Error: Dates are equal but files are not." +msgstr "" + +#: directorymergewindow.cpp:1795 directorymergewindow.cpp:1824 +#: directorymergewindow.cpp:1849 +msgid "This operation is currently not possible." +msgstr "" + +#: directorymergewindow.cpp:1795 directorymergewindow.cpp:1824 +#: directorymergewindow.cpp:1849 directorymergewindow.cpp:2106 +msgid "Operation Not Possible" +msgstr "" + +#: directorymergewindow.cpp:1888 +msgid "" +"This should never happen: \n" +"\n" +"mergeResultSaved: m_pMFI=0\n" +"\n" +"If you know how to reproduce this, please contact the program author." +msgstr "" + +#: directorymergewindow.cpp:1888 +msgid "Program Error" +msgstr "" + +#: directorymergewindow.cpp:1899 +msgid "" +"An error occurred while copying.\n" +msgstr "" + +#: directorymergewindow.cpp:1900 directorymergewindow.cpp:2306 +msgid "Merge Error" +msgstr "" + +#: directorymergewindow.cpp:1905 directorymergewindow.cpp:2311 +msgid "Error." +msgstr "Klaida." + +#: directorymergewindow.cpp:1910 directorymergewindow.cpp:2202 +#: directorymergewindow.cpp:2242 +msgid "Done." +msgstr "Baigta." + +#: directorymergewindow.cpp:1933 +msgid "Not saved." +msgstr "" + +#: directorymergewindow.cpp:1968 +msgid "Unknown merge operation. (This must never happen!)" +msgstr "" + +#: directorymergewindow.cpp:2000 +msgid "Unknown merge operation." +msgstr "" + +#: directorymergewindow.cpp:2015 +msgid "" +"The merge is about to begin.\n" +"\n" +"Choose \"Do it\" if you have read the instructions and know what you are " +"doing.\n" +"Choosing \"Simulate it\" will tell you what would happen.\n" +"\n" +"Be aware that this program still has beta status and there is NO WARRANTY " +"whatsoever! Make backups of your vital data!" +msgstr "" + +#: directorymergewindow.cpp:2020 +msgid "Starting Merge" +msgstr "" + +#: directorymergewindow.cpp:2020 +msgid "Do It" +msgstr "" + +#: directorymergewindow.cpp:2020 +msgid "Simulate It" +msgstr "" + +#: directorymergewindow.cpp:2046 +msgid "" +"The highlighted item has a different type in the different directories. Select " +"what to do." +msgstr "" + +#: directorymergewindow.cpp:2055 +msgid "" +"The modification dates of the file are equal but the files are not. Select what " +"to do." +msgstr "" + +#: directorymergewindow.cpp:2106 +msgid "" +"This operation is currently not possible because directory merge is currently " +"running." +msgstr "" + +#: directorymergewindow.cpp:2166 +msgid "" +"There was an error in the last step.\n" +"Do you want to continue with the item that caused the error or do you want to " +"skip this item?" +msgstr "" + +#: directorymergewindow.cpp:2168 +msgid "Continue merge after an error" +msgstr "" + +#: directorymergewindow.cpp:2168 +msgid "Continue With Last Item" +msgstr "" + +#: directorymergewindow.cpp:2168 +msgid "Skip Item" +msgstr "" + +#: directorymergewindow.cpp:2202 +msgid "Skipped." +msgstr "" + +#: directorymergewindow.cpp:2209 directorymergewindow.cpp:2435 +msgid "In progress..." +msgstr "" + +#: directorymergewindow.cpp:2257 +msgid "Merge operation complete." +msgstr "" + +#: directorymergewindow.cpp:2257 directorymergewindow.cpp:2260 +msgid "Merge Complete" +msgstr "" + +#: directorymergewindow.cpp:2269 +msgid "" +"Simulated merge complete: Check if you agree with the proposed operations." +msgstr "" + +#: directorymergewindow.cpp:2305 +msgid "" +"An error occurred. Press OK to see detailed information.\n" +msgstr "" + +#: directorymergewindow.cpp:2348 +msgid "Error: While deleting %1: Creating backup failed." +msgstr "" + +#: directorymergewindow.cpp:2355 +msgid "delete directory recursively( %1 )" +msgstr "" + +#: directorymergewindow.cpp:2357 +msgid "delete( %1 )" +msgstr "" + +#: directorymergewindow.cpp:2372 +msgid "Error: delete dir operation failed while trying to read the directory." +msgstr "" + +#: directorymergewindow.cpp:2391 +msgid "Error: rmdir( %1 ) operation failed." +msgstr "" + +#: directorymergewindow.cpp:2401 +msgid "Error: delete operation failed." +msgstr "" + +#: directorymergewindow.cpp:2427 +msgid "manual merge( %1, %2, %3 -> %4)" +msgstr "" + +#: directorymergewindow.cpp:2430 +msgid "" +" Note: After a manual merge the user should continue by pressing F7." +msgstr "" + +#: directorymergewindow.cpp:2453 +msgid "Error: copy( %1 -> %2 ) failed.Deleting existing destination failed." +msgstr "" + +#: directorymergewindow.cpp:2463 +msgid "copyLink( %1 -> %2 )" +msgstr "" + +#: directorymergewindow.cpp:2474 +msgid "Error: copyLink failed: Remote links are not yet supported." +msgstr "" + +#: directorymergewindow.cpp:2480 +msgid "Error: copyLink failed." +msgstr "" + +#: directorymergewindow.cpp:2500 +msgid "copy( %1 -> %2 )" +msgstr "" + +#: directorymergewindow.cpp:2526 +msgid "Error during rename( %1 -> %2 ): Cannot delete existing destination." +msgstr "" + +#: directorymergewindow.cpp:2532 +msgid "rename( %1 -> %2 )" +msgstr "" + +#: directorymergewindow.cpp:2541 +msgid "Error: Rename failed." +msgstr "" + +#: directorymergewindow.cpp:2559 +msgid "Error during makeDir of %1. Cannot delete existing file." +msgstr "" + +#: directorymergewindow.cpp:2575 +msgid "makeDir( %1 )" +msgstr "" + +#: directorymergewindow.cpp:2585 +msgid "Error while creating directory." +msgstr "" + +#: directorymergewindow.cpp:2608 directorymergewindow.cpp:2725 +msgid "Dest" +msgstr "" + +#: directorymergewindow.cpp:2612 directorymergewindow.cpp:2650 +msgid "Dir" +msgstr "" + +#: directorymergewindow.cpp:2613 +msgid "Type" +msgstr "Tipas" + +#: directorymergewindow.cpp:2614 +msgid "Size" +msgstr "Dydis" + +#: directorymergewindow.cpp:2615 +msgid "Attr" +msgstr "" + +#: directorymergewindow.cpp:2616 +msgid "Last Modification" +msgstr "" + +#: directorymergewindow.cpp:2617 +msgid "Link-Destination" +msgstr "" + +#: directorymergewindow.cpp:2667 +msgid "not available" +msgstr "" + +#: directorymergewindow.cpp:2687 +msgid "A (Dest): " +msgstr "" + +#: directorymergewindow.cpp:2690 +msgid "A (Base): " +msgstr "" + +#: directorymergewindow.cpp:2696 +msgid "B (Dest): " +msgstr "" + +#: directorymergewindow.cpp:2704 +msgid "C (Dest): " +msgstr "" + +#: directorymergewindow.cpp:2710 +msgid "Dest: " +msgstr "" + +#: directorymergewindow.cpp:2775 +msgid "Save Directory Merge State As..." +msgstr "" + +#: directorymergewindow.cpp:2862 +msgid "Start/Continue Directory Merge" +msgstr "" + +#: directorymergewindow.cpp:2863 +msgid "Run Operation for Current Item" +msgstr "" + +#: directorymergewindow.cpp:2864 +msgid "Compare Selected File" +msgstr "" + +#: directorymergewindow.cpp:2865 +msgid "Merge Current File" +msgstr "" + +#: directorymergewindow.cpp:2866 +msgid "Fold All Subdirs" +msgstr "" + +#: directorymergewindow.cpp:2867 +msgid "Unfold All Subdirs" +msgstr "" + +#: directorymergewindow.cpp:2871 +msgid "Choose A for All Items" +msgstr "" + +#: directorymergewindow.cpp:2872 +msgid "Choose B for All Items" +msgstr "" + +#: directorymergewindow.cpp:2873 +msgid "Choose C for All Items" +msgstr "" + +#: directorymergewindow.cpp:2874 +msgid "Auto-Choose Operation for All Items" +msgstr "" + +#: directorymergewindow.cpp:2875 +msgid "No Operation for All Items" +msgstr "" + +#: directorymergewindow.cpp:2880 +msgid "Show Identical Files" +msgstr "" + +#: directorymergewindow.cpp:2881 +msgid "Show Different Files" +msgstr "" + +#: directorymergewindow.cpp:2882 +msgid "Show Files only in A" +msgstr "" + +#: directorymergewindow.cpp:2883 +msgid "Show Files only in B" +msgstr "" + +#: directorymergewindow.cpp:2884 +msgid "Show Files only in C" +msgstr "" + +#: directorymergewindow.cpp:2888 +msgid "Compare Explicitly Selected Files" +msgstr "" + +#: directorymergewindow.cpp:2889 +msgid "Merge Explicitly Selected Files" +msgstr "" + +#: directorymergewindow.cpp:2891 directorymergewindow.cpp:2898 +#, fuzzy +msgid "Do Nothing" +msgstr "Nieko" + +#: directorymergewindow.cpp:2892 +msgid "A" +msgstr "" + +#: directorymergewindow.cpp:2893 +msgid "B" +msgstr "B" + +#: directorymergewindow.cpp:2894 +msgid "C" +msgstr "C" + +#: directorymergewindow.cpp:2903 +msgid "Delete A && B" +msgstr "" + +#: directorymergewindow.cpp:2906 +msgid "Merge to A && B" +msgstr "" + +#: fileaccess.cpp:595 +msgid "" +"While trying to make a backup, deleting an older backup failed. \n" +"Filename: " +msgstr "" + +#: fileaccess.cpp:602 +msgid "" +"While trying to make a backup, renaming failed. \n" +"Filenames: " +msgstr "" + +#: fileaccess.cpp:624 +#, c-format +msgid "Getting file status: %1" +msgstr "" + +#: fileaccess.cpp:667 +#, c-format +msgid "Reading file: %1" +msgstr "" + +#: fileaccess.cpp:703 +#, c-format +msgid "Writing file: %1" +msgstr "" + +#: fileaccess.cpp:731 +msgid "Out of memory" +msgstr "" + +#: fileaccess.cpp:766 +#, c-format +msgid "Making directory: %1" +msgstr "" + +#: fileaccess.cpp:786 +#, c-format +msgid "Removing directory: %1" +msgstr "" + +#: fileaccess.cpp:801 +#, c-format +msgid "Removing file: %1" +msgstr "" + +#: fileaccess.cpp:817 +msgid "Creating symbolic link: %1 -> %2" +msgstr "" + +#: fileaccess.cpp:843 +msgid "Renaming file: %1 -> %2" +msgstr "" + +#: fileaccess.cpp:879 +msgid "Copying file: %1 -> %2" +msgstr "" + +#: fileaccess.cpp:893 +#, c-format +msgid "" +"Error during file copy operation: Opening file for reading failed. Filename: %1" +msgstr "" + +#: fileaccess.cpp:899 +#, c-format +msgid "" +"Error during file copy operation: Opening file for writing failed. Filename: %1" +msgstr "" + +#: fileaccess.cpp:914 +#, c-format +msgid "Error during file copy operation: Reading failed. Filename: %1" +msgstr "" + +#: fileaccess.cpp:923 +#, c-format +msgid "Error during file copy operation: Writing failed. Filename: %1" +msgstr "" + +#: fileaccess.cpp:1219 +msgid "Reading directory: " +msgstr "" + +#: fileaccess.cpp:1348 +#, c-format +msgid "Listing directory: %1" +msgstr "" + +#: kdiff3.cpp:142 +msgid "Current Configuration:" +msgstr "" + +#: kdiff3.cpp:147 +msgid "Config Option Error:" +msgstr "" + +#: kdiff3.cpp:187 +msgid "Option --auto used, but no output file specified." +msgstr "" + +#: kdiff3.cpp:323 +msgid "Option --auto ignored for directory comparison." +msgstr "" + +#: kdiff3.cpp:359 +msgid "Saving failed." +msgstr "" + +#: kdiff3.cpp:386 pdiff.cpp:1041 pdiff.cpp:1112 +msgid "Opening of these files failed:" +msgstr "" + +#: kdiff3.cpp:395 +msgid "File Open Error" +msgstr "" + +#: kdiff3.cpp:418 +msgid "Opens documents for comparison..." +msgstr "" + +#: kdiff3.cpp:423 +msgid "Saves the merge result. All conflicts must be solved!" +msgstr "" + +#: kdiff3.cpp:425 +msgid "Saves the current document as..." +msgstr "" + +#: kdiff3.cpp:427 +msgid "Print the differences" +msgstr "" + +#: kdiff3.cpp:429 +#, fuzzy +msgid "Quits the application" +msgstr "" +"#-#-#-#-# k3b.po (k3b) #-#-#-#-#\n" +"IÅ¡eina iÅ¡ programos\n" +"#-#-#-#-# kmag.po (kmag) #-#-#-#-#\n" +"Baigs programos darbÄ…\n" +"#-#-#-#-# kmouth.po (kmouth) #-#-#-#-#\n" +"Baigs programos darbÄ…\n" +"#-#-#-#-# kverbos.po (kverbos) #-#-#-#-#\n" +"Baigs programos darbÄ…\n" +"#-#-#-#-# ksync.po (ksync) #-#-#-#-#\n" +"Baigs programos darbÄ…\n" +"#-#-#-#-# umbrello.po (umbrello) #-#-#-#-#\n" +"Baigs programos darbÄ…" + +#: kdiff3.cpp:431 +msgid "Cuts the selected section and puts it to the clipboard" +msgstr "IÅ¡kirps pažymÄ—tÄ… sritį ir padÄ—s į talpyklÄ…" + +#: kdiff3.cpp:433 +msgid "Copies the selected section to the clipboard" +msgstr "Nukopijuos pažymÄ—tÄ… sritį į talpyklÄ…" + +#: kdiff3.cpp:435 +msgid "Pastes the clipboard contents to actual position" +msgstr "PadÄ—s talpyklÄ—s turinį dabartinÄ—je pozicijoje" + +#: kdiff3.cpp:437 +msgid "Select everything in current window" +msgstr "" + +#: kdiff3.cpp:439 +msgid "Search for a string" +msgstr "" + +#: kdiff3.cpp:441 +msgid "Search again for the string" +msgstr "" + +#: kdiff3.cpp:443 +msgid "Enables/disables the toolbar" +msgstr "Ä®jungs arba iÅ¡jungs įrankinÄ™" + +#: kdiff3.cpp:445 +msgid "Enables/disables the statusbar" +msgstr "Ä®jungs arba iÅ¡jungs bÅ«senos juostÄ…" + +#: kdiff3.cpp:449 +msgid "Configure KDiff3..." +msgstr "" + +#: kdiff3.cpp:470 +msgid "Go to Current Delta" +msgstr "" + +#: kdiff3.cpp:471 +msgid "Go to First Delta" +msgstr "" + +#: kdiff3.cpp:472 +msgid "Go to Last Delta" +msgstr "" + +#: kdiff3.cpp:473 +msgid "(Skips white space differences when \"Show White Space\" is disabled.)" +msgstr "" + +#: kdiff3.cpp:474 +msgid "" +"(Does not skip white space differences even when \"Show White Space\" is " +"disabled.)" +msgstr "" + +#: kdiff3.cpp:475 +msgid "Go to Previous Delta" +msgstr "" + +#: kdiff3.cpp:477 +msgid "Go to Next Delta" +msgstr "" + +#: kdiff3.cpp:479 +msgid "Go to Previous Conflict" +msgstr "" + +#: kdiff3.cpp:481 +msgid "Go to Next Conflict" +msgstr "" + +#: kdiff3.cpp:483 +msgid "Go to Previous Unsolved Conflict" +msgstr "" + +#: kdiff3.cpp:485 +msgid "Go to Next Unsolved Conflict" +msgstr "" + +#: kdiff3.cpp:487 +msgid "Select Line(s) From A" +msgstr "" + +#: kdiff3.cpp:488 +msgid "Select Line(s) From B" +msgstr "" + +#: kdiff3.cpp:489 +msgid "Select Line(s) From C" +msgstr "" + +#: kdiff3.cpp:490 +msgid "Automatically Go to Next Unsolved Conflict After Source Selection" +msgstr "" + +#: kdiff3.cpp:492 +msgid "Show Space && Tabulator Characters for Differences" +msgstr "" + +#: kdiff3.cpp:493 +msgid "Show White Space" +msgstr "" + +#: kdiff3.cpp:495 +msgid "Show Line Numbers" +msgstr "" + +#: kdiff3.cpp:496 +msgid "Choose A Everywhere" +msgstr "" + +#: kdiff3.cpp:497 +msgid "Choose B Everywhere" +msgstr "" + +#: kdiff3.cpp:498 +msgid "Choose C Everywhere" +msgstr "" + +#: kdiff3.cpp:499 +msgid "Choose A for All Unsolved Conflicts" +msgstr "" + +#: kdiff3.cpp:500 +msgid "Choose B for All Unsolved Conflicts" +msgstr "" + +#: kdiff3.cpp:501 +msgid "Choose C for All Unsolved Conflicts" +msgstr "" + +#: kdiff3.cpp:502 +msgid "Choose A for All Unsolved Whitespace Conflicts" +msgstr "" + +#: kdiff3.cpp:503 +msgid "Choose B for All Unsolved Whitespace Conflicts" +msgstr "" + +#: kdiff3.cpp:504 +msgid "Choose C for All Unsolved Whitespace Conflicts" +msgstr "" + +#: kdiff3.cpp:505 +msgid "Automatically Solve Simple Conflicts" +msgstr "" + +#: kdiff3.cpp:506 +msgid "Set Deltas to Conflicts" +msgstr "" + +#: kdiff3.cpp:507 +msgid "Run Regular Expression Auto Merge" +msgstr "" + +#: kdiff3.cpp:508 +msgid "Automatically Solve History Conflicts" +msgstr "" + +#: kdiff3.cpp:509 +msgid "Split Diff At Selection" +msgstr "" + +#: kdiff3.cpp:510 +msgid "Join Selected Diffs" +msgstr "" + +#: kdiff3.cpp:512 +msgid "Show Window A" +msgstr "" + +#: kdiff3.cpp:513 +msgid "Show Window B" +msgstr "" + +#: kdiff3.cpp:514 +msgid "Show Window C" +msgstr "" + +#: kdiff3.cpp:515 kdiff3.cpp:526 +msgid "Focus Next Window" +msgstr "" + +#: kdiff3.cpp:517 +msgid "Normal Overview" +msgstr "" + +#: kdiff3.cpp:518 +msgid "A vs. B Overview" +msgstr "" + +#: kdiff3.cpp:519 +msgid "A vs. C Overview" +msgstr "" + +#: kdiff3.cpp:520 +msgid "B vs. C Overview" +msgstr "" + +#: kdiff3.cpp:521 +msgid "Word Wrap Diff Windows" +msgstr "" + +#: kdiff3.cpp:522 +msgid "Add Manual Diff Alignment" +msgstr "" + +#: kdiff3.cpp:523 +msgid "Clear All Manual Diff Alignments" +msgstr "" + +#: kdiff3.cpp:528 +msgid "Focus Prev Window" +msgstr "" + +#: kdiff3.cpp:529 +msgid "Toggle Split Orientation" +msgstr "" + +#: kdiff3.cpp:531 +msgid "Dir && Text Split Screen View" +msgstr "" + +#: kdiff3.cpp:533 +msgid "Toggle Between Dir && Text View" +msgstr "" + +#: kdiff3.cpp:582 pdiff.cpp:1712 +msgid "The merge result hasn't been saved." +msgstr "" + +#: kdiff3.cpp:583 +msgid "Save && Quit" +msgstr "" + +#: kdiff3.cpp:583 +msgid "Quit Without Saving" +msgstr "" + +#: kdiff3.cpp:591 pdiff.cpp:1721 +msgid "Saving the merge result failed." +msgstr "" + +#: kdiff3.cpp:602 pdiff.cpp:978 +msgid "" +"You are currently doing a directory merge. Are you sure, you want to abort?" +msgstr "" + +#: kdiff3.cpp:625 +#, fuzzy +msgid "Saving file..." +msgstr "" +"#-#-#-#-# k3b.po (k3b) #-#-#-#-#\n" +"IÅ¡saugoma byla...\n" +"#-#-#-#-# kwordquiz.po (kwordquiz) #-#-#-#-#\n" +"IÅ¡saugojama byla...\n" +"#-#-#-#-# kverbos.po (kverbos) #-#-#-#-#\n" +"IÅ¡saugojama byla...\n" +"#-#-#-#-# ksync.po (ksync) #-#-#-#-#\n" +"IÅ¡saugojama byla...\n" +"#-#-#-#-# umbrello.po (umbrello) #-#-#-#-#\n" +"IÅ¡saugojama byla..." + +#: kdiff3.cpp:642 +#, fuzzy +msgid "Saving file with a new filename..." +msgstr "" +"#-#-#-#-# k3b.po (k3b) #-#-#-#-#\n" +"IÅ¡saugoma byla kitu vardu...\n" +"#-#-#-#-# kwordquiz.po (kwordquiz) #-#-#-#-#\n" +"IÅ¡saugojama byla nauju vardu...\n" +"#-#-#-#-# kverbos.po (kverbos) #-#-#-#-#\n" +"IÅ¡saugojama byla nauju vardu...\n" +"#-#-#-#-# ksync.po (ksync) #-#-#-#-#\n" +"IÅ¡saugojama byla nauju vardu...\n" +"#-#-#-#-# umbrello.po (umbrello) #-#-#-#-#\n" +"IÅ¡saugojama byla nauju vardu..." + +#: kdiff3.cpp:732 +#, fuzzy +msgid "Printing..." +msgstr "IÅ¡einama..." + +#: kdiff3.cpp:738 kdiff3.cpp:900 +msgid "Printing aborted." +msgstr "" + +#: kdiff3.cpp:870 +msgid "Selection" +msgstr "" + +#: kdiff3.cpp:896 +msgid "Printing completed." +msgstr "" + +#: kdiff3.cpp:906 +msgid "Exiting..." +msgstr "IÅ¡einama..." + +#: kdiff3.cpp:918 +msgid "Toggling toolbar..." +msgstr "" + +#: kdiff3.cpp:939 +msgid "Toggle the statusbar..." +msgstr "Perjungti bÅ«senos juostÄ…..." + +#: kdiff3_part.cpp:155 kdiff3_part.cpp:224 +msgid "Couldn't find files for comparison." +msgstr "" + +#: kdiff3_part.cpp:291 +msgid "KDiff3Part" +msgstr "" + +#: kdiff3_shell.cpp:78 +msgid "" +"Could not find our part!\n" +"This usually happens due to an installation problem. Please read the " +"README-file in the source package for details." +msgstr "" + +#: main.cpp:35 +msgid "Tool for Comparison and Merge of Files and Directories" +msgstr "" + +#: main.cpp:40 +msgid "Merge the input." +msgstr "" + +#: main.cpp:42 +msgid "Explicit base file. For compatibility with certain tools." +msgstr "" + +#: main.cpp:44 +msgid "Output file. Implies -m. E.g.: -o newfile.txt" +msgstr "" + +#: main.cpp:45 +msgid "Output file, again. (For compatibility with certain tools.)" +msgstr "" + +#: main.cpp:46 +msgid "No GUI if all conflicts are auto-solvable. (Needs -o file)" +msgstr "" + +#: main.cpp:47 +msgid "Don't solve conflicts automatically. (For compatibility...)" +msgstr "" + +#: main.cpp:48 +msgid "Visible name replacement for input file 1 (base)." +msgstr "" + +#: main.cpp:49 +msgid "Visible name replacement for input file 2." +msgstr "" + +#: main.cpp:50 +msgid "Visible name replacement for input file 3." +msgstr "" + +#: main.cpp:52 +msgid "Alternative visible name replacement. Supply this once for every input." +msgstr "" + +#: main.cpp:53 +msgid "" +"Override a config setting. Use once for every setting. E.g.: --cs " +"\"AutoAdvance=1\"" +msgstr "" + +#: main.cpp:54 +msgid "Show list of config settings and current values." +msgstr "" + +#: main.cpp:55 +msgid "Use a different config file." +msgstr "" + +#: main.cpp:59 +msgid "file1 to open (base, if not specified via --base)" +msgstr "" + +#: main.cpp:60 +msgid "file2 to open" +msgstr "" + +#: main.cpp:61 +msgid "file3 to open" +msgstr "" + +#: main.cpp:93 +msgid "Ignored. (User defined.)" +msgstr "" + +#. i18n: file kdiff3_part.rc line 16 +#: main.cpp:173 rc.cpp:9 +#, no-c-format +msgid "KDiff3" +msgstr "" + +#: main.cpp:186 +msgid "+ Many thanks to those who reported bugs and contributed ideas!" +msgstr "" + +#: mergeresultwindow.cpp:136 mergeresultwindow.cpp:939 +#: mergeresultwindow.cpp:953 mergeresultwindow.cpp:965 +#: mergeresultwindow.cpp:977 +msgid "Number of remaining unsolved conflicts: %1 (of which %2 are whitespace)" +msgstr "" + +#: mergeresultwindow.cpp:285 +msgid "" +"The output has been modified.\n" +"If you continue your changes will be lost." +msgstr "" + +#: mergeresultwindow.cpp:797 pdiff.cpp:511 +msgid "All input files are binary equal." +msgstr "" + +#: mergeresultwindow.cpp:799 +msgid "All input files contain the same text." +msgstr "" + +#: mergeresultwindow.cpp:801 +msgid "" +"Files A and B are binary equal.\n" +msgstr "" + +#: mergeresultwindow.cpp:802 +msgid "" +"Files A and B have equal text. \n" +msgstr "" + +#: mergeresultwindow.cpp:803 +msgid "" +"Files A and C are binary equal.\n" +msgstr "" + +#: mergeresultwindow.cpp:804 +msgid "" +"Files A and C have equal text. \n" +msgstr "" + +#: mergeresultwindow.cpp:805 +msgid "" +"Files B and C are binary equal.\n" +msgstr "" + +#: mergeresultwindow.cpp:806 +msgid "" +"Files B and C have equal text. \n" +msgstr "" + +#: mergeresultwindow.cpp:812 +msgid "Total number of conflicts: " +msgstr "" + +#: mergeresultwindow.cpp:813 +msgid "" +"\n" +"Nr of automatically solved conflicts: " +msgstr "" + +#: mergeresultwindow.cpp:814 +msgid "" +"\n" +"Nr of unsolved conflicts: " +msgstr "" + +#: mergeresultwindow.cpp:816 +msgid "Conflicts" +msgstr "" + +#: mergeresultwindow.cpp:1652 +msgid "" +msgstr "" + +#: mergeresultwindow.cpp:1660 +msgid "" +msgstr "" + +#: mergeresultwindow.cpp:1662 mergeresultwindow.cpp:2427 +msgid "" +msgstr "" + +#: mergeresultwindow.cpp:2635 +msgid "" +"Not all conflicts are solved yet.\n" +"File not saved.\n" +msgstr "" + +#: mergeresultwindow.cpp:2637 +msgid "Conflicts Left" +msgstr "" + +#: mergeresultwindow.cpp:2649 +msgid "" +"\n" +"\n" +"Creating backup failed. File not saved." +msgstr "" + +#: mergeresultwindow.cpp:2649 mergeresultwindow.cpp:2689 +msgid "File Save Error" +msgstr "" + +#: mergeresultwindow.cpp:2689 +msgid "Error while writing." +msgstr "" + +#: mergeresultwindow.cpp:3020 +#, fuzzy +msgid "Output" +msgstr "" +"#-#-#-#-# kdeprint.po (kdeprint) #-#-#-#-#\n" +"IÅ¡vedimas\n" +"#-#-#-#-# kbabel.po (kbabel) #-#-#-#-#\n" +"IÅ¡vestis" + +#: mergeresultwindow.cpp:3032 mergeresultwindow.cpp:3139 +msgid "[Modified]" +msgstr "" + +#: mergeresultwindow.cpp:3039 +msgid "Encoding for saving" +msgstr "" + +#: mergeresultwindow.cpp:3075 mergeresultwindow.cpp:3081 +#: mergeresultwindow.cpp:3087 +msgid "Codec from" +msgstr "" + +#: optiondialog.cpp:362 +msgid "Unicode, 8 bit" +msgstr "" + +#: optiondialog.cpp:363 +#, fuzzy +msgid "Unicode" +msgstr "" +"#-#-#-#-# kcmkonsole.po (kcmkonsole) #-#-#-#-#\n" +"Unikodinis\n" +"#-#-#-#-# kdelibs.po (kdelibs) #-#-#-#-#\n" +"Unikodas\n" +"#-#-#-#-# kofficefilters.po (kofficefilters) #-#-#-#-#\n" +"Unikodas\n" +"#-#-#-#-# kmouth.po (kmouth) #-#-#-#-#\n" +"Unikodas\n" +"#-#-#-#-# kaddressbook.po (kaddressbook) #-#-#-#-#\n" +"Unikodas" + +#: optiondialog.cpp:364 +msgid "Latin1" +msgstr "Latin1" + +#: optiondialog.cpp:383 +msgid "Change this if non-ASCII characters are not displayed correctly." +msgstr "" + +#: optiondialog.cpp:510 +msgid "Editor & Diff Output Font" +msgstr "" + +#: optiondialog.cpp:531 +msgid "Italic font for deltas" +msgstr "" + +#: optiondialog.cpp:534 +msgid "" +"Selects the italic version of the font for differences.\n" +"If the font doesn't support italic characters, then this does nothing." +msgstr "" + +#: optiondialog.cpp:542 +msgid "Color" +msgstr "Spalva" + +#: optiondialog.cpp:542 +msgid "Colors Settings" +msgstr "" + +#: optiondialog.cpp:556 +msgid "Editor and Diff Views:" +msgstr "" + +#: optiondialog.cpp:564 +#, fuzzy +msgid "Foreground color:" +msgstr "" +"#-#-#-#-# clockapplet.po (clockapplet) #-#-#-#-#\n" +"Priekinio plano spalva:\n" +"#-#-#-#-# ksysguard.po (ksysguard) #-#-#-#-#\n" +"Teksto spalva:\n" +"#-#-#-#-# ffrs.po (ffrs) #-#-#-#-#\n" +"Priekinio plano spalva:" + +#: optiondialog.cpp:570 +msgid "Background color:" +msgstr "Fono spalva:" + +#: optiondialog.cpp:578 +msgid "Diff background color:" +msgstr "" + +#: optiondialog.cpp:585 +msgid "Color A:" +msgstr "" + +#: optiondialog.cpp:592 +msgid "Color B:" +msgstr "" + +#: optiondialog.cpp:599 +msgid "Color C:" +msgstr "" + +#: optiondialog.cpp:605 +msgid "Conflict color:" +msgstr "" + +#: optiondialog.cpp:612 +msgid "Current range background color:" +msgstr "" + +#: optiondialog.cpp:619 +msgid "Current range diff background color:" +msgstr "" + +#: optiondialog.cpp:625 +msgid "Color for manually aligned difference ranges:" +msgstr "" + +#: optiondialog.cpp:630 +msgid "Directory Comparison View:" +msgstr "" + +#: optiondialog.cpp:636 +msgid "Newest file color:" +msgstr "" + +#: optiondialog.cpp:639 +msgid "" +"Changing this color will only be effective when starting the next directory " +"comparison." +msgstr "" + +#: optiondialog.cpp:644 +msgid "Oldest file color:" +msgstr "" + +#: optiondialog.cpp:651 +msgid "Middle age file color:" +msgstr "" + +#: optiondialog.cpp:658 +msgid "Color for missing files:" +msgstr "" + +#: optiondialog.cpp:670 +msgid "Editor" +msgstr "Redaktorius" + +#: optiondialog.cpp:670 +msgid "Editor Behavior" +msgstr "" + +#: optiondialog.cpp:680 +msgid "Tab inserts spaces" +msgstr "" + +#: optiondialog.cpp:683 +msgid "" +"On: Pressing tab generates the appropriate number of spaces.\n" +"Off: A Tab-character will be inserted." +msgstr "" + +#: optiondialog.cpp:689 +msgid "Tab size:" +msgstr "" + +#: optiondialog.cpp:694 +msgid "Auto indentation" +msgstr "" + +#: optiondialog.cpp:697 +msgid "" +"On: The indentation of the previous line is used for a new line.\n" +msgstr "" + +#: optiondialog.cpp:701 +msgid "Auto copy selection" +msgstr "" + +#: optiondialog.cpp:704 +msgid "" +"On: Any selection is immediately written to the clipboard.\n" +"Off: You must explicitely copy e.g. via Ctrl-C." +msgstr "" + +#: optiondialog.cpp:709 +msgid "Line end style:" +msgstr "" + +#: optiondialog.cpp:721 +msgid "" +"Sets the line endings for when an edited file is saved.\n" +"DOS/Windows: CR+LF; UNIX: LF; with CR=0D, LF=0A" +msgstr "" + +#: optiondialog.cpp:732 +msgid "Diff" +msgstr "" + +#: optiondialog.cpp:732 +msgid "Diff Settings" +msgstr "" + +#: optiondialog.cpp:743 +msgid "Preserve carriage return" +msgstr "" + +#: optiondialog.cpp:746 +msgid "" +"Show carriage return characters '\\r' if they exist.\n" +"Helps to compare files that were modified under different operating systems." +msgstr "" + +#: optiondialog.cpp:751 +msgid "Ignore numbers" +msgstr "" + +#: optiondialog.cpp:754 +msgid "" +"Ignore number characters during line matching phase. (Similar to Ignore white " +"space.)\n" +"Might help to compare files with numeric data." +msgstr "" + +#: optiondialog.cpp:759 +msgid "Ignore C/C++ comments" +msgstr "" + +#: optiondialog.cpp:761 +msgid "Treat C/C++ comments like white space." +msgstr "" + +#: optiondialog.cpp:765 +msgid "Ignore case" +msgstr "" + +#: optiondialog.cpp:768 +msgid "Treat case differences like white space changes. ('a'<=>'A')" +msgstr "" + +#: optiondialog.cpp:772 +msgid "Preprocessor command:" +msgstr "" + +#: optiondialog.cpp:776 +msgid "User defined pre-processing. (See the docs for details.)" +msgstr "" + +#: optiondialog.cpp:779 +msgid "Line-matching preprocessor command:" +msgstr "" + +#: optiondialog.cpp:783 +msgid "" +"This pre-processor is only used during line matching.\n" +"(See the docs for details.)" +msgstr "" + +#: optiondialog.cpp:786 +msgid "Try hard (slower)" +msgstr "" + +#: optiondialog.cpp:789 +msgid "" +"Enables the --minimal option for the external diff.\n" +"The analysis of big files will be much slower." +msgstr "" + +#: optiondialog.cpp:794 +msgid "Auto advance delay (ms):" +msgstr "" + +#: optiondialog.cpp:799 +msgid "" +"When in Auto-Advance mode the result of the current selection is shown \n" +"for the specified time, before jumping to the next conflict. Range: 0-2000 ms" +msgstr "" + +#: optiondialog.cpp:809 +msgid "Merge Settings" +msgstr "" + +#: optiondialog.cpp:822 +msgid "White space 2-file merge default:" +msgstr "" + +#: optiondialog.cpp:826 optiondialog.cpp:839 +msgid "Manual Choice" +msgstr "" + +#: optiondialog.cpp:830 optiondialog.cpp:844 +msgid "" +"Allow the merge algorithm to automatically select an input for white-space-only " +"changes." +msgstr "" + +#: optiondialog.cpp:835 +msgid "White space 3-file merge default:" +msgstr "" + +#: optiondialog.cpp:849 +msgid "Automatic Merge Regular Expression" +msgstr "" + +#: optiondialog.cpp:858 smalldialogs.cpp:397 +msgid "Auto merge regular expression:" +msgstr "" + +#: optiondialog.cpp:862 +msgid "" +"Regular expression for lines where KDiff3 should automatically choose one " +"source.\n" +"When a line with a conflict matches the regular expression then\n" +"- if available - C, otherwise B will be chosen." +msgstr "" + +#: optiondialog.cpp:868 +msgid "Run regular expression auto merge on merge start" +msgstr "" + +#: optiondialog.cpp:870 +msgid "" +"Run the merge for auto merge regular expressions\n" +"immediately when a merge starts.\n" +msgstr "" + +#: optiondialog.cpp:875 +msgid "Version Control History Merging" +msgstr "" + +#: optiondialog.cpp:884 smalldialogs.cpp:424 +msgid "History start regular expression:" +msgstr "" + +#: optiondialog.cpp:888 +msgid "" +"Regular expression for the start of the version control history entry.\n" +"Usually this line contains the \"$Log$\"-keyword.\n" +"Default value: \".*\\$Log.*\\$.*\"" +msgstr "" + +#: optiondialog.cpp:894 smalldialogs.cpp:453 +msgid "History entry start regular expression:" +msgstr "" + +#: optiondialog.cpp:906 +msgid "" +"A version control history entry consists of several lines.\n" +"Specify the regular expression to detect the first line (without the leading " +"comment).\n" +"Use parentheses to group the keys you want to use for sorting.\n" +"If left empty, then KDiff3 assumes that empty lines separate history entries.\n" +"See the documentation for details." +msgstr "" + +#: optiondialog.cpp:914 +msgid "History merge sorting" +msgstr "" + +#: optiondialog.cpp:916 +msgid "Sort version control history by a key." +msgstr "" + +#: optiondialog.cpp:926 +msgid "History entry start sort key order:" +msgstr "" + +#: optiondialog.cpp:930 +msgid "" +"Each parentheses used in the regular expression for the history start entry\n" +"groups a key that can be used for sorting.\n" +"Specify the list of keys (that are numbered in order of occurrence\n" +"starting with 1) using ',' as separator (e.g. \"4,5,6,1,2,3,7\").\n" +"If left empty, then no sorting will be done.\n" +"See the documentation for details." +msgstr "" + +#: optiondialog.cpp:941 +msgid "Merge version control history on merge start" +msgstr "" + +#: optiondialog.cpp:943 +msgid "Run version control history automerge on merge start." +msgstr "" + +#: optiondialog.cpp:947 +msgid "Test your regular expressions" +msgstr "" + +#: optiondialog.cpp:952 +msgid "Irrelevant merge command:" +msgstr "" + +#: optiondialog.cpp:956 +msgid "" +"If specified this script is run after automerge\n" +"when no other relevant changes were detected.\n" +"Called with the parameters: filename1 filename2 filename3" +msgstr "" + +#: optiondialog.cpp:966 +msgid "Directory Merge" +msgstr "" + +#: optiondialog.cpp:975 +msgid "Recursive directories" +msgstr "" + +#: optiondialog.cpp:977 +msgid "Whether to analyze subdirectories or not." +msgstr "" + +#: optiondialog.cpp:979 +msgid "File pattern(s):" +msgstr "" + +#: optiondialog.cpp:984 +msgid "" +"Pattern(s) of files to be analyzed. \n" +"Wildcards: '*' and '?'\n" +"Several Patterns can be specified by using the separator: ';'" +msgstr "" + +#: optiondialog.cpp:990 +msgid "File-anti-pattern(s):" +msgstr "" + +#: optiondialog.cpp:995 +msgid "" +"Pattern(s) of files to be excluded from analysis. \n" +"Wildcards: '*' and '?'\n" +"Several Patterns can be specified by using the separator: ';'" +msgstr "" + +#: optiondialog.cpp:1001 +msgid "Dir-anti-pattern(s):" +msgstr "" + +#: optiondialog.cpp:1006 +msgid "" +"Pattern(s) of directories to be excluded from analysis. \n" +"Wildcards: '*' and '?'\n" +"Several Patterns can be specified by using the separator: ';'" +msgstr "" + +#: optiondialog.cpp:1012 +msgid "Use .cvsignore" +msgstr "" + +#: optiondialog.cpp:1015 +msgid "" +"Extends the antipattern to anything that would be ignored by CVS.\n" +"Via local \".cvsignore\"-files this can be directory specific." +msgstr "" + +#: optiondialog.cpp:1020 +msgid "Find hidden files and directories" +msgstr "" + +#: optiondialog.cpp:1023 +msgid "Finds files and directories with the hidden attribute." +msgstr "" + +#: optiondialog.cpp:1025 +msgid "Finds files and directories starting with '.'." +msgstr "" + +#: optiondialog.cpp:1029 +msgid "Follow file links" +msgstr "" + +#: optiondialog.cpp:1032 +msgid "" +"On: Compare the file the link points to.\n" +"Off: Compare the links." +msgstr "" + +#: optiondialog.cpp:1037 +msgid "Follow directory links" +msgstr "" + +#: optiondialog.cpp:1040 +msgid "" +"On: Compare the directory the link points to.\n" +"Off: Compare the links." +msgstr "" + +#: optiondialog.cpp:1056 +msgid "Case sensitive filename comparison" +msgstr "" + +#: optiondialog.cpp:1059 +msgid "" +"The directory comparison will compare files or directories when their names " +"match.\n" +"Set this option if the case of the names must match. (Default for Windows is " +"off, otherwise on.)" +msgstr "" + +#: optiondialog.cpp:1063 +msgid "File Comparison Mode" +msgstr "" + +#: optiondialog.cpp:1067 +msgid "Binary comparison" +msgstr "" + +#: optiondialog.cpp:1068 +msgid "Binary comparison of each file. (Default)" +msgstr "" + +#: optiondialog.cpp:1070 +msgid "Full analysis" +msgstr "" + +#: optiondialog.cpp:1071 +msgid "" +"Do a full analysis and show statistics information in extra columns.\n" +"(Slower than a binary comparison, much slower for binary files.)" +msgstr "" + +#: optiondialog.cpp:1074 +msgid "Trust the modification date (unsafe)" +msgstr "" + +#: optiondialog.cpp:1075 +msgid "" +"Assume that files are equal if the modification date and file length are " +"equal.\n" +"Useful for big directories or slow networks." +msgstr "" + +#: optiondialog.cpp:1078 +msgid "Trust the size (unsafe)" +msgstr "" + +#: optiondialog.cpp:1079 +msgid "" +"Assume that files are equal if their file lengths are equal.\n" +"Useful for big directories or slow networks when the date is modified during " +"download." +msgstr "" + +#: optiondialog.cpp:1083 +msgid "Synchronize directories" +msgstr "" + +#: optiondialog.cpp:1086 +msgid "" +"Offers to store files in both directories so that\n" +"both directories are the same afterwards.\n" +"Works only when comparing two directories without specifying a destination." +msgstr "" + +#: optiondialog.cpp:1092 +msgid "White space differences considered equal" +msgstr "" + +#: optiondialog.cpp:1095 +msgid "" +"If files differ only by white space consider them equal.\n" +"This is only active when full analysis is chosen." +msgstr "" + +#: optiondialog.cpp:1101 +msgid "Copy newer instead of merging (unsafe)" +msgstr "" + +#: optiondialog.cpp:1104 +msgid "" +"Don't look inside, just take the newer file.\n" +"(Use this only if you know what you are doing!)\n" +"Only effective when comparing two directories." +msgstr "" + +#: optiondialog.cpp:1109 +msgid "Backup files (.orig)" +msgstr "" + +#: optiondialog.cpp:1112 +msgid "" +"When a file would be saved over an old file, then the old file\n" +"will be renamed with a '.orig'-extension instead of being deleted." +msgstr "" + +#: optiondialog.cpp:1176 +msgid "Regional Settings" +msgstr "" + +#: optiondialog.cpp:1272 +msgid "Language (restart required)" +msgstr "" + +#: optiondialog.cpp:1304 +msgid "" +"Choose the language of the GUI-strings or \"Auto\".\n" +"For a change of language to take place, quit and restart KDiff3." +msgstr "" + +#: optiondialog.cpp:1322 +msgid "Use the same encoding for everything:" +msgstr "" + +#: optiondialog.cpp:1325 +msgid "" +"Enable this allows to change all encodings by changing the first only.\n" +"Disable this if different individual settings are needed." +msgstr "" + +#: optiondialog.cpp:1330 +msgid "Note: Local Encoding is " +msgstr "" + +#: optiondialog.cpp:1334 +msgid "File Encoding for A:" +msgstr "" + +#: optiondialog.cpp:1340 +msgid "" +"If enabled then Unicode (UTF-16 or UTF-8) encoding will be detected.\n" +"If the file encoding is not detected then the selected encoding will be used as " +"fallback.\n" +"(Unicode detection depends on the first bytes of a file - the byte order mark " +"\"BOM\".)" +msgstr "" + +#: optiondialog.cpp:1344 optiondialog.cpp:1353 optiondialog.cpp:1362 +msgid "Auto Detect Unicode" +msgstr "" + +#: optiondialog.cpp:1349 +msgid "File Encoding for B:" +msgstr "" + +#: optiondialog.cpp:1358 +msgid "File Encoding for C:" +msgstr "" + +#: optiondialog.cpp:1367 +msgid "File Encoding for Merge Output and Saving:" +msgstr "" + +#: optiondialog.cpp:1371 +#, fuzzy +msgid "Auto Select" +msgstr "IÅ¡kerpamas žymÄ—jimas..." + +#: optiondialog.cpp:1374 +msgid "" +"If enabled then the encoding from the input files is used.\n" +"In ambiguous cases a dialog will ask the user to choose the encoding for " +"saving." +msgstr "" + +#: optiondialog.cpp:1378 +msgid "File Encoding for Preprocessor Files:" +msgstr "" + +#: optiondialog.cpp:1389 +msgid "Right To Left Language" +msgstr "" + +#: optiondialog.cpp:1392 +msgid "" +"Some languages are read from right to left.\n" +"This setting will change the viewer and editor accordingly." +msgstr "" + +#: optiondialog.cpp:1402 +#, fuzzy +msgid "Integration" +msgstr "Operacija" + +#: optiondialog.cpp:1402 +msgid "Integration Settings" +msgstr "" + +#: optiondialog.cpp:1412 +msgid "Command line options to ignore:" +msgstr "" + +#: optiondialog.cpp:1417 +msgid "" +"List of command line options that should be ignored when KDiff3 is used by " +"other tools.\n" +"Several values can be specified if separated via ';'\n" +"This will suppress the \"Unknown option\"-error." +msgstr "" + +#: optiondialog.cpp:1480 +msgid "" +"You selected a variable width font.\n" +"\n" +"Because this program doesn't handle variable width fonts\n" +"correctly, you might experience problems while editing.\n" +"\n" +"Do you want to continue or do you want to select another font." +msgstr "" + +#: optiondialog.cpp:1484 +msgid "Incompatible Font" +msgstr "" + +#: optiondialog.cpp:1485 +msgid "Continue at Own Risk" +msgstr "" + +#: optiondialog.cpp:1485 +msgid "Select Another Font" +msgstr "" + +#: optiondialog.cpp:1521 +msgid "This resets all options. Not only those of the current topic." +msgstr "" + +#: pdiff.cpp:258 +msgid "PreprocessorCmd: " +msgstr "" + +#: pdiff.cpp:263 +msgid "" +"The following option(s) you selected might change data:\n" +msgstr "" + +#: pdiff.cpp:264 +msgid "" +"\n" +"Most likely this is not wanted during a merge.\n" +"Do you want to disable these settings or continue with these settings active?" +msgstr "" + +#: pdiff.cpp:266 +msgid "Option Unsafe for Merging" +msgstr "" + +#: pdiff.cpp:267 +msgid "Use These Options During Merge" +msgstr "" + +#: pdiff.cpp:267 +msgid "Disable Unsafe Options" +msgstr "" + +#: pdiff.cpp:297 +msgid "Loading A" +msgstr "" + +#: pdiff.cpp:301 +msgid "Loading B" +msgstr "" + +#: pdiff.cpp:318 pdiff.cpp:344 +msgid "Diff: A <-> B" +msgstr "" + +#: pdiff.cpp:324 pdiff.cpp:366 +msgid "Linediff: A <-> B" +msgstr "" + +#: pdiff.cpp:335 +msgid "Loading C" +msgstr "" + +#: pdiff.cpp:347 +msgid "Diff: B <-> C" +msgstr "" + +#: pdiff.cpp:350 +msgid "Diff: A <-> C" +msgstr "" + +#: pdiff.cpp:369 +msgid "Linediff: B <-> C" +msgstr "" + +#: pdiff.cpp:372 +msgid "Linediff: A <-> C" +msgstr "" + +#: pdiff.cpp:513 +msgid "All input files contain the same text, but are not binary equal." +msgstr "" + +#: pdiff.cpp:515 pdiff.cpp:517 pdiff.cpp:519 +msgid "" +"Files %1 and %2 are binary equal.\n" +msgstr "" + +#: pdiff.cpp:516 pdiff.cpp:518 pdiff.cpp:520 +msgid "" +"Files %1 and %2 have equal text, but are not binary equal. \n" +msgstr "" + +#: pdiff.cpp:530 +msgid "" +"Some inputfiles don't seem to be pure textfiles.\n" +"Note that the KDiff3-merge was not meant for binary data.\n" +"Continue at your own risk." +msgstr "" + +#: pdiff.cpp:979 +msgid "Abort" +msgstr "Nutraukti" + +#: pdiff.cpp:985 pdiff.cpp:1073 +msgid "Opening files..." +msgstr "" + +#: pdiff.cpp:1050 pdiff.cpp:1121 +msgid "File open error" +msgstr "Klaida atveriant bylÄ…" + +#: pdiff.cpp:1153 +msgid "Cutting selection..." +msgstr "IÅ¡kerpamas žymÄ—jimas..." + +#: pdiff.cpp:1174 +msgid "Copying selection to clipboard..." +msgstr "Kopijuojama pažymÄ—tÄ… vietÄ… į talpyklÄ™..." + +#: pdiff.cpp:1190 +msgid "Inserting clipboard contents..." +msgstr "Ä®terpamas talpyklÄ—s turinys..." + +#: pdiff.cpp:1713 +msgid "Save && Continue" +msgstr "" + +#: pdiff.cpp:1713 +msgid "Continue Without Saving" +msgstr "" + +#: pdiff.cpp:1920 +msgid "Search complete." +msgstr "" + +#: pdiff.cpp:1920 +msgid "Search Complete" +msgstr "" + +#: pdiff.cpp:2144 +msgid "Nothing is selected in either diff input window." +msgstr "" + +#: pdiff.cpp:2144 +msgid "Error while adding manual diff range" +msgstr "" + +#. i18n: file kdiff3_part.rc line 4 +#: rc.cpp:3 +#, no-c-format +msgid "&KDiff3" +msgstr "" + +#. i18n: file kdiff3_part.rc line 13 +#: rc.cpp:6 +#, no-c-format +msgid "Configure KDiff3" +msgstr "" + +#. i18n: file kdiff3_shell.rc line 7 +#: rc.cpp:15 +#, no-c-format +msgid "&Directory" +msgstr "" + +#. i18n: file kdiff3_shell.rc line 30 +#: rc.cpp:18 +#, no-c-format +msgid "Current Item Merge Operation" +msgstr "" + +#. i18n: file kdiff3_shell.rc line 38 +#: rc.cpp:21 +#, no-c-format +msgid "Current Item Sync Operation" +msgstr "" + +#. i18n: file kdiff3_shell.rc line 50 +#: rc.cpp:24 +#, no-c-format +msgid "&Movement" +msgstr "" + +#. i18n: file kdiff3_shell.rc line 61 +#: rc.cpp:27 +#, no-c-format +msgid "D&iffview" +msgstr "" + +#. i18n: file kdiff3_shell.rc line 73 +#: rc.cpp:30 +#, no-c-format +msgid "&Merge" +msgstr "" + +#. i18n: file kdiff3_shell.rc line 95 +#: rc.cpp:33 +#, no-c-format +msgid "&Window" +msgstr "&Langas" + +#: smalldialogs.cpp:53 +msgid "A (Base):" +msgstr "" + +#: smalldialogs.cpp:59 smalldialogs.cpp:75 smalldialogs.cpp:91 +#: smalldialogs.cpp:134 +msgid "File..." +msgstr "" + +#: smalldialogs.cpp:61 smalldialogs.cpp:77 smalldialogs.cpp:93 +#: smalldialogs.cpp:136 +msgid "Dir..." +msgstr "" + +#: smalldialogs.cpp:86 +msgid "C (Optional):" +msgstr "" + +#: smalldialogs.cpp:108 +msgid "Swap/Copy Names ..." +msgstr "" + +#: smalldialogs.cpp:114 smalldialogs.cpp:115 smalldialogs.cpp:116 +msgid "Swap %1<->%2" +msgstr "" + +#: smalldialogs.cpp:117 smalldialogs.cpp:118 smalldialogs.cpp:119 +msgid "Copy %1->Output" +msgstr "" + +#: smalldialogs.cpp:120 smalldialogs.cpp:121 smalldialogs.cpp:122 +msgid "Swap %1<->Output" +msgstr "" + +#: smalldialogs.cpp:129 +msgid "Output (optional):" +msgstr "" + +#: smalldialogs.cpp:158 +#, fuzzy +msgid "Configure..." +msgstr "" +"#-#-#-#-# kxkb.po (kxkb) #-#-#-#-#\n" +"KonfigÅ«ruoti...\n" +"#-#-#-#-# kcmfonts.po (kcmfonts) #-#-#-#-#\n" +"KonfigÅ«ruoti...\n" +"#-#-#-#-# kdelibs.po (kdelibs) #-#-#-#-#\n" +"KonfigÅ«ruoti...\n" +"#-#-#-#-# katepart.po (katepart) #-#-#-#-#\n" +"KonfigÅ«ruoti...\n" +"#-#-#-#-# quanta.po (quanta) #-#-#-#-#\n" +"KonfigÅ«ruoti...\n" +"#-#-#-#-# kxsldbg.po (kxsldbg) #-#-#-#-#\n" +"KonfigÅ«ruoti...\n" +"#-#-#-#-# kplato.po (kplato) #-#-#-#-#\n" +"KonfigÅ«ruoti...\n" +"#-#-#-#-# k3b.po (k3b) #-#-#-#-#\n" +"KonfigÅ«ruoti...\n" +"#-#-#-#-# libkdehighscores.po (libkdehighscores) #-#-#-#-#\n" +"KonfigÅ«ruoti...\n" +"#-#-#-#-# kwin4.po (kwin4) #-#-#-#-#\n" +"KonfigÅ«ruoti...\n" +"#-#-#-#-# libkdegames.po (libkdegames) #-#-#-#-#\n" +"KonfigÅ«ruoti...\n" +"#-#-#-#-# kcmkamera.po (kcmkamera) #-#-#-#-#\n" +"KonfigÅ«ruoti...\n" +"#-#-#-#-# kpilot.po (kpilot) #-#-#-#-#\n" +"KonfigÅ«ruoti...\n" +"#-#-#-#-# uachangerplugin.po (uachangerplugin) #-#-#-#-#\n" +"KonfigÅ«ruoti...\n" +"#-#-#-#-# katemake.po (katemake) #-#-#-#-#\n" +"KonfigÅ«ruoti...\n" +"#-#-#-#-# kcmwifi.po (kcmwifi) #-#-#-#-#\n" +"Derinti..." + +#: smalldialogs.cpp:347 +msgid "Search text:" +msgstr "" + +#: smalldialogs.cpp:354 +#, fuzzy +msgid "Case sensitive" +msgstr "" +"#-#-#-#-# kate.po (kate) #-#-#-#-#\n" +"Skirti raidžių dydį\n" +"#-#-#-#-# quanta.po (quanta) #-#-#-#-#\n" +"Skirti raidžių dydį\n" +"#-#-#-#-# kfilereplace.po (kfilereplace) #-#-#-#-#\n" +"Skirti raidžių dydį\n" +"#-#-#-#-# kbabel.po (kbabel) #-#-#-#-#\n" +"Skiriant raidžių dydį\n" +"#-#-#-#-# kopete.po (kopete) #-#-#-#-#\n" +"Skirti raidžių dydį" + +#: smalldialogs.cpp:357 +msgid "Search A" +msgstr "" + +#: smalldialogs.cpp:362 +msgid "Search B" +msgstr "" + +#: smalldialogs.cpp:367 +msgid "Search C" +msgstr "" + +#: smalldialogs.cpp:372 +msgid "Search output" +msgstr "" + +#: smalldialogs.cpp:377 +msgid "&Search" +msgstr "&IeÅ¡koti" + +#: smalldialogs.cpp:394 +msgid "Regular Expression Tester" +msgstr "" + +#: smalldialogs.cpp:405 +msgid "Example auto merge line:" +msgstr "" + +#: smalldialogs.cpp:407 +msgid "For auto merge test copy a line as used in your files." +msgstr "" + +#: smalldialogs.cpp:413 smalldialogs.cpp:442 smalldialogs.cpp:479 +msgid "Match result:" +msgstr "" + +#: smalldialogs.cpp:432 +msgid "Example history start line (with leading comment):" +msgstr "" + +#: smalldialogs.cpp:435 +msgid "" +"Copy a history start line as used in your files,\n" +"including the leading comment." +msgstr "" + +#: smalldialogs.cpp:461 +msgid "History sort key order:" +msgstr "" + +#: smalldialogs.cpp:469 +msgid "Example history entry start line (without leading comment):" +msgstr "" + +#: smalldialogs.cpp:471 +msgid "" +"Copy a history entry start line as used in your files,\n" +"but omit the leading comment." +msgstr "" + +#: smalldialogs.cpp:486 +msgid "Sort key result:" +msgstr "" + +#: smalldialogs.cpp:537 smalldialogs.cpp:547 smalldialogs.cpp:568 +msgid "Match success." +msgstr "" + +#: smalldialogs.cpp:541 smalldialogs.cpp:551 smalldialogs.cpp:574 +msgid "Match failed." +msgstr "" + +#: smalldialogs.cpp:559 +msgid "Opening and closing parentheses don't match in regular expression." +msgstr "" diff --git a/po/nb.po b/po/nb.po new file mode 100644 index 0000000..53564ef --- /dev/null +++ b/po/nb.po @@ -0,0 +1,2511 @@ +# translation of kdiff3.po to Norwegian BokmÃ¥l +# Copyright (C) 2003, 2006 Free Software Foundation, Inc. +# Knut Yrvin , 2003. +# Bjørn Steensrud , 2006. +# +msgid "" +msgstr "" +"Project-Id-Version: kdiff3\n" +"POT-Creation-Date: 2006-11-05 08:45+0100\n" +"PO-Revision-Date: 2006-06-10 22:03+0200\n" +"Last-Translator: Bjørn Steensrud \n" +"Language-Team: Norwegian BokmÃ¥l \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: KBabel 1.10\n" + +#: _translatorinfo.cpp:1 +msgid "" +"_: NAME OF TRANSLATORS\n" +"Your names" +msgstr "Bjørn Steensrud" + +#: _translatorinfo.cpp:3 +msgid "" +"_: EMAIL OF TRANSLATORS\n" +"Your emails" +msgstr "bjornst@powertech.no" + +#: diff.cpp:246 +msgid "Writing clipboard data to temp file failed." +msgstr "Klarte ikke Ã¥ skrive fra utklippstavla til midlertidig fil." + +#: diff.cpp:250 +msgid "From Clipboard" +msgstr "Fra utklippstavla" + +#: diff.cpp:491 +msgid "" +"Preprocessing possibly failed. Check this command:\n" +"\n" +" %1\n" +"\n" +"The preprocessing command will be disabled now." +msgstr "" +"Forarbeidet muligens mislykket. Se denne kommandoen:\n" +"\n" +" %1\n" +"\n" +"Kommandoen for forarbeide blir nÃ¥ slÃ¥tt av." + +#: diff.cpp:526 +msgid "" +"The line-matching-preprocessing possibly failed. Check this command:\n" +"\n" +" %1\n" +"\n" +"The line-matching-preprocessing command will be disabled now." +msgstr "" +"Forarbeidet med Ã¥ samordne linjer muligens mislykket. Se denne kommandoen:\n" +"\n" +" %1\n" +"\n" +"Forarbeide-kommandoen for linjesamordning blir nÃ¥ slÃ¥tt av." + +#: diff.cpp:1631 diff.cpp:1645 +msgid "" +"Data loss error:\n" +"If it is reproducable please contact the author.\n" +msgstr "" +"Datatap-feil:\n" +"Hvis det kan gjenskapes, vennligst kontakt forfatteren.\n" + +#: diff.cpp:1633 diff.cpp:1647 +msgid "Severe Internal Error" +msgstr "Alvorlig intern feil" + +#: difftextwindow.cpp:1643 kdiff3.cpp:753 +msgid "Top line" +msgstr "Øverste linje" + +#: difftextwindow.cpp:1653 +msgid "End" +msgstr "Slutt" + +#: directorymergewindow.cpp:142 +msgid "Mix of links and normal files." +msgstr "Blanding av lenker og normale filer." + +#: directorymergewindow.cpp:149 +msgid "Link: " +msgstr "Lenke: " + +#: directorymergewindow.cpp:157 +msgid "Size. " +msgstr "Størrelse: " + +#: directorymergewindow.cpp:170 +msgid "Date & Size: " +msgstr "Dato og størrelse: " + +#: directorymergewindow.cpp:179 directorymergewindow.cpp:185 +msgid "Creating temp copy of %1 failed." +msgstr "Klarte ikke opprette midlertidig kopi av %1." + +#: directorymergewindow.cpp:196 directorymergewindow.cpp:204 +msgid "Opening %1 failed." +msgstr "Klarte ikke Ã¥pne %1." + +#: directorymergewindow.cpp:208 +msgid "Comparing file..." +msgstr "Sammenlikner fil ..." + +#: directorymergewindow.cpp:218 directorymergewindow.cpp:224 +#, c-format +msgid "Error reading from %1" +msgstr "Feil ved lesing fra %1" + +#: directorymergewindow.cpp:282 +msgid "Name" +msgstr "Navn" + +#: directorymergewindow.cpp:286 +msgid "Operation" +msgstr "Handling" + +#: directorymergewindow.cpp:287 +msgid "Status" +msgstr "Status" + +#: directorymergewindow.cpp:288 +msgid "Unsolved" +msgstr "Uløst" + +#: directorymergewindow.cpp:289 +msgid "Solved" +msgstr "Løst" + +#: directorymergewindow.cpp:290 +msgid "Nonwhite" +msgstr "Ikkehvitt" + +#: directorymergewindow.cpp:291 +msgid "White" +msgstr "Hvitt" + +#: directorymergewindow.cpp:319 +msgid "" +"You are currently doing a directory merge. Are you sure, you want to abort the " +"merge and rescan the directory?" +msgstr "" +"NÃ¥ utfører du en mappefletting. Er du sikker pÃ¥ at du vil avbryte flettingen og " +"lese gjennom mappa pÃ¥ nytt?" + +#: directorymergewindow.cpp:320 directorymergewindow.cpp:2868 +msgid "Rescan" +msgstr "Les pÃ¥ nytt" + +#: directorymergewindow.cpp:320 kdiff3.cpp:603 pdiff.cpp:979 +msgid "Continue Merging" +msgstr "Fortsett fletting" + +#: directorymergewindow.cpp:462 +msgid "Opening of directories failed:" +msgstr "Klarte ikke Ã¥pne mapper:" + +#: directorymergewindow.cpp:465 +msgid "" +"Dir A \"%1\" does not exist or is not a directory.\n" +msgstr "" +"Mappe A «%1» finnes ikke eller er ikke en mappe.\n" + +#: directorymergewindow.cpp:468 +msgid "" +"Dir B \"%1\" does not exist or is not a directory.\n" +msgstr "" +"Mappe B «%1» finnes ikke eller er ikke en mappe.\n" + +#: directorymergewindow.cpp:471 +msgid "" +"Dir C \"%1\" does not exist or is not a directory.\n" +msgstr "" +"Mappe C «%1» finnes ikke eller er ikke en mappe.\n" + +#: directorymergewindow.cpp:473 +msgid "Directory Open Error" +msgstr "Feil ved Ã¥pning av mappe" + +#: directorymergewindow.cpp:481 +msgid "" +"The destination directory must not be the same as A or B when three directories " +"are merged.\n" +"Check again before continuing." +msgstr "" +"MÃ¥lmappa mÃ¥ være en annen enn A eller B nÃ¥r tre mapper flettes.\n" +"Kontroller igjen før du fortsetter." + +#: directorymergewindow.cpp:483 +msgid "Parameter Warning" +msgstr "Parameter-advarsel" + +#: directorymergewindow.cpp:488 +msgid "Scanning directories..." +msgstr "Leser mapper ..." + +#: directorymergewindow.cpp:537 +msgid "Reading Directory A" +msgstr "Leser mappe A" + +#: directorymergewindow.cpp:559 +msgid "Reading Directory B" +msgstr "Leser mappe B" + +#: directorymergewindow.cpp:581 +msgid "Reading Directory C" +msgstr "Leser mappe C" + +#: directorymergewindow.cpp:607 +msgid "Some subdirectories were not readable in" +msgstr "Noen undermapper var ikke lesbare i" + +#: directorymergewindow.cpp:612 +msgid "Check the permissions of the subdirectories." +msgstr "Kontroller rettigheter pÃ¥ undermappene." + +#: directorymergewindow.cpp:646 kdiff3.cpp:552 kdiff3.cpp:636 kdiff3.cpp:661 +#: kdiff3.cpp:934 kdiff3.cpp:955 pdiff.cpp:1059 pdiff.cpp:1131 pdiff.cpp:1169 +#: pdiff.cpp:1185 pdiff.cpp:1215 pdiff.cpp:1226 +msgid "Ready." +msgstr "Klar." + +#: directorymergewindow.cpp:660 +msgid "Directory Comparison Status" +msgstr "Status for mappesammenlikning" + +#: directorymergewindow.cpp:661 +msgid "Number of subdirectories:" +msgstr "Antall undermapper:" + +#: directorymergewindow.cpp:662 +msgid "Number of equal files:" +msgstr "Antall like filer:" + +#: directorymergewindow.cpp:663 +msgid "Number of different files:" +msgstr "Antall forskjellige filer:" + +#: directorymergewindow.cpp:666 +msgid "Number of manual merges:" +msgstr "Antall manuelle flettinger:" + +#: directorymergewindow.cpp:802 +msgid "This affects all merge operations." +msgstr "Dette pÃ¥virker alle flettehandlinger." + +#: directorymergewindow.cpp:803 +msgid "Changing All Merge Operations" +msgstr "Endre alle flette-handlinger" + +#: directorymergewindow.cpp:803 mergeresultwindow.cpp:287 +msgid "C&ontinue" +msgstr "F&ortsett" + +#: directorymergewindow.cpp:1169 +msgid "Processing " +msgstr "Arbeider " + +#: directorymergewindow.cpp:1647 directorymergewindow.cpp:1653 +msgid "To do." +msgstr "GjenstÃ¥r." + +#: directorymergewindow.cpp:1756 directorymergewindow.cpp:2899 +msgid "Copy A to B" +msgstr "Kopier A til B" + +#: directorymergewindow.cpp:1757 directorymergewindow.cpp:2900 +msgid "Copy B to A" +msgstr "Kopier B til A" + +#: directorymergewindow.cpp:1758 directorymergewindow.cpp:2901 +msgid "Delete A" +msgstr "Slett A" + +#: directorymergewindow.cpp:1759 directorymergewindow.cpp:2902 +msgid "Delete B" +msgstr "Slett B" + +#: directorymergewindow.cpp:1760 +msgid "Delete A & B" +msgstr "Slett A & B" + +#: directorymergewindow.cpp:1761 directorymergewindow.cpp:2904 +msgid "Merge to A" +msgstr "Flett til A" + +#: directorymergewindow.cpp:1762 directorymergewindow.cpp:2905 +msgid "Merge to B" +msgstr "Flett til B" + +#: directorymergewindow.cpp:1763 +msgid "Merge to A & B" +msgstr "Flett til A & B" + +#: directorymergewindow.cpp:1767 directorymergewindow.cpp:2896 +msgid "Delete (if exists)" +msgstr "Slett (hvis det finnes)" + +#: directorymergewindow.cpp:1768 directorymergewindow.cpp:1769 +#: directorymergewindow.cpp:2895 optiondialog.cpp:809 smalldialogs.cpp:102 +msgid "Merge" +msgstr "Flett sammen" + +#: directorymergewindow.cpp:1768 directorymergewindow.cpp:1769 +msgid "Merge (manual)" +msgstr "Flett (manuelt)" + +#: directorymergewindow.cpp:1770 +msgid "Error: Conflicting File Types" +msgstr "Feil: Konflikt mellom filtyper" + +#: directorymergewindow.cpp:1771 +msgid "Error: Dates are equal but files are not." +msgstr "Feil: Datoene er like, men ikke filene." + +#: directorymergewindow.cpp:1795 directorymergewindow.cpp:1824 +#: directorymergewindow.cpp:1849 +msgid "This operation is currently not possible." +msgstr "Denne handlingen er ikke mulig nÃ¥." + +#: directorymergewindow.cpp:1795 directorymergewindow.cpp:1824 +#: directorymergewindow.cpp:1849 directorymergewindow.cpp:2106 +msgid "Operation Not Possible" +msgstr "Handling ikke mulig" + +#: directorymergewindow.cpp:1888 +msgid "" +"This should never happen: \n" +"\n" +"mergeResultSaved: m_pMFI=0\n" +"\n" +"If you know how to reproduce this, please contact the program author." +msgstr "" +"Dette skulle aldri skje: \n" +"\n" +"mergeResultSaved: m_pMFI=0\n" +"\n" +"Hvis du vet hvordan dette kan gjenskapes, ta kontakt med programforfatteren." + +#: directorymergewindow.cpp:1888 +msgid "Program Error" +msgstr "Programfeil" + +#: directorymergewindow.cpp:1899 +msgid "" +"An error occurred while copying.\n" +msgstr "" +"Det oppsto en feil under kopiering.\n" + +#: directorymergewindow.cpp:1900 directorymergewindow.cpp:2306 +msgid "Merge Error" +msgstr "Flettefeil" + +#: directorymergewindow.cpp:1905 directorymergewindow.cpp:2311 +msgid "Error." +msgstr "Feil." + +#: directorymergewindow.cpp:1910 directorymergewindow.cpp:2202 +#: directorymergewindow.cpp:2242 +msgid "Done." +msgstr "Ferdig." + +#: directorymergewindow.cpp:1933 +msgid "Not saved." +msgstr "Ikke lagret." + +#: directorymergewindow.cpp:1968 +msgid "Unknown merge operation. (This must never happen!)" +msgstr "Ukjent flettehandling. (Dette mÃ¥ aldri skje!)" + +#: directorymergewindow.cpp:2000 +msgid "Unknown merge operation." +msgstr "Ukjent flettehandling." + +#: directorymergewindow.cpp:2015 +msgid "" +"The merge is about to begin.\n" +"\n" +"Choose \"Do it\" if you have read the instructions and know what you are " +"doing.\n" +"Choosing \"Simulate it\" will tell you what would happen.\n" +"\n" +"Be aware that this program still has beta status and there is NO WARRANTY " +"whatsoever! Make backups of your vital data!" +msgstr "" +"Flettingen skal til Ã¥ starte.\n" +"\n" +"Velg «Gjør det» hvis du har lest instruksjonene og vet hva du gjør.\n" +"Velg «Simuler det» for Ã¥ se hva som vil skje.\n" +"\n" +"Vær oppmerksom pÃ¥ at dette programmet er i beta-status og det er OVERHODET " +"INGEN GARANTI! Ta sikkerhetskopi av vitale data!" + +#: directorymergewindow.cpp:2020 +msgid "Starting Merge" +msgstr "Starter fletting" + +#: directorymergewindow.cpp:2020 +msgid "Do It" +msgstr "Gjør det" + +#: directorymergewindow.cpp:2020 +msgid "Simulate It" +msgstr "Simuler det" + +#: directorymergewindow.cpp:2046 +msgid "" +"The highlighted item has a different type in the different directories. Select " +"what to do." +msgstr "" +"Det markerte elementet har forskjellig type i de forskjellige mappene. Velg hva " +"som skal gjøres." + +#: directorymergewindow.cpp:2055 +msgid "" +"The modification dates of the file are equal but the files are not. Select what " +"to do." +msgstr "" +"Filene er ulike men har samme dato for siste endring. Velg hva som skal gjøres." + +#: directorymergewindow.cpp:2106 +msgid "" +"This operation is currently not possible because directory merge is currently " +"running." +msgstr "Denne handlingen er ikke mulig nÃ¥ fordi en mappefletting pÃ¥gÃ¥r." + +#: directorymergewindow.cpp:2166 +msgid "" +"There was an error in the last step.\n" +"Do you want to continue with the item that caused the error or do you want to " +"skip this item?" +msgstr "" +"Det var en feil i siste steg.\n" +"Vil du fortsette med elementet som ga feil, eller hoppe over det?" + +#: directorymergewindow.cpp:2168 +msgid "Continue merge after an error" +msgstr "Fortsett fletting etter feil" + +#: directorymergewindow.cpp:2168 +msgid "Continue With Last Item" +msgstr "Fortsett med siste element" + +#: directorymergewindow.cpp:2168 +msgid "Skip Item" +msgstr "Hopp over element" + +#: directorymergewindow.cpp:2202 +msgid "Skipped." +msgstr "Hoppet over." + +#: directorymergewindow.cpp:2209 directorymergewindow.cpp:2435 +msgid "In progress..." +msgstr "PÃ¥gÃ¥r ..." + +#: directorymergewindow.cpp:2257 +msgid "Merge operation complete." +msgstr "Flettehandling fullført." + +#: directorymergewindow.cpp:2257 directorymergewindow.cpp:2260 +msgid "Merge Complete" +msgstr "Fletting fullført" + +#: directorymergewindow.cpp:2269 +msgid "" +"Simulated merge complete: Check if you agree with the proposed operations." +msgstr "" +"Simulert fletting fullført. Se etter om du er enig i de foreslÃ¥tte handlingene." + +#: directorymergewindow.cpp:2305 +msgid "" +"An error occurred. Press OK to see detailed information.\n" +msgstr "" +"Det oppsto en feil. Trykk OK for Ã¥ se detaljerte opplysninger.\n" + +#: directorymergewindow.cpp:2348 +msgid "Error: While deleting %1: Creating backup failed." +msgstr "Feil: Under sletting av %1: oppretting av sikkerhetskopi mislyktes." + +#: directorymergewindow.cpp:2355 +msgid "delete directory recursively( %1 )" +msgstr "slett mappe rekursivt( %1 )" + +#: directorymergewindow.cpp:2357 +msgid "delete( %1 )" +msgstr "slett ( %1 )" + +#: directorymergewindow.cpp:2372 +msgid "Error: delete dir operation failed while trying to read the directory." +msgstr "Feil: mappesletting mislyktes under forsøk pÃ¥ Ã¥ lese mappa." + +#: directorymergewindow.cpp:2391 +msgid "Error: rmdir( %1 ) operation failed." +msgstr "Feil: rmdir( %1 ) mislyktes." + +#: directorymergewindow.cpp:2401 +msgid "Error: delete operation failed." +msgstr "Feil: sletting mislyktes." + +#: directorymergewindow.cpp:2427 +msgid "manual merge( %1, %2, %3 -> %4)" +msgstr "manuell fletting( %1, %2, %3 -> %4)" + +#: directorymergewindow.cpp:2430 +msgid "" +" Note: After a manual merge the user should continue by pressing F7." +msgstr "" +" Merk: Etter en manuell fletting bør brukeren fortsette ved Ã¥ trykke F7." + +#: directorymergewindow.cpp:2453 +msgid "Error: copy( %1 -> %2 ) failed.Deleting existing destination failed." +msgstr "" +"Feil: kopiering (%1 -> %2) mislyktes. Eksisterende mÃ¥l kunne ikke slettes." + +#: directorymergewindow.cpp:2463 +msgid "copyLink( %1 -> %2 )" +msgstr "copyLink( %1 -> %2 )" + +#: directorymergewindow.cpp:2474 +msgid "Error: copyLink failed: Remote links are not yet supported." +msgstr "Feil: copyLink mislyktes. Det er ikke støtte for nettverkslenker ennÃ¥." + +#: directorymergewindow.cpp:2480 +msgid "Error: copyLink failed." +msgstr "Feil: copyLink mislyktes." + +#: directorymergewindow.cpp:2500 +msgid "copy( %1 -> %2 )" +msgstr "kopier(%1 -> %2 )" + +#: directorymergewindow.cpp:2526 +msgid "Error during rename( %1 -> %2 ): Cannot delete existing destination." +msgstr "Feil under navneendring( %1 -> %2 ): Kan ikke slette eksisterende mÃ¥l." + +#: directorymergewindow.cpp:2532 +msgid "rename( %1 -> %2 )" +msgstr "endre navn ( %1 -> %2 )" + +#: directorymergewindow.cpp:2541 +msgid "Error: Rename failed." +msgstr "Feil: navneendring mislyktes." + +#: directorymergewindow.cpp:2559 +msgid "Error during makeDir of %1. Cannot delete existing file." +msgstr "Feil ved oppretting av mappe %1. Kan ikke slette eksisterende fil." + +#: directorymergewindow.cpp:2575 +msgid "makeDir( %1 )" +msgstr "Lag mappe( %1 )" + +#: directorymergewindow.cpp:2585 +msgid "Error while creating directory." +msgstr "Feil under oppretting av mappe." + +#: directorymergewindow.cpp:2608 directorymergewindow.cpp:2725 +msgid "Dest" +msgstr "MÃ¥l" + +#: directorymergewindow.cpp:2612 directorymergewindow.cpp:2650 +msgid "Dir" +msgstr "Mappe" + +#: directorymergewindow.cpp:2613 +msgid "Type" +msgstr "Type" + +#: directorymergewindow.cpp:2614 +msgid "Size" +msgstr "Størrelse" + +#: directorymergewindow.cpp:2615 +msgid "Attr" +msgstr "Attr" + +#: directorymergewindow.cpp:2616 +msgid "Last Modification" +msgstr "Siste endring" + +#: directorymergewindow.cpp:2617 +msgid "Link-Destination" +msgstr "LenkemÃ¥l" + +#: directorymergewindow.cpp:2667 +msgid "not available" +msgstr "ikke tilgjengelig" + +#: directorymergewindow.cpp:2687 +msgid "A (Dest): " +msgstr "A (mÃ¥l): " + +#: directorymergewindow.cpp:2690 +msgid "A (Base): " +msgstr "A (basis): " + +#: directorymergewindow.cpp:2696 +msgid "B (Dest): " +msgstr "B (mÃ¥l): " + +#: directorymergewindow.cpp:2704 +msgid "C (Dest): " +msgstr "C (mÃ¥l) :" + +#: directorymergewindow.cpp:2710 +msgid "Dest: " +msgstr "MÃ¥l: " + +#: directorymergewindow.cpp:2775 +msgid "Save Directory Merge State As..." +msgstr "Lagre status for mappefletting som ..." + +#: directorymergewindow.cpp:2862 +msgid "Start/Continue Directory Merge" +msgstr "Start/fortsett mappefletting" + +#: directorymergewindow.cpp:2863 +msgid "Run Operation for Current Item" +msgstr "Kjør handling for gjeldende element" + +#: directorymergewindow.cpp:2864 +msgid "Compare Selected File" +msgstr "Sammenlikne valgt fil" + +#: directorymergewindow.cpp:2865 +msgid "Merge Current File" +msgstr "Flett gjeldende fil" + +#: directorymergewindow.cpp:2866 +msgid "Fold All Subdirs" +msgstr "Brett sammen alle undermapper" + +#: directorymergewindow.cpp:2867 +msgid "Unfold All Subdirs" +msgstr "Fold ut alle undermapper" + +#: directorymergewindow.cpp:2871 +msgid "Choose A for All Items" +msgstr "Velg A for alle elementer" + +#: directorymergewindow.cpp:2872 +msgid "Choose B for All Items" +msgstr "Velg B for alle elementer" + +#: directorymergewindow.cpp:2873 +msgid "Choose C for All Items" +msgstr "Velg C for alle elementer" + +#: directorymergewindow.cpp:2874 +msgid "Auto-Choose Operation for All Items" +msgstr "Auto-velg handling for alle elementer" + +#: directorymergewindow.cpp:2875 +msgid "No Operation for All Items" +msgstr "Ingen handling for alle elementer" + +#: directorymergewindow.cpp:2880 +msgid "Show Identical Files" +msgstr "Vis identiske filer" + +#: directorymergewindow.cpp:2881 +msgid "Show Different Files" +msgstr "Vis forskjellige filer" + +#: directorymergewindow.cpp:2882 +msgid "Show Files only in A" +msgstr "Vis filer bare i A" + +#: directorymergewindow.cpp:2883 +msgid "Show Files only in B" +msgstr "Vis filer bare i B" + +#: directorymergewindow.cpp:2884 +msgid "Show Files only in C" +msgstr "Vis filer bare i C" + +#: directorymergewindow.cpp:2888 +msgid "Compare Explicitly Selected Files" +msgstr "Sammenlikne uttrykkelig valgte filer" + +#: directorymergewindow.cpp:2889 +msgid "Merge Explicitly Selected Files" +msgstr "Flett uttrykkelig valgte filer" + +#: directorymergewindow.cpp:2891 directorymergewindow.cpp:2898 +msgid "Do Nothing" +msgstr "Ikke gjør noe" + +#: directorymergewindow.cpp:2892 +msgid "A" +msgstr "A" + +#: directorymergewindow.cpp:2893 +msgid "B" +msgstr "B" + +#: directorymergewindow.cpp:2894 +msgid "C" +msgstr "C" + +#: directorymergewindow.cpp:2903 +msgid "Delete A && B" +msgstr "Slett A && B" + +#: directorymergewindow.cpp:2906 +msgid "Merge to A && B" +msgstr "Flett til A && B" + +#: fileaccess.cpp:595 +msgid "" +"While trying to make a backup, deleting an older backup failed. \n" +"Filename: " +msgstr "" +"Under forsøk pÃ¥ Ã¥ lage sikkerhetskopi lyktes det ikke Ã¥ slette \n" +"en tidligere kopi. Filnavn: " + +#: fileaccess.cpp:602 +msgid "" +"While trying to make a backup, renaming failed. \n" +"Filenames: " +msgstr "" +"Under forsøk pÃ¥ Ã¥ lage sikkerhetskopi lyktes det ikke Ã¥ endre navn.\n" +"Filnavn: " + +#: fileaccess.cpp:624 +#, c-format +msgid "Getting file status: %1" +msgstr "Henter filstatus: %1" + +#: fileaccess.cpp:667 +#, c-format +msgid "Reading file: %1" +msgstr "Leser fil: %1" + +#: fileaccess.cpp:703 +#, c-format +msgid "Writing file: %1" +msgstr "Skriver fil: %1" + +#: fileaccess.cpp:731 +msgid "Out of memory" +msgstr "Slapp opp for minne" + +#: fileaccess.cpp:766 +#, c-format +msgid "Making directory: %1" +msgstr "Lager mappe: %1" + +#: fileaccess.cpp:786 +#, c-format +msgid "Removing directory: %1" +msgstr "Fjerner mappe: %1" + +#: fileaccess.cpp:801 +#, c-format +msgid "Removing file: %1" +msgstr "Fjerner fil: %1" + +#: fileaccess.cpp:817 +msgid "Creating symbolic link: %1 -> %2" +msgstr "Oppretter symbolsk lenke: %1 -> %2" + +#: fileaccess.cpp:843 +msgid "Renaming file: %1 -> %2" +msgstr "Endrer navn pÃ¥ fil: %1 -> %2" + +#: fileaccess.cpp:879 +msgid "Copying file: %1 -> %2" +msgstr "Kopierer fil: %1 -> %2" + +#: fileaccess.cpp:893 +#, c-format +msgid "" +"Error during file copy operation: Opening file for reading failed. Filename: %1" +msgstr "Feil under filkopiering: Klarte ikke Ã¥pne fil for lesing. Filnavn: %1" + +#: fileaccess.cpp:899 +#, c-format +msgid "" +"Error during file copy operation: Opening file for writing failed. Filename: %1" +msgstr "" +"Feil under filkopiering: Klarte ikke Ã¥pne fil for skriving. Filnavn: %1" + +#: fileaccess.cpp:914 +#, c-format +msgid "Error during file copy operation: Reading failed. Filename: %1" +msgstr "Feil under filkopiering: Lesing mislyktes. Filnavn: %1" + +#: fileaccess.cpp:923 +#, c-format +msgid "Error during file copy operation: Writing failed. Filename: %1" +msgstr "Feil under filkopiering: Skriving mislyktes. Filnavn: %1" + +#: fileaccess.cpp:1219 +msgid "Reading directory: " +msgstr "Leser mappe: " + +#: fileaccess.cpp:1348 +#, c-format +msgid "Listing directory: %1" +msgstr "Lister mappe: %1" + +#: kdiff3.cpp:142 +msgid "Current Configuration:" +msgstr "Gjeldende oppsett:" + +#: kdiff3.cpp:147 +msgid "Config Option Error:" +msgstr "Feil i oppsett:" + +#: kdiff3.cpp:187 +msgid "Option --auto used, but no output file specified." +msgstr "--auto brukt, men ingen utdatafil er oppgitt." + +#: kdiff3.cpp:323 +msgid "Option --auto ignored for directory comparison." +msgstr "--auto ignorert for mappesammelikning." + +#: kdiff3.cpp:359 +msgid "Saving failed." +msgstr "Lagring mislyktes." + +#: kdiff3.cpp:386 pdiff.cpp:1041 pdiff.cpp:1112 +msgid "Opening of these files failed:" +msgstr "Klarte ikke Ã¥pne disse filene:" + +#: kdiff3.cpp:395 +msgid "File Open Error" +msgstr "Feil ved Ã¥pning av fil" + +#: kdiff3.cpp:418 +msgid "Opens documents for comparison..." +msgstr "Ã…pner dokumentere for sammenlikning ..." + +#: kdiff3.cpp:423 +msgid "Saves the merge result. All conflicts must be solved!" +msgstr "Lagrer fletteresultatet. Alle konflikter mÃ¥ løses!" + +#: kdiff3.cpp:425 +msgid "Saves the current document as..." +msgstr "Lagrer gjeldende dokument som ..." + +#: kdiff3.cpp:427 +msgid "Print the differences" +msgstr "Skriv ut forskjellene" + +#: kdiff3.cpp:429 +msgid "Quits the application" +msgstr "Avslutter programmet" + +#: kdiff3.cpp:431 +msgid "Cuts the selected section and puts it to the clipboard" +msgstr "Klipper ut det markerte og legger det pÃ¥ utklippstavla" + +#: kdiff3.cpp:433 +msgid "Copies the selected section to the clipboard" +msgstr "Kopierer det markerte til utklippstavla" + +#: kdiff3.cpp:435 +msgid "Pastes the clipboard contents to actual position" +msgstr "Limer innholdet inn der markøren stÃ¥r" + +#: kdiff3.cpp:437 +msgid "Select everything in current window" +msgstr "Velg alt i gjeldende vindu" + +#: kdiff3.cpp:439 +msgid "Search for a string" +msgstr "Søk etter en streng" + +#: kdiff3.cpp:441 +msgid "Search again for the string" +msgstr "Søk igjen etter strengen" + +#: kdiff3.cpp:443 +msgid "Enables/disables the toolbar" +msgstr "SlÃ¥r verktøylinja av/pÃ¥" + +#: kdiff3.cpp:445 +msgid "Enables/disables the statusbar" +msgstr "SlÃ¥r statuslinja av/pÃ¥" + +#: kdiff3.cpp:449 +msgid "Configure KDiff3..." +msgstr "Sett opp KDiff3 ..." + +#: kdiff3.cpp:470 +msgid "Go to Current Delta" +msgstr "GÃ¥ til gjeldende Delta" + +#: kdiff3.cpp:471 +msgid "Go to First Delta" +msgstr "GÃ¥ til første Delta" + +#: kdiff3.cpp:472 +msgid "Go to Last Delta" +msgstr "GÃ¥ til siste Delta" + +#: kdiff3.cpp:473 +msgid "(Skips white space differences when \"Show White Space\" is disabled.)" +msgstr "(Hopper over forskjeller i tomrom nÃ¥r «Vis tomrom» er slÃ¥tt av.)" + +#: kdiff3.cpp:474 +msgid "" +"(Does not skip white space differences even when \"Show White Space\" is " +"disabled.)" +msgstr "" +"(Hopper ikkeover forskjeller i tomrom selv nÃ¥r «Vis tomrom» er slÃ¥tt av.)" + +#: kdiff3.cpp:475 +msgid "Go to Previous Delta" +msgstr "GÃ¥ til forrige Delta" + +#: kdiff3.cpp:477 +msgid "Go to Next Delta" +msgstr "GÃ¥ til neste Delta" + +#: kdiff3.cpp:479 +msgid "Go to Previous Conflict" +msgstr "GÃ¥ til forrige konflikt" + +#: kdiff3.cpp:481 +msgid "Go to Next Conflict" +msgstr "GÃ¥ til neste konflikt" + +#: kdiff3.cpp:483 +msgid "Go to Previous Unsolved Conflict" +msgstr "GÃ¥ til forrige uløste konflikt" + +#: kdiff3.cpp:485 +msgid "Go to Next Unsolved Conflict" +msgstr "GÃ¥ til neste uløste konflikt" + +#: kdiff3.cpp:487 +msgid "Select Line(s) From A" +msgstr "Velg linje(r) fra A" + +#: kdiff3.cpp:488 +msgid "Select Line(s) From B" +msgstr "Velg linje(r) fra B" + +#: kdiff3.cpp:489 +msgid "Select Line(s) From C" +msgstr "Velg linje(r) fra C" + +#: kdiff3.cpp:490 +msgid "Automatically Go to Next Unsolved Conflict After Source Selection" +msgstr "GÃ¥ automatisk til neste uløste konflikt etter at kildene er valgt" + +#: kdiff3.cpp:492 +msgid "Show Space && Tabulator Characters for Differences" +msgstr "Vis mellomrom og tabulatortegn for forskjeller" + +#: kdiff3.cpp:493 +msgid "Show White Space" +msgstr "Vis tomrom" + +#: kdiff3.cpp:495 +msgid "Show Line Numbers" +msgstr "Vis linjenumre" + +#: kdiff3.cpp:496 +msgid "Choose A Everywhere" +msgstr "Velg A overalt" + +#: kdiff3.cpp:497 +msgid "Choose B Everywhere" +msgstr "Velg B overalt" + +#: kdiff3.cpp:498 +msgid "Choose C Everywhere" +msgstr "Velg C overalt" + +#: kdiff3.cpp:499 +msgid "Choose A for All Unsolved Conflicts" +msgstr "Velg A for alle uløste konflikter" + +#: kdiff3.cpp:500 +msgid "Choose B for All Unsolved Conflicts" +msgstr "Velg B for alle uløste konflikter" + +#: kdiff3.cpp:501 +msgid "Choose C for All Unsolved Conflicts" +msgstr "Velg C for alle uløste konflikter" + +#: kdiff3.cpp:502 +msgid "Choose A for All Unsolved Whitespace Conflicts" +msgstr "Velg A for alle uløste tomromkonflikter" + +#: kdiff3.cpp:503 +msgid "Choose B for All Unsolved Whitespace Conflicts" +msgstr "Velg B for alle uløste tomromkonflikter" + +#: kdiff3.cpp:504 +msgid "Choose C for All Unsolved Whitespace Conflicts" +msgstr "Velg C for alle uløste tomromkonflikter" + +#: kdiff3.cpp:505 +msgid "Automatically Solve Simple Conflicts" +msgstr "Løs enkle konflikter automatisk" + +#: kdiff3.cpp:506 +msgid "Set Deltas to Conflicts" +msgstr "Sett deltaer til konflikter" + +#: kdiff3.cpp:507 +msgid "Run Regular Expression Auto Merge" +msgstr "Kjør autofletting med regulære uttrykk" + +#: kdiff3.cpp:508 +msgid "Automatically Solve History Conflicts" +msgstr "Løs opp historiekonflikter automatisk" + +#: kdiff3.cpp:509 +msgid "Split Diff At Selection" +msgstr "Splitt differansen ved utvalget" + +#: kdiff3.cpp:510 +msgid "Join Selected Diffs" +msgstr "SlÃ¥ sammen valgte differ" + +#: kdiff3.cpp:512 +msgid "Show Window A" +msgstr "Vis vindu A" + +#: kdiff3.cpp:513 +msgid "Show Window B" +msgstr "Vis vindu B" + +#: kdiff3.cpp:514 +msgid "Show Window C" +msgstr "Vis vindu C" + +#: kdiff3.cpp:515 kdiff3.cpp:526 +msgid "Focus Next Window" +msgstr "Fokus pÃ¥ neste vindu" + +#: kdiff3.cpp:517 +msgid "Normal Overview" +msgstr "Normal oversikt" + +#: kdiff3.cpp:518 +msgid "A vs. B Overview" +msgstr "Oversikt A mot B" + +#: kdiff3.cpp:519 +msgid "A vs. C Overview" +msgstr "Oversikt A mot C" + +#: kdiff3.cpp:520 +msgid "B vs. C Overview" +msgstr "Oversikt B mot C" + +#: kdiff3.cpp:521 +msgid "Word Wrap Diff Windows" +msgstr "Ordbryt i diff-vinduer" + +#: kdiff3.cpp:522 +msgid "Add Manual Diff Alignment" +msgstr "Legg til manuell diff-innretting" + +#: kdiff3.cpp:523 +msgid "Clear All Manual Diff Alignments" +msgstr "Tilbakestill all manuell diff-innretting" + +#: kdiff3.cpp:528 +msgid "Focus Prev Window" +msgstr "Fokus pÃ¥ forrige vindu" + +#: kdiff3.cpp:529 +msgid "Toggle Split Orientation" +msgstr "Bytt om splitt-orientering" + +#: kdiff3.cpp:531 +msgid "Dir && Text Split Screen View" +msgstr "Mappe og tekst delt visning" + +#: kdiff3.cpp:533 +msgid "Toggle Between Dir && Text View" +msgstr "Bytt mellom mappe- og tekstvisning" + +#: kdiff3.cpp:582 pdiff.cpp:1712 +msgid "The merge result hasn't been saved." +msgstr "Fletteresultatet er ikke lagret." + +#: kdiff3.cpp:583 +msgid "Save && Quit" +msgstr "Lagre og avslutt" + +#: kdiff3.cpp:583 +msgid "Quit Without Saving" +msgstr "Avslutt uten lagring" + +#: kdiff3.cpp:591 pdiff.cpp:1721 +msgid "Saving the merge result failed." +msgstr "Fletteresultatet kunne ikke lagres." + +#: kdiff3.cpp:602 pdiff.cpp:978 +msgid "" +"You are currently doing a directory merge. Are you sure, you want to abort?" +msgstr "Du holder pÃ¥ med en mappefletting. Er du sikker pÃ¥ at du vil avbryte?" + +#: kdiff3.cpp:625 +msgid "Saving file..." +msgstr "Lagrer fil ..." + +#: kdiff3.cpp:642 +msgid "Saving file with a new filename..." +msgstr "Lagrer fil med nytt filnavn ..." + +#: kdiff3.cpp:732 +msgid "Printing..." +msgstr "Skriver ut ..." + +#: kdiff3.cpp:738 kdiff3.cpp:900 +msgid "Printing aborted." +msgstr "Utskrift avbrutt." + +#: kdiff3.cpp:870 +msgid "Selection" +msgstr "Utvalg" + +#: kdiff3.cpp:896 +msgid "Printing completed." +msgstr "Utskrift fullført." + +#: kdiff3.cpp:906 +msgid "Exiting..." +msgstr "Avslutter ..." + +#: kdiff3.cpp:918 +msgid "Toggling toolbar..." +msgstr "SlÃ¥r verktøylinje av/pÃ¥ ..." + +#: kdiff3.cpp:939 +msgid "Toggle the statusbar..." +msgstr "SlÃ¥ statuslinje av/pÃ¥ ..." + +#: kdiff3_part.cpp:155 kdiff3_part.cpp:224 +msgid "Couldn't find files for comparison." +msgstr "Klarte ikke finne filer for sammenlikning." + +#: kdiff3_part.cpp:291 +msgid "KDiff3Part" +msgstr "KDiff3Part" + +#: kdiff3_shell.cpp:78 +msgid "" +"Could not find our part!\n" +"This usually happens due to an installation problem. Please read the " +"README-file in the source package for details." +msgstr "" +"Fant ikke vÃ¥r part!\n" +"Dette skyldes oftest et installasjonsproblem. Det stÃ¥r mer om dette i " +"README-fila i kildekoden." + +#: main.cpp:35 +msgid "Tool for Comparison and Merge of Files and Directories" +msgstr "Verktøy for sammenlikning og fletting av filer og mapper" + +#: main.cpp:40 +msgid "Merge the input." +msgstr "Flett inn-data." + +#: main.cpp:42 +msgid "Explicit base file. For compatibility with certain tools." +msgstr "Uttrykkelig angitt basefil. For kompatibilitet med visse verktøy." + +#: main.cpp:44 +msgid "Output file. Implies -m. E.g.: -o newfile.txt" +msgstr "Utdata-fil. Impliserer -m. F.eks: -o nyfil.txt" + +#: main.cpp:45 +msgid "Output file, again. (For compatibility with certain tools.)" +msgstr "Utdata-fil, igjen. (For kompatibilitet med visse verktøy)." + +#: main.cpp:46 +msgid "No GUI if all conflicts are auto-solvable. (Needs -o file)" +msgstr "Ingen GUI hvis alle konflikter kan auto-løses. (Trenger -o fil)" + +#: main.cpp:47 +msgid "Don't solve conflicts automatically. (For compatibility...)" +msgstr "Ikke løs konflikter automatisk. (For kompatibilitet ...)" + +#: main.cpp:48 +msgid "Visible name replacement for input file 1 (base)." +msgstr "Synlig navnerstatning for inn-fil 1 (basis)." + +#: main.cpp:49 +msgid "Visible name replacement for input file 2." +msgstr "Synlig navnerstatning for inn-fil 2." + +#: main.cpp:50 +msgid "Visible name replacement for input file 3." +msgstr "Synlig navnerstatning for inn-fil 3." + +#: main.cpp:52 +msgid "Alternative visible name replacement. Supply this once for every input." +msgstr "Alternativ synlig navnerstatning. Angi en gang for hver inngang." + +#: main.cpp:53 +msgid "" +"Override a config setting. Use once for every setting. E.g.: --cs " +"\"AutoAdvance=1\"" +msgstr "" +"Overstyr en innstilling. Bruk en gang for hver innstilling. F.eks.: --cs " +"\"AutoAdvance=1\"" + +#: main.cpp:54 +msgid "Show list of config settings and current values." +msgstr "Vis liste over oppsettsinnstillinger og gjeldende verdier." + +#: main.cpp:55 +msgid "Use a different config file." +msgstr "Bruk en annen oppsettsfil." + +#: main.cpp:59 +msgid "file1 to open (base, if not specified via --base)" +msgstr "fil 1 som skal Ã¥pnes (basis, hvis ikke oppgitt via --base)" + +#: main.cpp:60 +msgid "file2 to open" +msgstr "fil 2 som skal Ã¥pnes" + +#: main.cpp:61 +msgid "file3 to open" +msgstr "fil 3 som skal Ã¥pnes" + +#: main.cpp:93 +msgid "Ignored. (User defined.)" +msgstr "Ignorert. (Selvvalgt.)" + +#. i18n: file kdiff3_part.rc line 16 +#: main.cpp:173 rc.cpp:9 +#, no-c-format +msgid "KDiff3" +msgstr "KDiff3" + +#: main.cpp:186 +msgid "+ Many thanks to those who reported bugs and contributed ideas!" +msgstr "+ Mange takk til dem som rapporterte feil og bidro med ideer!" + +#: mergeresultwindow.cpp:136 mergeresultwindow.cpp:939 +#: mergeresultwindow.cpp:953 mergeresultwindow.cpp:965 +#: mergeresultwindow.cpp:977 +msgid "Number of remaining unsolved conflicts: %1 (of which %2 are whitespace)" +msgstr "Antall uløste konflikter som gjenstÃ¥r: %1 ( herav %2 tomrom )" + +#: mergeresultwindow.cpp:285 +msgid "" +"The output has been modified.\n" +"If you continue your changes will be lost." +msgstr "" +"Utdata er blitt endret.\n" +"Hvis du fortsetter mister du endringene dine." + +#: mergeresultwindow.cpp:797 pdiff.cpp:511 +msgid "All input files are binary equal." +msgstr "Alle inn-filer er binært like." + +#: mergeresultwindow.cpp:799 +msgid "All input files contain the same text." +msgstr "Alle inn-filer inneholder samme tekst." + +#: mergeresultwindow.cpp:801 +msgid "" +"Files A and B are binary equal.\n" +msgstr "" +"Filer A og B er binært like.\n" + +#: mergeresultwindow.cpp:802 +msgid "" +"Files A and B have equal text. \n" +msgstr "" +"Filer A og B har lik tekst. \n" + +#: mergeresultwindow.cpp:803 +msgid "" +"Files A and C are binary equal.\n" +msgstr "" +"Filer A og C er binært like.\n" + +#: mergeresultwindow.cpp:804 +msgid "" +"Files A and C have equal text. \n" +msgstr "" +"Filer A og C har lik tekst. \n" + +#: mergeresultwindow.cpp:805 +msgid "" +"Files B and C are binary equal.\n" +msgstr "" +"Filer B og C er binært like.\n" + +#: mergeresultwindow.cpp:806 +msgid "" +"Files B and C have equal text. \n" +msgstr "" +"Filer B og C har lik tekst. \n" + +#: mergeresultwindow.cpp:812 +msgid "Total number of conflicts: " +msgstr "Totalt antall konflikter: " + +#: mergeresultwindow.cpp:813 +msgid "" +"\n" +"Nr of automatically solved conflicts: " +msgstr "" +"\n" +"Antall automatisk løste konflikter: " + +#: mergeresultwindow.cpp:814 +msgid "" +"\n" +"Nr of unsolved conflicts: " +msgstr "" +"\n" +"Antall uløste konflikter :" + +#: mergeresultwindow.cpp:816 +msgid "Conflicts" +msgstr "Konflikter" + +#: mergeresultwindow.cpp:1652 +msgid "" +msgstr "" + +#: mergeresultwindow.cpp:1660 +msgid "" +msgstr "" + +#: mergeresultwindow.cpp:1662 mergeresultwindow.cpp:2427 +msgid "" +msgstr "" + +#: mergeresultwindow.cpp:2635 +msgid "" +"Not all conflicts are solved yet.\n" +"File not saved.\n" +msgstr "" +"Ikke alle konflikter er løst ennÃ¥.\n" +"Fila er ikke lagret.\n" + +#: mergeresultwindow.cpp:2637 +msgid "Conflicts Left" +msgstr "GjenstÃ¥ende konflikter" + +#: mergeresultwindow.cpp:2649 +msgid "" +"\n" +"\n" +"Creating backup failed. File not saved." +msgstr "" +"\n" +"\n" +"Det lyktes ikke Ã¥ lage sikkerhetskopi. Fila er ikke lagret." + +#: mergeresultwindow.cpp:2649 mergeresultwindow.cpp:2689 +msgid "File Save Error" +msgstr "Feil ved fillagring" + +#: mergeresultwindow.cpp:2689 +msgid "Error while writing." +msgstr "Feil ved skriving." + +#: mergeresultwindow.cpp:3020 +msgid "Output" +msgstr "Utdata" + +#: mergeresultwindow.cpp:3032 mergeresultwindow.cpp:3139 +msgid "[Modified]" +msgstr "[Endret]" + +#: mergeresultwindow.cpp:3039 +#, fuzzy +msgid "Encoding for saving" +msgstr "Filkoding for A :" + +#: mergeresultwindow.cpp:3075 mergeresultwindow.cpp:3081 +#: mergeresultwindow.cpp:3087 +msgid "Codec from" +msgstr "" + +#: optiondialog.cpp:362 +msgid "Unicode, 8 bit" +msgstr "Unicode, 8 bit" + +#: optiondialog.cpp:363 +msgid "Unicode" +msgstr "Unicode" + +#: optiondialog.cpp:364 +msgid "Latin1" +msgstr "Latin1" + +#: optiondialog.cpp:383 +msgid "Change this if non-ASCII characters are not displayed correctly." +msgstr "Endre dette hvis tegn som ikke er i ASCII ikke blir vist riktig." + +#: optiondialog.cpp:510 +msgid "Editor & Diff Output Font" +msgstr "Skrift for redigering og utdata" + +#: optiondialog.cpp:531 +msgid "Italic font for deltas" +msgstr "Kursivskrift for deltaer" + +#: optiondialog.cpp:534 +msgid "" +"Selects the italic version of the font for differences.\n" +"If the font doesn't support italic characters, then this does nothing." +msgstr "" +"Velger kursivversjon av skriften for forskjeller.\n" +"Hvis skriften ikke finnes i kursiv, sÃ¥ gjør dette ingenting." + +#: optiondialog.cpp:542 +msgid "Color" +msgstr "Farge" + +#: optiondialog.cpp:542 +msgid "Colors Settings" +msgstr "Fargeinnstillinger" + +#: optiondialog.cpp:556 +msgid "Editor and Diff Views:" +msgstr "Redigering og forskjellsvisning:" + +#: optiondialog.cpp:564 +msgid "Foreground color:" +msgstr "Forgrunnsfarge:" + +#: optiondialog.cpp:570 +msgid "Background color:" +msgstr "Bakgrunnsfarge:" + +#: optiondialog.cpp:578 +msgid "Diff background color:" +msgstr "Bakgrunnsfarge for forskjell:" + +#: optiondialog.cpp:585 +msgid "Color A:" +msgstr "Farge A:" + +#: optiondialog.cpp:592 +msgid "Color B:" +msgstr "Farge B:" + +#: optiondialog.cpp:599 +msgid "Color C:" +msgstr "Farge C:" + +#: optiondialog.cpp:605 +msgid "Conflict color:" +msgstr "Konfliktfarge:" + +#: optiondialog.cpp:612 +msgid "Current range background color:" +msgstr "Bakgrunnsfarge for gjeldende omrÃ¥de:" + +#: optiondialog.cpp:619 +msgid "Current range diff background color:" +msgstr "Bakgrunnsfarge for gjeldende forskjellsomrÃ¥de:" + +#: optiondialog.cpp:625 +msgid "Color for manually aligned difference ranges:" +msgstr "Farge for manuelt innrettede forskjellsomrÃ¥der:" + +#: optiondialog.cpp:630 +msgid "Directory Comparison View:" +msgstr "Mappesammenlikning:" + +#: optiondialog.cpp:636 +msgid "Newest file color:" +msgstr "Farge for nyeste fil:" + +#: optiondialog.cpp:639 +msgid "" +"Changing this color will only be effective when starting the next directory " +"comparison." +msgstr "" +"Endring av denne fargen fÃ¥r bare virkning nÃ¥r neste mappe-sammenlikning " +"utføres." + +#: optiondialog.cpp:644 +msgid "Oldest file color:" +msgstr "Farge for eldste fil:" + +#: optiondialog.cpp:651 +msgid "Middle age file color:" +msgstr "Farge for filer med midlere alder:" + +#: optiondialog.cpp:658 +msgid "Color for missing files:" +msgstr "Farge for manglende filer:" + +#: optiondialog.cpp:670 +msgid "Editor" +msgstr "Redigerer" + +#: optiondialog.cpp:670 +msgid "Editor Behavior" +msgstr "Redigeringsoppsett" + +#: optiondialog.cpp:680 +msgid "Tab inserts spaces" +msgstr "TAB setter inn mellomrom" + +#: optiondialog.cpp:683 +msgid "" +"On: Pressing tab generates the appropriate number of spaces.\n" +"Off: A Tab-character will be inserted." +msgstr "" +"PÃ¥: TAB-tasten setter inn passende antall mellomrom.\n" +"Av: Et TAB-tegn settes inn." + +#: optiondialog.cpp:689 +msgid "Tab size:" +msgstr "TAB-størrelse:" + +#: optiondialog.cpp:694 +msgid "Auto indentation" +msgstr "Automatisk innrykk" + +#: optiondialog.cpp:697 +msgid "" +"On: The indentation of the previous line is used for a new line.\n" +msgstr "" +"PÃ¥: Innrykket for forrige linje brukes for en ny linje.\n" + +#: optiondialog.cpp:701 +msgid "Auto copy selection" +msgstr "Autokopier utvalg" + +#: optiondialog.cpp:704 +msgid "" +"On: Any selection is immediately written to the clipboard.\n" +"Off: You must explicitely copy e.g. via Ctrl-C." +msgstr "" +"PÃ¥: Alt som markeres skrives straks til utklippstavla.\n" +"Av: Du mÃ¥ uttrykkelig kopiere, f.eks. med Ctrl-C." + +#: optiondialog.cpp:709 +msgid "Line end style:" +msgstr "Linjeavslutning:" + +#: optiondialog.cpp:721 +msgid "" +"Sets the line endings for when an edited file is saved.\n" +"DOS/Windows: CR+LF; UNIX: LF; with CR=0D, LF=0A" +msgstr "" +"Bestemmer tegn for slutt pÃ¥ linja nÃ¥r en fil lagres.\n" +"DOS/Windows: CR+LF; UNIX: LF; med CR=0D, LF=0A" + +#: optiondialog.cpp:732 +#, fuzzy +msgid "Diff" +msgstr "KDiff3" + +#: optiondialog.cpp:732 +#, fuzzy +msgid "Diff Settings" +msgstr "Innstillinger for Diff og fletting" + +#: optiondialog.cpp:743 +msgid "Preserve carriage return" +msgstr "Bevar vognretur" + +#: optiondialog.cpp:746 +msgid "" +"Show carriage return characters '\\r' if they exist.\n" +"Helps to compare files that were modified under different operating systems." +msgstr "" +"Vis tegn «\\r» for vognretur hvis de finnes.\n" +"Hjelper Ã¥ sammenlikne filer som ble endret i forskjellige operativsystemer." + +#: optiondialog.cpp:751 +msgid "Ignore numbers" +msgstr "Ignorer tall" + +#: optiondialog.cpp:754 +msgid "" +"Ignore number characters during line matching phase. (Similar to Ignore white " +"space.)\n" +"Might help to compare files with numeric data." +msgstr "" +"Ignorer sifre nÃ¥r linjene søkes opp. (Likner Ignorer tomrom)\n" +"Kan hjelpe til Ã¥ sammenlikne filer med numeriske data." + +#: optiondialog.cpp:759 +msgid "Ignore C/C++ comments" +msgstr "Ignorer C/C++-kommentarer" + +#: optiondialog.cpp:761 +msgid "Treat C/C++ comments like white space." +msgstr "Behandle kommentarer i C/C++ som tomrom." + +#: optiondialog.cpp:765 +msgid "Ignore case" +msgstr "Ikke ta hensyn til store/smÃ¥ bokstaver" + +#: optiondialog.cpp:768 +msgid "Treat case differences like white space changes. ('a'<=>'A')" +msgstr "Behandle endringer smÃ¥/store som endring i tomrom («a»<=>«A»)" + +#: optiondialog.cpp:772 +msgid "Preprocessor command:" +msgstr "Forarbeide-kommando:" + +#: optiondialog.cpp:776 +msgid "User defined pre-processing. (See the docs for details.)" +msgstr "Selvvalgt forarbeide. (Detaljer finnes i dokumentasjonen)" + +#: optiondialog.cpp:779 +msgid "Line-matching preprocessor command:" +msgstr "Linjesøkende forarbeide, kommando:" + +#: optiondialog.cpp:783 +msgid "" +"This pre-processor is only used during line matching.\n" +"(See the docs for details.)" +msgstr "" +"Denne forbehandleren brukes bare nÃ¥r linjer søkes.\n" +"(Detaljer i dokumentasjonen)." + +#: optiondialog.cpp:786 +msgid "Try hard (slower)" +msgstr "Grundig (langsommere)" + +#: optiondialog.cpp:789 +msgid "" +"Enables the --minimal option for the external diff.\n" +"The analysis of big files will be much slower." +msgstr "" +"SlÃ¥r pÃ¥ --minimal for det eksterne diff-programmet.\n" +"Analyse av store filer blir mye langsommere." + +#: optiondialog.cpp:794 +msgid "Auto advance delay (ms):" +msgstr "Forsinkelse for auto-avansering (ms):" + +#: optiondialog.cpp:799 +msgid "" +"When in Auto-Advance mode the result of the current selection is shown \n" +"for the specified time, before jumping to the next conflict. Range: 0-2000 ms" +msgstr "" +"NÃ¥r det brukes auto-avansering vises resultatet av gjeldende utvalg \n" +"i oppgitt tid, før det hoppes til neste konflikt. VerdiomrÃ¥de fra 0-2000 ms" + +#: optiondialog.cpp:809 +#, fuzzy +msgid "Merge Settings" +msgstr "Innstillinger for Diff og fletting" + +#: optiondialog.cpp:822 +msgid "White space 2-file merge default:" +msgstr "Standard for 2-fils tomromsfletting:" + +#: optiondialog.cpp:826 optiondialog.cpp:839 +msgid "Manual Choice" +msgstr "Manuelt valg" + +#: optiondialog.cpp:830 optiondialog.cpp:844 +msgid "" +"Allow the merge algorithm to automatically select an input for white-space-only " +"changes." +msgstr "" +"Tillat flettealgoritmen Ã¥ velge inn-data automatisk for endringer som bare " +"gjelder tomrom." + +#: optiondialog.cpp:835 +msgid "White space 3-file merge default:" +msgstr "Standard for 3-fils tomromsfletting:" + +#: optiondialog.cpp:849 +msgid "Automatic Merge Regular Expression" +msgstr "Automatisk fletting med regulært uttrykk" + +#: optiondialog.cpp:858 smalldialogs.cpp:397 +msgid "Auto merge regular expression:" +msgstr "Regulært uttrykk for automatisk fletting:" + +#: optiondialog.cpp:862 +msgid "" +"Regular expression for lines where KDiff3 should automatically choose one " +"source.\n" +"When a line with a conflict matches the regular expression then\n" +"- if available - C, otherwise B will be chosen." +msgstr "" +"Regulært uttrykk for linjer der KDiff3 skal velge én kilde automatisk.\n" +"NÃ¥r en linje med konflikt stemmer med det regulære uttrykket, sÃ¥ \n" +"velges C hvis tilgjengelig, ellers B." + +#: optiondialog.cpp:868 +msgid "Run regular expression auto merge on merge start" +msgstr "Kjør autofletting med regulære uttrykk ved flettestart" + +#: optiondialog.cpp:870 +msgid "" +"Run the merge for auto merge regular expressions\n" +"immediately when a merge starts.\n" +msgstr "" +"Kjør autoflettingen med regulære uttrykk med en\n" +"gang nÃ¥r en fletting begynner.\n" + +#: optiondialog.cpp:875 +msgid "Version Control History Merging" +msgstr "Fletting av historien fra versjonskontroll" + +#: optiondialog.cpp:884 smalldialogs.cpp:424 +msgid "History start regular expression:" +msgstr "Regulært uttrykk for start pÃ¥ historien:" + +#: optiondialog.cpp:888 +msgid "" +"Regular expression for the start of the version control history entry.\n" +"Usually this line contains the \"$Log$\"-keyword.\n" +"Default value: \".*\\$Log.*\\$.*\"" +msgstr "" +"Regulært uttrykk for start pÃ¥ oppføringen i versjonskontroll-historien.\n" +"Denne linja inneholder som regel \"$Log$\"-nøkkelordet.\n" +"Standard: \".*\\$Log.*\\$.*\"" + +#: optiondialog.cpp:894 smalldialogs.cpp:453 +msgid "History entry start regular expression:" +msgstr "Regulært uttrykk for start pÃ¥ historieoppføring:" + +#: optiondialog.cpp:906 +msgid "" +"A version control history entry consists of several lines.\n" +"Specify the regular expression to detect the first line (without the leading " +"comment).\n" +"Use parentheses to group the keys you want to use for sorting.\n" +"If left empty, then KDiff3 assumes that empty lines separate history entries.\n" +"See the documentation for details." +msgstr "" +"En historieoppføring bestÃ¥r av flere linjer.\n" +"Oppgi et regulært uttrykk som finner første linje (uten kommentaren foran).\n" +"Bruk parenteser for Ã¥ binde sammen nøkler du vil bruke til sortering.\n" +"Hvis det stÃ¥r tomt regner KDiff3 med at det er blanke linjer mellom " +"historieoppføringene.\n" +"Se i dokumentasjonen etter detaljer." + +#: optiondialog.cpp:914 +msgid "History merge sorting" +msgstr "Flettesortering av historien" + +#: optiondialog.cpp:916 +msgid "Sort version control history by a key." +msgstr "Sorter versjonskontroll-historien etter en nøkkel." + +#: optiondialog.cpp:926 +msgid "History entry start sort key order:" +msgstr "Nøkkelrekkefølge for sortering av historiestart:" + +#: optiondialog.cpp:930 +msgid "" +"Each parentheses used in the regular expression for the history start entry\n" +"groups a key that can be used for sorting.\n" +"Specify the list of keys (that are numbered in order of occurrence\n" +"starting with 1) using ',' as separator (e.g. \"4,5,6,1,2,3,7\").\n" +"If left empty, then no sorting will be done.\n" +"See the documentation for details." +msgstr "" +"Hver parentes brukt i det regulære uttrykket for start pÃ¥ historieoppføringen\n" +"definerer en nøkkel som kan brukes til sortering.\n" +"Oppgi en liste over nøkler (nummerert i den rekkefølge de opptrer\n" +"med start pÃ¥ 1), med «,» som skilletegn (f.eks. \"4,5,6,1,2,3,7\").\n" +"StÃ¥r dette tomt blir det ikke sortert.\n" +"Detaljer finnes i dokumentasjonen." + +#: optiondialog.cpp:941 +msgid "Merge version control history on merge start" +msgstr "Flett versjonshistorien nÃ¥r flettingen begynner" + +#: optiondialog.cpp:943 +msgid "Run version control history automerge on merge start." +msgstr "Kjør autofletting pÃ¥ versjonshistorien nÃ¥r fletting begynner." + +#: optiondialog.cpp:947 +msgid "Test your regular expressions" +msgstr "Test de regulære uttrykkene" + +#: optiondialog.cpp:952 +msgid "Irrelevant merge command:" +msgstr "Irrelevant flettekommando:" + +#: optiondialog.cpp:956 +msgid "" +"If specified this script is run after automerge\n" +"when no other relevant changes were detected.\n" +"Called with the parameters: filename1 filename2 filename3" +msgstr "" +"Hvis det er oppgitt, kjøres dette skriptet etter\n" +"autofletting nÃ¥r ingen andre relevante endringer \n" +"ble funnet. Kalles med parametre filnavn1 filnavn2 filnavn3" + +#: optiondialog.cpp:966 +msgid "Directory Merge" +msgstr "Mappefletting" + +#: optiondialog.cpp:975 +msgid "Recursive directories" +msgstr "Rekursive mapper" + +#: optiondialog.cpp:977 +msgid "Whether to analyze subdirectories or not." +msgstr "Om undermapper skal analyseres eller ikke." + +#: optiondialog.cpp:979 +msgid "File pattern(s):" +msgstr "Filmønster(e):" + +#: optiondialog.cpp:984 +msgid "" +"Pattern(s) of files to be analyzed. \n" +"Wildcards: '*' and '?'\n" +"Several Patterns can be specified by using the separator: ';'" +msgstr "" +"Mønster(e) for filnavn som skal analyseres.\n" +"Jokertegn: «*» og «?»\n" +"Flere mønstre kan oppgis med «;» som skilletegn" + +#: optiondialog.cpp:990 +msgid "File-anti-pattern(s):" +msgstr "Fil-antimønster(e):" + +#: optiondialog.cpp:995 +msgid "" +"Pattern(s) of files to be excluded from analysis. \n" +"Wildcards: '*' and '?'\n" +"Several Patterns can be specified by using the separator: ';'" +msgstr "" +"Mønster(e) for filer som ikke skal analyseres. \n" +"Jokertegn: «*» og «?»\n" +"Flere mønstre kan oppgis med «;» som skilletegn" + +#: optiondialog.cpp:1001 +msgid "Dir-anti-pattern(s):" +msgstr "Mappe-antimønster(e) :" + +#: optiondialog.cpp:1006 +msgid "" +"Pattern(s) of directories to be excluded from analysis. \n" +"Wildcards: '*' and '?'\n" +"Several Patterns can be specified by using the separator: ';'" +msgstr "" +"Mønster(e) for mapper som ikke skal analyseres. \n" +"Jokertegn: «*» og «?»\n" +"Flere mønstre kan oppgis med «;» som skilletegn" + +#: optiondialog.cpp:1012 +msgid "Use .cvsignore" +msgstr "Bruk .cvsignore" + +#: optiondialog.cpp:1015 +msgid "" +"Extends the antipattern to anything that would be ignored by CVS.\n" +"Via local \".cvsignore\"-files this can be directory specific." +msgstr "" +"Utvider antimønsteret til alt som CVS ville ignorere.\n" +"Dette kan gjøres pr. mappe med lokale «.cvsignore»-filer." + +#: optiondialog.cpp:1020 +msgid "Find hidden files and directories" +msgstr "Finn skjulte filer og mapper" + +#: optiondialog.cpp:1023 +msgid "Finds files and directories with the hidden attribute." +msgstr "Finner filer og mapper som har attributten «skjult." + +#: optiondialog.cpp:1025 +msgid "Finds files and directories starting with '.'." +msgstr "Finner filer og mapper med navn som begynner med «.»." + +#: optiondialog.cpp:1029 +msgid "Follow file links" +msgstr "Følg fil-lenker" + +#: optiondialog.cpp:1032 +msgid "" +"On: Compare the file the link points to.\n" +"Off: Compare the links." +msgstr "" +"PÃ¥: Sammenlikne filer som lenkene peker pÃ¥.\n" +"Av: Sammenlikne lenkene." + +#: optiondialog.cpp:1037 +msgid "Follow directory links" +msgstr "Følg mappelenker" + +#: optiondialog.cpp:1040 +msgid "" +"On: Compare the directory the link points to.\n" +"Off: Compare the links." +msgstr "" +"PÃ¥: Sammenlikne mapper lenkene peker pÃ¥.\n" +"Av: Sammenlikne lenkene." + +#: optiondialog.cpp:1056 +msgid "Case sensitive filename comparison" +msgstr "Store/smÃ¥ bokstaver i filnavn" + +#: optiondialog.cpp:1059 +msgid "" +"The directory comparison will compare files or directories when their names " +"match.\n" +"Set this option if the case of the names must match. (Default for Windows is " +"off, otherwise on.)" +msgstr "" +"Mappesammenlikningen behandler filer og mapper nÃ¥r navnene er like.\n" +"SlÃ¥ pÃ¥ dette hvis navnene er versalvâre - dvs store/smÃ¥ bokstaver mÃ¥ være like. " +"(Standard for Windows er av, ellers pÃ¥.)v" + +#: optiondialog.cpp:1063 +msgid "File Comparison Mode" +msgstr "Hvordan filer sammenliknes" + +#: optiondialog.cpp:1067 +msgid "Binary comparison" +msgstr "Binær sammenlikning" + +#: optiondialog.cpp:1068 +msgid "Binary comparison of each file. (Default)" +msgstr "Binær sammenlikning av hver fil. (Standard)" + +#: optiondialog.cpp:1070 +msgid "Full analysis" +msgstr "Full analyse" + +#: optiondialog.cpp:1071 +msgid "" +"Do a full analysis and show statistics information in extra columns.\n" +"(Slower than a binary comparison, much slower for binary files.)" +msgstr "" +"Gjør en full analyse og vis statistikk i ekstra kolonner.\n" +"(Langsommere enn binær sammenlikning, mye langsommere for binære filer.)" + +#: optiondialog.cpp:1074 +msgid "Trust the modification date (unsafe)" +msgstr "Stol pÃ¥ endringsdatoen (utrygt)" + +#: optiondialog.cpp:1075 +msgid "" +"Assume that files are equal if the modification date and file length are " +"equal.\n" +"Useful for big directories or slow networks." +msgstr "" +"Anta at filer er like hvis endringsdatoene og størrelsene er like.\n" +"Nyttig for store mapper eller langsomme nett." + +#: optiondialog.cpp:1078 +msgid "Trust the size (unsafe)" +msgstr "Stol pÃ¥ størrelsen (utrygt)" + +#: optiondialog.cpp:1079 +msgid "" +"Assume that files are equal if their file lengths are equal.\n" +"Useful for big directories or slow networks when the date is modified during " +"download." +msgstr "" +"Anta at filer er like hvis størrelsene er like.\n" +"Nyttig for store mapper eller langsomme nett nÃ¥r datoen endres under " +"nedlasting." + +#: optiondialog.cpp:1083 +msgid "Synchronize directories" +msgstr "Synkroniser mapper" + +#: optiondialog.cpp:1086 +msgid "" +"Offers to store files in both directories so that\n" +"both directories are the same afterwards.\n" +"Works only when comparing two directories without specifying a destination." +msgstr "" +"Kan lagre filer i begge mapper slik at begge\n" +"mappene er like etterpÃ¥. Dette virker bare hvis\n" +"to mapper sammenliknes uten Ã¥ oppgi et mÃ¥l." + +#: optiondialog.cpp:1092 +msgid "White space differences considered equal" +msgstr "Tomromsforskjeller betraktes som like" + +#: optiondialog.cpp:1095 +msgid "" +"If files differ only by white space consider them equal.\n" +"This is only active when full analysis is chosen." +msgstr "" +"Hvis filer er forskjellige bare i tomrom, betrakt dem som\n" +"like. Dette er bare aktivt nÃ¥r det kjøres full analyse." + +#: optiondialog.cpp:1101 +msgid "Copy newer instead of merging (unsafe)" +msgstr "Kopier den nyeste i stedet for Ã¥ flette (utrygt)" + +#: optiondialog.cpp:1104 +msgid "" +"Don't look inside, just take the newer file.\n" +"(Use this only if you know what you are doing!)\n" +"Only effective when comparing two directories." +msgstr "" +"Ikke se inni filene, bare bruk den nyeste fila.\n" +"(Bruk dette bare nÃ¥r du vet hva du gjør!)\n" +"Bare virksomt nÃ¥r to mapper sammenliknes." + +#: optiondialog.cpp:1109 +msgid "Backup files (.orig)" +msgstr "Ta sikkerhetskopi av filer (.orig)" + +#: optiondialog.cpp:1112 +msgid "" +"When a file would be saved over an old file, then the old file\n" +"will be renamed with a '.orig'-extension instead of being deleted." +msgstr "" +"NÃ¥r en ny fil ville bli lagret oppÃ¥ en gammel, sÃ¥ fÃ¥r den gamle\n" +"fila nytt navn med «.orig» til slutt i stedet for Ã¥ bli slettet." + +#: optiondialog.cpp:1176 +msgid "Regional Settings" +msgstr "Regionale innstillinger" + +#: optiondialog.cpp:1272 +msgid "Language (restart required)" +msgstr "SprÃ¥k (krever omstart av KDiff3)" + +#: optiondialog.cpp:1304 +msgid "" +"Choose the language of the GUI-strings or \"Auto\".\n" +"For a change of language to take place, quit and restart KDiff3." +msgstr "" +"Velg sprÃ¥k for GUI-strengene, eller «Auto».\n" +"KDiff3 mÃ¥ stoppes og startes pÃ¥ nytt for at dette skal fÃ¥ virkning." + +#: optiondialog.cpp:1322 +msgid "Use the same encoding for everything:" +msgstr "Bruk samme koding for alt:" + +#: optiondialog.cpp:1325 +msgid "" +"Enable this allows to change all encodings by changing the first only.\n" +"Disable this if different individual settings are needed." +msgstr "" +"Hvis dette er slÃ¥tt pÃ¥ kan alle kodinger endres ved bare Ã¥ endre den første.\n" +"SlÃ¥ av hvis det trengs separate innstillinger." + +#: optiondialog.cpp:1330 +msgid "Note: Local Encoding is " +msgstr "Merk: Lokal koding er " + +#: optiondialog.cpp:1334 +msgid "File Encoding for A:" +msgstr "Filkoding for A :" + +#: optiondialog.cpp:1340 +msgid "" +"If enabled then Unicode (UTF-16 or UTF-8) encoding will be detected.\n" +"If the file encoding is not detected then the selected encoding will be used as " +"fallback.\n" +"(Unicode detection depends on the first bytes of a file - the byte order mark " +"\"BOM\".)" +msgstr "" + +#: optiondialog.cpp:1344 optiondialog.cpp:1353 optiondialog.cpp:1362 +msgid "Auto Detect Unicode" +msgstr "" + +#: optiondialog.cpp:1349 +msgid "File Encoding for B:" +msgstr "Filkoding for B :" + +#: optiondialog.cpp:1358 +msgid "File Encoding for C:" +msgstr "Filkoding for C :" + +#: optiondialog.cpp:1367 +msgid "File Encoding for Merge Output and Saving:" +msgstr "Filkoding for flettet resultat og lagring:" + +#: optiondialog.cpp:1371 +#, fuzzy +msgid "Auto Select" +msgstr "Autokopier utvalg" + +#: optiondialog.cpp:1374 +msgid "" +"If enabled then the encoding from the input files is used.\n" +"In ambiguous cases a dialog will ask the user to choose the encoding for " +"saving." +msgstr "" + +#: optiondialog.cpp:1378 +msgid "File Encoding for Preprocessor Files:" +msgstr "Filkoding for forbehandlingsfiler:" + +#: optiondialog.cpp:1389 +msgid "Right To Left Language" +msgstr "Høyre mot venstre-sprÃ¥k" + +#: optiondialog.cpp:1392 +msgid "" +"Some languages are read from right to left.\n" +"This setting will change the viewer and editor accordingly." +msgstr "" +"Noen sprÃ¥k leses fra høyre mot venstre.\n" +"Denne innstillingen endrer visning og redigering tilsvarende." + +#: optiondialog.cpp:1402 +msgid "Integration" +msgstr "Integrasjon" + +#: optiondialog.cpp:1402 +msgid "Integration Settings" +msgstr "Integrasjonsinnstillinger" + +#: optiondialog.cpp:1412 +msgid "Command line options to ignore:" +msgstr "Kommandolinjeparametre som skal ignoreres:" + +#: optiondialog.cpp:1417 +msgid "" +"List of command line options that should be ignored when KDiff3 is used by " +"other tools.\n" +"Several values can be specified if separated via ';'\n" +"This will suppress the \"Unknown option\"-error." +msgstr "" +"Liste over kommandolinje-parametre som skal hoppes over nÃ¥r KDiff3 brukes av " +"andre verktøy.\n" +"Flere verdier kan oppgis atskilt med «;»\n" +"Da forsvinner feilmeldingen «Ukjent parameter»." + +#: optiondialog.cpp:1480 +msgid "" +"You selected a variable width font.\n" +"\n" +"Because this program doesn't handle variable width fonts\n" +"correctly, you might experience problems while editing.\n" +"\n" +"Do you want to continue or do you want to select another font." +msgstr "" +"Du har valgt en skrift med variabel bredde.\n" +"\n" +"Fordi dette programmet ikke hÃ¥ndterer skrifter med\n" +"variabel bredde riktig, kan du fÃ¥ vansker med redigering.\n" +"\n" +"Vil du fortsette, eller vil du velge en annen skrift." + +#: optiondialog.cpp:1484 +msgid "Incompatible Font" +msgstr "Ikke kompatibel skrift" + +#: optiondialog.cpp:1485 +msgid "Continue at Own Risk" +msgstr "Fortsett pÃ¥ egen risiko" + +#: optiondialog.cpp:1485 +msgid "Select Another Font" +msgstr "Velg en annen skrift" + +#: optiondialog.cpp:1521 +msgid "This resets all options. Not only those of the current topic." +msgstr "Dette tilbakestiller alle valg, ikke bare dem i dette emnet." + +#: pdiff.cpp:258 +msgid "PreprocessorCmd: " +msgstr "Forbehandlingskommando :" + +#: pdiff.cpp:263 +msgid "" +"The following option(s) you selected might change data:\n" +msgstr "" +"Følgende innstillinger som er valgt kan endre data:\n" + +#: pdiff.cpp:264 +msgid "" +"\n" +"Most likely this is not wanted during a merge.\n" +"Do you want to disable these settings or continue with these settings active?" +msgstr "" +"\n" +"Ved fletting er nok ikke dette ønsket.\n" +"Vil du slÃ¥ av disse innstillingene eller fortsette med dem slÃ¥tt pÃ¥?" + +#: pdiff.cpp:266 +msgid "Option Unsafe for Merging" +msgstr "Utrygg innstilling for fletting" + +#: pdiff.cpp:267 +msgid "Use These Options During Merge" +msgstr "Bruk disse innstillingene under fletting" + +#: pdiff.cpp:267 +msgid "Disable Unsafe Options" +msgstr "SlÃ¥ av utrygge innstillinger" + +#: pdiff.cpp:297 +msgid "Loading A" +msgstr "Laster A" + +#: pdiff.cpp:301 +msgid "Loading B" +msgstr "Laster B" + +#: pdiff.cpp:318 pdiff.cpp:344 +msgid "Diff: A <-> B" +msgstr "Diff: A <-> B" + +#: pdiff.cpp:324 pdiff.cpp:366 +msgid "Linediff: A <-> B" +msgstr "Linjediff A <-> B" + +#: pdiff.cpp:335 +msgid "Loading C" +msgstr "Laster C" + +#: pdiff.cpp:347 +msgid "Diff: B <-> C" +msgstr "Diff: B <-> C" + +#: pdiff.cpp:350 +msgid "Diff: A <-> C" +msgstr "Diff: A <-> C" + +#: pdiff.cpp:369 +msgid "Linediff: B <-> C" +msgstr "Linjediff B <-> C" + +#: pdiff.cpp:372 +msgid "Linediff: A <-> C" +msgstr "Linjediff A <-> C" + +#: pdiff.cpp:513 +msgid "All input files contain the same text, but are not binary equal." +msgstr "Alle inn-filene inneholder samme tekst, men er ikke binært like." + +#: pdiff.cpp:515 pdiff.cpp:517 pdiff.cpp:519 +msgid "" +"Files %1 and %2 are binary equal.\n" +msgstr "" +"Filene %1 og %2 er binært like.\n" + +#: pdiff.cpp:516 pdiff.cpp:518 pdiff.cpp:520 +msgid "" +"Files %1 and %2 have equal text, but are not binary equal. \n" +msgstr "" +"Filene %1 og %2 har lik tekst, men er ikke binært like. \n" + +#: pdiff.cpp:530 +msgid "" +"Some inputfiles don't seem to be pure textfiles.\n" +"Note that the KDiff3-merge was not meant for binary data.\n" +"Continue at your own risk." +msgstr "" +"Det ser ut til at noen av inndata-filene ikke er rene tekstfiler.\n" +"Merk at KDiff3-fletting ikke er beregnet for binære data.\n" +"Fortsett pÃ¥ egen risiko." + +#: pdiff.cpp:979 +msgid "Abort" +msgstr "Avbryt" + +#: pdiff.cpp:985 pdiff.cpp:1073 +msgid "Opening files..." +msgstr "Ã…pner filer ..." + +#: pdiff.cpp:1050 pdiff.cpp:1121 +msgid "File open error" +msgstr "Feil ved filÃ¥pning" + +#: pdiff.cpp:1153 +msgid "Cutting selection..." +msgstr "Klipper ut utvalget ..." + +#: pdiff.cpp:1174 +msgid "Copying selection to clipboard..." +msgstr "Kopierer utvalg til utklippstavla ..." + +#: pdiff.cpp:1190 +msgid "Inserting clipboard contents..." +msgstr "Setter inn fra utklippstavla ..." + +#: pdiff.cpp:1713 +msgid "Save && Continue" +msgstr "Lagre og fortsett" + +#: pdiff.cpp:1713 +msgid "Continue Without Saving" +msgstr "Fortsett uten lagring" + +#: pdiff.cpp:1920 +msgid "Search complete." +msgstr "Søk fullført." + +#: pdiff.cpp:1920 +msgid "Search Complete" +msgstr "Søk fullført" + +#: pdiff.cpp:2144 +msgid "Nothing is selected in either diff input window." +msgstr "Ingenting er valgt i noe av inndata-vinduene." + +#: pdiff.cpp:2144 +msgid "Error while adding manual diff range" +msgstr "Feil oppsto ved tillegg av manuelt diff-omrÃ¥de" + +#. i18n: file kdiff3_part.rc line 4 +#: rc.cpp:3 +#, no-c-format +msgid "&KDiff3" +msgstr "&KDiff3" + +#. i18n: file kdiff3_part.rc line 13 +#: rc.cpp:6 +#, no-c-format +msgid "Configure KDiff3" +msgstr "Sett opp KDiff3" + +#. i18n: file kdiff3_shell.rc line 7 +#: rc.cpp:15 +#, no-c-format +msgid "&Directory" +msgstr "M&appe" + +#. i18n: file kdiff3_shell.rc line 30 +#: rc.cpp:18 +#, no-c-format +msgid "Current Item Merge Operation" +msgstr "Flettehandling pÃ¥ gjeldende element" + +#. i18n: file kdiff3_shell.rc line 38 +#: rc.cpp:21 +#, no-c-format +msgid "Current Item Sync Operation" +msgstr "Synk-handling pÃ¥ gjeldende element" + +#. i18n: file kdiff3_shell.rc line 50 +#: rc.cpp:24 +#, no-c-format +msgid "&Movement" +msgstr "F&lytting" + +#. i18n: file kdiff3_shell.rc line 61 +#: rc.cpp:27 +#, no-c-format +msgid "D&iffview" +msgstr "D&iffvisning" + +#. i18n: file kdiff3_shell.rc line 73 +#: rc.cpp:30 +#, no-c-format +msgid "&Merge" +msgstr "&Flett" + +#. i18n: file kdiff3_shell.rc line 95 +#: rc.cpp:33 +#, no-c-format +msgid "&Window" +msgstr "&Vindu" + +#: smalldialogs.cpp:53 +msgid "A (Base):" +msgstr "A (Basis):" + +#: smalldialogs.cpp:59 smalldialogs.cpp:75 smalldialogs.cpp:91 +#: smalldialogs.cpp:134 +msgid "File..." +msgstr "Fil ..." + +#: smalldialogs.cpp:61 smalldialogs.cpp:77 smalldialogs.cpp:93 +#: smalldialogs.cpp:136 +msgid "Dir..." +msgstr "Mappe ..." + +#: smalldialogs.cpp:86 +msgid "C (Optional):" +msgstr "C (valgfri):" + +#: smalldialogs.cpp:108 +msgid "Swap/Copy Names ..." +msgstr "Bytt/kopier navn ..." + +#: smalldialogs.cpp:114 smalldialogs.cpp:115 smalldialogs.cpp:116 +msgid "Swap %1<->%2" +msgstr "Bytt om %1<->%2" + +#: smalldialogs.cpp:117 smalldialogs.cpp:118 smalldialogs.cpp:119 +msgid "Copy %1->Output" +msgstr "Kopier %1->Utdata" + +#: smalldialogs.cpp:120 smalldialogs.cpp:121 smalldialogs.cpp:122 +msgid "Swap %1<->Output" +msgstr "Bytt om %1<->utdata" + +#: smalldialogs.cpp:129 +msgid "Output (optional):" +msgstr "Utdata (valgfri):" + +#: smalldialogs.cpp:158 +msgid "Configure..." +msgstr "Sett opp ..." + +#: smalldialogs.cpp:347 +msgid "Search text:" +msgstr "Søketekst:" + +#: smalldialogs.cpp:354 +msgid "Case sensitive" +msgstr "Skill mellom store og smÃ¥ bokstaver" + +#: smalldialogs.cpp:357 +msgid "Search A" +msgstr "Søk i A" + +#: smalldialogs.cpp:362 +msgid "Search B" +msgstr "Søk i B" + +#: smalldialogs.cpp:367 +msgid "Search C" +msgstr "Søk i C" + +#: smalldialogs.cpp:372 +msgid "Search output" +msgstr "Utdata fra søk" + +#: smalldialogs.cpp:377 +msgid "&Search" +msgstr "&Søk" + +#: smalldialogs.cpp:394 +msgid "Regular Expression Tester" +msgstr "Prøv ut regulært uttrykk" + +#: smalldialogs.cpp:405 +msgid "Example auto merge line:" +msgstr "Eksempel pÃ¥ autoflette-linje:" + +#: smalldialogs.cpp:407 +msgid "For auto merge test copy a line as used in your files." +msgstr "" +"Kopier hit en linje slik som brukt i filene dine, for Ã¥ teste autofletting." + +#: smalldialogs.cpp:413 smalldialogs.cpp:442 smalldialogs.cpp:479 +msgid "Match result:" +msgstr "Resultat av søk:" + +#: smalldialogs.cpp:432 +msgid "Example history start line (with leading comment):" +msgstr "Eksempel pÃ¥ startlinje for historie (med innledende kommentar):" + +#: smalldialogs.cpp:435 +msgid "" +"Copy a history start line as used in your files,\n" +"including the leading comment." +msgstr "" +"Kopier en historie-startlinje fra en av filene dine,\n" +"ta med den innledende kommentaren." + +#: smalldialogs.cpp:461 +msgid "History sort key order:" +msgstr "Sorteringsrekkefølge for historienøkler:" + +#: smalldialogs.cpp:469 +msgid "Example history entry start line (without leading comment):" +msgstr "" +"Eksempel pÃ¥ startlinje for historieoppføring (uten innledende kommentar):" + +#: smalldialogs.cpp:471 +msgid "" +"Copy a history entry start line as used in your files,\n" +"but omit the leading comment." +msgstr "" +"Kopier en startlinje for historieoppføring fra en av filene dine,\n" +"men ta bort den innledende kommentaren." + +#: smalldialogs.cpp:486 +msgid "Sort key result:" +msgstr "Resulterende sorteringsnøkler:" + +#: smalldialogs.cpp:537 smalldialogs.cpp:547 smalldialogs.cpp:568 +msgid "Match success." +msgstr "Tilslag." + +#: smalldialogs.cpp:541 smalldialogs.cpp:551 smalldialogs.cpp:574 +msgid "Match failed." +msgstr "Ikke tilslag." + +#: smalldialogs.cpp:559 +msgid "Opening and closing parentheses don't match in regular expression." +msgstr "Begynn- og sluttparenteser stemmer ikke overens i regulært uttrykk." + +#~ msgid "Diff and Merge" +#~ msgstr "Diff og fletting" + +#~ msgid "Save Directory Merge State ..." +#~ msgstr "Lagre status for mappefletting ..." + +#~ msgid "Load Directory Merge State ..." +#~ msgstr "Last inn status for mappefletting ..." + +#~ msgid "Synchronize Directories" +#~ msgstr "Synkroniser mapper" + +#~ msgid "Copy Newer Files Instead of Merging" +#~ msgstr "Kopier nyere filer i stedet for Ã¥ flette" diff --git a/po/nl.po b/po/nl.po new file mode 100644 index 0000000..6dfdc52 --- /dev/null +++ b/po/nl.po @@ -0,0 +1,2572 @@ +# translation of kdiff3.po to Dutch +# translation of kdiff3.po to +# translation of kdiff3.po to +# Copyright (C) 2004, 2005, 2006 Free Software Foundation, Inc. +# +# Rinse de Vries , 2004. +# Rinse de Vries , 2004, 2005, 2006. +# Sander Koning , 2005. +# Rinse de Vries , 2005. +# Bram Schoenmakers , 2006. +msgid "" +msgstr "" +"Project-Id-Version: kdiff3\n" +"POT-Creation-Date: 2006-11-05 08:45+0100\n" +"PO-Revision-Date: 2006-11-27 00:05+0100\n" +"Last-Translator: Rinse de Vries \n" +"Language-Team: Dutch \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: KBabel 1.11.4\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: _translatorinfo.cpp:1 +msgid "" +"_: NAME OF TRANSLATORS\n" +"Your names" +msgstr "Frank Schoolmeesters,Rinse de Vries,Bram Schoenmakers" + +#: _translatorinfo.cpp:3 +msgid "" +"_: EMAIL OF TRANSLATORS\n" +"Your emails" +msgstr "" +"frank_schoolmeesters@yahoo.com,rinsedevries@kde.nl,bramschoenmakers@kde.nl" + +#: diff.cpp:246 +msgid "Writing clipboard data to temp file failed." +msgstr "Het opslaan van de klembordinhoud in een tijdelijk bestand is mislukt." + +#: diff.cpp:250 +msgid "From Clipboard" +msgstr "Van klembord" + +#: diff.cpp:491 +msgid "" +"Preprocessing possibly failed. Check this command:\n" +"\n" +" %1\n" +"\n" +"The preprocessing command will be disabled now." +msgstr "" +"De voorverwerking is waarschijnlijk mislukt. Controleer dit commando:\n" +"\n" +" %1\n" +"\n" +"Dit commando zal nu worden uitgeschakeld." + +#: diff.cpp:526 +msgid "" +"The line-matching-preprocessing possibly failed. Check this command:\n" +"\n" +" %1\n" +"\n" +"The line-matching-preprocessing command will be disabled now." +msgstr "" +"De voorverwerking van regelovereenkomsten is mogelijk mislukt. Controleer dit " +"commando:\n" +"\n" +" %1\n" +"\n" +"Dit commando zal nu worden uitgeschakeld." + +#: diff.cpp:1631 diff.cpp:1645 +msgid "" +"Data loss error:\n" +"If it is reproducable please contact the author.\n" +msgstr "" +"Fout met dataverlies:\n" +"Als dit reproduceerbaar is, neem dan contact op met de auteur.\n" + +#: diff.cpp:1633 diff.cpp:1647 +msgid "Severe Internal Error" +msgstr "Ernstige interne fout" + +#: difftextwindow.cpp:1643 kdiff3.cpp:753 +msgid "Top line" +msgstr "Bovenste regel" + +#: difftextwindow.cpp:1653 +msgid "End" +msgstr "Einde" + +#: directorymergewindow.cpp:142 +msgid "Mix of links and normal files." +msgstr "Mix van koppelingen en bestanden." + +#: directorymergewindow.cpp:149 +msgid "Link: " +msgstr "Koppeling: " + +#: directorymergewindow.cpp:157 +msgid "Size. " +msgstr "Grootte: " + +#: directorymergewindow.cpp:170 +msgid "Date & Size: " +msgstr "Datum en grootte: " + +#: directorymergewindow.cpp:179 directorymergewindow.cpp:185 +msgid "Creating temp copy of %1 failed." +msgstr "Het aanmaken van de tijdelijke kopie van %1 is mislukt." + +#: directorymergewindow.cpp:196 directorymergewindow.cpp:204 +msgid "Opening %1 failed." +msgstr "Het openen van %1 is mislukt." + +#: directorymergewindow.cpp:208 +msgid "Comparing file..." +msgstr "Bestand wordt vergeleken..." + +#: directorymergewindow.cpp:218 directorymergewindow.cpp:224 +#, c-format +msgid "Error reading from %1" +msgstr "Fout bij het lezen van %1" + +#: directorymergewindow.cpp:282 +msgid "Name" +msgstr "Naam" + +#: directorymergewindow.cpp:286 +msgid "Operation" +msgstr "Handeling" + +#: directorymergewindow.cpp:287 +msgid "Status" +msgstr "Status" + +#: directorymergewindow.cpp:288 +msgid "Unsolved" +msgstr "Niet opgelost" + +#: directorymergewindow.cpp:289 +msgid "Solved" +msgstr "Opgelost" + +#: directorymergewindow.cpp:290 +msgid "Nonwhite" +msgstr "Niet-wit" + +#: directorymergewindow.cpp:291 +msgid "White" +msgstr "Wit" + +#: directorymergewindow.cpp:319 +msgid "" +"You are currently doing a directory merge. Are you sure, you want to abort the " +"merge and rescan the directory?" +msgstr "" +"U bent momenteel bezig met het samenvoegen van een directory. Wilt u dat " +"werkelijk, of wilt u het samenvoegen afbreken en de directory opnieuw inlezen?" + +#: directorymergewindow.cpp:320 directorymergewindow.cpp:2868 +msgid "Rescan" +msgstr "Opnieuw inlezen" + +#: directorymergewindow.cpp:320 kdiff3.cpp:603 pdiff.cpp:979 +msgid "Continue Merging" +msgstr "Doorgaan met samenvoegen" + +#: directorymergewindow.cpp:462 +msgid "Opening of directories failed:" +msgstr "Het openen van de directorypen is mislukt:" + +#: directorymergewindow.cpp:465 +msgid "" +"Dir A \"%1\" does not exist or is not a directory.\n" +msgstr "" +"Directory A \"%1\" bestaat niet of is geen directory.\n" + +#: directorymergewindow.cpp:468 +msgid "" +"Dir B \"%1\" does not exist or is not a directory.\n" +msgstr "" +"Directory B \"%1\" bestaat niet of is geen directory.\n" + +#: directorymergewindow.cpp:471 +msgid "" +"Dir C \"%1\" does not exist or is not a directory.\n" +msgstr "" +"Directory C \"%1\" bestaat niet of is geen directory.\n" + +#: directorymergewindow.cpp:473 +msgid "Directory Open Error" +msgstr "Fout bij openen van directory" + +#: directorymergewindow.cpp:481 +msgid "" +"The destination directory must not be the same as A or B when three directories " +"are merged.\n" +"Check again before continuing." +msgstr "" +"De doeldirectory kan niet hetzelfde zijn als A of B als er drie directorypen " +"worden samengevoegd.\n" +"Controleer dit opnieuw voordat u doorgaat." + +#: directorymergewindow.cpp:483 +msgid "Parameter Warning" +msgstr "Parameter-waarschuwing" + +#: directorymergewindow.cpp:488 +msgid "Scanning directories..." +msgstr "Directorypen worden geanalyseerd..." + +#: directorymergewindow.cpp:537 +msgid "Reading Directory A" +msgstr "Inlezen van directory A" + +#: directorymergewindow.cpp:559 +msgid "Reading Directory B" +msgstr "Inlezen van directory B" + +#: directorymergewindow.cpp:581 +msgid "Reading Directory C" +msgstr "Inlezen van directory C" + +#: directorymergewindow.cpp:607 +msgid "Some subdirectories were not readable in" +msgstr "Sommige subdirectorypen waren niet leesbaar in" + +#: directorymergewindow.cpp:612 +msgid "Check the permissions of the subdirectories." +msgstr "Controleer de toegangsrechten van de subdirectorypen." + +#: directorymergewindow.cpp:646 kdiff3.cpp:552 kdiff3.cpp:636 kdiff3.cpp:661 +#: kdiff3.cpp:934 kdiff3.cpp:955 pdiff.cpp:1059 pdiff.cpp:1131 pdiff.cpp:1169 +#: pdiff.cpp:1185 pdiff.cpp:1215 pdiff.cpp:1226 +msgid "Ready." +msgstr "Gereed." + +#: directorymergewindow.cpp:660 +msgid "Directory Comparison Status" +msgstr "Status van directorypenvergelijking" + +#: directorymergewindow.cpp:661 +msgid "Number of subdirectories:" +msgstr "Aantal subdirectorypen:" + +#: directorymergewindow.cpp:662 +msgid "Number of equal files:" +msgstr "Aantal identieke bestanden:" + +#: directorymergewindow.cpp:663 +msgid "Number of different files:" +msgstr "Aantal verschillende bestanden:" + +#: directorymergewindow.cpp:666 +msgid "Number of manual merges:" +msgstr "Aantal handmatige samenvoegingen:" + +#: directorymergewindow.cpp:802 +msgid "This affects all merge operations." +msgstr "Dit heeft effect op alle samenvoegingen." + +#: directorymergewindow.cpp:803 +msgid "Changing All Merge Operations" +msgstr "Verandering van alle samenvoegingen" + +#: directorymergewindow.cpp:803 mergeresultwindow.cpp:287 +msgid "C&ontinue" +msgstr "D&oorgaan" + +#: directorymergewindow.cpp:1169 +msgid "Processing " +msgstr "Voortgang" + +#: directorymergewindow.cpp:1647 directorymergewindow.cpp:1653 +msgid "To do." +msgstr "Onvoltooid." + +#: directorymergewindow.cpp:1756 directorymergewindow.cpp:2899 +msgid "Copy A to B" +msgstr "A naar B kopiëren" + +#: directorymergewindow.cpp:1757 directorymergewindow.cpp:2900 +msgid "Copy B to A" +msgstr "B naar A kopiëren" + +#: directorymergewindow.cpp:1758 directorymergewindow.cpp:2901 +msgid "Delete A" +msgstr "A verwijderen" + +#: directorymergewindow.cpp:1759 directorymergewindow.cpp:2902 +msgid "Delete B" +msgstr "B verwijderen" + +#: directorymergewindow.cpp:1760 +msgid "Delete A & B" +msgstr "A & B verwijderen" + +#: directorymergewindow.cpp:1761 directorymergewindow.cpp:2904 +msgid "Merge to A" +msgstr "Samenvoegen met A" + +#: directorymergewindow.cpp:1762 directorymergewindow.cpp:2905 +msgid "Merge to B" +msgstr "Samenvoegen met B" + +#: directorymergewindow.cpp:1763 +msgid "Merge to A & B" +msgstr "Samenvoegen met A & B" + +#: directorymergewindow.cpp:1767 directorymergewindow.cpp:2896 +msgid "Delete (if exists)" +msgstr "Verwijderen (indien voorhanden)" + +#: directorymergewindow.cpp:1768 directorymergewindow.cpp:1769 +#: directorymergewindow.cpp:2895 optiondialog.cpp:809 smalldialogs.cpp:102 +msgid "Merge" +msgstr "Samenvoegen" + +#: directorymergewindow.cpp:1768 directorymergewindow.cpp:1769 +msgid "Merge (manual)" +msgstr "Samenvoegen (handmatig)" + +#: directorymergewindow.cpp:1770 +msgid "Error: Conflicting File Types" +msgstr "Fout: botsende bestandstypen" + +#: directorymergewindow.cpp:1771 +msgid "Error: Dates are equal but files are not." +msgstr "Fout: de datums zijn hetzelfde, maar de bestanden niet." + +#: directorymergewindow.cpp:1795 directorymergewindow.cpp:1824 +#: directorymergewindow.cpp:1849 +msgid "This operation is currently not possible." +msgstr "Deze handeling is momenteel niet beschikbaar." + +#: directorymergewindow.cpp:1795 directorymergewindow.cpp:1824 +#: directorymergewindow.cpp:1849 directorymergewindow.cpp:2106 +msgid "Operation Not Possible" +msgstr "Handeling niet mogelijk" + +#: directorymergewindow.cpp:1888 +msgid "" +"This should never happen: \n" +"\n" +"mergeResultSaved: m_pMFI=0\n" +"\n" +"If you know how to reproduce this, please contact the program author." +msgstr "" +"Dit zou niet mogen gebeuren: \n" +"\n" +"mergeResultSaved: m_pMFI=0\n" +"\n" +"Als u dit kunt reproduceren, neem dan contact op met de auteur van dit " +"programma." + +#: directorymergewindow.cpp:1888 +msgid "Program Error" +msgstr "Programmafout" + +#: directorymergewindow.cpp:1899 +msgid "" +"An error occurred while copying.\n" +msgstr "" +"Er deed zich een fout voor tijdens het kopiëren.\n" + +#: directorymergewindow.cpp:1900 directorymergewindow.cpp:2306 +msgid "Merge Error" +msgstr "Fout bij samenvoegen" + +#: directorymergewindow.cpp:1905 directorymergewindow.cpp:2311 +msgid "Error." +msgstr "Fout." + +#: directorymergewindow.cpp:1910 directorymergewindow.cpp:2202 +#: directorymergewindow.cpp:2242 +msgid "Done." +msgstr "Gereed." + +#: directorymergewindow.cpp:1933 +msgid "Not saved." +msgstr "Niet opgeslagen." + +#: directorymergewindow.cpp:1968 +msgid "Unknown merge operation. (This must never happen!)" +msgstr "Onbekende samenvoeging. (Dit mag niet voorkomen!)" + +#: directorymergewindow.cpp:2000 +msgid "Unknown merge operation." +msgstr "Onbekende samenvoeging." + +#: directorymergewindow.cpp:2015 +msgid "" +"The merge is about to begin.\n" +"\n" +"Choose \"Do it\" if you have read the instructions and know what you are " +"doing.\n" +"Choosing \"Simulate it\" will tell you what would happen.\n" +"\n" +"Be aware that this program still has beta status and there is NO WARRANTY " +"whatsoever! Make backups of your vital data!" +msgstr "" +"De samenvoeging kan nu beginnen.\n" +"\n" +"Kies \"Starten\" als u de instructies hebt gelezen een weet waar u mee bezig " +"bent.\n" +"Door \"Simulatie\" te kiezen ziet u wat er zou kunnen gebeuren.\n" +"\n" +"Waarschuwing: dit programma bevindt zich in een ontwikkelstadium. Er is dus " +"GEEN ENKELE GARANTIE dat het programma naar behoren zal werken. Maak " +"reservekopieën van uw vitale gegevens!" + +#: directorymergewindow.cpp:2020 +msgid "Starting Merge" +msgstr "Samenvoeging starten" + +#: directorymergewindow.cpp:2020 +msgid "Do It" +msgstr "Starten" + +#: directorymergewindow.cpp:2020 +msgid "Simulate It" +msgstr "Simuleren" + +#: directorymergewindow.cpp:2046 +msgid "" +"The highlighted item has a different type in the different directories. Select " +"what to do." +msgstr "" +"Het gemarkeerde item is van een verschillend type in de verschillende " +"directorypen. Kies wat er moet gebeuren." + +#: directorymergewindow.cpp:2055 +msgid "" +"The modification dates of the file are equal but the files are not. Select what " +"to do." +msgstr "" +"De wijzigingsdatums van het bestanden zijn gelijk, maar de bestanden niet. Kies " +"wat er moet gebeuren." + +#: directorymergewindow.cpp:2106 +msgid "" +"This operation is currently not possible because directory merge is currently " +"running." +msgstr "" +"Deze handeling is niet mogelijk omdat er momenteel een directory wordt " +"samengevoegd." + +#: directorymergewindow.cpp:2166 +msgid "" +"There was an error in the last step.\n" +"Do you want to continue with the item that caused the error or do you want to " +"skip this item?" +msgstr "" +"Er deed zich een fout voor tijdens de laatste stap.\n" +"Wilt u doorgaan met het item dat de fout veroorzaakte of wilt u dit item " +"overslaan?" + +#: directorymergewindow.cpp:2168 +msgid "Continue merge after an error" +msgstr "Samenvoegen voortzetten na een foutmelding" + +#: directorymergewindow.cpp:2168 +msgid "Continue With Last Item" +msgstr "Verdergaan met het laatste item" + +#: directorymergewindow.cpp:2168 +msgid "Skip Item" +msgstr "Item overslaan" + +#: directorymergewindow.cpp:2202 +msgid "Skipped." +msgstr "Overgeslagen." + +#: directorymergewindow.cpp:2209 directorymergewindow.cpp:2435 +msgid "In progress..." +msgstr "In uitvoering..." + +#: directorymergewindow.cpp:2257 +msgid "Merge operation complete." +msgstr "De samenvoeging is voltooid." + +#: directorymergewindow.cpp:2257 directorymergewindow.cpp:2260 +msgid "Merge Complete" +msgstr "Samenvoeging voltooid" + +#: directorymergewindow.cpp:2269 +msgid "" +"Simulated merge complete: Check if you agree with the proposed operations." +msgstr "" +"Samenvoegsimulatie is voltooid. Controleer of u akkoord kunt gaan met de " +"voorgestelde handelingen." + +#: directorymergewindow.cpp:2305 +msgid "" +"An error occurred. Press OK to see detailed information.\n" +msgstr "" +"Er deed zich een fout voor. Klik op OK voor meer details.\n" + +#: directorymergewindow.cpp:2348 +msgid "Error: While deleting %1: Creating backup failed." +msgstr "Fout tijdens het wissen van %1: reservekopie aanmaken is mislukt." + +#: directorymergewindow.cpp:2355 +msgid "delete directory recursively( %1 )" +msgstr "directory ( %1 ) recursief wissen" + +#: directorymergewindow.cpp:2357 +msgid "delete( %1 )" +msgstr "wissen ( %1 )" + +#: directorymergewindow.cpp:2372 +msgid "Error: delete dir operation failed while trying to read the directory." +msgstr "" +"Fout: het wissen van de directory is mislukt omdat de directory niet kon worden " +"geopend." + +#: directorymergewindow.cpp:2391 +msgid "Error: rmdir( %1 ) operation failed." +msgstr "Fout: handeling voor directory verwijderen( %1 ) is mislukt." + +#: directorymergewindow.cpp:2401 +msgid "Error: delete operation failed." +msgstr "Fout: wissen is mislukt." + +#: directorymergewindow.cpp:2427 +msgid "manual merge( %1, %2, %3 -> %4)" +msgstr "handmatig samenvoegen ( %1, %2, %3 -> %4)" + +#: directorymergewindow.cpp:2430 +msgid "" +" Note: After a manual merge the user should continue by pressing F7." +msgstr "" +" Opmerking: na een handmatige samenvoeging dient de gebruiker verder te " +"gaan via F7." + +#: directorymergewindow.cpp:2453 +msgid "Error: copy( %1 -> %2 ) failed.Deleting existing destination failed." +msgstr "" +"Fout: kopiëren( %1 -> %2 ) is mislukt. De bestaande bestemming kon niet gewist " +"worden." + +#: directorymergewindow.cpp:2463 +msgid "copyLink( %1 -> %2 )" +msgstr "Koppeling kopiëren ( %1 -> %2 )" + +#: directorymergewindow.cpp:2474 +msgid "Error: copyLink failed: Remote links are not yet supported." +msgstr "" +"Fout: koppeling kopiëren is mislukt: externe koppelingen worden vooralsnog niet " +"ondersteund." + +#: directorymergewindow.cpp:2480 +msgid "Error: copyLink failed." +msgstr "Fout: koppeling kopiëren is mislukt." + +#: directorymergewindow.cpp:2500 +msgid "copy( %1 -> %2 )" +msgstr "kopiëren ( %1 -> %2 )" + +#: directorymergewindow.cpp:2526 +msgid "Error during rename( %1 -> %2 ): Cannot delete existing destination." +msgstr "" +"Fout tijdens het hernoemen ( %1 -> %2 ): de bestaande bestemming kan niet " +"worden gewist." + +#: directorymergewindow.cpp:2532 +msgid "rename( %1 -> %2 )" +msgstr "hernoemen( %1 -> %2 )" + +#: directorymergewindow.cpp:2541 +msgid "Error: Rename failed." +msgstr "Fout: hernoemen is mislukt." + +#: directorymergewindow.cpp:2559 +msgid "Error during makeDir of %1. Cannot delete existing file." +msgstr "" +"Fout tijdens het aanmaken van de directory %1. Bestaand bestand kan niet worden " +"gewist." + +#: directorymergewindow.cpp:2575 +msgid "makeDir( %1 )" +msgstr "Directory aanmaken( %1 )" + +#: directorymergewindow.cpp:2585 +msgid "Error while creating directory." +msgstr "Fout bij het aanmaken van de directory." + +#: directorymergewindow.cpp:2608 directorymergewindow.cpp:2725 +msgid "Dest" +msgstr "Doel" + +#: directorymergewindow.cpp:2612 directorymergewindow.cpp:2650 +msgid "Dir" +msgstr "Directory" + +#: directorymergewindow.cpp:2613 +msgid "Type" +msgstr "Type" + +#: directorymergewindow.cpp:2614 +msgid "Size" +msgstr "Grootte" + +#: directorymergewindow.cpp:2615 +msgid "Attr" +msgstr "Attr" + +#: directorymergewindow.cpp:2616 +msgid "Last Modification" +msgstr "Laatste wijziging" + +#: directorymergewindow.cpp:2617 +msgid "Link-Destination" +msgstr "Koppelingsbestemming" + +#: directorymergewindow.cpp:2667 +msgid "not available" +msgstr "niet beschikbaar" + +#: directorymergewindow.cpp:2687 +msgid "A (Dest): " +msgstr "A (doel): " + +#: directorymergewindow.cpp:2690 +msgid "A (Base): " +msgstr "A (basis): " + +#: directorymergewindow.cpp:2696 +msgid "B (Dest): " +msgstr "B (doel): " + +#: directorymergewindow.cpp:2704 +msgid "C (Dest): " +msgstr "C (doel): " + +#: directorymergewindow.cpp:2710 +msgid "Dest: " +msgstr "Doel: " + +#: directorymergewindow.cpp:2775 +msgid "Save Directory Merge State As..." +msgstr "Staat van directorypen samenvoegen opslaan als..." + +#: directorymergewindow.cpp:2862 +msgid "Start/Continue Directory Merge" +msgstr "Directorysamenvoeging starten/voortzetten" + +#: directorymergewindow.cpp:2863 +msgid "Run Operation for Current Item" +msgstr "Handeling uitvoeren voor huidig item" + +#: directorymergewindow.cpp:2864 +msgid "Compare Selected File" +msgstr "Geselecteerde bestand vergelijken" + +#: directorymergewindow.cpp:2865 +msgid "Merge Current File" +msgstr "Huidig bestand samenvoegen" + +#: directorymergewindow.cpp:2866 +msgid "Fold All Subdirs" +msgstr "Alle subdirectorypen invouwen" + +#: directorymergewindow.cpp:2867 +msgid "Unfold All Subdirs" +msgstr "Alle subdirectorypen uitvouwen" + +#: directorymergewindow.cpp:2871 +msgid "Choose A for All Items" +msgstr "Voor alle items A kiezen" + +#: directorymergewindow.cpp:2872 +msgid "Choose B for All Items" +msgstr "Voor alle items B kiezen" + +#: directorymergewindow.cpp:2873 +msgid "Choose C for All Items" +msgstr "Voor alle items C kiezen" + +#: directorymergewindow.cpp:2874 +msgid "Auto-Choose Operation for All Items" +msgstr "Handeling voor alle items automatisch kiezen" + +#: directorymergewindow.cpp:2875 +msgid "No Operation for All Items" +msgstr "Geen handeling voor alle items" + +#: directorymergewindow.cpp:2880 +msgid "Show Identical Files" +msgstr "Identieke bestanden tonen" + +#: directorymergewindow.cpp:2881 +msgid "Show Different Files" +msgstr "Verschillende bestanden tonen" + +#: directorymergewindow.cpp:2882 +msgid "Show Files only in A" +msgstr "Bestanden alleen in A tonen" + +#: directorymergewindow.cpp:2883 +msgid "Show Files only in B" +msgstr "Bestanden alleen in B tonen" + +#: directorymergewindow.cpp:2884 +msgid "Show Files only in C" +msgstr "Bestanden alleen in C tonen" + +#: directorymergewindow.cpp:2888 +msgid "Compare Explicitly Selected Files" +msgstr "Expliciet geselecteerde bestand vergelijken" + +#: directorymergewindow.cpp:2889 +msgid "Merge Explicitly Selected Files" +msgstr "Expliciet geselecteerde bestanden samenvoegen" + +#: directorymergewindow.cpp:2891 directorymergewindow.cpp:2898 +msgid "Do Nothing" +msgstr "Niets doen" + +#: directorymergewindow.cpp:2892 +msgid "A" +msgstr "A" + +#: directorymergewindow.cpp:2893 +msgid "B" +msgstr "B" + +#: directorymergewindow.cpp:2894 +msgid "C" +msgstr "C" + +#: directorymergewindow.cpp:2903 +msgid "Delete A && B" +msgstr "A && B verwijderen" + +#: directorymergewindow.cpp:2906 +msgid "Merge to A && B" +msgstr "Samenvoegen met A && B" + +#: fileaccess.cpp:595 +msgid "" +"While trying to make a backup, deleting an older backup failed. \n" +"Filename: " +msgstr "" +"Het wissen van een oudere reservekopie is mislukt tijdens het aanmaken van de " +"nieuwe reservekopie.\n" +"Bestandsnaam: " + +#: fileaccess.cpp:602 +msgid "" +"While trying to make a backup, renaming failed. \n" +"Filenames: " +msgstr "" +"Tijdens het aanmaken van een reservekopie is het hernoemen mislukt. \n" +"Bestandsnamen: " + +#: fileaccess.cpp:624 +#, c-format +msgid "Getting file status: %1" +msgstr "Bestandstatus opvragen: %1" + +#: fileaccess.cpp:667 +#, c-format +msgid "Reading file: %1" +msgstr "Bestand lezen: %1" + +#: fileaccess.cpp:703 +#, c-format +msgid "Writing file: %1" +msgstr "Bestand schrijven: %1" + +#: fileaccess.cpp:731 +msgid "Out of memory" +msgstr "Onvoldoende geheugen" + +#: fileaccess.cpp:766 +#, c-format +msgid "Making directory: %1" +msgstr "Directory aanmaken: %1" + +#: fileaccess.cpp:786 +#, c-format +msgid "Removing directory: %1" +msgstr "Directory verwijderen: %1" + +#: fileaccess.cpp:801 +#, c-format +msgid "Removing file: %1" +msgstr "Bestand verwijderen: %1" + +#: fileaccess.cpp:817 +msgid "Creating symbolic link: %1 -> %2" +msgstr "Symbolische koppeling aanmaken: %1 -> %2" + +#: fileaccess.cpp:843 +msgid "Renaming file: %1 -> %2" +msgstr "Bestand hernoemen: %1 -> %2" + +#: fileaccess.cpp:879 +msgid "Copying file: %1 -> %2" +msgstr "Bestand kopiëren: %1 -> %2" + +#: fileaccess.cpp:893 +#, c-format +msgid "" +"Error during file copy operation: Opening file for reading failed. Filename: %1" +msgstr "" +"Fout tijdens bestanden kopiëren: het openen van het bestand is mislukt.\n" +"Bestandsnaam: %1" + +#: fileaccess.cpp:899 +#, c-format +msgid "" +"Error during file copy operation: Opening file for writing failed. Filename: %1" +msgstr "" +"Fout tijdens bestanden kopiëren: het bestand kon niet worden opgeslagen.\n" +"Bestandsnaam: %1" + +#: fileaccess.cpp:914 +#, c-format +msgid "Error during file copy operation: Reading failed. Filename: %1" +msgstr "" +"Fout tijdens bestanden kopiëren: het openen is mislukt.\n" +"Bestandsnaam: %1" + +#: fileaccess.cpp:923 +#, c-format +msgid "Error during file copy operation: Writing failed. Filename: %1" +msgstr "" +"Fout tijdens bestanden kopiëren: het opslaan is mislukt.\n" +"Bestandsnaam: %1" + +#: fileaccess.cpp:1219 +msgid "Reading directory: " +msgstr "Directory lezen: " + +#: fileaccess.cpp:1348 +#, c-format +msgid "Listing directory: %1" +msgstr "Directory inlezen: %1" + +#: kdiff3.cpp:142 +msgid "Current Configuration:" +msgstr "Huidige configuratie:" + +#: kdiff3.cpp:147 +msgid "Config Option Error:" +msgstr "Fout bij configuratie-optie:" + +#: kdiff3.cpp:187 +msgid "Option --auto used, but no output file specified." +msgstr "Optie '--auto' is gebruikt, maar er is geen uitvoerbestand opgegeven." + +#: kdiff3.cpp:323 +msgid "Option --auto ignored for directory comparison." +msgstr "Optie '--auto' is genegeerd voor directorypenvergelijking." + +#: kdiff3.cpp:359 +msgid "Saving failed." +msgstr "Opslag is mislukt." + +#: kdiff3.cpp:386 pdiff.cpp:1041 pdiff.cpp:1112 +msgid "Opening of these files failed:" +msgstr "Het openen van deze bestanden is mislukt:" + +#: kdiff3.cpp:395 +msgid "File Open Error" +msgstr "Fout bij bestanden openen" + +#: kdiff3.cpp:418 +msgid "Opens documents for comparison..." +msgstr "Opent documenten voor vergelijking..." + +#: kdiff3.cpp:423 +msgid "Saves the merge result. All conflicts must be solved!" +msgstr "" +"Slaat het samenvoegresultaat op. Alle conflicten dienen te worden opgelost!" + +#: kdiff3.cpp:425 +msgid "Saves the current document as..." +msgstr "Slaat het huidige document op als..." + +#: kdiff3.cpp:427 +msgid "Print the differences" +msgstr "Verschillen afdrukken" + +#: kdiff3.cpp:429 +msgid "Quits the application" +msgstr "Sluit de toepassing" + +#: kdiff3.cpp:431 +msgid "Cuts the selected section and puts it to the clipboard" +msgstr "Knipt de geselecteerde sectie uit en plaatst deze op het klembord" + +#: kdiff3.cpp:433 +msgid "Copies the selected section to the clipboard" +msgstr "Kopieert de geselecteerde sectie naar het klembord" + +#: kdiff3.cpp:435 +msgid "Pastes the clipboard contents to actual position" +msgstr "Plakt de inhoud van het klembord op de huidige cursorpositie" + +#: kdiff3.cpp:437 +msgid "Select everything in current window" +msgstr "Alles in huidig venster selecteren" + +#: kdiff3.cpp:439 +msgid "Search for a string" +msgstr "Tekst opzoeken" + +#: kdiff3.cpp:441 +msgid "Search again for the string" +msgstr "Opnieuw zoeken" + +#: kdiff3.cpp:443 +msgid "Enables/disables the toolbar" +msgstr "Activeert/deactiveert de werkbalk" + +#: kdiff3.cpp:445 +msgid "Enables/disables the statusbar" +msgstr "Activeert/deactiveert de statusbalk" + +#: kdiff3.cpp:449 +msgid "Configure KDiff3..." +msgstr "KDiff3 instellen..." + +#: kdiff3.cpp:470 +msgid "Go to Current Delta" +msgstr "Ga naar huidig onderscheid" + +#: kdiff3.cpp:471 +msgid "Go to First Delta" +msgstr "Ga naar eerste onderscheid" + +#: kdiff3.cpp:472 +msgid "Go to Last Delta" +msgstr "Ga naar laatste onderscheid" + +#: kdiff3.cpp:473 +msgid "(Skips white space differences when \"Show White Space\" is disabled.)" +msgstr "" +"(Slaat witruimteverschilen over als \"Witruimte tonen\" is uitgeschakeld.)" + +#: kdiff3.cpp:474 +msgid "" +"(Does not skip white space differences even when \"Show White Space\" is " +"disabled.)" +msgstr "" +"(Slaat witruimteverschillen niet over, zelfs als \"Witruimte tonen\" is " +"uitgeschakeld.)" + +#: kdiff3.cpp:475 +msgid "Go to Previous Delta" +msgstr "Ga naar vorig onderscheid" + +#: kdiff3.cpp:477 +msgid "Go to Next Delta" +msgstr "Ga naar volgend onderscheid" + +#: kdiff3.cpp:479 +msgid "Go to Previous Conflict" +msgstr "Ga naar vorig conflict" + +#: kdiff3.cpp:481 +msgid "Go to Next Conflict" +msgstr "Ga naar volgend conflict" + +#: kdiff3.cpp:483 +msgid "Go to Previous Unsolved Conflict" +msgstr "Ga naar vorig onopgelost conflict" + +#: kdiff3.cpp:485 +msgid "Go to Next Unsolved Conflict" +msgstr "Ga naar volgend onopgelost conflict" + +#: kdiff3.cpp:487 +msgid "Select Line(s) From A" +msgstr "Regel(s) van A selecteren" + +#: kdiff3.cpp:488 +msgid "Select Line(s) From B" +msgstr "Regel(s) van B selecteren" + +#: kdiff3.cpp:489 +msgid "Select Line(s) From C" +msgstr "Regel(s) van C selecteren" + +#: kdiff3.cpp:490 +msgid "Automatically Go to Next Unsolved Conflict After Source Selection" +msgstr "Automatisch naar het volgende onopgeloste conflict gaan" + +#: kdiff3.cpp:492 +msgid "Show Space && Tabulator Characters for Differences" +msgstr "Spaties && tabulator-tekens in verschillen tonen" + +#: kdiff3.cpp:493 +msgid "Show White Space" +msgstr "Witruimte tonen" + +#: kdiff3.cpp:495 +msgid "Show Line Numbers" +msgstr "Regelnummering tonen" + +#: kdiff3.cpp:496 +msgid "Choose A Everywhere" +msgstr "A overal kiezen" + +#: kdiff3.cpp:497 +msgid "Choose B Everywhere" +msgstr "B overal kiezen" + +#: kdiff3.cpp:498 +msgid "Choose C Everywhere" +msgstr "C overal kiezen" + +#: kdiff3.cpp:499 +msgid "Choose A for All Unsolved Conflicts" +msgstr "A voor alle onopgeloste conflicten kiezen" + +#: kdiff3.cpp:500 +msgid "Choose B for All Unsolved Conflicts" +msgstr "B voor alle onopgeloste conflicten kiezen" + +#: kdiff3.cpp:501 +msgid "Choose C for All Unsolved Conflicts" +msgstr "C voor alle onopgeloste conflicten kiezen" + +#: kdiff3.cpp:502 +msgid "Choose A for All Unsolved Whitespace Conflicts" +msgstr "A voor alle onopgeloste witruimteconflicten kiezen" + +#: kdiff3.cpp:503 +msgid "Choose B for All Unsolved Whitespace Conflicts" +msgstr "B voor alle onopgeloste witruimteconflicten kiezen" + +#: kdiff3.cpp:504 +msgid "Choose C for All Unsolved Whitespace Conflicts" +msgstr "C voor alle onopgeloste witruimteconflicten kiezen" + +#: kdiff3.cpp:505 +msgid "Automatically Solve Simple Conflicts" +msgstr "Automatisch eenvoudige conflicten oplossen" + +#: kdiff3.cpp:506 +msgid "Set Deltas to Conflicts" +msgstr "Elk onderscheid maken bij conflicten" + +#: kdiff3.cpp:507 +msgid "Run Regular Expression Auto Merge" +msgstr "Automatisch samenvoegen d.m.v. reguliere expressie uitvoeren" + +#: kdiff3.cpp:508 +msgid "Automatically Solve History Conflicts" +msgstr "Automatisch geschiedenisconflicten oplossen" + +#: kdiff3.cpp:509 +msgid "Split Diff At Selection" +msgstr "Vergelijking bij selectie splitsen" + +#: kdiff3.cpp:510 +msgid "Join Selected Diffs" +msgstr "Geselecteerde verschillen samenvoegen" + +#: kdiff3.cpp:512 +msgid "Show Window A" +msgstr "Venster A tonen" + +#: kdiff3.cpp:513 +msgid "Show Window B" +msgstr "Venster B tonen" + +#: kdiff3.cpp:514 +msgid "Show Window C" +msgstr "Venster C tonen" + +#: kdiff3.cpp:515 kdiff3.cpp:526 +msgid "Focus Next Window" +msgstr "Focus op volgend venster zetten" + +#: kdiff3.cpp:517 +msgid "Normal Overview" +msgstr "Normaal overzicht" + +#: kdiff3.cpp:518 +msgid "A vs. B Overview" +msgstr "A vs B overzicht" + +#: kdiff3.cpp:519 +msgid "A vs. C Overview" +msgstr "A vs C overzicht" + +#: kdiff3.cpp:520 +msgid "B vs. C Overview" +msgstr "B vs C overzicht" + +#: kdiff3.cpp:521 +msgid "Word Wrap Diff Windows" +msgstr "Regels afbreken in vensters met verschillen" + +#: kdiff3.cpp:522 +msgid "Add Manual Diff Alignment" +msgstr "Handmatige uitlijning van vergelijking toevoegen" + +#: kdiff3.cpp:523 +msgid "Clear All Manual Diff Alignments" +msgstr "Alle handmatige uitlijningen van vergelijkingen wissen" + +#: kdiff3.cpp:528 +msgid "Focus Prev Window" +msgstr "Focus op vorig venster zetten" + +#: kdiff3.cpp:529 +msgid "Toggle Split Orientation" +msgstr "Splitsen van vensters omschakelen" + +#: kdiff3.cpp:531 +msgid "Dir && Text Split Screen View" +msgstr "Directory- en tekstweergave splitsen in hoofdvenster" + +#: kdiff3.cpp:533 +msgid "Toggle Between Dir && Text View" +msgstr "Tussen directory- en tekstweergave wisselen" + +#: kdiff3.cpp:582 pdiff.cpp:1712 +msgid "The merge result hasn't been saved." +msgstr "Het resultaat van de samenvoeging is niet opgeslagen." + +#: kdiff3.cpp:583 +msgid "Save && Quit" +msgstr "Opslaan && afsluiten" + +#: kdiff3.cpp:583 +msgid "Quit Without Saving" +msgstr "Afsluiten zonder opslag" + +#: kdiff3.cpp:591 pdiff.cpp:1721 +msgid "Saving the merge result failed." +msgstr "De opslag van het resultaat van de samenvoeging is mislukt." + +#: kdiff3.cpp:602 pdiff.cpp:978 +msgid "" +"You are currently doing a directory merge. Are you sure, you want to abort?" +msgstr "" +"U bent momenteel bezig met het samenvoegen van directorypen. Wilt u werkelijk " +"afbreken?" + +#: kdiff3.cpp:625 +msgid "Saving file..." +msgstr "Bestand wordt opgeslagen..." + +#: kdiff3.cpp:642 +msgid "Saving file with a new filename..." +msgstr "Bestand wordt opgeslagen met een nieuwe naam..." + +#: kdiff3.cpp:732 +msgid "Printing..." +msgstr "Afdrukken..." + +#: kdiff3.cpp:738 kdiff3.cpp:900 +msgid "Printing aborted." +msgstr "Afdrukken afgebroken." + +#: kdiff3.cpp:870 +msgid "Selection" +msgstr "Selectie" + +#: kdiff3.cpp:896 +msgid "Printing completed." +msgstr "Afdrukken is voltooid." + +#: kdiff3.cpp:906 +msgid "Exiting..." +msgstr "Programma wordt afgesloten..." + +#: kdiff3.cpp:918 +msgid "Toggling toolbar..." +msgstr "Werkbalk aan/uit..." + +#: kdiff3.cpp:939 +msgid "Toggle the statusbar..." +msgstr "Statusbalk aan/uit..." + +#: kdiff3_part.cpp:155 kdiff3_part.cpp:224 +msgid "Couldn't find files for comparison." +msgstr "De bestanden om te vergelijken zijn niet gevonden." + +#: kdiff3_part.cpp:291 +msgid "KDiff3Part" +msgstr "KDiff3Part" + +#: kdiff3_shell.cpp:78 +msgid "" +"Could not find our part!\n" +"This usually happens due to an installation problem. Please read the " +"README-file in the source package for details." +msgstr "" +"Het KPart is niet gevonden.\n" +"Dit doet zich meestal voor door een installatieprobleem. Lees a.u.b. het " +"README-bestand van het broncodepakket voor meer details." + +#: main.cpp:35 +msgid "Tool for Comparison and Merge of Files and Directories" +msgstr "" +"Hulpmiddel voor het vergelijken en samenvoegen van bestanden en directorypen" + +#: main.cpp:40 +msgid "Merge the input." +msgstr "Invoer samenvoegen." + +#: main.cpp:42 +msgid "Explicit base file. For compatibility with certain tools." +msgstr "" +"Expliciet basisbestand. Voor compatibiliteit met sommige hulpprogramma's." + +#: main.cpp:44 +msgid "Output file. Implies -m. E.g.: -o newfile.txt" +msgstr "Uitvoerbestand. -m is inbegrepen. Bijv.: -o nieuwbestand.txt" + +#: main.cpp:45 +msgid "Output file, again. (For compatibility with certain tools.)" +msgstr "" +"Uitvoerbestand, opnieuw (voor compatibiliteit met sommige hulpprogramma's)." + +#: main.cpp:46 +msgid "No GUI if all conflicts are auto-solvable. (Needs -o file)" +msgstr "" +"Geen grafisch venster als alle conflicten automatisch oplosbaar zijn ('-o " +"bestand' is nodig)." + +#: main.cpp:47 +msgid "Don't solve conflicts automatically. (For compatibility...)" +msgstr "Conflicten niet automatisch oplossen (voor compatibiliteit ...)." + +#: main.cpp:48 +msgid "Visible name replacement for input file 1 (base)." +msgstr "Zichtbare naamvervanging voor invoerbestand 1 (basis)." + +#: main.cpp:49 +msgid "Visible name replacement for input file 2." +msgstr "Zichtbare naamvervanging voor invoerbestand 2." + +#: main.cpp:50 +msgid "Visible name replacement for input file 3." +msgstr "Zichtbare naamvervanging voor invoerbestand 3." + +#: main.cpp:52 +msgid "Alternative visible name replacement. Supply this once for every input." +msgstr "" +"Alternatieve zichtbare naamvervanging. Ditmaal voor elke invoer opgeven." + +#: main.cpp:53 +msgid "" +"Override a config setting. Use once for every setting. E.g.: --cs " +"\"AutoAdvance=1\"" +msgstr "" +"Omzeil een instelling. Gebruik dit eenmalig voor elke instelling. Bijv. --cs " +"\"AutoAdvance=1\"" + +#: main.cpp:54 +msgid "Show list of config settings and current values." +msgstr "Een lijst tonen met instellingen en huidige waarden." + +#: main.cpp:55 +msgid "Use a different config file." +msgstr "Een ander configuratiebestand gebruiken." + +#: main.cpp:59 +msgid "file1 to open (base, if not specified via --base)" +msgstr "" +"Eerste bestand om te openen (basis, indien niet opgegeven met '--base')." + +#: main.cpp:60 +msgid "file2 to open" +msgstr "Tweede bestand om te openen" + +#: main.cpp:61 +msgid "file3 to open" +msgstr "Derde bestand om te openen" + +#: main.cpp:93 +msgid "Ignored. (User defined.)" +msgstr "Genegeerd. (Gebruikergedefinieerd.)" + +#. i18n: file kdiff3_part.rc line 16 +#: main.cpp:173 rc.cpp:9 +#, no-c-format +msgid "KDiff3" +msgstr "KDiff3" + +#: main.cpp:186 +msgid "+ Many thanks to those who reported bugs and contributed ideas!" +msgstr "En iedereen bedankt die fouten heeft gemeld en met ideeën kwam!" + +#: mergeresultwindow.cpp:136 mergeresultwindow.cpp:939 +#: mergeresultwindow.cpp:953 mergeresultwindow.cpp:965 +#: mergeresultwindow.cpp:977 +msgid "Number of remaining unsolved conflicts: %1 (of which %2 are whitespace)" +msgstr "" +"Aantal overgebleven onopgeloste conflicten: %1 (waarvan %2 witruimtes zijn)" + +#: mergeresultwindow.cpp:285 +msgid "" +"The output has been modified.\n" +"If you continue your changes will be lost." +msgstr "" +"De uitvoer is gewijzigd.\n" +"Als u verder gaat zullen uw wijzigingen verloren gaan." + +#: mergeresultwindow.cpp:797 pdiff.cpp:511 +msgid "All input files are binary equal." +msgstr "Alle invoerbestanden zijn binair gelijk." + +#: mergeresultwindow.cpp:799 +msgid "All input files contain the same text." +msgstr "Alle invoerbestanden bevatten dezelfde tekst." + +#: mergeresultwindow.cpp:801 +msgid "" +"Files A and B are binary equal.\n" +msgstr "" +"Bestanden A en B zijn binair gelijk.\n" + +#: mergeresultwindow.cpp:802 +msgid "" +"Files A and B have equal text. \n" +msgstr "" +"Bestanden A en B hebben dezelfde tekst.\n" + +#: mergeresultwindow.cpp:803 +msgid "" +"Files A and C are binary equal.\n" +msgstr "" +"Bestanden A en C zijn binair gelijk.\n" + +#: mergeresultwindow.cpp:804 +msgid "" +"Files A and C have equal text. \n" +msgstr "" +"Bestanden A en C hebben dezelfde tekst.\n" + +#: mergeresultwindow.cpp:805 +msgid "" +"Files B and C are binary equal.\n" +msgstr "" +"Bestanden B en C zijn binair gelijk.\n" + +#: mergeresultwindow.cpp:806 +msgid "" +"Files B and C have equal text. \n" +msgstr "" +"Bestanden B en C hebben dezelfde tekst.\n" + +#: mergeresultwindow.cpp:812 +msgid "Total number of conflicts: " +msgstr "Totaal aantal conflicten: " + +#: mergeresultwindow.cpp:813 +msgid "" +"\n" +"Nr of automatically solved conflicts: " +msgstr "" +"\n" +"Aantal automatisch opgeloste conflicten: " + +#: mergeresultwindow.cpp:814 +msgid "" +"\n" +"Nr of unsolved conflicts: " +msgstr "" +"\n" +"Aantal onopgeloste conflicten: " + +#: mergeresultwindow.cpp:816 +msgid "Conflicts" +msgstr "Conflicten" + +#: mergeresultwindow.cpp:1652 +msgid "" +msgstr "" + +#: mergeresultwindow.cpp:1660 +msgid "" +msgstr "" + +#: mergeresultwindow.cpp:1662 mergeresultwindow.cpp:2427 +msgid "" +msgstr "" + +#: mergeresultwindow.cpp:2635 +msgid "" +"Not all conflicts are solved yet.\n" +"File not saved.\n" +msgstr "" +"Nog niet alle conflicten zijn opgelost.\n" +"Bestand is niet opgeslagen.\n" + +#: mergeresultwindow.cpp:2637 +msgid "Conflicts Left" +msgstr "Er zijn nog onopgeloste conflicten" + +#: mergeresultwindow.cpp:2649 +msgid "" +"\n" +"\n" +"Creating backup failed. File not saved." +msgstr "" +"\n" +"\n" +"Het aanmaken van de reservekopie is mislukt. Het bestand is niet opgeslagen." + +#: mergeresultwindow.cpp:2649 mergeresultwindow.cpp:2689 +msgid "File Save Error" +msgstr "Fout bij opslaan van het bestand" + +#: mergeresultwindow.cpp:2689 +msgid "Error while writing." +msgstr "Fout bij het opslaan." + +#: mergeresultwindow.cpp:3020 +msgid "Output" +msgstr "Uitvoer" + +#: mergeresultwindow.cpp:3032 mergeresultwindow.cpp:3139 +msgid "[Modified]" +msgstr "[Gewijzigd]" + +#: mergeresultwindow.cpp:3039 +msgid "Encoding for saving" +msgstr "Codering voor opslaan" + +#: mergeresultwindow.cpp:3075 mergeresultwindow.cpp:3081 +#: mergeresultwindow.cpp:3087 +msgid "Codec from" +msgstr "Codec van" + +#: optiondialog.cpp:362 +msgid "Unicode, 8 bit" +msgstr "Unicode, 8 bit" + +#: optiondialog.cpp:363 +msgid "Unicode" +msgstr "Unicode" + +#: optiondialog.cpp:364 +msgid "Latin1" +msgstr "Latin1" + +#: optiondialog.cpp:383 +msgid "Change this if non-ASCII characters are not displayed correctly." +msgstr "Verander dit indien niet-ascii tekens niet juist weergegeven worden." + +#: optiondialog.cpp:510 +msgid "Editor & Diff Output Font" +msgstr "Lettertype voor editor & vergelijkingsvenster" + +#: optiondialog.cpp:531 +msgid "Italic font for deltas" +msgstr "Cursief lettertype voor onderscheiden" + +#: optiondialog.cpp:534 +msgid "" +"Selects the italic version of the font for differences.\n" +"If the font doesn't support italic characters, then this does nothing." +msgstr "" +"Selecteert de cursieve versie van het lettertype voor verschillen.\n" +"Indien het lettertype geen cursieve tekens ondersteunt, dan doet deze optie " +"niets." + +#: optiondialog.cpp:542 +msgid "Color" +msgstr "Kleur" + +#: optiondialog.cpp:542 +msgid "Colors Settings" +msgstr "Kleurinstellingen" + +#: optiondialog.cpp:556 +msgid "Editor and Diff Views:" +msgstr "Weergaven voor editor en vergelijkingen:" + +#: optiondialog.cpp:564 +msgid "Foreground color:" +msgstr "Voorgrondkleur:" + +#: optiondialog.cpp:570 +msgid "Background color:" +msgstr "Achtergrondkleur:" + +#: optiondialog.cpp:578 +msgid "Diff background color:" +msgstr "Achtergrondkleur bij verschillen:" + +#: optiondialog.cpp:585 +msgid "Color A:" +msgstr "Kleur voor A:" + +#: optiondialog.cpp:592 +msgid "Color B:" +msgstr "Kleur voor B:" + +#: optiondialog.cpp:599 +msgid "Color C:" +msgstr "Kleur voor C:" + +#: optiondialog.cpp:605 +msgid "Conflict color:" +msgstr "Kleur voor conflicten:" + +#: optiondialog.cpp:612 +msgid "Current range background color:" +msgstr "Achtergrondkleur voor huidig bereik:" + +#: optiondialog.cpp:619 +msgid "Current range diff background color:" +msgstr "Achtergrondkleur voor verschillen in huidig bereik:" + +#: optiondialog.cpp:625 +msgid "Color for manually aligned difference ranges:" +msgstr "Kleur voor handmatig uitgelijnde verschilbereiken:" + +#: optiondialog.cpp:630 +msgid "Directory Comparison View:" +msgstr "Weergave directorypenvergelijking:" + +#: optiondialog.cpp:636 +msgid "Newest file color:" +msgstr "Kleur nieuwste bestand:" + +#: optiondialog.cpp:639 +msgid "" +"Changing this color will only be effective when starting the next directory " +"comparison." +msgstr "" +"Het wijzigen van deze kleur is pas van kracht als u de volgende " +"directoryvergelijking start." + +#: optiondialog.cpp:644 +msgid "Oldest file color:" +msgstr "Kleur oudste bestand:" + +#: optiondialog.cpp:651 +msgid "Middle age file color:" +msgstr "Kleur bestand met gemiddelde leeftijd:" + +#: optiondialog.cpp:658 +msgid "Color for missing files:" +msgstr "Kleur voor ontbrekende bestanden:" + +#: optiondialog.cpp:670 +msgid "Editor" +msgstr "Editor" + +#: optiondialog.cpp:670 +msgid "Editor Behavior" +msgstr "Editorgedrag" + +#: optiondialog.cpp:680 +msgid "Tab inserts spaces" +msgstr "Tab voegt spaties in" + +#: optiondialog.cpp:683 +msgid "" +"On: Pressing tab generates the appropriate number of spaces.\n" +"Off: A Tab-character will be inserted." +msgstr "" +"Aan: de Tab-toets voegt het passende aantal spaties in.\n" +"Uit: een tabulatorteken zal ingevoegd worden." + +#: optiondialog.cpp:689 +msgid "Tab size:" +msgstr "Tabgrootte:" + +#: optiondialog.cpp:694 +msgid "Auto indentation" +msgstr "Automatisch inspringen" + +#: optiondialog.cpp:697 +msgid "" +"On: The indentation of the previous line is used for a new line.\n" +msgstr "" +"Aan: de insprong van de vorige regel wordt gebruikt voor een nieuwe regel.\n" + +#: optiondialog.cpp:701 +msgid "Auto copy selection" +msgstr "Automatische kopieerselectie" + +#: optiondialog.cpp:704 +msgid "" +"On: Any selection is immediately written to the clipboard.\n" +"Off: You must explicitely copy e.g. via Ctrl-C." +msgstr "" +"Aan: elke selectie zal onmiddellijk op het klembord geplaatst worden.\n" +"Uit: kopiëren gebeurt expliciet, bijvoorbeeld via Ctrl-C." + +#: optiondialog.cpp:709 +msgid "Line end style:" +msgstr "Regeleinde:" + +#: optiondialog.cpp:721 +msgid "" +"Sets the line endings for when an edited file is saved.\n" +"DOS/Windows: CR+LF; UNIX: LF; with CR=0D, LF=0A" +msgstr "" +"Stelt de regeleinden in voor als een bewerkt bestand wordt opgeslagen.\n" +"DOS/Windows: CR+LF' UNIX: LF; met CR=0, LF=A" + +#: optiondialog.cpp:732 +msgid "Diff" +msgstr "Verschil" + +#: optiondialog.cpp:732 +msgid "Diff Settings" +msgstr "Instellingen voor verschil" + +#: optiondialog.cpp:743 +msgid "Preserve carriage return" +msgstr "'Carriage return' behouden" + +#: optiondialog.cpp:746 +msgid "" +"Show carriage return characters '\\r' if they exist.\n" +"Helps to compare files that were modified under different operating systems." +msgstr "" +"'Carriage return'-tekens ('\\r') tonen als deze bestaan.\n" +"Helpt bij het vergelijken van bestanden die gewijzigd werden onder " +"verschillende besturingssystemen." + +#: optiondialog.cpp:751 +msgid "Ignore numbers" +msgstr "Getallen negeren" + +#: optiondialog.cpp:754 +msgid "" +"Ignore number characters during line matching phase. (Similar to Ignore white " +"space.)\n" +"Might help to compare files with numeric data." +msgstr "" +"Numerieke tekens negeren tijdens de vergelijkingfase. (Gelijk aan witruimtes " +"negeren.)\n" +"Kan helpen bij het vergelijken van bestanden met numerieke gegevens." + +#: optiondialog.cpp:759 +msgid "Ignore C/C++ comments" +msgstr "C/C++ commentaar negeren" + +#: optiondialog.cpp:761 +msgid "Treat C/C++ comments like white space." +msgstr "C/C++ commentaar als witruimtes behandelen." + +#: optiondialog.cpp:765 +msgid "Ignore case" +msgstr "Geen onderscheid hoofd-/kleine letters" + +#: optiondialog.cpp:768 +msgid "Treat case differences like white space changes. ('a'<=>'A')" +msgstr "" +"Verschil in hoofd-/kleine letters behandelen als witruimteverschillen ('a' <=> " +"'A')" + +#: optiondialog.cpp:772 +msgid "Preprocessor command:" +msgstr "Preprocessorcommando:" + +#: optiondialog.cpp:776 +msgid "User defined pre-processing. (See the docs for details.)" +msgstr "" +"Gebruikergedefinieerde voorbehandeling (zie documentatie voor meer details.)" + +#: optiondialog.cpp:779 +msgid "Line-matching preprocessor command:" +msgstr "Preprocessor-commando alleen voor regelcontroles:" + +#: optiondialog.cpp:783 +msgid "" +"This pre-processor is only used during line matching.\n" +"(See the docs for details.)" +msgstr "" +"Deze preprocessor wordt alleen gebruikt bij regelcontroles.\n" +"(Zie documentatie voor meer details)" + +#: optiondialog.cpp:786 +msgid "Try hard (slower)" +msgstr "Grondig zoeken (trager)" + +#: optiondialog.cpp:789 +msgid "" +"Enables the --minimal option for the external diff.\n" +"The analysis of big files will be much slower." +msgstr "" +"Activeert de optie '--minimal' voor een externe vergelijking.\n" +"De analyse van grote bestanden zal veel trager zijn." + +#: optiondialog.cpp:794 +msgid "Auto advance delay (ms):" +msgstr "Vertraging voor automatisch doorgaan (ms):" + +#: optiondialog.cpp:799 +msgid "" +"When in Auto-Advance mode the result of the current selection is shown \n" +"for the specified time, before jumping to the next conflict. Range: 0-2000 ms" +msgstr "" +"In de modus \"Automatisch doorgaan\" wordt het resultaat van de huidige " +"selectie getoond gedurende de ingestelde tijd, voordat men naar het volgende " +"conflict springt.\n" +"Bereik: 0-2000 ms" + +#: optiondialog.cpp:809 +msgid "Merge Settings" +msgstr "Instellingen samenvoegen" + +#: optiondialog.cpp:822 +msgid "White space 2-file merge default:" +msgstr "Standaardsamenvoeging van witruimtes bij 2 bestanden:" + +#: optiondialog.cpp:826 optiondialog.cpp:839 +msgid "Manual Choice" +msgstr "Handmatige keuze" + +#: optiondialog.cpp:830 optiondialog.cpp:844 +msgid "" +"Allow the merge algorithm to automatically select an input for white-space-only " +"changes." +msgstr "" +"Bij het samenvoegen van bestanden toestaan dat er automatisch een oplossing " +"gekozen wordt voor witruimteconflicten." + +#: optiondialog.cpp:835 +msgid "White space 3-file merge default:" +msgstr "Standaardsamenvoeging van witruimtes bij 3 bestanden:" + +#: optiondialog.cpp:849 +msgid "Automatic Merge Regular Expression" +msgstr "Reguliere expressie voor automatisch samenvoegen" + +#: optiondialog.cpp:858 smalldialogs.cpp:397 +msgid "Auto merge regular expression:" +msgstr "Reguliere expressie voor automatisch samenvoegen:" + +#: optiondialog.cpp:862 +msgid "" +"Regular expression for lines where KDiff3 should automatically choose one " +"source.\n" +"When a line with a conflict matches the regular expression then\n" +"- if available - C, otherwise B will be chosen." +msgstr "" +"Reguliere expressies voor regels waar KDiff3 automatisch voor een bepaalde bron " +"moet kiezen.\n" +"Als een regel met een conflict overeenkomt met de reguliere expressie, dan\n" +" - indien beschikbaar - C, anders wordt B gekozen." + +#: optiondialog.cpp:868 +msgid "Run regular expression auto merge on merge start" +msgstr "Bij starten van samenvoegen automatisch reguliere expressie gebruiken" + +#: optiondialog.cpp:870 +msgid "" +"Run the merge for auto merge regular expressions\n" +"immediately when a merge starts.\n" +msgstr "" +"Onmiddellijk het automatisch samenvoegen beginnen aan de hand\n" +"van reguliere expressies als een samenvoeging wordt gestart.\n" + +#: optiondialog.cpp:875 +msgid "Version Control History Merging" +msgstr "amenvoegen aan de hand van versiebeheergeschiedenis" + +#: optiondialog.cpp:884 smalldialogs.cpp:424 +msgid "History start regular expression:" +msgstr "Reguliere expressie voor begin van geschiedenis:" + +#: optiondialog.cpp:888 +msgid "" +"Regular expression for the start of the version control history entry.\n" +"Usually this line contains the \"$Log$\"-keyword.\n" +"Default value: \".*\\$Log.*\\$.*\"" +msgstr "" +"Reguliere expressie voor begin van de geschiedenis van het versiebeheer.\n" +"Normaal gesproken bevat deze regel het trefwoord \"$Log$\".\n" +"Standaard waarde: \".*\\$Log.*\\$.*\"" + +#: optiondialog.cpp:894 smalldialogs.cpp:453 +msgid "History entry start regular expression:" +msgstr "Reguliere expressie voor begin van geschiedenisitem:" + +#: optiondialog.cpp:906 +msgid "" +"A version control history entry consists of several lines.\n" +"Specify the regular expression to detect the first line (without the leading " +"comment).\n" +"Use parentheses to group the keys you want to use for sorting.\n" +"If left empty, then KDiff3 assumes that empty lines separate history entries.\n" +"See the documentation for details." +msgstr "" +"Een geschiedenisitem van het versiebeheer bevat enkele regels.\n" +"Geef de reguliere expressie op om de eerste regel te detecteren (zonder het " +"voorafgaande commentaar).\n" +"Maak gebruik van haakjes om de sleutels te groeperen die u voor het sorteren " +"wilt gebruiken.\n" +"Wanneer dit wordt leeggelaten zal KDiff3 er van uitgaan dat lege regels de " +"geschiedenisitems scheidt.\n" +"Raadpleeg de documentatie voor meer details." + +#: optiondialog.cpp:914 +msgid "History merge sorting" +msgstr "Geschiedenis samenvoegend sorteren" + +#: optiondialog.cpp:916 +msgid "Sort version control history by a key." +msgstr "Geschiedenis versiebeheer sorteren met een sleutel." + +#: optiondialog.cpp:926 +msgid "History entry start sort key order:" +msgstr "Sorteervolgorde van begin van geschiedenisitems:" + +#: optiondialog.cpp:930 +msgid "" +"Each parentheses used in the regular expression for the history start entry\n" +"groups a key that can be used for sorting.\n" +"Specify the list of keys (that are numbered in order of occurrence\n" +"starting with 1) using ',' as separator (e.g. \"4,5,6,1,2,3,7\").\n" +"If left empty, then no sorting will be done.\n" +"See the documentation for details." +msgstr "" +"Ieder koppel haakjes in de reguliere expressie groepeert een sleutel dat " +"gebruikt kan\n" +"worden voor sorteren.\n" +"Geef de lijst met sleutels op (genummerd in de volgorde van hun voorkomen\n" +"beginnend bij 1) met een komma als scheidingsteken (bijv.\"4,5,6,1,2,3,7\").\n" +"Wanneer dit wordt leeggelaten zal er niet gesorteerd worden.\n" +"Raadpleeg de documentatie voor meer details." + +#: optiondialog.cpp:941 +msgid "Merge version control history on merge start" +msgstr "Geschiedenis versiebeheer samenvoegen bij aanvang van samenvoegen" + +#: optiondialog.cpp:943 +msgid "Run version control history automerge on merge start." +msgstr "" +"Automatisch samenvoegen van geschiedenis versiebeheer bij aanvang samenvoegen." + +#: optiondialog.cpp:947 +msgid "Test your regular expressions" +msgstr "Uw reguliere expressies testen" + +#: optiondialog.cpp:952 +msgid "Irrelevant merge command:" +msgstr "Irrelevant samenvoegcommando:" + +#: optiondialog.cpp:956 +msgid "" +"If specified this script is run after automerge\n" +"when no other relevant changes were detected.\n" +"Called with the parameters: filename1 filename2 filename3" +msgstr "" +"Indien opgegeven zal dit script uitgevoerd worden na het automatisch " +"samenvoegen,\n" +"als er geen relevante wijzigingen waren gevonden.\n" +"Wordt aangeroepen met de argumenten: bestandsnaam1 bestandsnaam2 bestandsnaam 3" + +#: optiondialog.cpp:966 +msgid "Directory Merge" +msgstr "Directorysamenvoeging" + +#: optiondialog.cpp:975 +msgid "Recursive directories" +msgstr "Recursieve directorypen" + +#: optiondialog.cpp:977 +msgid "Whether to analyze subdirectories or not." +msgstr "Bepaalt of subdirectorypen wel of niet worden ingelezen." + +#: optiondialog.cpp:979 +msgid "File pattern(s):" +msgstr "Bestandspatroon(en):" + +#: optiondialog.cpp:984 +msgid "" +"Pattern(s) of files to be analyzed. \n" +"Wildcards: '*' and '?'\n" +"Several Patterns can be specified by using the separator: ';'" +msgstr "" +"Patroon(en) van bestanden om in te lezen. \n" +"Jokers: '*' en '?'\n" +"Meerdere patronen kunnen opgegeven worden d.m.v. het scheidingsteken ';'" + +#: optiondialog.cpp:990 +msgid "File-anti-pattern(s):" +msgstr "Bestand antipatroon(en):" + +#: optiondialog.cpp:995 +msgid "" +"Pattern(s) of files to be excluded from analysis. \n" +"Wildcards: '*' and '?'\n" +"Several Patterns can be specified by using the separator: ';'" +msgstr "" +"Patroon(en) van bestanden die niet zullen worden ingelezen. \n" +"Jokers: '*' en '?'\n" +"Meerdere patronen kunnen opgegeven worden d.m.v. het scheidingsteken ';'" + +#: optiondialog.cpp:1001 +msgid "Dir-anti-pattern(s):" +msgstr "Directory antipatroon(en):" + +#: optiondialog.cpp:1006 +msgid "" +"Pattern(s) of directories to be excluded from analysis. \n" +"Wildcards: '*' and '?'\n" +"Several Patterns can be specified by using the separator: ';'" +msgstr "" +"Patroon(en) van directorypen die niet zullen worden ingelezen. \n" +"Jokers: '*' en '?'\n" +"Meerdere patronen kunnen opgegeven worden d.m.v. het scheidingsteken. ';'" + +#: optiondialog.cpp:1012 +msgid "Use .cvsignore" +msgstr ".cvsignore gebruiken" + +#: optiondialog.cpp:1015 +msgid "" +"Extends the antipattern to anything that would be ignored by CVS.\n" +"Via local \".cvsignore\"-files this can be directory specific." +msgstr "" +"Breidt het antipatroon uit met alles dat genegeerd zou worden door CVS.\n" +"Via lokale \".cvsignore\"-bestanden kan dit directoryspecifiek zijn." + +#: optiondialog.cpp:1020 +msgid "Find hidden files and directories" +msgstr "Verborgen bestanden en directorypen zoeken" + +#: optiondialog.cpp:1023 +msgid "Finds files and directories with the hidden attribute." +msgstr "Zoekt naar verborgen bestanden en directorypen." + +#: optiondialog.cpp:1025 +msgid "Finds files and directories starting with '.'." +msgstr "Zoekt naar bestanden en directorypen die beginnen met '.'." + +#: optiondialog.cpp:1029 +msgid "Follow file links" +msgstr "Bestandskoppelingen volgen" + +#: optiondialog.cpp:1032 +msgid "" +"On: Compare the file the link points to.\n" +"Off: Compare the links." +msgstr "" +"Aan: vergelijk het bestand naarwaar de koppeling verwijst.\n" +"Uit: vergelijk de koppelingen." + +#: optiondialog.cpp:1037 +msgid "Follow directory links" +msgstr "Directorykoppelingen volgen" + +#: optiondialog.cpp:1040 +msgid "" +"On: Compare the directory the link points to.\n" +"Off: Compare the links." +msgstr "" +"Aan: vergelijk de directory naarwaar de koppeling verwijst.\n" +"Uit: vergelijk de koppeling." + +#: optiondialog.cpp:1056 +msgid "Case sensitive filename comparison" +msgstr "Hoofdlettergevoelige bestandsnaamvergelijking" + +#: optiondialog.cpp:1059 +msgid "" +"The directory comparison will compare files or directories when their names " +"match.\n" +"Set this option if the case of the names must match. (Default for Windows is " +"off, otherwise on.)" +msgstr "" +"De directorypenvergelijking zal bestanden en directorypen vergelijken als de " +"namen ervan overeen komen.\n" +"Schakel deze optie in als ook het gebruik van hoofd-/kleine letters overeen " +"moet komen. (Standaard voor Windows is uit, anders aan.)" + +#: optiondialog.cpp:1063 +msgid "File Comparison Mode" +msgstr "Bestandsvergelijkingsmodus" + +#: optiondialog.cpp:1067 +msgid "Binary comparison" +msgstr "Binaire vergelijking" + +#: optiondialog.cpp:1068 +msgid "Binary comparison of each file. (Default)" +msgstr "Binaire vergelijking van elk bestand (standaard)" + +#: optiondialog.cpp:1070 +msgid "Full analysis" +msgstr "Volledige analyse" + +#: optiondialog.cpp:1071 +msgid "" +"Do a full analysis and show statistics information in extra columns.\n" +"(Slower than a binary comparison, much slower for binary files.)" +msgstr "" +"Doe een volledige analyse en toon de statistieken in extra kolommen.\n" +"(Trager dan een binaire vergelijking, veel trager bij binaire bestanden.)" + +#: optiondialog.cpp:1074 +msgid "Trust the modification date (unsafe)" +msgstr "Wijzigingsdatum vertrouwen (onveilig)" + +#: optiondialog.cpp:1075 +msgid "" +"Assume that files are equal if the modification date and file length are " +"equal.\n" +"Useful for big directories or slow networks." +msgstr "" +"Gaat er van uit dat de bestanden gelijk zijn als de wijzigingsdatum en de " +"bestandsgroottes gelijk zijn.\n" +"Nuttig voor grote directorypen en trage netwerken." + +#: optiondialog.cpp:1078 +msgid "Trust the size (unsafe)" +msgstr "Grootte vertrouwen (onveilig)" + +#: optiondialog.cpp:1079 +msgid "" +"Assume that files are equal if their file lengths are equal.\n" +"Useful for big directories or slow networks when the date is modified during " +"download." +msgstr "" +"Gaat er van uit dat bestanden gelijk zijn als de bestandsgroottes gelijk zijn.\n" +"Nuttig voor grote directorypen en trage netwerken wanneer de datum verandert " +"tijdens een download." + +#: optiondialog.cpp:1083 +msgid "Synchronize directories" +msgstr "Directorypen synchroniseren" + +#: optiondialog.cpp:1086 +msgid "" +"Offers to store files in both directories so that\n" +"both directories are the same afterwards.\n" +"Works only when comparing two directories without specifying a destination." +msgstr "" +"Bestanden worden in beide directorypen opgeslagen zodat beide achteraf " +"hetzelfde zijn.\n" +"Werkt alleen wanneer twee directorypen vergeleken worden zonder dat er een " +"bestemming is opgegeven." + +#: optiondialog.cpp:1092 +msgid "White space differences considered equal" +msgstr "Witruimteverschillen worden als gelijk beschouwd" + +#: optiondialog.cpp:1095 +msgid "" +"If files differ only by white space consider them equal.\n" +"This is only active when full analysis is chosen." +msgstr "" +"Als bestanden alleen qua witruimtes van elkaar verschillen worden ze als gelijk " +"beschouwd.\n" +"Dit is alleen actief als volledige analyse is gekozen." + +#: optiondialog.cpp:1101 +msgid "Copy newer instead of merging (unsafe)" +msgstr "Nieuwere bestanden kopiëren in plaats van samenvoegen (onveilig)" + +#: optiondialog.cpp:1104 +msgid "" +"Don't look inside, just take the newer file.\n" +"(Use this only if you know what you are doing!)\n" +"Only effective when comparing two directories." +msgstr "" +"De inhoud niet controleren, enkel het nieuwe bestand nemen.\n" +"(Gebruik dit enkel als u weet wat u doet!)\n" +"Alleen effectief wanneer men twee directorypen met elkaar vergelijkt." + +#: optiondialog.cpp:1109 +msgid "Backup files (.orig)" +msgstr "Reservekopie aanmaken (.orig)" + +#: optiondialog.cpp:1112 +msgid "" +"When a file would be saved over an old file, then the old file\n" +"will be renamed with a '.orig'-extension instead of being deleted." +msgstr "" +"Wanneer een bestand bewaard moet worden over een oud bestand, dan zal het oude " +"bestand worden hernoemd met als extensie '.orig', i.p.v. gewist te worden." + +#: optiondialog.cpp:1176 +msgid "Regional Settings" +msgstr "Regionale instellingen" + +#: optiondialog.cpp:1272 +msgid "Language (restart required)" +msgstr "Taal (herstart vereist)" + +#: optiondialog.cpp:1304 +msgid "" +"Choose the language of the GUI-strings or \"Auto\".\n" +"For a change of language to take place, quit and restart KDiff3." +msgstr "" +"Kies de taal voor de GUI-tekst, of \"Auto\".\n" +"Om de taal te wijzigen dient u KDiff3 te herstarten." + +#: optiondialog.cpp:1322 +msgid "Use the same encoding for everything:" +msgstr "Dezelfde codering gebruiken voor alles:" + +#: optiondialog.cpp:1325 +msgid "" +"Enable this allows to change all encodings by changing the first only.\n" +"Disable this if different individual settings are needed." +msgstr "" +"Schakel dit in dit om alle coderingen te wijzigen door alleen de eerste aan te " +"passen.\n" +"Schakel dit uit als er verschillende individuele instellingen nodig zijn." + +#: optiondialog.cpp:1330 +msgid "Note: Local Encoding is " +msgstr "Opmerking: lokale codering is " + +#: optiondialog.cpp:1334 +msgid "File Encoding for A:" +msgstr "Bestandscodering voor A:" + +#: optiondialog.cpp:1340 +msgid "" +"If enabled then Unicode (UTF-16 or UTF-8) encoding will be detected.\n" +"If the file encoding is not detected then the selected encoding will be used as " +"fallback.\n" +"(Unicode detection depends on the first bytes of a file - the byte order mark " +"\"BOM\".)" +msgstr "" +"Indien ingeschakeld zal Unicode-codering (UTF-16 of UTF-8 worden gedetecteerd.\n" +"Als de bestandscodering niet gedetecteerd wordt zal de geselecteerde codering " +"worden gebruikt om op terug te vallen.\n" +"(Unicode-detectie is afhankelijk van de eerste bites in een bestand - de " +"bytevolgordemarkering \"BOM\".)" + +#: optiondialog.cpp:1344 optiondialog.cpp:1353 optiondialog.cpp:1362 +msgid "Auto Detect Unicode" +msgstr "Unicode autodetecteren" + +#: optiondialog.cpp:1349 +msgid "File Encoding for B:" +msgstr "Bestandscodering voor B:" + +#: optiondialog.cpp:1358 +msgid "File Encoding for C:" +msgstr "Bestandscodering voor C:" + +#: optiondialog.cpp:1367 +msgid "File Encoding for Merge Output and Saving:" +msgstr "Bestandscodering voor samenvoeguitvoer en opslag:" + +#: optiondialog.cpp:1371 +msgid "Auto Select" +msgstr "Automatisch selecteren" + +#: optiondialog.cpp:1374 +msgid "" +"If enabled then the encoding from the input files is used.\n" +"In ambiguous cases a dialog will ask the user to choose the encoding for " +"saving." +msgstr "" +"Indien ingeschakeld zal de codering van de invoerbestanden worden gebruikt.\n" +"Bij twijfelgevallen zult u gevraagd worden welke codering er voor het opslaan " +"gebruikt moet worden." + +#: optiondialog.cpp:1378 +msgid "File Encoding for Preprocessor Files:" +msgstr "Bestandscodering voor preprocessorbestanden:" + +#: optiondialog.cpp:1389 +msgid "Right To Left Language" +msgstr "Rechts-naar-links-taal" + +#: optiondialog.cpp:1392 +msgid "" +"Some languages are read from right to left.\n" +"This setting will change the viewer and editor accordingly." +msgstr "" +"Sommige talen worden van rechts naar links gelezen.\n" +"Deze instelling zal de viewer en editor hierop aanpassen." + +#: optiondialog.cpp:1402 +msgid "Integration" +msgstr "Integratie" + +#: optiondialog.cpp:1402 +msgid "Integration Settings" +msgstr "Integratie-instellingen" + +#: optiondialog.cpp:1412 +msgid "Command line options to ignore:" +msgstr "Te negeren commandoregelopties:" + +#: optiondialog.cpp:1417 +msgid "" +"List of command line options that should be ignored when KDiff3 is used by " +"other tools.\n" +"Several values can be specified if separated via ';'\n" +"This will suppress the \"Unknown option\"-error." +msgstr "" +"Lijst van commandoregelopties die zullen worden genegeerd als KDiff3 door " +"andere programma's wordt gebruikt.\n" +"Meerdere waarden kunnen worden opgegeven door ze van elkaar te scheiden met " +"';'\n" +"Dit onderdrukt de foutmelding \"Onbekende optie\"." + +#: optiondialog.cpp:1480 +msgid "" +"You selected a variable width font.\n" +"\n" +"Because this program doesn't handle variable width fonts\n" +"correctly, you might experience problems while editing.\n" +"\n" +"Do you want to continue or do you want to select another font." +msgstr "" +"U hebt een lettertype met variabele breedte gekozen.\n" +"\n" +"Omdat dit programma geen correcte ondersteuning biedt voor dergelijke " +"lettertypen kunt u problemen ondervinden tijdens het bewerken.\n" +"\n" +"Wilt u doorgaan, of wilt u een ander lettertype selecteren?" + +#: optiondialog.cpp:1484 +msgid "Incompatible Font" +msgstr "Incompatibel lettertype" + +#: optiondialog.cpp:1485 +msgid "Continue at Own Risk" +msgstr "Doorgaan op eigen risico" + +#: optiondialog.cpp:1485 +msgid "Select Another Font" +msgstr "Ander lettertype kiezen" + +#: optiondialog.cpp:1521 +msgid "This resets all options. Not only those of the current topic." +msgstr "Dit zet alle opties terug, niet alleen die van het huidige onderwerp." + +#: pdiff.cpp:258 +msgid "PreprocessorCmd: " +msgstr "Preprocessorcommando: " + +#: pdiff.cpp:263 +msgid "" +"The following option(s) you selected might change data:\n" +msgstr "" +"De volgende optie(s) die hebt gekozen kunnen data wijzigen:\n" + +#: pdiff.cpp:264 +msgid "" +"\n" +"Most likely this is not wanted during a merge.\n" +"Do you want to disable these settings or continue with these settings active?" +msgstr "" +"\n" +"Dit is meestal niet gewenst bij een samenvoeging.\n" +"Wilt u deze instellingen uitschakelen of doorgaan met deze instellingen actief?" + +#: pdiff.cpp:266 +msgid "Option Unsafe for Merging" +msgstr "Optie onveilig voor samenvoeging" + +#: pdiff.cpp:267 +msgid "Use These Options During Merge" +msgstr "Deze opties gebruiken tijdens samenvoegen" + +#: pdiff.cpp:267 +msgid "Disable Unsafe Options" +msgstr "Onveilige opties uitschakelen" + +#: pdiff.cpp:297 +msgid "Loading A" +msgstr "A laden" + +#: pdiff.cpp:301 +msgid "Loading B" +msgstr "B laden" + +#: pdiff.cpp:318 pdiff.cpp:344 +msgid "Diff: A <-> B" +msgstr "Vergelijking: A <-> B" + +#: pdiff.cpp:324 pdiff.cpp:366 +msgid "Linediff: A <-> B" +msgstr "Regelvergelijking: A <-> B" + +#: pdiff.cpp:335 +msgid "Loading C" +msgstr "C laden" + +#: pdiff.cpp:347 +msgid "Diff: B <-> C" +msgstr "Vergelijking: B <-> C" + +#: pdiff.cpp:350 +msgid "Diff: A <-> C" +msgstr "Vergelijking: A <-> C" + +#: pdiff.cpp:369 +msgid "Linediff: B <-> C" +msgstr "Regelvergelijking: B <-> C" + +#: pdiff.cpp:372 +msgid "Linediff: A <-> C" +msgstr "Regelvergelijking: A <-> C" + +#: pdiff.cpp:513 +msgid "All input files contain the same text, but are not binary equal." +msgstr "" +"Alle invoerbestanden bevatten dezelfde tekst, maar zijn binair gezien niet " +"gelijk." + +#: pdiff.cpp:515 pdiff.cpp:517 pdiff.cpp:519 +msgid "" +"Files %1 and %2 are binary equal.\n" +msgstr "" +"Bestanden %1 en %2 zijn binair gelijk.\n" + +#: pdiff.cpp:516 pdiff.cpp:518 pdiff.cpp:520 +msgid "" +"Files %1 and %2 have equal text, but are not binary equal. \n" +msgstr "" +"Bestanden %1 en %2 hebben dezelfde tekst, maar zijn binair gezien ongelijk.\n" + +#: pdiff.cpp:530 +msgid "" +"Some inputfiles don't seem to be pure textfiles.\n" +"Note that the KDiff3-merge was not meant for binary data.\n" +"Continue at your own risk." +msgstr "" +"Sommige invoerbestanden blijken geen pure tekstbestanden te zijn.\n" +"Opmerking: KDiff3 is niet bedoeld voor binaire gegevens.\n" +"U kunt verder gaan op eigen risico." + +#: pdiff.cpp:979 +msgid "Abort" +msgstr "Afbreken" + +#: pdiff.cpp:985 pdiff.cpp:1073 +msgid "Opening files..." +msgstr "Bestanden openen..." + +#: pdiff.cpp:1050 pdiff.cpp:1121 +msgid "File open error" +msgstr "Fout bij openen van bestand" + +#: pdiff.cpp:1153 +msgid "Cutting selection..." +msgstr "Selectie wordt geknipt..." + +#: pdiff.cpp:1174 +msgid "Copying selection to clipboard..." +msgstr "Selectie wordt op het klembord geplaatst..." + +#: pdiff.cpp:1190 +msgid "Inserting clipboard contents..." +msgstr "Klembordinhoud wordt ingevoegd..." + +#: pdiff.cpp:1713 +msgid "Save && Continue" +msgstr "Opslaan && doorgaan" + +#: pdiff.cpp:1713 +msgid "Continue Without Saving" +msgstr "Doorgaan zonder opslaan" + +#: pdiff.cpp:1920 +msgid "Search complete." +msgstr "Zoeken voltooid." + +#: pdiff.cpp:1920 +msgid "Search Complete" +msgstr "Zoeken voltooid" + +#: pdiff.cpp:2144 +msgid "Nothing is selected in either diff input window." +msgstr "Er is niets geselecteerd in beide invoervensters voor de vergelijking." + +#: pdiff.cpp:2144 +msgid "Error while adding manual diff range" +msgstr "Fout bij het toevoegen van handmatig vergelijkingsbereik" + +#. i18n: file kdiff3_part.rc line 4 +#: rc.cpp:3 +#, no-c-format +msgid "&KDiff3" +msgstr "&KDiff3" + +#. i18n: file kdiff3_part.rc line 13 +#: rc.cpp:6 +#, no-c-format +msgid "Configure KDiff3" +msgstr "KDiff3 instellen" + +#. i18n: file kdiff3_shell.rc line 7 +#: rc.cpp:15 +#, no-c-format +msgid "&Directory" +msgstr "&Directory" + +#. i18n: file kdiff3_shell.rc line 30 +#: rc.cpp:18 +#, no-c-format +msgid "Current Item Merge Operation" +msgstr "Samenvoeging van huidig item" + +#. i18n: file kdiff3_shell.rc line 38 +#: rc.cpp:21 +#, no-c-format +msgid "Current Item Sync Operation" +msgstr "Synchronisatie van huidig item" + +#. i18n: file kdiff3_shell.rc line 50 +#: rc.cpp:24 +#, no-c-format +msgid "&Movement" +msgstr "&Navigatie" + +#. i18n: file kdiff3_shell.rc line 61 +#: rc.cpp:27 +#, no-c-format +msgid "D&iffview" +msgstr "Versch&ilweergave" + +#. i18n: file kdiff3_shell.rc line 73 +#: rc.cpp:30 +#, no-c-format +msgid "&Merge" +msgstr "Sa&menvoegen" + +#. i18n: file kdiff3_shell.rc line 95 +#: rc.cpp:33 +#, no-c-format +msgid "&Window" +msgstr "&Venster" + +#: smalldialogs.cpp:53 +msgid "A (Base):" +msgstr "A (basis):" + +#: smalldialogs.cpp:59 smalldialogs.cpp:75 smalldialogs.cpp:91 +#: smalldialogs.cpp:134 +msgid "File..." +msgstr "Bestand..." + +#: smalldialogs.cpp:61 smalldialogs.cpp:77 smalldialogs.cpp:93 +#: smalldialogs.cpp:136 +msgid "Dir..." +msgstr "Directory..." + +#: smalldialogs.cpp:86 +msgid "C (Optional):" +msgstr "C (optioneel):" + +#: smalldialogs.cpp:108 +msgid "Swap/Copy Names ..." +msgstr "Namen kopiëren/wisselen ..." + +#: smalldialogs.cpp:114 smalldialogs.cpp:115 smalldialogs.cpp:116 +msgid "Swap %1<->%2" +msgstr "%1<->%2 omwisselen" + +#: smalldialogs.cpp:117 smalldialogs.cpp:118 smalldialogs.cpp:119 +msgid "Copy %1->Output" +msgstr "%1->uitvoer kopiëren" + +#: smalldialogs.cpp:120 smalldialogs.cpp:121 smalldialogs.cpp:122 +msgid "Swap %1<->Output" +msgstr "%1<->uitvoer omwisselen" + +#: smalldialogs.cpp:129 +msgid "Output (optional):" +msgstr "Uitvoer (optioneel):" + +#: smalldialogs.cpp:158 +msgid "Configure..." +msgstr "Instellen..." + +#: smalldialogs.cpp:347 +msgid "Search text:" +msgstr "Zoektekst:" + +#: smalldialogs.cpp:354 +msgid "Case sensitive" +msgstr "Hoofdlettergevoelig" + +#: smalldialogs.cpp:357 +msgid "Search A" +msgstr "Zoeken in A" + +#: smalldialogs.cpp:362 +msgid "Search B" +msgstr "Zoeken in B" + +#: smalldialogs.cpp:367 +msgid "Search C" +msgstr "Zoeken in C" + +#: smalldialogs.cpp:372 +msgid "Search output" +msgstr "Zoeken in uitvoer" + +#: smalldialogs.cpp:377 +msgid "&Search" +msgstr "&Zoeken" + +#: smalldialogs.cpp:394 +msgid "Regular Expression Tester" +msgstr "Reguliere expressies testen" + +#: smalldialogs.cpp:405 +msgid "Example auto merge line:" +msgstr "Voorbeeld autosamenvoegregel:" + +#: smalldialogs.cpp:407 +msgid "For auto merge test copy a line as used in your files." +msgstr "" +"Voor het testen van automatisch samenvoegen, kopieer een regel die in uw " +"bestanden wordt gebruikt." + +#: smalldialogs.cpp:413 smalldialogs.cpp:442 smalldialogs.cpp:479 +msgid "Match result:" +msgstr "Resultaat van overeenkomsten:" + +#: smalldialogs.cpp:432 +msgid "Example history start line (with leading comment):" +msgstr "Voorbeeld geschiedenisbeginregel (met bijhorend commentaar):" + +#: smalldialogs.cpp:435 +msgid "" +"Copy a history start line as used in your files,\n" +"including the leading comment." +msgstr "" +"Kopieer een geschiedenisbeginregel die u in uw bestanden gebruikt,\n" +"inclusief een voorafgaand commentaar." + +#: smalldialogs.cpp:461 +msgid "History sort key order:" +msgstr "Sorteervolgorde geschiedenis:" + +#: smalldialogs.cpp:469 +msgid "Example history entry start line (without leading comment):" +msgstr "" +"Voorbeeld van beginregel van geschiedenisitem (zonder voorafgaand commentaar):" + +#: smalldialogs.cpp:471 +msgid "" +"Copy a history entry start line as used in your files,\n" +"but omit the leading comment." +msgstr "" +"Kopieer een beginregel van een geschiedenisitem zoals die in uw bestanden wordt " +"gebruikt.\n" +"Voeg echter geen voorafgaand commentaar bij." + +#: smalldialogs.cpp:486 +msgid "Sort key result:" +msgstr "Resulterende sorteersleutel:" + +#: smalldialogs.cpp:537 smalldialogs.cpp:547 smalldialogs.cpp:568 +msgid "Match success." +msgstr "Overeenkomst succesvol" + +#: smalldialogs.cpp:541 smalldialogs.cpp:551 smalldialogs.cpp:574 +msgid "Match failed." +msgstr "Overeenkomst mislukt." + +#: smalldialogs.cpp:559 +msgid "Opening and closing parentheses don't match in regular expression." +msgstr "" +"Er zijn niet evenveel openings- als sluitingshaakjes in de reguliere expressie." diff --git a/po/pl.po b/po/pl.po new file mode 100644 index 0000000..e64d73c --- /dev/null +++ b/po/pl.po @@ -0,0 +1,2560 @@ +# translation of kdiff3.po to polish +# translation of kdiff3.po to Polish +# translation of pl.po to +# translation of pl.po to Polish +# translation of en_GB.po to Polish +# Copyright (C) 2003, 2004, 2005 Free Software Foundation, Inc. +# Tomasz Waleµczak , 2004. +# Tomasz WaleÅ„czak , 2004. +# Michal Rudolf , 2004. +# Marcin Bokszczanin , 2005. +# Krzysztof Lichota , 2005. +# Robert Gomulka , 2005. +# +msgid "" +msgstr "" +"Project-Id-Version: kdiff3\n" +"POT-Creation-Date: 2006-11-05 08:45+0100\n" +"PO-Revision-Date: 2005-12-30 14:10+0100\n" +"Last-Translator: Robert Gomulka \n" +"Language-Team: polish \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: KBabel 1.10.2\n" +"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " +"|| n%100>=20) ? 1 : 2);\n" + +#: _translatorinfo.cpp:1 +msgid "" +"_: NAME OF TRANSLATORS\n" +"Your names" +msgstr "Tomasz WaleÅ„czak, Marcin Bokszczanin" + +#: _translatorinfo.cpp:3 +msgid "" +"_: EMAIL OF TRANSLATORS\n" +"Your emails" +msgstr "tom@w.pl" + +#: diff.cpp:246 +msgid "Writing clipboard data to temp file failed." +msgstr "BÅ‚Ä…d zapisu zawartoÅ›ci schowka do pliku tymczasowego." + +#: diff.cpp:250 +msgid "From Clipboard" +msgstr "ze schowka" + +#: diff.cpp:491 +msgid "" +"Preprocessing possibly failed. Check this command:\n" +"\n" +" %1\n" +"\n" +"The preprocessing command will be disabled now." +msgstr "" +"Przetwarzenie wstÄ™pne nie powiodÅ‚o siÄ™. ProszÄ™ sprawdzić polecenie:\n" +"\n" +" %1\n" +"\n" +"Polecenie przetwarzenia wstÄ™pnego zostanie wyÅ‚Ä…czone." + +#: diff.cpp:526 +msgid "" +"The line-matching-preprocessing possibly failed. Check this command:\n" +"\n" +" %1\n" +"\n" +"The line-matching-preprocessing command will be disabled now." +msgstr "" +"Przetwarzenie wstÄ™pne dopasowywania wierszy nie powiodÅ‚o siÄ™. ProszÄ™ sprawdzić " +"polecenie:\n" +"\n" +" %1\n" +"\n" +"Polecenie przetwarzenia wstÄ™pnego dopasowywania wierszy zostanie wyÅ‚Ä…czone." + +#: diff.cpp:1631 diff.cpp:1645 +msgid "" +"Data loss error:\n" +"If it is reproducable please contact the author.\n" +msgstr "" +"BÅ‚Ä…d utraty danych:\n" +"JeÅ›li jest powtarzalny, to skontaktuj siÄ™ z autorem programu.\n" + +#: diff.cpp:1633 diff.cpp:1647 +msgid "Severe Internal Error" +msgstr "Poważny bÅ‚Ä…d wewnÄ™trzny" + +#: difftextwindow.cpp:1643 kdiff3.cpp:753 +#, fuzzy +msgid "Top line" +msgstr "Nr pierwszej linii na ekranie: %1" + +#: difftextwindow.cpp:1653 +msgid "End" +msgstr "Koniec" + +#: directorymergewindow.cpp:142 +msgid "Mix of links and normal files." +msgstr "Pomieszane dowiÄ…zania i normalne pliki." + +#: directorymergewindow.cpp:149 +msgid "Link: " +msgstr "DowiÄ…zanie: " + +#: directorymergewindow.cpp:157 +msgid "Size. " +msgstr "Rozmiar. " + +#: directorymergewindow.cpp:170 +msgid "Date & Size: " +msgstr "Data & Rozmiar: " + +#: directorymergewindow.cpp:179 directorymergewindow.cpp:185 +msgid "Creating temp copy of %1 failed." +msgstr "Tworzenie tymczasowej kopii %1 nieudane." + +#: directorymergewindow.cpp:196 directorymergewindow.cpp:204 +msgid "Opening %1 failed." +msgstr "Otwieranie %1 nie powiodÅ‚o siÄ™." + +#: directorymergewindow.cpp:208 +msgid "Comparing file..." +msgstr "Porównywanie pliku..." + +#: directorymergewindow.cpp:218 directorymergewindow.cpp:224 +#, c-format +msgid "Error reading from %1" +msgstr "BÅ‚Ä…d czytania z %1" + +#: directorymergewindow.cpp:282 +msgid "Name" +msgstr "Nazwa" + +#: directorymergewindow.cpp:286 +msgid "Operation" +msgstr "Operacja" + +#: directorymergewindow.cpp:287 +msgid "Status" +msgstr "Status" + +#: directorymergewindow.cpp:288 +msgid "Unsolved" +msgstr "NierozwiÄ…zane" + +#: directorymergewindow.cpp:289 +msgid "Solved" +msgstr "RozwiÄ…zane" + +#: directorymergewindow.cpp:290 +msgid "Nonwhite" +msgstr "Nie biaÅ‚y" + +#: directorymergewindow.cpp:291 +msgid "White" +msgstr "BiaÅ‚y" + +#: directorymergewindow.cpp:319 +msgid "" +"You are currently doing a directory merge. Are you sure, you want to abort the " +"merge and rescan the directory?" +msgstr "" +"Obecnie wykonywane jest Å‚Ä…czenie katalogów. JesteÅ› pewny że chcesz przerwać tÄ… " +"operacjÄ™ i ponownie przeskanować katalog?" + +#: directorymergewindow.cpp:320 directorymergewindow.cpp:2868 +msgid "Rescan" +msgstr "Ponowne skanowanie" + +#: directorymergewindow.cpp:320 kdiff3.cpp:603 pdiff.cpp:979 +msgid "Continue Merging" +msgstr "Wznów Å‚Ä…czenie" + +#: directorymergewindow.cpp:462 +msgid "Opening of directories failed:" +msgstr "Otwieranie katalogu nie powiodÅ‚o siÄ™:" + +#: directorymergewindow.cpp:465 +msgid "" +"Dir A \"%1\" does not exist or is not a directory.\n" +msgstr "" +"Katalog A \"%1\" nie istnieje lub nie jest katalogiem.\n" + +#: directorymergewindow.cpp:468 +msgid "" +"Dir B \"%1\" does not exist or is not a directory.\n" +msgstr "" +"Katalog B \"%1\" nie istnieje lub nie jest katalogiem.\n" + +#: directorymergewindow.cpp:471 +msgid "" +"Dir C \"%1\" does not exist or is not a directory.\n" +msgstr "" +"Katalog C \"%1\" nie istnieje lub nie jest katalogiem.\n" + +#: directorymergewindow.cpp:473 +msgid "Directory Open Error" +msgstr "BÅ‚Ä…d otwierania katalogu" + +#: directorymergewindow.cpp:481 +msgid "" +"The destination directory must not be the same as A or B when three directories " +"are merged.\n" +"Check again before continuing." +msgstr "" +"Docelowy katalog nie może być taki sam jak A lub B jeÅ›li Å‚Ä…czone sÄ… trzy " +"katalogi.\n" +"Sprawdź ponownie zanim bÄ™dziesz kontynuować." + +#: directorymergewindow.cpp:483 +msgid "Parameter Warning" +msgstr "Ostrzeżenie co do parametru" + +#: directorymergewindow.cpp:488 +msgid "Scanning directories..." +msgstr "Skanowanie katalogów ..." + +#: directorymergewindow.cpp:537 +msgid "Reading Directory A" +msgstr "Czytanie katalogu A" + +#: directorymergewindow.cpp:559 +msgid "Reading Directory B" +msgstr "Czytanie katalogu B" + +#: directorymergewindow.cpp:581 +msgid "Reading Directory C" +msgstr "Czytanie katalogu C" + +#: directorymergewindow.cpp:607 +msgid "Some subdirectories were not readable in" +msgstr "Niektóre podkatalogi sÄ… nie do odczytu w" + +#: directorymergewindow.cpp:612 +msgid "Check the permissions of the subdirectories." +msgstr "Sprawdź prawa dostÄ™pu do podkatalogów." + +#: directorymergewindow.cpp:646 kdiff3.cpp:552 kdiff3.cpp:636 kdiff3.cpp:661 +#: kdiff3.cpp:934 kdiff3.cpp:955 pdiff.cpp:1059 pdiff.cpp:1131 pdiff.cpp:1169 +#: pdiff.cpp:1185 pdiff.cpp:1215 pdiff.cpp:1226 +msgid "Ready." +msgstr "Gotowe." + +#: directorymergewindow.cpp:660 +msgid "Directory Comparison Status" +msgstr "Status porównywania katalogów" + +#: directorymergewindow.cpp:661 +msgid "Number of subdirectories:" +msgstr "Liczba podkatalogów:" + +#: directorymergewindow.cpp:662 +msgid "Number of equal files:" +msgstr "Liczba identycznych plików:" + +#: directorymergewindow.cpp:663 +msgid "Number of different files:" +msgstr "Liczba różniÄ…cych siÄ™ plików:" + +#: directorymergewindow.cpp:666 +msgid "Number of manual merges:" +msgstr "Liczba rÄ™cznych poÅ‚Ä…czeÅ„:" + +#: directorymergewindow.cpp:802 +msgid "This affects all merge operations." +msgstr "To wpÅ‚ynie na wszystkie operacje Å‚Ä…czenia." + +#: directorymergewindow.cpp:803 +msgid "Changing All Merge Operations" +msgstr "Zmiana wszystkich operacji Å‚Ä…czenia" + +#: directorymergewindow.cpp:803 mergeresultwindow.cpp:287 +msgid "C&ontinue" +msgstr "K&ontynuuj" + +#: directorymergewindow.cpp:1169 +msgid "Processing " +msgstr "W trakcie " + +#: directorymergewindow.cpp:1647 directorymergewindow.cpp:1653 +msgid "To do." +msgstr "Do zrobienia." + +#: directorymergewindow.cpp:1756 directorymergewindow.cpp:2899 +msgid "Copy A to B" +msgstr "Kopiuj A do B" + +#: directorymergewindow.cpp:1757 directorymergewindow.cpp:2900 +msgid "Copy B to A" +msgstr "Kopiuj B do A" + +#: directorymergewindow.cpp:1758 directorymergewindow.cpp:2901 +msgid "Delete A" +msgstr "UsuÅ„ A" + +#: directorymergewindow.cpp:1759 directorymergewindow.cpp:2902 +msgid "Delete B" +msgstr "UsuÅ„ B" + +#: directorymergewindow.cpp:1760 +msgid "Delete A & B" +msgstr "UsuÅ„ A i B" + +#: directorymergewindow.cpp:1761 directorymergewindow.cpp:2904 +msgid "Merge to A" +msgstr "PoÅ‚Ä…cz z A" + +#: directorymergewindow.cpp:1762 directorymergewindow.cpp:2905 +msgid "Merge to B" +msgstr "PoÅ‚Ä…cz z B" + +#: directorymergewindow.cpp:1763 +msgid "Merge to A & B" +msgstr "PoÅ‚Ä…cz z A i B" + +#: directorymergewindow.cpp:1767 directorymergewindow.cpp:2896 +msgid "Delete (if exists)" +msgstr "UsuÅ„ (jeÅ›li istnieje)" + +#: directorymergewindow.cpp:1768 directorymergewindow.cpp:1769 +#: directorymergewindow.cpp:2895 optiondialog.cpp:809 smalldialogs.cpp:102 +msgid "Merge" +msgstr "PoÅ‚Ä…cz" + +#: directorymergewindow.cpp:1768 directorymergewindow.cpp:1769 +msgid "Merge (manual)" +msgstr "PoÅ‚Ä…cz (rÄ™cznie)" + +#: directorymergewindow.cpp:1770 +msgid "Error: Conflicting File Types" +msgstr "BÅ‚Ä…d: Konflikt typów plików" + +#: directorymergewindow.cpp:1771 +msgid "Error: Dates are equal but files are not." +msgstr "BÅ‚Ä…d: Data identyczna ale pliki nie." + +#: directorymergewindow.cpp:1795 directorymergewindow.cpp:1824 +#: directorymergewindow.cpp:1849 +msgid "This operation is currently not possible." +msgstr "Ta operacja jest w tej chwili niemożliwa." + +#: directorymergewindow.cpp:1795 directorymergewindow.cpp:1824 +#: directorymergewindow.cpp:1849 directorymergewindow.cpp:2106 +msgid "Operation Not Possible" +msgstr "Niemożliwa operacja" + +#: directorymergewindow.cpp:1888 +msgid "" +"This should never happen: \n" +"\n" +"mergeResultSaved: m_pMFI=0\n" +"\n" +"If you know how to reproduce this, please contact the program author." +msgstr "" +"To nie powinno siÄ™ wydarzyć: \n" +"\n" +"mergeResultSaved: m_pMFI=0\n" +"\n" +"JeÅ›li wiesz jak to powtórzyć, proszÄ™ skontaktować siÄ™ z autorem programu." + +#: directorymergewindow.cpp:1888 +msgid "Program Error" +msgstr "BÅ‚Ä…d programu" + +#: directorymergewindow.cpp:1899 +msgid "" +"An error occurred while copying.\n" +msgstr "" +"WystÄ…piÅ‚ bÅ‚Ä…d w trakcie kopiowania.\n" + +#: directorymergewindow.cpp:1900 directorymergewindow.cpp:2306 +msgid "Merge Error" +msgstr "BÅ‚Ä…d poÅ‚Ä…czenia" + +#: directorymergewindow.cpp:1905 directorymergewindow.cpp:2311 +msgid "Error." +msgstr "BÅ‚Ä…d." + +#: directorymergewindow.cpp:1910 directorymergewindow.cpp:2202 +#: directorymergewindow.cpp:2242 +msgid "Done." +msgstr "Zrobione." + +#: directorymergewindow.cpp:1933 +msgid "Not saved." +msgstr "Niezapisane." + +#: directorymergewindow.cpp:1968 +msgid "Unknown merge operation. (This must never happen!)" +msgstr "Nieznana operacja poÅ‚Ä…czenia. (To siÄ™ nigdy nie powinno wydarzyć!)" + +#: directorymergewindow.cpp:2000 +msgid "Unknown merge operation." +msgstr "Nieznana operacja Å‚Ä…czenia." + +#: directorymergewindow.cpp:2015 +msgid "" +"The merge is about to begin.\n" +"\n" +"Choose \"Do it\" if you have read the instructions and know what you are " +"doing.\n" +"Choosing \"Simulate it\" will tell you what would happen.\n" +"\n" +"Be aware that this program still has beta status and there is NO WARRANTY " +"whatsoever! Make backups of your vital data!" +msgstr "" +"RozpoczÄ™cie operacji poÅ‚Ä…czenia.\n" +"\n" +"Wybierz \"Zrób to\" jeÅ›li czytaÅ‚eÅ› instrukcjÄ™ i wiesz co robisz.\n" +"Wybierz \"Symuluj\" otrzymasz informacje co otrzymasz\n" +"\n" +"Miej na uwadze że program nadal jest wersji beta i BRAK GWARANCJI co do wyników " +"dziaÅ‚ania! Wykonaj kopie zapasowe swoich istotnych danych!" + +#: directorymergewindow.cpp:2020 +msgid "Starting Merge" +msgstr "RozpoczÄ™cie poÅ‚Ä…czenia" + +#: directorymergewindow.cpp:2020 +msgid "Do It" +msgstr "Wykonaj" + +#: directorymergewindow.cpp:2020 +msgid "Simulate It" +msgstr "Symuluj" + +#: directorymergewindow.cpp:2046 +msgid "" +"The highlighted item has a different type in the different directories. Select " +"what to do." +msgstr "" +"PodÅ›wietlona pozycja jest innego typu w innym katalogu. Wybierz co zrobić." + +#: directorymergewindow.cpp:2055 +msgid "" +"The modification dates of the file are equal but the files are not. Select what " +"to do." +msgstr "" +"Data modyfikacji plików jest taka sama ale pliki nie. Wybierz co zrobić." + +#: directorymergewindow.cpp:2106 +msgid "" +"This operation is currently not possible because directory merge is currently " +"running." +msgstr "" +"Ta operacja jest nie możliwa do wykonania w tej chwili gdyż obecnie wykonywana " +"jest operacja poÅ‚Ä…czenia katalogów." + +#: directorymergewindow.cpp:2166 +msgid "" +"There was an error in the last step.\n" +"Do you want to continue with the item that caused the error or do you want to " +"skip this item?" +msgstr "" +"W ostatnim kroku wystÄ…piÅ‚ bÅ‚Ä…d.\n" +"Chcesz kontynuować z pozycja która powoduje bÅ‚Ä…d czy tez pominąć tÄ… pozycjÄ™?" + +#: directorymergewindow.cpp:2168 +msgid "Continue merge after an error" +msgstr "Kontynuuj poÅ‚Ä…czenie po bÅ‚Ä™dzie" + +#: directorymergewindow.cpp:2168 +msgid "Continue With Last Item" +msgstr "Kontynuuj z ostatniÄ… pozycjÄ…" + +#: directorymergewindow.cpp:2168 +msgid "Skip Item" +msgstr "PomiÅ„ pozycjÄ™" + +#: directorymergewindow.cpp:2202 +msgid "Skipped." +msgstr "PominiÄ™to." + +#: directorymergewindow.cpp:2209 directorymergewindow.cpp:2435 +msgid "In progress..." +msgstr "W trakcie..." + +#: directorymergewindow.cpp:2257 +msgid "Merge operation complete." +msgstr "Operacja poÅ‚Ä…czenia zakoÅ„czona." + +#: directorymergewindow.cpp:2257 directorymergewindow.cpp:2260 +msgid "Merge Complete" +msgstr "PoÅ‚Ä…czenie zakoÅ„czone" + +#: directorymergewindow.cpp:2269 +msgid "" +"Simulated merge complete: Check if you agree with the proposed operations." +msgstr "" +"Symulacja poÅ‚Ä…czenia zakoÅ„czona. Sprawdź czy zgadzasz siÄ™ na zaproponowane " +"operacje." + +#: directorymergewindow.cpp:2305 +msgid "" +"An error occurred. Press OK to see detailed information.\n" +msgstr "" +"WystÄ…piÅ‚ bÅ‚Ä…d. WciÅ›nij OK aby zobaczyć szczegółowe informacje.\n" + +#: directorymergewindow.cpp:2348 +msgid "Error: While deleting %1: Creating backup failed." +msgstr "BÅ‚Ä…d: W trakcie usuwania %1: BÅ‚Ä…d tworzenia kopii zapasowej." + +#: directorymergewindow.cpp:2355 +msgid "delete directory recursively( %1 )" +msgstr "usuwaj katalogi rekursywnie( %1 )" + +#: directorymergewindow.cpp:2357 +msgid "delete( %1 )" +msgstr "usuÅ„( %1 )" + +#: directorymergewindow.cpp:2372 +msgid "Error: delete dir operation failed while trying to read the directory." +msgstr "BÅ‚Ä…d: Nieudane usuwanie katalogu w momencie próby czytania katalogu." + +#: directorymergewindow.cpp:2391 +msgid "Error: rmdir( %1 ) operation failed." +msgstr "BÅ‚Ä…d: rmdir( %1 ) operacja nieudana." + +#: directorymergewindow.cpp:2401 +msgid "Error: delete operation failed." +msgstr "BÅ‚Ä…d: Nieudana operacja usuwania." + +#: directorymergewindow.cpp:2427 +msgid "manual merge( %1, %2, %3 -> %4)" +msgstr "rÄ™czne poÅ‚Ä…czenie( %1, %2, %3 -> %4)" + +#: directorymergewindow.cpp:2430 +msgid "" +" Note: After a manual merge the user should continue by pressing F7." +msgstr "" +" Uwaga: Po rÄ™cznym poÅ‚Ä…czeniu użytkownik powinien kontynuować wciskajÄ…c F7." + +#: directorymergewindow.cpp:2453 +msgid "Error: copy( %1 -> %2 ) failed.Deleting existing destination failed." +msgstr "" +"BÅ‚Ä…d: Nieudane kopiowanie( %1 -> %2 ) .Nieudane kasowanie katalogu docelowego." + +#: directorymergewindow.cpp:2463 +msgid "copyLink( %1 -> %2 )" +msgstr "copyLink( %1 -> %2 )" + +#: directorymergewindow.cpp:2474 +msgid "Error: copyLink failed: Remote links are not yet supported." +msgstr "" +"BÅ‚Ä…d: Nie udane copyLink: OdlegÅ‚e dowiÄ…zania nie sÄ… jeszcze obsÅ‚ugiwane." + +#: directorymergewindow.cpp:2480 +msgid "Error: copyLink failed." +msgstr "BÅ‚Ä…d: Nieudane copyLink." + +#: directorymergewindow.cpp:2500 +msgid "copy( %1 -> %2 )" +msgstr "kopiowanie( %1 -> %2 )" + +#: directorymergewindow.cpp:2526 +msgid "Error during rename( %1 -> %2 ): Cannot delete existing destination." +msgstr "" +"BÅ‚Ä…d w czasie zmiany nazwy( %1 -> %2 ): Nie można usunąć istniejÄ…cego miejsca " +"docelowego." + +#: directorymergewindow.cpp:2532 +msgid "rename( %1 -> %2 )" +msgstr "zmiana nazwy( %1 -> %2 )" + +#: directorymergewindow.cpp:2541 +msgid "Error: Rename failed." +msgstr "BÅ‚Ä…d: Nieudana zmiana nazwy." + +#: directorymergewindow.cpp:2559 +msgid "Error during makeDir of %1. Cannot delete existing file." +msgstr "BÅ‚Ä…d w czasie makeDir %1. Nie można usunąć istniejÄ…cego pliku." + +#: directorymergewindow.cpp:2575 +msgid "makeDir( %1 )" +msgstr "makeDir( %1 )" + +#: directorymergewindow.cpp:2585 +msgid "Error while creating directory." +msgstr "BÅ‚Ä…d w trakcie tworzenia katalogu." + +#: directorymergewindow.cpp:2608 directorymergewindow.cpp:2725 +msgid "Dest" +msgstr "Cel" + +#: directorymergewindow.cpp:2612 directorymergewindow.cpp:2650 +msgid "Dir" +msgstr "Katalog" + +#: directorymergewindow.cpp:2613 +msgid "Type" +msgstr "Typ" + +#: directorymergewindow.cpp:2614 +msgid "Size" +msgstr "Rozmiar" + +#: directorymergewindow.cpp:2615 +msgid "Attr" +msgstr "Atrybut" + +#: directorymergewindow.cpp:2616 +msgid "Last Modification" +msgstr "Ostatnia modyfikacja" + +#: directorymergewindow.cpp:2617 +msgid "Link-Destination" +msgstr "DowiÄ…zanie do pliku" + +#: directorymergewindow.cpp:2667 +msgid "not available" +msgstr "niedostÄ™pne" + +#: directorymergewindow.cpp:2687 +msgid "A (Dest): " +msgstr "A (Cel): " + +#: directorymergewindow.cpp:2690 +msgid "A (Base): " +msgstr "A (Podstawa): " + +#: directorymergewindow.cpp:2696 +msgid "B (Dest): " +msgstr "B (Cel): " + +#: directorymergewindow.cpp:2704 +msgid "C (Dest): " +msgstr "C (Cel): " + +#: directorymergewindow.cpp:2710 +msgid "Dest: " +msgstr "Cel: " + +#: directorymergewindow.cpp:2775 +#, fuzzy +msgid "Save Directory Merge State As..." +msgstr "PoÅ‚Ä…czenia katalogów" + +#: directorymergewindow.cpp:2862 +msgid "Start/Continue Directory Merge" +msgstr "Start/Kontynuuj PoÅ‚Ä…czenie Katalogów " + +#: directorymergewindow.cpp:2863 +msgid "Run Operation for Current Item" +msgstr "wykonaj operacjÄ™ na bieżącej pozycji" + +#: directorymergewindow.cpp:2864 +msgid "Compare Selected File" +msgstr "Porównaj zaznaczone pliki" + +#: directorymergewindow.cpp:2865 +msgid "Merge Current File" +msgstr "PoÅ‚Ä…cz bieżący plik" + +#: directorymergewindow.cpp:2866 +msgid "Fold All Subdirs" +msgstr "UwzglÄ™dnij podkatalogi" + +#: directorymergewindow.cpp:2867 +msgid "Unfold All Subdirs" +msgstr "Nie uwzglÄ™dniaj podkatalogów" + +#: directorymergewindow.cpp:2871 +msgid "Choose A for All Items" +msgstr "Wybierz A dla wszystkich pozycji" + +#: directorymergewindow.cpp:2872 +msgid "Choose B for All Items" +msgstr "Wybierz B dla wszystkich pozycji" + +#: directorymergewindow.cpp:2873 +msgid "Choose C for All Items" +msgstr "Wybierz C dla wszystkich pozycji" + +#: directorymergewindow.cpp:2874 +msgid "Auto-Choose Operation for All Items" +msgstr "Automatyczny wybór dla wszystkich pozycji" + +#: directorymergewindow.cpp:2875 +msgid "No Operation for All Items" +msgstr "Brak operacji dla wszystkich pozycji" + +#: directorymergewindow.cpp:2880 +msgid "Show Identical Files" +msgstr "" + +#: directorymergewindow.cpp:2881 +#, fuzzy +msgid "Show Different Files" +msgstr "Liczba różniÄ…cych siÄ™ plików:" + +#: directorymergewindow.cpp:2882 +msgid "Show Files only in A" +msgstr "" + +#: directorymergewindow.cpp:2883 +msgid "Show Files only in B" +msgstr "" + +#: directorymergewindow.cpp:2884 +msgid "Show Files only in C" +msgstr "" + +#: directorymergewindow.cpp:2888 +#, fuzzy +msgid "Compare Explicitly Selected Files" +msgstr "Porównaj zaznaczone pliki" + +#: directorymergewindow.cpp:2889 +#, fuzzy +msgid "Merge Explicitly Selected Files" +msgstr "Porównaj zaznaczone pliki" + +#: directorymergewindow.cpp:2891 directorymergewindow.cpp:2898 +msgid "Do Nothing" +msgstr "Nic nie rób" + +#: directorymergewindow.cpp:2892 +msgid "A" +msgstr "A" + +#: directorymergewindow.cpp:2893 +msgid "B" +msgstr "B" + +#: directorymergewindow.cpp:2894 +msgid "C" +msgstr "C" + +#: directorymergewindow.cpp:2903 +msgid "Delete A && B" +msgstr "UsuÅ„ A i B" + +#: directorymergewindow.cpp:2906 +msgid "Merge to A && B" +msgstr "PoÅ‚Ä…cz z A i B" + +#: fileaccess.cpp:595 +msgid "" +"While trying to make a backup, deleting an older backup failed. \n" +"Filename: " +msgstr "" +"BÅ‚Ä…d w trakcie wykonywania kopii zapasowej. Nieudane kasowanie starej kopii. \n" +"Nazwa pliku: " + +#: fileaccess.cpp:602 +msgid "" +"While trying to make a backup, renaming failed. \n" +"Filenames: " +msgstr "" +"BÅ‚Ä…d w trakcie wykonywania kopii zapasowej. Nieudana zmiana nazwy. \n" +"Nazwa plików: " + +#: fileaccess.cpp:624 +#, c-format +msgid "Getting file status: %1" +msgstr "Pobranie statusu pliku: %1" + +#: fileaccess.cpp:667 +#, c-format +msgid "Reading file: %1" +msgstr "Czytanie pliku: %1" + +#: fileaccess.cpp:703 +#, c-format +msgid "Writing file: %1" +msgstr "Zapisywanie pliku: %1" + +#: fileaccess.cpp:731 +msgid "Out of memory" +msgstr "Brak pamiÄ™ci" + +#: fileaccess.cpp:766 +#, c-format +msgid "Making directory: %1" +msgstr "Tworzenie katalogu: %1" + +#: fileaccess.cpp:786 +#, c-format +msgid "Removing directory: %1" +msgstr "Usuwanie katalogu: %1" + +#: fileaccess.cpp:801 +#, c-format +msgid "Removing file: %1" +msgstr "Usuwanie pliku: %1" + +#: fileaccess.cpp:817 +msgid "Creating symbolic link: %1 -> %2" +msgstr "Tworzenie dowiÄ…zania symbolicznego:%1 -> %2" + +#: fileaccess.cpp:843 +msgid "Renaming file: %1 -> %2" +msgstr "Zmiana nazwy pliku: %1 -> %2" + +#: fileaccess.cpp:879 +msgid "Copying file: %1 -> %2" +msgstr "Kopiowanie pliku: %1 -> %2" + +#: fileaccess.cpp:893 +#, c-format +msgid "" +"Error during file copy operation: Opening file for reading failed. Filename: %1" +msgstr "" +"BÅ‚Ä…d podczas kopiowania pliku: Nieudane otwarcie pliku. Nazwa pliku: %1" + +#: fileaccess.cpp:899 +#, c-format +msgid "" +"Error during file copy operation: Opening file for writing failed. Filename: %1" +msgstr "" +"BÅ‚Ä…d podczas kopiowania pliku: Nieudane otwarcie pliku do zapisu. Nazwa pliku: " +"%1" + +#: fileaccess.cpp:914 +#, c-format +msgid "Error during file copy operation: Reading failed. Filename: %1" +msgstr "BÅ‚Ä…d w czasie kopiowania. Nieudany odczyt. Nazwa pliku: %1" + +#: fileaccess.cpp:923 +#, c-format +msgid "Error during file copy operation: Writing failed. Filename: %1" +msgstr "BÅ‚Ä…d w czasie kopiowania. Nieudany zapis. Nazwa pliku: %1" + +#: fileaccess.cpp:1219 +msgid "Reading directory: " +msgstr "Czytanie katalogu: " + +#: fileaccess.cpp:1348 +#, c-format +msgid "Listing directory: %1" +msgstr "WyÅ›wietlenie zawartoÅ›ci katalogu: %1" + +#: kdiff3.cpp:142 +#, fuzzy +msgid "Current Configuration:" +msgstr "Operacja synchronizacji dla bieżącej pozycji" + +#: kdiff3.cpp:147 +#, fuzzy +msgid "Config Option Error:" +msgstr "BÅ‚Ä…d otwarcia pliku" + +#: kdiff3.cpp:187 +msgid "Option --auto used, but no output file specified." +msgstr "Użyta opcja --auto, ale nie okreÅ›lone wyjÅ›cie." + +#: kdiff3.cpp:323 +msgid "Option --auto ignored for directory comparison." +msgstr "Opcja --auto-zignorowana przy porównywaniu katalogów." + +#: kdiff3.cpp:359 +msgid "Saving failed." +msgstr "Nieudany zapis." + +#: kdiff3.cpp:386 pdiff.cpp:1041 pdiff.cpp:1112 +msgid "Opening of these files failed:" +msgstr "Nieudane otwarcie nastÄ™pujÄ…cych plików:" + +#: kdiff3.cpp:395 +msgid "File Open Error" +msgstr "BÅ‚Ä…d otwarcia pliku" + +#: kdiff3.cpp:418 +msgid "Opens documents for comparison..." +msgstr "Otwieranie dokumentów do porównania..." + +#: kdiff3.cpp:423 +msgid "Saves the merge result. All conflicts must be solved!" +msgstr "" +"Zapisywanie rezultatu poÅ‚Ä…czenia. Wszystkie konflikty muszÄ… być rozwiÄ…zane!" + +#: kdiff3.cpp:425 +msgid "Saves the current document as..." +msgstr "Zapisywanie bieżącego dokumentu jako..." + +#: kdiff3.cpp:427 +msgid "Print the differences" +msgstr "" + +#: kdiff3.cpp:429 +msgid "Quits the application" +msgstr "WyjÅ›cie z programu" + +#: kdiff3.cpp:431 +msgid "Cuts the selected section and puts it to the clipboard" +msgstr "Wycina zaznaczony fragment i umieszcza go w schowku" + +#: kdiff3.cpp:433 +msgid "Copies the selected section to the clipboard" +msgstr "Kopiuje zaznaczony fragment do schowka" + +#: kdiff3.cpp:435 +msgid "Pastes the clipboard contents to actual position" +msgstr "Wklejanie zawartoÅ›ci schowka w aktualne poÅ‚ożenie" + +#: kdiff3.cpp:437 +msgid "Select everything in current window" +msgstr "" + +#: kdiff3.cpp:439 +msgid "Search for a string" +msgstr "Znajdź tekst" + +#: kdiff3.cpp:441 +msgid "Search again for the string" +msgstr "Szukaj ponownie tekstu" + +#: kdiff3.cpp:443 +msgid "Enables/disables the toolbar" +msgstr "WÅ‚Ä…cza/wyÅ‚Ä…cza pasek narzÄ™dzi" + +#: kdiff3.cpp:445 +msgid "Enables/disables the statusbar" +msgstr "WÅ‚Ä…cza/wyÅ‚Ä…cza pasek statusu" + +#: kdiff3.cpp:449 +msgid "Configure KDiff3..." +msgstr "Konfiguracja KDiff3..." + +#: kdiff3.cpp:470 +msgid "Go to Current Delta" +msgstr "Idź do bieżącej różnicy" + +#: kdiff3.cpp:471 +msgid "Go to First Delta" +msgstr "Idź do pierwszej różnicy" + +#: kdiff3.cpp:472 +msgid "Go to Last Delta" +msgstr "Idź do ostatniej różnicy" + +#: kdiff3.cpp:473 +msgid "(Skips white space differences when \"Show White Space\" is disabled.)" +msgstr "" +"(Pomija różnice w znakach odstÄ™pu gdy opcja \"Pokaż znaki odstÄ™pu\" jest " +"wyÅ‚Ä…czona)" + +#: kdiff3.cpp:474 +msgid "" +"(Does not skip white space differences even when \"Show White Space\" is " +"disabled.)" +msgstr "" +"(Nie pomija różnic w znakach odstÄ™pu gdy opcja \"Pokaż znaki odstÄ™pu\" jest " +"wyÅ‚Ä…czona)" + +#: kdiff3.cpp:475 +msgid "Go to Previous Delta" +msgstr "Idź do poprzedniej różnicy" + +#: kdiff3.cpp:477 +msgid "Go to Next Delta" +msgstr "Idź do nastÄ™pnej różnicy" + +#: kdiff3.cpp:479 +msgid "Go to Previous Conflict" +msgstr "Idź do poprzedniego konfliktu" + +#: kdiff3.cpp:481 +msgid "Go to Next Conflict" +msgstr "Idź do nastÄ™pnego konfliktu" + +#: kdiff3.cpp:483 +msgid "Go to Previous Unsolved Conflict" +msgstr "Idź do poprzedniego nie rozwiÄ…zanego konfliktu" + +#: kdiff3.cpp:485 +msgid "Go to Next Unsolved Conflict" +msgstr "Idź do nastÄ™pnego nie rozwiÄ…zanego konfliktu" + +#: kdiff3.cpp:487 +msgid "Select Line(s) From A" +msgstr "Wybierz linie z A" + +#: kdiff3.cpp:488 +msgid "Select Line(s) From B" +msgstr "Wybierz linie z B" + +#: kdiff3.cpp:489 +msgid "Select Line(s) From C" +msgstr "Wybierz linie z C" + +#: kdiff3.cpp:490 +msgid "Automatically Go to Next Unsolved Conflict After Source Selection" +msgstr "" +"Automatycznie idź do nastÄ™pnego nierozwiÄ…zanego konfliktu po wybraniu źródÅ‚a" + +#: kdiff3.cpp:492 +msgid "Show Space && Tabulator Characters for Differences" +msgstr "Pokaż spacje i tabulacjÄ™ w miejsce różnic" + +#: kdiff3.cpp:493 +msgid "Show White Space" +msgstr "Pokaż znaki odstÄ™pu" + +#: kdiff3.cpp:495 +msgid "Show Line Numbers" +msgstr "Pokaż numery linii" + +#: kdiff3.cpp:496 +msgid "Choose A Everywhere" +msgstr "Wybierz wszÄ™dzie A" + +#: kdiff3.cpp:497 +msgid "Choose B Everywhere" +msgstr "Wybierz wszÄ™dzie B" + +#: kdiff3.cpp:498 +msgid "Choose C Everywhere" +msgstr "Wybierz wszÄ™dzie C" + +#: kdiff3.cpp:499 +msgid "Choose A for All Unsolved Conflicts" +msgstr "Wybierz A dla wszystkich nierozwiÄ…zanych konfliktów" + +#: kdiff3.cpp:500 +msgid "Choose B for All Unsolved Conflicts" +msgstr "Wybierz B dla wszystkich nierozwiÄ…zanych konfliktów" + +#: kdiff3.cpp:501 +msgid "Choose C for All Unsolved Conflicts" +msgstr "Wybierz C dla wszystkich nierozwiÄ…zanych konfliktów" + +#: kdiff3.cpp:502 +msgid "Choose A for All Unsolved Whitespace Conflicts" +msgstr "Wybierz A dla wszystkich nierozwiÄ…zanych konfliktów znaków odstÄ™pu" + +#: kdiff3.cpp:503 +msgid "Choose B for All Unsolved Whitespace Conflicts" +msgstr "Wybierz B dla wszystkich nierozwiÄ…zanych konfliktów znaków odstÄ™pu" + +#: kdiff3.cpp:504 +msgid "Choose C for All Unsolved Whitespace Conflicts" +msgstr "Wybierz C dla wszystkich nierozwiÄ…zanych konfliktów znaków odstÄ™pu" + +#: kdiff3.cpp:505 +msgid "Automatically Solve Simple Conflicts" +msgstr "Automatycznie rozwiąż proste konflikty" + +#: kdiff3.cpp:506 +msgid "Set Deltas to Conflicts" +msgstr "ZamieÅ„ różnice na konflikty" + +#: kdiff3.cpp:507 +msgid "Run Regular Expression Auto Merge" +msgstr "" + +#: kdiff3.cpp:508 +#, fuzzy +msgid "Automatically Solve History Conflicts" +msgstr "Automatycznie rozwiąż proste konflikty" + +#: kdiff3.cpp:509 +msgid "Split Diff At Selection" +msgstr "" + +#: kdiff3.cpp:510 +#, fuzzy +msgid "Join Selected Diffs" +msgstr "Porównaj zaznaczone pliki" + +#: kdiff3.cpp:512 +msgid "Show Window A" +msgstr "Pokaż okno A" + +#: kdiff3.cpp:513 +msgid "Show Window B" +msgstr "Pokaż okno B" + +#: kdiff3.cpp:514 +msgid "Show Window C" +msgstr "Pokaz okno C" + +#: kdiff3.cpp:515 kdiff3.cpp:526 +msgid "Focus Next Window" +msgstr "Uaktywnij nastÄ™pne okno" + +#: kdiff3.cpp:517 +msgid "Normal Overview" +msgstr "Normalne przeglÄ…danie" + +#: kdiff3.cpp:518 +msgid "A vs. B Overview" +msgstr "PrzeglÄ…d różnic miÄ™dzy A i B" + +#: kdiff3.cpp:519 +msgid "A vs. C Overview" +msgstr "PrzeglÄ…d różnic miÄ™dzy A i C" + +#: kdiff3.cpp:520 +msgid "B vs. C Overview" +msgstr "PrzeglÄ…d różnic miÄ™dzy B i C" + +#: kdiff3.cpp:521 +msgid "Word Wrap Diff Windows" +msgstr "Zawijanie wyrazów w oknach różnic" + +#: kdiff3.cpp:522 +msgid "Add Manual Diff Alignment" +msgstr "" + +#: kdiff3.cpp:523 +msgid "Clear All Manual Diff Alignments" +msgstr "" + +#: kdiff3.cpp:528 +msgid "Focus Prev Window" +msgstr "Uaktywnij poprzednie okno" + +#: kdiff3.cpp:529 +msgid "Toggle Split Orientation" +msgstr "PrzeÅ‚Ä…cz orientacjÄ™ podziaÅ‚u okien" + +#: kdiff3.cpp:531 +msgid "Dir && Text Split Screen View" +msgstr "Widok dzielony katalogu i tekstu" + +#: kdiff3.cpp:533 +msgid "Toggle Between Dir && Text View" +msgstr "PrzeÅ‚Ä…cza miÄ™dzy widokiem katalogów i tekstu" + +#: kdiff3.cpp:582 pdiff.cpp:1712 +msgid "The merge result hasn't been saved." +msgstr "Rezultat poÅ‚Ä…czenia nie zostaÅ‚ zapisany." + +#: kdiff3.cpp:583 +msgid "Save && Quit" +msgstr "Zapisz i Wyjdź" + +#: kdiff3.cpp:583 +msgid "Quit Without Saving" +msgstr "ZakoÅ„cz bez zapisywania" + +#: kdiff3.cpp:591 pdiff.cpp:1721 +msgid "Saving the merge result failed." +msgstr "Nieudany zapis rezultatu poÅ‚Ä…czenia." + +#: kdiff3.cpp:602 pdiff.cpp:978 +msgid "" +"You are currently doing a directory merge. Are you sure, you want to abort?" +msgstr "" +"Obecnie wykonujesz poÅ‚Ä…czenie katalogów. JesteÅ› pewny że chcesz przerwać?" + +#: kdiff3.cpp:625 +msgid "Saving file..." +msgstr "Zapisywanie pliku..." + +#: kdiff3.cpp:642 +msgid "Saving file with a new filename..." +msgstr "Zapisywanie pliku pod nowÄ… nazwÄ…..." + +#: kdiff3.cpp:732 +#, fuzzy +msgid "Printing..." +msgstr "WyjÅ›cie..." + +#: kdiff3.cpp:738 kdiff3.cpp:900 +msgid "Printing aborted." +msgstr "" + +#: kdiff3.cpp:870 +msgid "Selection" +msgstr "" + +#: kdiff3.cpp:896 +#, fuzzy +msgid "Printing completed." +msgstr "Operacja poÅ‚Ä…czenia zakoÅ„czona." + +#: kdiff3.cpp:906 +msgid "Exiting..." +msgstr "WyjÅ›cie..." + +#: kdiff3.cpp:918 +msgid "Toggling toolbar..." +msgstr "PrzeÅ‚Ä…czanie paska narzÄ™dzi..." + +#: kdiff3.cpp:939 +msgid "Toggle the statusbar..." +msgstr "PrzeÅ‚Ä…czanie paska statusu..." + +#: kdiff3_part.cpp:155 kdiff3_part.cpp:224 +msgid "Couldn't find files for comparison." +msgstr "Nie można znaleźć plików do porównania." + +#: kdiff3_part.cpp:291 +msgid "KDiff3Part" +msgstr "KDiff3Part" + +#: kdiff3_shell.cpp:78 +msgid "" +"Could not find our part!\n" +"This usually happens due to an installation problem. Please read the " +"README-file in the source package for details." +msgstr "" +"Nie można znaleźć fragmentu programu!\n" +"Może to być spowodowane niepoprawnÄ… instalacjÄ…. Przeczytaj README aby uzyskać " +"szczegółowe informacje." + +#: main.cpp:35 +msgid "Tool for Comparison and Merge of Files and Directories" +msgstr "NarzÄ™dzia do porównywania i Å‚Ä…czenia plików i katalogów" + +#: main.cpp:40 +msgid "Merge the input." +msgstr "PoÅ‚Ä…cz pliki wejÅ›ciowe." + +#: main.cpp:42 +msgid "Explicit base file. For compatibility with certain tools." +msgstr "" +"BezpoÅ›rednio podany plik bazowy - w celu zgodnoÅ›ci z niektórymi narzÄ™dziami." + +#: main.cpp:44 +msgid "Output file. Implies -m. E.g.: -o newfile.txt" +msgstr "Plik wyjÅ›ciowy. Implikuje opcjÄ™ -m. PrzykÅ‚ad: -o nowyplik.txt" + +#: main.cpp:45 +msgid "Output file, again. (For compatibility with certain tools.)" +msgstr "" +"Plik wyjÅ›ciowy, ponownie (w celu zapewnienia zgodnoÅ›ci z niektórymi " +"narzÄ™dziami)" + +#: main.cpp:46 +msgid "No GUI if all conflicts are auto-solvable. (Needs -o file)" +msgstr "" +"Brak GUI jeÅ›li wszystkie konflikty mogÄ… być automatycznie rozwiÄ…zane. (Wymaga " +"pliku -o)" + +#: main.cpp:47 +msgid "Don't solve conflicts automatically. (For compatibility...)" +msgstr "Nie rozwiÄ…zuj konfliktów automatycznie. (Dla zgodnoÅ›ci...)" + +#: main.cpp:48 +msgid "Visible name replacement for input file 1 (base)." +msgstr "Widoczna nazwa dla pliku 1 (podstawowego)." + +#: main.cpp:49 +msgid "Visible name replacement for input file 2." +msgstr "Widoczna nazwa dla pliku 2." + +#: main.cpp:50 +msgid "Visible name replacement for input file 3." +msgstr "Widoczna nazwa dla pliku 3." + +#: main.cpp:52 +msgid "Alternative visible name replacement. Supply this once for every input." +msgstr "" +"Alternatywna zastÄ™pcza nazwa widoczna. ProszÄ™ podać jednÄ… dla każdego pliku " +"wejÅ›ciowego." + +#: main.cpp:53 +msgid "" +"Override a config setting. Use once for every setting. E.g.: --cs " +"\"AutoAdvance=1\"" +msgstr "" + +#: main.cpp:54 +msgid "Show list of config settings and current values." +msgstr "" + +#: main.cpp:55 +#, fuzzy +msgid "Use a different config file." +msgstr "Liczba różniÄ…cych siÄ™ plików:" + +#: main.cpp:59 +msgid "file1 to open (base, if not specified via --base)" +msgstr "Otwórz plik1 (bazowy, jeÅ›li nie okreÅ›lono poprzez --base)" + +#: main.cpp:60 +msgid "file2 to open" +msgstr "Otwórz plik 2 " + +#: main.cpp:61 +msgid "file3 to open" +msgstr "Otwórz plik3" + +#: main.cpp:93 +msgid "Ignored. (User defined.)" +msgstr "" + +#. i18n: file kdiff3_part.rc line 16 +#: main.cpp:173 rc.cpp:9 +#, no-c-format +msgid "KDiff3" +msgstr "KDiff3" + +#: main.cpp:186 +msgid "+ Many thanks to those who reported bugs and contributed ideas!" +msgstr "+ Wielkie dziÄ™ki zgÅ‚aszajÄ…cym bÅ‚Ä™dy i wnoszÄ…cym nowe pomysÅ‚y!" + +#: mergeresultwindow.cpp:136 mergeresultwindow.cpp:939 +#: mergeresultwindow.cpp:953 mergeresultwindow.cpp:965 +#: mergeresultwindow.cpp:977 +msgid "Number of remaining unsolved conflicts: %1 (of which %2 are whitespace)" +msgstr "" +"Liczba pozostaÅ‚ych nie rozwiÄ…zanych konfliktów: %1 (z których %2 dotyczy znaków " +"odstÄ™pu)" + +#: mergeresultwindow.cpp:285 +msgid "" +"The output has been modified.\n" +"If you continue your changes will be lost." +msgstr "" +"Plik wyjÅ›ciowy zostaÅ‚ zmieniony.\n" +"JeÅ›li bÄ™dziesz kontynuować zmiany zostanÄ… utracone." + +#: mergeresultwindow.cpp:797 pdiff.cpp:511 +msgid "All input files are binary equal." +msgstr "Wszystkie pliki wejÅ›ciowe sÄ… binarnie równe." + +#: mergeresultwindow.cpp:799 +msgid "All input files contain the same text." +msgstr "Wszystkie wejÅ›ciowe pliki zawierajÄ…c ten sam tekst." + +#: mergeresultwindow.cpp:801 +msgid "" +"Files A and B are binary equal.\n" +msgstr "" +"Pliki A i B sÄ… binarnie identyczne.\n" + +#: mergeresultwindow.cpp:802 +msgid "" +"Files A and B have equal text. \n" +msgstr "" +"Pliki A i B majÄ… identyczny tekst.\n" + +#: mergeresultwindow.cpp:803 +msgid "" +"Files A and C are binary equal.\n" +msgstr "" +"Pliki A i C sÄ… binarnie identyczne.\n" + +#: mergeresultwindow.cpp:804 +msgid "" +"Files A and C have equal text. \n" +msgstr "" +"Pliki A i C majÄ… identyczny tekst.\n" + +#: mergeresultwindow.cpp:805 +msgid "" +"Files B and C are binary equal.\n" +msgstr "" +"Pliki B i C sÄ… binarnie identyczne.\n" + +#: mergeresultwindow.cpp:806 +msgid "" +"Files B and C have equal text. \n" +msgstr "" +"Pliki B i C majÄ… identyczny tekst. \n" + +#: mergeresultwindow.cpp:812 +msgid "Total number of conflicts: " +msgstr "CaÅ‚kowita liczba konfliktów: " + +#: mergeresultwindow.cpp:813 +msgid "" +"\n" +"Nr of automatically solved conflicts: " +msgstr "" +"\n" +"Liczba automatycznie rozwiÄ…zanych konfliktów: " + +#: mergeresultwindow.cpp:814 +msgid "" +"\n" +"Nr of unsolved conflicts: " +msgstr "" +"\n" +"Liczba nie rozwiÄ…zanych konfliktów: " + +#: mergeresultwindow.cpp:816 +msgid "Conflicts" +msgstr "Konflikty" + +#: mergeresultwindow.cpp:1652 +msgid "" +msgstr "" + +#: mergeresultwindow.cpp:1660 +msgid "" +msgstr "" + +#: mergeresultwindow.cpp:1662 mergeresultwindow.cpp:2427 +msgid "" +msgstr "" + +#: mergeresultwindow.cpp:2635 +msgid "" +"Not all conflicts are solved yet.\n" +"File not saved.\n" +msgstr "" +"Nie wszystkie konflikty zostaÅ‚y rozwiÄ…zane.\n" +"Plik nie zostaÅ‚ zapisany.\n" + +#: mergeresultwindow.cpp:2637 +msgid "Conflicts Left" +msgstr "PozostaÅ‚e konflikty" + +#: mergeresultwindow.cpp:2649 +msgid "" +"\n" +"\n" +"Creating backup failed. File not saved." +msgstr "" +"\n" +"\n" +"Tworzenie pliku zapasowego nie powiodÅ‚o siÄ™. Plik nezapisany." + +#: mergeresultwindow.cpp:2649 mergeresultwindow.cpp:2689 +msgid "File Save Error" +msgstr "BÅ‚Ä…d zapisu pliku" + +#: mergeresultwindow.cpp:2689 +msgid "Error while writing." +msgstr "BÅ‚Ä…d w czasie zapisu." + +#: mergeresultwindow.cpp:3020 +msgid "Output" +msgstr "WyjÅ›cie" + +#: mergeresultwindow.cpp:3032 mergeresultwindow.cpp:3139 +msgid "[Modified]" +msgstr "[zmodyfikowane]" + +#: mergeresultwindow.cpp:3039 +#, fuzzy +msgid "Encoding for saving" +msgstr "Kodowanie pliku C:" + +#: mergeresultwindow.cpp:3075 mergeresultwindow.cpp:3081 +#: mergeresultwindow.cpp:3087 +msgid "Codec from" +msgstr "" + +#: optiondialog.cpp:362 +msgid "Unicode, 8 bit" +msgstr "Unicode, 8-bitowy" + +#: optiondialog.cpp:363 +msgid "Unicode" +msgstr "Unicode" + +#: optiondialog.cpp:364 +msgid "Latin1" +msgstr "Latin1" + +#: optiondialog.cpp:383 +msgid "Change this if non-ASCII characters are not displayed correctly." +msgstr "ZmieÅ„ to jeÅ›li znaki non-ascii sÄ… wyÅ›wietlane niepoprawnie." + +#: optiondialog.cpp:510 +msgid "Editor & Diff Output Font" +msgstr "Czcionka edytora i wyjÅ›cia różnic" + +#: optiondialog.cpp:531 +msgid "Italic font for deltas" +msgstr "Kursywa do różnic" + +#: optiondialog.cpp:534 +msgid "" +"Selects the italic version of the font for differences.\n" +"If the font doesn't support italic characters, then this does nothing." +msgstr "" +"Wybierz kursywÄ™ do pokazania różnic.\n" +"JeÅ›li czcionka nie ma kursywy, wtedy to nic nie zmieni." + +#: optiondialog.cpp:542 +msgid "Color" +msgstr "Kolor" + +#: optiondialog.cpp:542 +#, fuzzy +msgid "Colors Settings" +msgstr "Ustawienia regionalne" + +#: optiondialog.cpp:556 +msgid "Editor and Diff Views:" +msgstr "" + +#: optiondialog.cpp:564 +msgid "Foreground color:" +msgstr "Kolor podstawowy:" + +#: optiondialog.cpp:570 +msgid "Background color:" +msgstr "Kolor tÅ‚a:" + +#: optiondialog.cpp:578 +msgid "Diff background color:" +msgstr "Kolor tÅ‚a dla różnic:" + +#: optiondialog.cpp:585 +msgid "Color A:" +msgstr "Kolor A:" + +#: optiondialog.cpp:592 +msgid "Color B:" +msgstr "Kolor B:" + +#: optiondialog.cpp:599 +msgid "Color C:" +msgstr "Kolor C:" + +#: optiondialog.cpp:605 +msgid "Conflict color:" +msgstr "Kolor dla konfliktów:" + +#: optiondialog.cpp:612 +msgid "Current range background color:" +msgstr "Kolor tÅ‚a zaznaczonego bloku:" + +#: optiondialog.cpp:619 +msgid "Current range diff background color:" +msgstr "Kolor tÅ‚a różnic w bloku:" + +#: optiondialog.cpp:625 +msgid "Color for manually aligned difference ranges:" +msgstr "" + +#: optiondialog.cpp:630 +#, fuzzy +msgid "Directory Comparison View:" +msgstr "Status porównywania katalogów" + +#: optiondialog.cpp:636 +msgid "Newest file color:" +msgstr "" + +#: optiondialog.cpp:639 +msgid "" +"Changing this color will only be effective when starting the next directory " +"comparison." +msgstr "" + +#: optiondialog.cpp:644 +msgid "Oldest file color:" +msgstr "" + +#: optiondialog.cpp:651 +msgid "Middle age file color:" +msgstr "" + +#: optiondialog.cpp:658 +msgid "Color for missing files:" +msgstr "" + +#: optiondialog.cpp:670 +msgid "Editor" +msgstr "Edytor" + +#: optiondialog.cpp:670 +msgid "Editor Behavior" +msgstr "Zachowanie edytora" + +#: optiondialog.cpp:680 +msgid "Tab inserts spaces" +msgstr "ZamieÅ„ znaki tabulacji na spacje" + +#: optiondialog.cpp:683 +msgid "" +"On: Pressing tab generates the appropriate number of spaces.\n" +"Off: A Tab-character will be inserted." +msgstr "" +"WÅ‚Ä…: WciÅ›niÄ™cie tabulacji wstawi okreÅ›lonÄ… liczbÄ™ spacji.\n" +"WyÅ‚: Zostanie wprowadzony znak tabulacji." + +#: optiondialog.cpp:689 +msgid "Tab size:" +msgstr "Szerokość tabulacji:" + +#: optiondialog.cpp:694 +msgid "Auto indentation" +msgstr "Automatyczne wciÄ™cia" + +#: optiondialog.cpp:697 +msgid "" +"On: The indentation of the previous line is used for a new line.\n" +msgstr "" +"WÅ‚Ä…: WciÄ™cie poprzedniej linii bÄ™dzie użyte w nowej linii.\n" + +#: optiondialog.cpp:701 +msgid "Auto copy selection" +msgstr "Wybór auto kopiowania" + +#: optiondialog.cpp:704 +msgid "" +"On: Any selection is immediately written to the clipboard.\n" +"Off: You must explicitely copy e.g. via Ctrl-C." +msgstr "" +"WÅ‚Ä…: Jakiekolwiek zaznaczenie powoduje natychmiastowy zapis do schowka.\n" +"WyÅ‚: Musisz jawnie skopiować np. poprzez Ctrl-C." + +#: optiondialog.cpp:709 +msgid "Line end style:" +msgstr "Znaki koÅ„ca linii:" + +#: optiondialog.cpp:721 +msgid "" +"Sets the line endings for when an edited file is saved.\n" +"DOS/Windows: CR+LF; UNIX: LF; with CR=0D, LF=0A" +msgstr "" +"Ustawia znak koÅ„ca linii, jaki bÄ™dzie używany podczas zapisywania pliku\n" +"DOS/Windows: CR+LF; Unix: LF; gdzie CR=0x0D; LF=0x0A" + +#: optiondialog.cpp:732 +#, fuzzy +msgid "Diff" +msgstr "KDiff3" + +#: optiondialog.cpp:732 +#, fuzzy +msgid "Diff Settings" +msgstr "Ustawienia różnic i poÅ‚Ä…czeÅ„" + +#: optiondialog.cpp:743 +msgid "Preserve carriage return" +msgstr "Zachowuj znak koÅ„ca linii" + +#: optiondialog.cpp:746 +msgid "" +"Show carriage return characters '\\r' if they exist.\n" +"Helps to compare files that were modified under different operating systems." +msgstr "" +"Pokazuj znaki koÅ„ca linii '\\r' jeÅ›li istniejÄ….\n" +"Pomaga to w porównywaniu plików które zostaÅ‚y\n" +"zmodyfikowane w rożnych systemach operacyjnych." + +#: optiondialog.cpp:751 +msgid "Ignore numbers" +msgstr "Ignoruj cyfry" + +#: optiondialog.cpp:754 +msgid "" +"Ignore number characters during line matching phase. (Similar to Ignore white " +"space.)\n" +"Might help to compare files with numeric data." +msgstr "" +"Ignoruj liczby podczas sprawdzania (Podobne do Ignoruj biaÅ‚e znaki)\n" +"Może być pomocne przy porównywania plików z danymi numerycznymi." + +#: optiondialog.cpp:759 +msgid "Ignore C/C++ comments" +msgstr "Ignoruj komentarze C/C++ " + +#: optiondialog.cpp:761 +msgid "Treat C/C++ comments like white space." +msgstr "Traktuj komentarze C/C++ jak biaÅ‚e znaki." + +#: optiondialog.cpp:765 +msgid "Ignore case" +msgstr "Ignoruj cyfry" + +#: optiondialog.cpp:768 +msgid "Treat case differences like white space changes. ('a'<=>'A')" +msgstr "Różnice wielkoÅ›ci liter traktuj jak zmiany znaków odstÄ™pu. ('a'<=>'A')" + +#: optiondialog.cpp:772 +msgid "Preprocessor command:" +msgstr "Komenda preprocesora:" + +#: optiondialog.cpp:776 +msgid "User defined pre-processing. (See the docs for details.)" +msgstr "Zdefiniowany przez użytkownika pre-proces. (Zobacz szczegóły w docs.)" + +#: optiondialog.cpp:779 +msgid "Line-matching preprocessor command:" +msgstr "Linia komend preprocesora:" + +#: optiondialog.cpp:783 +msgid "" +"This pre-processor is only used during line matching.\n" +"(See the docs for details.)" +msgstr "" +"Ta komenda może być użyta tylko z linii poleceÅ„.\n" +"(Aby uzyskać szczegóły zobacz docs.)" + +#: optiondialog.cpp:786 +msgid "Try hard (slower)" +msgstr "Próbuj bardziej (wolne)" + +#: optiondialog.cpp:789 +msgid "" +"Enables the --minimal option for the external diff.\n" +"The analysis of big files will be much slower." +msgstr "" +"UdostÄ™pnia opcjÄ™ --minimal dla zewnÄ™trznego.\n" +"Analizowanie dużych plików bÄ™dzie znacznie wolniejsze." + +#: optiondialog.cpp:794 +msgid "Auto advance delay (ms):" +msgstr "Czas automatycznego przejÅ›cia (ms):" + +#: optiondialog.cpp:799 +msgid "" +"When in Auto-Advance mode the result of the current selection is shown \n" +"for the specified time, before jumping to the next conflict. Range: 0-2000 ms" +msgstr "" +"W trybie automatycznego przechodzenia wynik aktualnego zaznaczenia \n" +"jest pokazywany przez podany czas zanim nastÄ…pi przejÅ›cie do nastÄ™pnego \n" +"konfliktu. Zakres: 0-2000 ms" + +#: optiondialog.cpp:809 +#, fuzzy +msgid "Merge Settings" +msgstr "Ustawienia różnic i poÅ‚Ä…czeÅ„" + +#: optiondialog.cpp:822 +msgid "White space 2-file merge default:" +msgstr "DomyÅ›lne Å‚Ä…czenie znaków biaÅ‚ych przy 2 plikach:" + +#: optiondialog.cpp:826 optiondialog.cpp:839 +msgid "Manual Choice" +msgstr "Wybór użytkownika" + +#: optiondialog.cpp:830 optiondialog.cpp:844 +msgid "" +"Allow the merge algorithm to automatically select an input for white-space-only " +"changes." +msgstr "" +"Pozwól algorytmowi Å‚Ä…czenia dokonać automatycznego wyboru wejÅ›cia - tylko dla " +"znaków odstÄ™pu." + +#: optiondialog.cpp:835 +msgid "White space 3-file merge default:" +msgstr "DomyÅ›lne Å‚Ä…czenie znaków biaÅ‚ych przy 3 plikach:" + +#: optiondialog.cpp:849 +msgid "Automatic Merge Regular Expression" +msgstr "" + +#: optiondialog.cpp:858 smalldialogs.cpp:397 +msgid "Auto merge regular expression:" +msgstr "" + +#: optiondialog.cpp:862 +msgid "" +"Regular expression for lines where KDiff3 should automatically choose one " +"source.\n" +"When a line with a conflict matches the regular expression then\n" +"- if available - C, otherwise B will be chosen." +msgstr "" + +#: optiondialog.cpp:868 +msgid "Run regular expression auto merge on merge start" +msgstr "" + +#: optiondialog.cpp:870 +msgid "" +"Run the merge for auto merge regular expressions\n" +"immediately when a merge starts.\n" +msgstr "" + +#: optiondialog.cpp:875 +msgid "Version Control History Merging" +msgstr "" + +#: optiondialog.cpp:884 smalldialogs.cpp:424 +msgid "History start regular expression:" +msgstr "" + +#: optiondialog.cpp:888 +msgid "" +"Regular expression for the start of the version control history entry.\n" +"Usually this line contains the \"$Log$\"-keyword.\n" +"Default value: \".*\\$Log.*\\$.*\"" +msgstr "" + +#: optiondialog.cpp:894 smalldialogs.cpp:453 +msgid "History entry start regular expression:" +msgstr "" + +#: optiondialog.cpp:906 +msgid "" +"A version control history entry consists of several lines.\n" +"Specify the regular expression to detect the first line (without the leading " +"comment).\n" +"Use parentheses to group the keys you want to use for sorting.\n" +"If left empty, then KDiff3 assumes that empty lines separate history entries.\n" +"See the documentation for details." +msgstr "" + +#: optiondialog.cpp:914 +msgid "History merge sorting" +msgstr "" + +#: optiondialog.cpp:916 +msgid "Sort version control history by a key." +msgstr "" + +#: optiondialog.cpp:926 +msgid "History entry start sort key order:" +msgstr "" + +#: optiondialog.cpp:930 +msgid "" +"Each parentheses used in the regular expression for the history start entry\n" +"groups a key that can be used for sorting.\n" +"Specify the list of keys (that are numbered in order of occurrence\n" +"starting with 1) using ',' as separator (e.g. \"4,5,6,1,2,3,7\").\n" +"If left empty, then no sorting will be done.\n" +"See the documentation for details." +msgstr "" + +#: optiondialog.cpp:941 +msgid "Merge version control history on merge start" +msgstr "" + +#: optiondialog.cpp:943 +msgid "Run version control history automerge on merge start." +msgstr "" + +#: optiondialog.cpp:947 +msgid "Test your regular expressions" +msgstr "" + +#: optiondialog.cpp:952 +msgid "Irrelevant merge command:" +msgstr "" + +#: optiondialog.cpp:956 +msgid "" +"If specified this script is run after automerge\n" +"when no other relevant changes were detected.\n" +"Called with the parameters: filename1 filename2 filename3" +msgstr "" + +#: optiondialog.cpp:966 +msgid "Directory Merge" +msgstr "PoÅ‚Ä…czenia katalogów" + +#: optiondialog.cpp:975 +msgid "Recursive directories" +msgstr "Rekursywne katalogi" + +#: optiondialog.cpp:977 +msgid "Whether to analyze subdirectories or not." +msgstr "Czy majÄ… być analizowane podkatalogi." + +#: optiondialog.cpp:979 +msgid "File pattern(s):" +msgstr "Wzorzec plików:" + +#: optiondialog.cpp:984 +msgid "" +"Pattern(s) of files to be analyzed. \n" +"Wildcards: '*' and '?'\n" +"Several Patterns can be specified by using the separator: ';'" +msgstr "" +"Wzorzec(rce) plików do analizy. \n" +"Znaki szablonowe (wildcards): '*' i '?'\n" +"Można okreÅ›lić kilka wzorców poprzez użycie separatora: ';'" + +#: optiondialog.cpp:990 +msgid "File-anti-pattern(s):" +msgstr "Anty wzorzec plików:" + +#: optiondialog.cpp:995 +msgid "" +"Pattern(s) of files to be excluded from analysis. \n" +"Wildcards: '*' and '?'\n" +"Several Patterns can be specified by using the separator: ';'" +msgstr "" +"Wzorzec(rce) plików jakie majÄ… być wyÅ‚Ä…czone z analizy. \n" +"Znaki szablonowe (wildcards): '*' i '?'\n" +"Możesz okreÅ›lić kilka wzorców używajÄ…c separatora: ';'" + +#: optiondialog.cpp:1001 +msgid "Dir-anti-pattern(s):" +msgstr "Anty wzorzec katalogów:" + +#: optiondialog.cpp:1006 +msgid "" +"Pattern(s) of directories to be excluded from analysis. \n" +"Wildcards: '*' and '?'\n" +"Several Patterns can be specified by using the separator: ';'" +msgstr "" +"Wzorzec(rce) katalogów jakie majÄ… być wykluczone z analizy. \n" +"Znaki szablonowe (wildcards): '*' and '?'\n" +"Możesz użyć kilku wzorców poprzez użycie separatora: ';'" + +#: optiondialog.cpp:1012 +msgid "Use .cvsignore" +msgstr "Użyj .cvsignore" + +#: optiondialog.cpp:1015 +msgid "" +"Extends the antipattern to anything that would be ignored by CVS.\n" +"Via local \".cvsignore\"-files this can be directory specific." +msgstr "" +"Rozszerz anty wzorzec na wszystko co bÄ™dzie ignorowane przez CVS. \n" +"W lokalnym \".cvsignore\" -pliki mogÄ… być specyficzne dla katalogów." + +#: optiondialog.cpp:1020 +msgid "Find hidden files and directories" +msgstr "Znajdź ukryte pliki i katalogi" + +#: optiondialog.cpp:1023 +msgid "Finds files and directories with the hidden attribute." +msgstr "Znajduje pliki i katalogi z atrybutem ukryty." + +#: optiondialog.cpp:1025 +msgid "Finds files and directories starting with '.'." +msgstr "Znajduje pliki i katalogi z nazwÄ… zaczynajÄ…cÄ… siÄ™ na '.' ." + +#: optiondialog.cpp:1029 +msgid "Follow file links" +msgstr "Podążaj za dowiÄ…zaniami" + +#: optiondialog.cpp:1032 +msgid "" +"On: Compare the file the link points to.\n" +"Off: Compare the links." +msgstr "" +"WÅ‚Ä…: Porównuj pliki na które wskazuje dowiÄ…zanie.\n" +"WyÅ‚: Porównuj dowiÄ…zania." + +#: optiondialog.cpp:1037 +msgid "Follow directory links" +msgstr "Podążaj za dowiÄ…zaniami katalogów" + +#: optiondialog.cpp:1040 +msgid "" +"On: Compare the directory the link points to.\n" +"Off: Compare the links." +msgstr "" +"WÅ‚Ä…: Porównuj katalogi na które wskazuje dowiÄ…zanie. \n" +"WyÅ‚: Porównuj dowiÄ…zania." + +#: optiondialog.cpp:1056 +msgid "Case sensitive filename comparison" +msgstr "" + +#: optiondialog.cpp:1059 +msgid "" +"The directory comparison will compare files or directories when their names " +"match.\n" +"Set this option if the case of the names must match. (Default for Windows is " +"off, otherwise on.)" +msgstr "" + +#: optiondialog.cpp:1063 +msgid "File Comparison Mode" +msgstr "Tryb porównania plików" + +#: optiondialog.cpp:1067 +msgid "Binary comparison" +msgstr "Porównanie binarne" + +#: optiondialog.cpp:1068 +msgid "Binary comparison of each file. (Default)" +msgstr "Binarne porównanie dla każdego pliku (domyÅ›lne)" + +#: optiondialog.cpp:1070 +msgid "Full analysis" +msgstr "PeÅ‚na analiza" + +#: optiondialog.cpp:1071 +msgid "" +"Do a full analysis and show statistics information in extra columns.\n" +"(Slower than a binary comparison, much slower for binary files.)" +msgstr "" +"Wykonaj peÅ‚nÄ… analizÄ™ i pokaż statystyki w dodatkowych kolumnach.\n" +"(Wolniejsze niż porównanie binarne, i znacznie wolniejsze dla plików " +"binarnych.)" + +#: optiondialog.cpp:1074 +msgid "Trust the modification date (unsafe)" +msgstr "Ufaj dacie modyfikacji (niepewne)" + +#: optiondialog.cpp:1075 +msgid "" +"Assume that files are equal if the modification date and file length are " +"equal.\n" +"Useful for big directories or slow networks." +msgstr "" +"ZakÅ‚ada że pliki sÄ… identyczne jeÅ›li data modyfikacji i rozmiar jest " +"identyczny\n" +"Użyteczne przy dużych katalogach lub wolnych poÅ‚Ä…czeniach sieciowych." + +#: optiondialog.cpp:1078 +msgid "Trust the size (unsafe)" +msgstr "Ufaj rozmiarowi (niepewne)" + +#: optiondialog.cpp:1079 +msgid "" +"Assume that files are equal if their file lengths are equal.\n" +"Useful for big directories or slow networks when the date is modified during " +"download." +msgstr "" +"ZakÅ‚ada ze pliki sÄ… identyczne jeÅ›li ich rozmiar jest identyczny.\n" +"Użyteczne przy dużych katalogach lub wolnych poÅ‚Ä…czeniach \n" +"sieciowych gdzie data jest modyfikowana w trakcie Å›ciÄ…gania." + +#: optiondialog.cpp:1083 +msgid "Synchronize directories" +msgstr "Synchronizacja katalogów" + +#: optiondialog.cpp:1086 +msgid "" +"Offers to store files in both directories so that\n" +"both directories are the same afterwards.\n" +"Works only when comparing two directories without specifying a destination." +msgstr "" +"Oferuje zapisanie plików obu katalogach\n" +"tak że potem oba katalogi bÄ™dÄ… takie same.\n" +"DziaÅ‚a tylko przy porównywaniu dwóch katalogów \n" +"bez okreÅ›lonego miejsca docelowego." + +#: optiondialog.cpp:1092 +msgid "White space differences considered equal" +msgstr "Różnice w znakach odstÄ™pu ignorowane" + +#: optiondialog.cpp:1095 +msgid "" +"If files differ only by white space consider them equal.\n" +"This is only active when full analysis is chosen." +msgstr "" +"JeÅ›li pliki różniÄ… siÄ™ tylko znakami odstÄ™pu, to uznaj je za identyczne.\n" +"Opcja aktywna tylko w przypadku peÅ‚nej analizy." + +#: optiondialog.cpp:1101 +msgid "Copy newer instead of merging (unsafe)" +msgstr "Kopiuj nowsze zamiast Å‚Ä…czyć (niepewne)" + +#: optiondialog.cpp:1104 +msgid "" +"Don't look inside, just take the newer file.\n" +"(Use this only if you know what you are doing!)\n" +"Only effective when comparing two directories." +msgstr "" +"Nie sprawdza zawartoÅ›ci tylko bierze nowszy plik. \n" +"(Użyj tego tylko jeÅ›li wiesz co robisz!)\n" +"Efektywne tylko przy porównywaniu dwóch katalogów." + +#: optiondialog.cpp:1109 +msgid "Backup files (.orig)" +msgstr "Tworzenie kopii zapasowych (.orig)" + +#: optiondialog.cpp:1112 +msgid "" +"When a file would be saved over an old file, then the old file\n" +"will be renamed with a '.orig'-extension instead of being deleted." +msgstr "" +"Gdy plik bÄ™dzie zapisywany w miejsce starego, to stary plik\n" +"zmieni nazwÄ™ z rozszerzeniem '.orig', zamiast zostać usuniÄ™tym." + +#: optiondialog.cpp:1176 +msgid "Regional Settings" +msgstr "Ustawienia regionalne" + +#: optiondialog.cpp:1272 +msgid "Language (restart required)" +msgstr "JÄ™zyk(wymaga ponownego uruchomienia)" + +#: optiondialog.cpp:1304 +msgid "" +"Choose the language of the GUI-strings or \"Auto\".\n" +"For a change of language to take place, quit and restart KDiff3." +msgstr "" +"Wybierz jÄ™zyk dla GUI lub ustaw na\"Automatycznie\". \n" +"Po zmianie jÄ™zyka należy uruchomić ponownie KDiff3." + +#: optiondialog.cpp:1322 +msgid "Use the same encoding for everything:" +msgstr "Używanie tego samego kodowania dla wszystkiego:" + +#: optiondialog.cpp:1325 +msgid "" +"Enable this allows to change all encodings by changing the first only.\n" +"Disable this if different individual settings are needed." +msgstr "" +"WÅ‚Ä…czenie tej opcji pozwala na zmianÄ™ wszystkich kodowaÅ„ zmieniajÄ…c tylko " +"pierwsze. \n" +"ProszÄ™ wyÅ‚Ä…czyć jeÅ›li potrzebne sÄ… różne ustawienia indywidualne. " + +#: optiondialog.cpp:1330 +msgid "Note: Local Encoding is " +msgstr "Uwaga: lokalne kodowanie to " + +#: optiondialog.cpp:1334 +msgid "File Encoding for A:" +msgstr "Kodowanie pliku A:" + +#: optiondialog.cpp:1340 +msgid "" +"If enabled then Unicode (UTF-16 or UTF-8) encoding will be detected.\n" +"If the file encoding is not detected then the selected encoding will be used as " +"fallback.\n" +"(Unicode detection depends on the first bytes of a file - the byte order mark " +"\"BOM\".)" +msgstr "" + +#: optiondialog.cpp:1344 optiondialog.cpp:1353 optiondialog.cpp:1362 +msgid "Auto Detect Unicode" +msgstr "" + +#: optiondialog.cpp:1349 +msgid "File Encoding for B:" +msgstr "Kodowanie pliku B:" + +#: optiondialog.cpp:1358 +msgid "File Encoding for C:" +msgstr "Kodowanie pliku C:" + +#: optiondialog.cpp:1367 +msgid "File Encoding for Merge Output and Saving:" +msgstr "Kodowanie pliku wynikowego i przy zapisywaniu:" + +#: optiondialog.cpp:1371 +#, fuzzy +msgid "Auto Select" +msgstr "Wybór auto kopiowania" + +#: optiondialog.cpp:1374 +msgid "" +"If enabled then the encoding from the input files is used.\n" +"In ambiguous cases a dialog will ask the user to choose the encoding for " +"saving." +msgstr "" + +#: optiondialog.cpp:1378 +msgid "File Encoding for Preprocessor Files:" +msgstr "Kodowanie plików preprocesora:" + +#: optiondialog.cpp:1389 +msgid "Right To Left Language" +msgstr "JÄ™zyk z pismem prawy-do-lewego" + +#: optiondialog.cpp:1392 +msgid "" +"Some languages are read from right to left.\n" +"This setting will change the viewer and editor accordingly." +msgstr "" +"Niektóre jÄ™zyka pisze siÄ™ od prawej strony do lewej. \n" +"Ustawienie to zmieni odpowiednio za równo przeglÄ…darkÄ™ jak i edutor." + +#: optiondialog.cpp:1402 +#, fuzzy +msgid "Integration" +msgstr "Operacja" + +#: optiondialog.cpp:1402 +#, fuzzy +msgid "Integration Settings" +msgstr "Ustawienia regionalne" + +#: optiondialog.cpp:1412 +msgid "Command line options to ignore:" +msgstr "" + +#: optiondialog.cpp:1417 +msgid "" +"List of command line options that should be ignored when KDiff3 is used by " +"other tools.\n" +"Several values can be specified if separated via ';'\n" +"This will suppress the \"Unknown option\"-error." +msgstr "" + +#: optiondialog.cpp:1480 +msgid "" +"You selected a variable width font.\n" +"\n" +"Because this program doesn't handle variable width fonts\n" +"correctly, you might experience problems while editing.\n" +"\n" +"Do you want to continue or do you want to select another font." +msgstr "" +"Wybrano czcionkÄ™ o zmiennej szerokoÅ›ci.\n" +"\n" +"Ponieważ ten program nie obsÅ‚uguje poprawnie czcionki \n" +"o zmiennej szerokoÅ›ci, mogÄ… wystÄ…pić problemy w trakcie edycji\n" +"\n" +"Chcesz kontynuować czy też wybrać innÄ… czcionkÄ™." + +#: optiondialog.cpp:1484 +msgid "Incompatible Font" +msgstr "Niekompatybilna czcionka" + +#: optiondialog.cpp:1485 +msgid "Continue at Own Risk" +msgstr "Kontynuacja na wÅ‚asne ryzyko" + +#: optiondialog.cpp:1485 +msgid "Select Another Font" +msgstr "Wybierz innÄ… czcionkÄ™" + +#: optiondialog.cpp:1521 +msgid "This resets all options. Not only those of the current topic." +msgstr "Kasuje wszystkie ustawienia. DziaÅ‚a nie tylko na bieżącej zakÅ‚adce." + +#: pdiff.cpp:258 +msgid "PreprocessorCmd: " +msgstr "Komenda preprocesora: " + +#: pdiff.cpp:263 +msgid "" +"The following option(s) you selected might change data:\n" +msgstr "" +"NastÄ™pujÄ…ca opcja(e) które wybrano mogÄ… zmienić dane:\n" + +#: pdiff.cpp:264 +msgid "" +"\n" +"Most likely this is not wanted during a merge.\n" +"Do you want to disable these settings or continue with these settings active?" +msgstr "" +"\n" +"Najczęściej nie jest to pożądane podczas poÅ‚Ä…czenia.\n" +"Chcesz wyÅ‚Ä…czyć te ustawienia czy kontynuować z wÅ‚Ä…czonymi tymi ustawieniami?" + +#: pdiff.cpp:266 +msgid "Option Unsafe for Merging" +msgstr "Opcja niebezpieczna podczas Å‚Ä…czenia" + +#: pdiff.cpp:267 +msgid "Use These Options During Merge" +msgstr "Użyj tych opcji podczas Å‚Ä…czenia" + +#: pdiff.cpp:267 +msgid "Disable Unsafe Options" +msgstr "WyÅ‚Ä…cz niebezpieczne opcje" + +#: pdiff.cpp:297 +msgid "Loading A" +msgstr "Wczytywanie A" + +#: pdiff.cpp:301 +msgid "Loading B" +msgstr "Wczytywanie B" + +#: pdiff.cpp:318 pdiff.cpp:344 +msgid "Diff: A <-> B" +msgstr "Różnica: A <-> B" + +#: pdiff.cpp:324 pdiff.cpp:366 +msgid "Linediff: A <-> B" +msgstr "Różnica: A <-> B" + +#: pdiff.cpp:335 +msgid "Loading C" +msgstr "Wczytywanie C" + +#: pdiff.cpp:347 +msgid "Diff: B <-> C" +msgstr "Różnica: B <-> C" + +#: pdiff.cpp:350 +msgid "Diff: A <-> C" +msgstr "Różnica: A <-> C" + +#: pdiff.cpp:369 +msgid "Linediff: B <-> C" +msgstr "Różnica: B <-> C" + +#: pdiff.cpp:372 +msgid "Linediff: A <-> C" +msgstr "Różnica: A <-> C" + +#: pdiff.cpp:513 +#, fuzzy +msgid "All input files contain the same text, but are not binary equal." +msgstr "Wszystkie wejÅ›ciowe pliki zawierajÄ…c ten sam tekst." + +#: pdiff.cpp:515 pdiff.cpp:517 pdiff.cpp:519 +#, fuzzy +msgid "" +"Files %1 and %2 are binary equal.\n" +msgstr "" +"Pliki B i C sÄ… binarnie identyczne.\n" + +#: pdiff.cpp:516 pdiff.cpp:518 pdiff.cpp:520 +#, fuzzy +msgid "" +"Files %1 and %2 have equal text, but are not binary equal. \n" +msgstr "" +"Pliki A i B sÄ… binarnie identyczne.\n" + +#: pdiff.cpp:530 +msgid "" +"Some inputfiles don't seem to be pure textfiles.\n" +"Note that the KDiff3-merge was not meant for binary data.\n" +"Continue at your own risk." +msgstr "" +"Niektóre pliki nie wyglÄ…dajÄ… na pliki czysto tekstowe\n" +"Zauważ że KDiff3 nie nadaje siÄ™ do Å‚Ä…czenia danych binarnych.\n" +"Kontynuuj na wÅ‚asne ryzyko." + +#: pdiff.cpp:979 +msgid "Abort" +msgstr "O programie" + +#: pdiff.cpp:985 pdiff.cpp:1073 +msgid "Opening files..." +msgstr "Otwieranie plików..." + +#: pdiff.cpp:1050 pdiff.cpp:1121 +msgid "File open error" +msgstr "BÅ‚Ä…d otwarcia pliku" + +#: pdiff.cpp:1153 +msgid "Cutting selection..." +msgstr "Wytnij zaznaczenie..." + +#: pdiff.cpp:1174 +msgid "Copying selection to clipboard..." +msgstr "Kopiuj zaznaczony fragment do schowka..." + +#: pdiff.cpp:1190 +msgid "Inserting clipboard contents..." +msgstr "Wkleja zawartość schowka..." + +#: pdiff.cpp:1713 +msgid "Save && Continue" +msgstr "Zapisz i Kontynuuj" + +#: pdiff.cpp:1713 +msgid "Continue Without Saving" +msgstr "ZakoÅ„cz bez zapisywania" + +#: pdiff.cpp:1920 +msgid "Search complete." +msgstr "Wynik szukania." + +#: pdiff.cpp:1920 +msgid "Search Complete" +msgstr "PoÅ‚Ä…czenie zakoÅ„czone" + +#: pdiff.cpp:2144 +msgid "Nothing is selected in either diff input window." +msgstr "" + +#: pdiff.cpp:2144 +#, fuzzy +msgid "Error while adding manual diff range" +msgstr "BÅ‚Ä…d w trakcie tworzenia katalogu." + +#. i18n: file kdiff3_part.rc line 4 +#: rc.cpp:3 +#, no-c-format +msgid "&KDiff3" +msgstr "K&Diff3" + +#. i18n: file kdiff3_part.rc line 13 +#: rc.cpp:6 +#, no-c-format +msgid "Configure KDiff3" +msgstr "Konfiguracja KDiff3" + +#. i18n: file kdiff3_shell.rc line 7 +#: rc.cpp:15 +#, no-c-format +msgid "&Directory" +msgstr "&Katalog" + +#. i18n: file kdiff3_shell.rc line 30 +#: rc.cpp:18 +#, no-c-format +msgid "Current Item Merge Operation" +msgstr "Operacja poÅ‚Ä…czenia dla bieżącej pozycji" + +#. i18n: file kdiff3_shell.rc line 38 +#: rc.cpp:21 +#, no-c-format +msgid "Current Item Sync Operation" +msgstr "Operacja synchronizacji dla bieżącej pozycji" + +#. i18n: file kdiff3_shell.rc line 50 +#: rc.cpp:24 +#, no-c-format +msgid "&Movement" +msgstr "&Idź" + +#. i18n: file kdiff3_shell.rc line 61 +#: rc.cpp:27 +#, no-c-format +msgid "D&iffview" +msgstr "&Różnice" + +#. i18n: file kdiff3_shell.rc line 73 +#: rc.cpp:30 +#, no-c-format +msgid "&Merge" +msgstr "&PoÅ‚Ä…czenie" + +#. i18n: file kdiff3_shell.rc line 95 +#: rc.cpp:33 +#, no-c-format +msgid "&Window" +msgstr "&Okno" + +#: smalldialogs.cpp:53 +msgid "A (Base):" +msgstr "A (Podstawa):" + +#: smalldialogs.cpp:59 smalldialogs.cpp:75 smalldialogs.cpp:91 +#: smalldialogs.cpp:134 +msgid "File..." +msgstr "Plik..." + +#: smalldialogs.cpp:61 smalldialogs.cpp:77 smalldialogs.cpp:93 +#: smalldialogs.cpp:136 +msgid "Dir..." +msgstr "Katalog..." + +#: smalldialogs.cpp:86 +msgid "C (Optional):" +msgstr "C (Opcjonalnie):" + +#: smalldialogs.cpp:108 +msgid "Swap/Copy Names ..." +msgstr "" + +#: smalldialogs.cpp:114 smalldialogs.cpp:115 smalldialogs.cpp:116 +msgid "Swap %1<->%2" +msgstr "" + +#: smalldialogs.cpp:117 smalldialogs.cpp:118 smalldialogs.cpp:119 +msgid "Copy %1->Output" +msgstr "" + +#: smalldialogs.cpp:120 smalldialogs.cpp:121 smalldialogs.cpp:122 +msgid "Swap %1<->Output" +msgstr "" + +#: smalldialogs.cpp:129 +msgid "Output (optional):" +msgstr "Wynik (opcjonalnie):" + +#: smalldialogs.cpp:158 +msgid "Configure..." +msgstr "Konfiguracja..." + +#: smalldialogs.cpp:347 +msgid "Search text:" +msgstr "Szukaj tekstu:" + +#: smalldialogs.cpp:354 +msgid "Case sensitive" +msgstr "Rozróżniaj wielkość liter" + +#: smalldialogs.cpp:357 +msgid "Search A" +msgstr "Przeszukiwanie A" + +#: smalldialogs.cpp:362 +msgid "Search B" +msgstr "Przeszukiwanie B" + +#: smalldialogs.cpp:367 +msgid "Search C" +msgstr "Przeszukiwanie C" + +#: smalldialogs.cpp:372 +msgid "Search output" +msgstr "Wynik szukania" + +#: smalldialogs.cpp:377 +msgid "&Search" +msgstr "&Szukanie" + +#: smalldialogs.cpp:394 +msgid "Regular Expression Tester" +msgstr "" + +#: smalldialogs.cpp:405 +msgid "Example auto merge line:" +msgstr "" + +#: smalldialogs.cpp:407 +msgid "For auto merge test copy a line as used in your files." +msgstr "" + +#: smalldialogs.cpp:413 smalldialogs.cpp:442 smalldialogs.cpp:479 +msgid "Match result:" +msgstr "" + +#: smalldialogs.cpp:432 +msgid "Example history start line (with leading comment):" +msgstr "" + +#: smalldialogs.cpp:435 +msgid "" +"Copy a history start line as used in your files,\n" +"including the leading comment." +msgstr "" + +#: smalldialogs.cpp:461 +msgid "History sort key order:" +msgstr "" + +#: smalldialogs.cpp:469 +msgid "Example history entry start line (without leading comment):" +msgstr "" + +#: smalldialogs.cpp:471 +msgid "" +"Copy a history entry start line as used in your files,\n" +"but omit the leading comment." +msgstr "" + +#: smalldialogs.cpp:486 +msgid "Sort key result:" +msgstr "" + +#: smalldialogs.cpp:537 smalldialogs.cpp:547 smalldialogs.cpp:568 +msgid "Match success." +msgstr "" + +#: smalldialogs.cpp:541 smalldialogs.cpp:551 smalldialogs.cpp:574 +#, fuzzy +msgid "Match failed." +msgstr "Nieudany zapis." + +#: smalldialogs.cpp:559 +msgid "Opening and closing parentheses don't match in regular expression." +msgstr "" + +#, fuzzy +#~ msgid "Diff and Merge" +#~ msgstr "Różnice i PoÅ‚Ä…czenia" + +#, fuzzy +#~ msgid "Save Directory Merge State ..." +#~ msgstr "PoÅ‚Ä…czenia katalogów" + +#, fuzzy +#~ msgid "Load Directory Merge State ..." +#~ msgstr "PoÅ‚Ä…czenia katalogów" + +#, fuzzy +#~ msgid "Synchronize Directories" +#~ msgstr "Synchronizacja katalogów" + +#, fuzzy +#~ msgid "Copy Newer Files Instead of Merging" +#~ msgstr "Kopiuj nowsze zamiast Å‚Ä…czyć (niepewne)" + +#~ msgid "List only deltas" +#~ msgstr "WyÅ›wietl tylko różnice" + +#~ msgid "Files and directories without change will not appear in the list." +#~ msgstr "Pliki i katalogi bez zmian nie majÄ… pokazać siÄ™ na liÅ›cie." + +#, fuzzy +#~ msgid "no selection" +#~ msgstr "Wybór auto kopiowania" + +#, fuzzy +#~ msgid "Manually match lines" +#~ msgstr "Wybór użytkownika" + +#~ msgid "Has no effect. For compatibility with certain tools." +#~ msgstr "Nie ma wpÅ‚ywu na wynik. Ze wzglÄ™du na kompatybilność z pewnymi narzÄ™dziami." + +#~ msgid "For compatibility with certain tools." +#~ msgstr "Ze wzglÄ™du na kompatybilność z pewnymi narzÄ™dziami." + +#~ msgid "Colors in Editor & Diff Output" +#~ msgstr "Kolory w edytorze i wyjÅ›ciu różnic" diff --git a/po/pt.po b/po/pt.po new file mode 100644 index 0000000..51868c1 --- /dev/null +++ b/po/pt.po @@ -0,0 +1,2546 @@ +msgid "" +msgstr "" +"Project-Id-Version: kdiff3\n" +"POT-Creation-Date: 2006-11-05 08:45+0100\n" +"PO-Revision-Date: 2006-11-05 14:35+0000\n" +"Last-Translator: Pedro Morais \n" +"Language-Team: pt \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-POFile-IgnoreConsistency: Diff Settings\n" +"X-POFile-SpellExtra: LF return Dif carriage ms diff CR KDiff cvsignore\n" +"X-POFile-SpellExtra: orig Log\n" +"X-POFile-IgnoreConsistency: End\n" + +#: _translatorinfo.cpp:1 +msgid "" +"_: NAME OF TRANSLATORS\n" +"Your names" +msgstr "José Nuno Pires,Pedro Morais" + +#: _translatorinfo.cpp:3 +msgid "" +"_: EMAIL OF TRANSLATORS\n" +"Your emails" +msgstr "jncp@netcabo.pt,morais@kde.org" + +#: diff.cpp:246 +msgid "Writing clipboard data to temp file failed." +msgstr "" +"A escrita de dados da área de transferência para o ficheiro temporário falhou." + +#: diff.cpp:250 +msgid "From Clipboard" +msgstr "Da Ãrea de Transferência" + +#: diff.cpp:491 +msgid "" +"Preprocessing possibly failed. Check this command:\n" +"\n" +" %1\n" +"\n" +"The preprocessing command will be disabled now." +msgstr "" +"O pré-processamento possivelmente falhou. Verifique este comando:\n" +" %1\n" +"O comando de pré-processamento vai ser desactivado." + +#: diff.cpp:526 +msgid "" +"The line-matching-preprocessing possibly failed. Check this command:\n" +"\n" +" %1\n" +"\n" +"The line-matching-preprocessing command will be disabled now." +msgstr "" +"O pré-processamento com procura de linhas possivelmente falhou. Verifique este " +"comando:\n" +" %1\n" +"O comando de pré-processamento com procura de linhas vai ser desactivado." + +#: diff.cpp:1631 diff.cpp:1645 +msgid "" +"Data loss error:\n" +"If it is reproducable please contact the author.\n" +msgstr "" +"Erro de perda de dados:\n" +"Se for reprodutível, contacte por favor o autor.\n" + +#: diff.cpp:1633 diff.cpp:1647 +msgid "Severe Internal Error" +msgstr "Erro Interno Grave" + +#: difftextwindow.cpp:1643 kdiff3.cpp:753 +msgid "Top line" +msgstr "Linha de topo" + +#: difftextwindow.cpp:1653 +msgid "End" +msgstr "Fim" + +#: directorymergewindow.cpp:142 +msgid "Mix of links and normal files." +msgstr "Mistura de ligações e ficheiros normais." + +#: directorymergewindow.cpp:149 +msgid "Link: " +msgstr "Ligação: " + +#: directorymergewindow.cpp:157 +msgid "Size. " +msgstr "Tamanho. " + +#: directorymergewindow.cpp:170 +msgid "Date & Size: " +msgstr "Data e Tamanho: " + +#: directorymergewindow.cpp:179 directorymergewindow.cpp:185 +msgid "Creating temp copy of %1 failed." +msgstr "A criação da cópia temporária do %1 falhou." + +#: directorymergewindow.cpp:196 directorymergewindow.cpp:204 +msgid "Opening %1 failed." +msgstr "O acesso ao %1 foi mal-sucedido." + +#: directorymergewindow.cpp:208 +msgid "Comparing file..." +msgstr "A comparar o ficheiro..." + +#: directorymergewindow.cpp:218 directorymergewindow.cpp:224 +#, c-format +msgid "Error reading from %1" +msgstr "Erro ao ler de %1" + +#: directorymergewindow.cpp:282 +msgid "Name" +msgstr "Nome" + +#: directorymergewindow.cpp:286 +msgid "Operation" +msgstr "Operação" + +#: directorymergewindow.cpp:287 +msgid "Status" +msgstr "Estado" + +#: directorymergewindow.cpp:288 +msgid "Unsolved" +msgstr "Não resolvido" + +#: directorymergewindow.cpp:289 +msgid "Solved" +msgstr "Resolvido" + +#: directorymergewindow.cpp:290 +msgid "Nonwhite" +msgstr "Não vazio" + +#: directorymergewindow.cpp:291 +msgid "White" +msgstr "Vazio" + +#: directorymergewindow.cpp:319 +msgid "" +"You are currently doing a directory merge. Are you sure, you want to abort the " +"merge and rescan the directory?" +msgstr "" +"Você está neste momento a fazer uma junção de pastas. Tem a certeza que deseja " +"interromper a junção e analisar a pasta de novo?" + +#: directorymergewindow.cpp:320 directorymergewindow.cpp:2868 +msgid "Rescan" +msgstr "Pesquisar de Novo" + +#: directorymergewindow.cpp:320 kdiff3.cpp:603 pdiff.cpp:979 +msgid "Continue Merging" +msgstr "Continuar a Junção" + +#: directorymergewindow.cpp:462 +msgid "Opening of directories failed:" +msgstr "O acesso às pastas foi mal-sucedido:" + +#: directorymergewindow.cpp:465 +msgid "" +"Dir A \"%1\" does not exist or is not a directory.\n" +msgstr "" +"A pasta A \"%1\" não existe ou não é uma pasta.\n" + +#: directorymergewindow.cpp:468 +msgid "" +"Dir B \"%1\" does not exist or is not a directory.\n" +msgstr "" +"A pasta B \"%1\" não existe ou não é uma pasta.\n" + +#: directorymergewindow.cpp:471 +msgid "" +"Dir C \"%1\" does not exist or is not a directory.\n" +msgstr "" +"A pasta C \"%1\" não existe ou não é uma pasta.\n" + +#: directorymergewindow.cpp:473 +msgid "Directory Open Error" +msgstr "Erro de Acesso à Pasta" + +#: directorymergewindow.cpp:481 +msgid "" +"The destination directory must not be the same as A or B when three directories " +"are merged.\n" +"Check again before continuing." +msgstr "" +"A pasta de destino não pode ser a mesma que a A ou a B quando são reunidas três " +"pastas.\n" +"Verifique de novo antes de continuar." + +#: directorymergewindow.cpp:483 +msgid "Parameter Warning" +msgstr "Aviso do Parâmetro" + +#: directorymergewindow.cpp:488 +msgid "Scanning directories..." +msgstr "A pesquisar as pastas..." + +#: directorymergewindow.cpp:537 +msgid "Reading Directory A" +msgstr "A Ler a Pasta A" + +#: directorymergewindow.cpp:559 +msgid "Reading Directory B" +msgstr "A Ler a Pasta B" + +#: directorymergewindow.cpp:581 +msgid "Reading Directory C" +msgstr "A Ler a Pasta C" + +#: directorymergewindow.cpp:607 +msgid "Some subdirectories were not readable in" +msgstr "Algumas das sub-pastas não eram legíveis" + +#: directorymergewindow.cpp:612 +msgid "Check the permissions of the subdirectories." +msgstr "Verifique as permissões das sub-pastas." + +#: directorymergewindow.cpp:646 kdiff3.cpp:552 kdiff3.cpp:636 kdiff3.cpp:661 +#: kdiff3.cpp:934 kdiff3.cpp:955 pdiff.cpp:1059 pdiff.cpp:1131 pdiff.cpp:1169 +#: pdiff.cpp:1185 pdiff.cpp:1215 pdiff.cpp:1226 +msgid "Ready." +msgstr "Pronto." + +#: directorymergewindow.cpp:660 +msgid "Directory Comparison Status" +msgstr "Estado da Comparação da Pasta" + +#: directorymergewindow.cpp:661 +msgid "Number of subdirectories:" +msgstr "Número de sub-pastas:" + +#: directorymergewindow.cpp:662 +msgid "Number of equal files:" +msgstr "Número de ficheiros iguais:" + +#: directorymergewindow.cpp:663 +msgid "Number of different files:" +msgstr "Número de ficheiros diferentes:" + +#: directorymergewindow.cpp:666 +msgid "Number of manual merges:" +msgstr "Número de junções manuais:" + +#: directorymergewindow.cpp:802 +msgid "This affects all merge operations." +msgstr "Isto afecta todas as operações de junção." + +#: directorymergewindow.cpp:803 +msgid "Changing All Merge Operations" +msgstr "A Mudar Todas as Operações de Junção" + +#: directorymergewindow.cpp:803 mergeresultwindow.cpp:287 +msgid "C&ontinue" +msgstr "C&ontinuar" + +#: directorymergewindow.cpp:1169 +msgid "Processing " +msgstr "A processar " + +#: directorymergewindow.cpp:1647 directorymergewindow.cpp:1653 +msgid "To do." +msgstr "A fazer." + +#: directorymergewindow.cpp:1756 directorymergewindow.cpp:2899 +msgid "Copy A to B" +msgstr "Copiar A para B" + +#: directorymergewindow.cpp:1757 directorymergewindow.cpp:2900 +msgid "Copy B to A" +msgstr "Copiar B para A" + +#: directorymergewindow.cpp:1758 directorymergewindow.cpp:2901 +msgid "Delete A" +msgstr "Apagar A" + +#: directorymergewindow.cpp:1759 directorymergewindow.cpp:2902 +msgid "Delete B" +msgstr "Apagar B" + +#: directorymergewindow.cpp:1760 +msgid "Delete A & B" +msgstr "Apagar A e B" + +#: directorymergewindow.cpp:1761 directorymergewindow.cpp:2904 +msgid "Merge to A" +msgstr "Juntar a A" + +#: directorymergewindow.cpp:1762 directorymergewindow.cpp:2905 +msgid "Merge to B" +msgstr "Juntar a B" + +#: directorymergewindow.cpp:1763 +msgid "Merge to A & B" +msgstr "Juntar a A e B" + +#: directorymergewindow.cpp:1767 directorymergewindow.cpp:2896 +msgid "Delete (if exists)" +msgstr "Apagar (se existir)" + +#: directorymergewindow.cpp:1768 directorymergewindow.cpp:1769 +#: directorymergewindow.cpp:2895 optiondialog.cpp:809 smalldialogs.cpp:102 +msgid "Merge" +msgstr "Reunir" + +#: directorymergewindow.cpp:1768 directorymergewindow.cpp:1769 +msgid "Merge (manual)" +msgstr "Juntar (manual)" + +#: directorymergewindow.cpp:1770 +msgid "Error: Conflicting File Types" +msgstr "Erro: Tipos de Ficheiros em Conflito" + +#: directorymergewindow.cpp:1771 +msgid "Error: Dates are equal but files are not." +msgstr "Erro: As datas são iguais mas os ficheiros não." + +#: directorymergewindow.cpp:1795 directorymergewindow.cpp:1824 +#: directorymergewindow.cpp:1849 +msgid "This operation is currently not possible." +msgstr "Esta operação não é possível de momento." + +#: directorymergewindow.cpp:1795 directorymergewindow.cpp:1824 +#: directorymergewindow.cpp:1849 directorymergewindow.cpp:2106 +msgid "Operation Not Possible" +msgstr "Operação Não Possível" + +#: directorymergewindow.cpp:1888 +msgid "" +"This should never happen: \n" +"\n" +"mergeResultSaved: m_pMFI=0\n" +"\n" +"If you know how to reproduce this, please contact the program author." +msgstr "" +"Isto nunca deve acontecer:\n" +"\n" +"mergeResultSaved: m_pMFI=0\n" +"\n" +"Se souber como reproduzir isto, contacte por favor o autor do programa." + +#: directorymergewindow.cpp:1888 +msgid "Program Error" +msgstr "Erro no Programa" + +#: directorymergewindow.cpp:1899 +msgid "" +"An error occurred while copying.\n" +msgstr "" +"Ocorreu um erro ao copiar.\n" + +#: directorymergewindow.cpp:1900 directorymergewindow.cpp:2306 +msgid "Merge Error" +msgstr "Erro na Junção" + +#: directorymergewindow.cpp:1905 directorymergewindow.cpp:2311 +msgid "Error." +msgstr "Erro." + +#: directorymergewindow.cpp:1910 directorymergewindow.cpp:2202 +#: directorymergewindow.cpp:2242 +msgid "Done." +msgstr "Terminado." + +#: directorymergewindow.cpp:1933 +msgid "Not saved." +msgstr "Não gravado." + +#: directorymergewindow.cpp:1968 +msgid "Unknown merge operation. (This must never happen!)" +msgstr "Operação de junção desconhecida. (Isto nunca deve acontecer!)" + +#: directorymergewindow.cpp:2000 +msgid "Unknown merge operation." +msgstr "Operação de junção desconhecida." + +#: directorymergewindow.cpp:2015 +msgid "" +"The merge is about to begin.\n" +"\n" +"Choose \"Do it\" if you have read the instructions and know what you are " +"doing.\n" +"Choosing \"Simulate it\" will tell you what would happen.\n" +"\n" +"Be aware that this program still has beta status and there is NO WARRANTY " +"whatsoever! Make backups of your vital data!" +msgstr "" +"A junção está prestes a começar.\n" +"\n" +"Escolha \"Fazê-lo\" se leu as instruções e sabe o que está a fazer.\n" +"Se escolher \"Simulá-lo\" irá saber o que iria acontecer.\n" +"\n" +"Tenha em atenção que este programa está ainda em estado Beta e NÃO EXISTE " +"NENHUMA GARANTIA! Faça cópias de segurança dos seus dados vitais!" + +#: directorymergewindow.cpp:2020 +msgid "Starting Merge" +msgstr "A Iniciar a Junção" + +#: directorymergewindow.cpp:2020 +msgid "Do It" +msgstr "Fazê-lo" + +#: directorymergewindow.cpp:2020 +msgid "Simulate It" +msgstr "Simulá-lo" + +#: directorymergewindow.cpp:2046 +msgid "" +"The highlighted item has a different type in the different directories. Select " +"what to do." +msgstr "" +"O item realçado tem um tipo diferente nas várias pastas. Seleccione o que " +"fazer." + +#: directorymergewindow.cpp:2055 +msgid "" +"The modification dates of the file are equal but the files are not. Select what " +"to do." +msgstr "" +"As datas de modificação dos ficheiros são iguais mas estes não o são. " +"Seleccione o que fazer." + +#: directorymergewindow.cpp:2106 +msgid "" +"This operation is currently not possible because directory merge is currently " +"running." +msgstr "" +"Esta operação não é possível de momento que a junção da pasta está a decorrer." + +#: directorymergewindow.cpp:2166 +msgid "" +"There was an error in the last step.\n" +"Do you want to continue with the item that caused the error or do you want to " +"skip this item?" +msgstr "" +"Ocorreu um erro no último passo.\n" +"Deseja continuar com o item que causou o erro ou deseja saltar este item?" + +#: directorymergewindow.cpp:2168 +msgid "Continue merge after an error" +msgstr "Continuar a junção após um erro" + +#: directorymergewindow.cpp:2168 +msgid "Continue With Last Item" +msgstr "Continuar com o Último Item" + +#: directorymergewindow.cpp:2168 +msgid "Skip Item" +msgstr "Saltar o Item" + +#: directorymergewindow.cpp:2202 +msgid "Skipped." +msgstr "Ignorado." + +#: directorymergewindow.cpp:2209 directorymergewindow.cpp:2435 +msgid "In progress..." +msgstr "Em progresso..." + +#: directorymergewindow.cpp:2257 +msgid "Merge operation complete." +msgstr "A operação de junção terminou." + +#: directorymergewindow.cpp:2257 directorymergewindow.cpp:2260 +msgid "Merge Complete" +msgstr "Junção Completa" + +#: directorymergewindow.cpp:2269 +msgid "" +"Simulated merge complete: Check if you agree with the proposed operations." +msgstr "" +"A simulação da junção terminou: Verifique se concorda com as operações " +"propostas." + +#: directorymergewindow.cpp:2305 +msgid "" +"An error occurred. Press OK to see detailed information.\n" +msgstr "" +"Ocorreu um erro. Carregue em OK para ver a informação detalhada.\n" + +#: directorymergewindow.cpp:2348 +msgid "Error: While deleting %1: Creating backup failed." +msgstr "Erro: Ao tentar apagar o %1: a criação da cópia de segurança falhou." + +#: directorymergewindow.cpp:2355 +msgid "delete directory recursively( %1 )" +msgstr "apagar recursivamente as pastas( %1 )" + +#: directorymergewindow.cpp:2357 +msgid "delete( %1 )" +msgstr "delete( %1 )" + +#: directorymergewindow.cpp:2372 +msgid "Error: delete dir operation failed while trying to read the directory." +msgstr "Erro: a operação de remoção da pasta falhou ao tentar ler a pasta." + +#: directorymergewindow.cpp:2391 +msgid "Error: rmdir( %1 ) operation failed." +msgstr "Erro: a operação rmdir( %1 ) falhou." + +#: directorymergewindow.cpp:2401 +msgid "Error: delete operation failed." +msgstr "Erro: a operação de remoção falhou." + +#: directorymergewindow.cpp:2427 +msgid "manual merge( %1, %2, %3 -> %4)" +msgstr "junção manual( %1, %2, %3 -> %4)" + +#: directorymergewindow.cpp:2430 +msgid "" +" Note: After a manual merge the user should continue by pressing F7." +msgstr "" +" Nota: Após uma junção manual o utilizador deve continuar com o F7." + +#: directorymergewindow.cpp:2453 +msgid "Error: copy( %1 -> %2 ) failed.Deleting existing destination failed." +msgstr "" +"Erro: a cópia( %1 -> %2 ) falhou. A remoção do destino existente falhou." + +#: directorymergewindow.cpp:2463 +msgid "copyLink( %1 -> %2 )" +msgstr "copyLink( %1 -> %2 )" + +#: directorymergewindow.cpp:2474 +msgid "Error: copyLink failed: Remote links are not yet supported." +msgstr "Erro: o copyLink falhou: As ligações remotas ainda não são suportadas." + +#: directorymergewindow.cpp:2480 +msgid "Error: copyLink failed." +msgstr "Erro: o copyLink falhou." + +#: directorymergewindow.cpp:2500 +msgid "copy( %1 -> %2 )" +msgstr "cópia( %1 -> %2 )" + +#: directorymergewindow.cpp:2526 +msgid "Error during rename( %1 -> %2 ): Cannot delete existing destination." +msgstr "" +"Erro durante o rename( %1 -> %2 ): Não é possível remover o destino existente." + +#: directorymergewindow.cpp:2532 +msgid "rename( %1 -> %2 )" +msgstr "rename( %1 -> %2 )" + +#: directorymergewindow.cpp:2541 +msgid "Error: Rename failed." +msgstr "Erro: A mudança de nome falhou." + +#: directorymergewindow.cpp:2559 +msgid "Error during makeDir of %1. Cannot delete existing file." +msgstr "" +"Erro durante o makeDir do %1. Não é possível remover o ficheiro existente." + +#: directorymergewindow.cpp:2575 +msgid "makeDir( %1 )" +msgstr "makeDir( %1 )" + +#: directorymergewindow.cpp:2585 +msgid "Error while creating directory." +msgstr "Erro ao criar a pasta." + +#: directorymergewindow.cpp:2608 directorymergewindow.cpp:2725 +msgid "Dest" +msgstr "Dest" + +#: directorymergewindow.cpp:2612 directorymergewindow.cpp:2650 +msgid "Dir" +msgstr "Dir" + +#: directorymergewindow.cpp:2613 +msgid "Type" +msgstr "Tipo" + +#: directorymergewindow.cpp:2614 +msgid "Size" +msgstr "Tamanho" + +#: directorymergewindow.cpp:2615 +msgid "Attr" +msgstr "Atrib" + +#: directorymergewindow.cpp:2616 +msgid "Last Modification" +msgstr "Última Modificação" + +#: directorymergewindow.cpp:2617 +msgid "Link-Destination" +msgstr "Ligação-Destino" + +#: directorymergewindow.cpp:2667 +msgid "not available" +msgstr "não disponível" + +#: directorymergewindow.cpp:2687 +msgid "A (Dest): " +msgstr "A (Dest): " + +#: directorymergewindow.cpp:2690 +msgid "A (Base): " +msgstr "A (Base): " + +#: directorymergewindow.cpp:2696 +msgid "B (Dest): " +msgstr "B (Dest): " + +#: directorymergewindow.cpp:2704 +msgid "C (Dest): " +msgstr "C (Dest): " + +#: directorymergewindow.cpp:2710 +msgid "Dest: " +msgstr "Dest: " + +#: directorymergewindow.cpp:2775 +msgid "Save Directory Merge State As..." +msgstr "Gravar o Estado da Junção de Pastas Como..." + +#: directorymergewindow.cpp:2862 +msgid "Start/Continue Directory Merge" +msgstr "Iniciar/Continuar a Junção da Pasta" + +#: directorymergewindow.cpp:2863 +msgid "Run Operation for Current Item" +msgstr "Executar a Operação no Item Actual" + +#: directorymergewindow.cpp:2864 +msgid "Compare Selected File" +msgstr "Comparar o Ficheiro Seleccionado" + +#: directorymergewindow.cpp:2865 +msgid "Merge Current File" +msgstr "Juntar o Ficheiro Actual" + +#: directorymergewindow.cpp:2866 +msgid "Fold All Subdirs" +msgstr "Fechar Todas as Sub-Pasta" + +#: directorymergewindow.cpp:2867 +msgid "Unfold All Subdirs" +msgstr "Expandir Todas as Sub-Pastas" + +#: directorymergewindow.cpp:2871 +msgid "Choose A for All Items" +msgstr "Seleccionar Todos os Itens do A" + +#: directorymergewindow.cpp:2872 +msgid "Choose B for All Items" +msgstr "Seleccionar Todos os Itens do B" + +#: directorymergewindow.cpp:2873 +msgid "Choose C for All Items" +msgstr "Seleccionar Todos os Itens do C" + +#: directorymergewindow.cpp:2874 +msgid "Auto-Choose Operation for All Items" +msgstr "Escolher Automaticamente a Operação para Todos os Itens" + +#: directorymergewindow.cpp:2875 +msgid "No Operation for All Items" +msgstr "Nenhuma Operação para Todos os Itens" + +#: directorymergewindow.cpp:2880 +msgid "Show Identical Files" +msgstr "Mostrar os Ficheiros Idênticos" + +#: directorymergewindow.cpp:2881 +msgid "Show Different Files" +msgstr "Mostrar os Ficheiros Diferentes" + +#: directorymergewindow.cpp:2882 +msgid "Show Files only in A" +msgstr "Mostrar os Ficheiros Apenas no A" + +#: directorymergewindow.cpp:2883 +msgid "Show Files only in B" +msgstr "Mostrar os Ficheiros Apenas no B" + +#: directorymergewindow.cpp:2884 +msgid "Show Files only in C" +msgstr "Mostrar os Ficheiros Apenas no C" + +#: directorymergewindow.cpp:2888 +msgid "Compare Explicitly Selected Files" +msgstr "Comparar os Ficheiros Seleccionados Explicitamente" + +#: directorymergewindow.cpp:2889 +msgid "Merge Explicitly Selected Files" +msgstr "Juntar os Ficheiros Seleccionados Explicitamente" + +#: directorymergewindow.cpp:2891 directorymergewindow.cpp:2898 +msgid "Do Nothing" +msgstr "Não Fazer Nada" + +#: directorymergewindow.cpp:2892 +msgid "A" +msgstr "A" + +#: directorymergewindow.cpp:2893 +msgid "B" +msgstr "B" + +#: directorymergewindow.cpp:2894 +msgid "C" +msgstr "C" + +#: directorymergewindow.cpp:2903 +msgid "Delete A && B" +msgstr "Apagar A e B" + +#: directorymergewindow.cpp:2906 +msgid "Merge to A && B" +msgstr "Juntar a A e B" + +#: fileaccess.cpp:595 +msgid "" +"While trying to make a backup, deleting an older backup failed. \n" +"Filename: " +msgstr "" +"Ao tentar fazer uma cópia de segurança, a remoção de uma cópia anterior falhou. " +"\n" +"Ficheiro: " + +#: fileaccess.cpp:602 +msgid "" +"While trying to make a backup, renaming failed. \n" +"Filenames: " +msgstr "" +"Ao tentar fazer uma cópia de segurança, a mudança de nome falhou. \n" +"Ficheiros: " + +#: fileaccess.cpp:624 +#, c-format +msgid "Getting file status: %1" +msgstr "A obter o estado do ficheiro: %1" + +#: fileaccess.cpp:667 +#, c-format +msgid "Reading file: %1" +msgstr "A ler o ficheiro: %1" + +#: fileaccess.cpp:703 +#, c-format +msgid "Writing file: %1" +msgstr "A escrever o ficheiro: %1" + +#: fileaccess.cpp:731 +msgid "Out of memory" +msgstr "Sem memória" + +#: fileaccess.cpp:766 +#, c-format +msgid "Making directory: %1" +msgstr "A criar a pasta: %1" + +#: fileaccess.cpp:786 +#, c-format +msgid "Removing directory: %1" +msgstr "A remover a pasta: %1" + +#: fileaccess.cpp:801 +#, c-format +msgid "Removing file: %1" +msgstr "A remover o ficheiro. %1" + +#: fileaccess.cpp:817 +msgid "Creating symbolic link: %1 -> %2" +msgstr "A criar a ligação simbólica: %1 -> %2" + +#: fileaccess.cpp:843 +msgid "Renaming file: %1 -> %2" +msgstr "A mudar o nome do ficheiro: %1 -> %2" + +#: fileaccess.cpp:879 +msgid "Copying file: %1 -> %2" +msgstr "A copiar o ficheiro: %1 -> %2" + +#: fileaccess.cpp:893 +#, c-format +msgid "" +"Error during file copy operation: Opening file for reading failed. Filename: %1" +msgstr "" +"Erro durante a operação de cópia do ficheiro: O acesso ao ficheiro para leitura " +"falhou. Ficheiro: %1" + +#: fileaccess.cpp:899 +#, c-format +msgid "" +"Error during file copy operation: Opening file for writing failed. Filename: %1" +msgstr "" +"Erro durante a operação de cópia do ficheiro: O acesso ao ficheiro para escrita " +"falhou. Ficheiro: %1" + +#: fileaccess.cpp:914 +#, c-format +msgid "Error during file copy operation: Reading failed. Filename: %1" +msgstr "" +"Erro durante a operação de cópia do ficheiro: A leitura falhou. Ficheiro: %1" + +#: fileaccess.cpp:923 +#, c-format +msgid "Error during file copy operation: Writing failed. Filename: %1" +msgstr "" +"Erro durante a operação de cópia do ficheiro: A escrita falhou. Ficheiro: %1" + +#: fileaccess.cpp:1219 +msgid "Reading directory: " +msgstr "A ler a pasta: " + +#: fileaccess.cpp:1348 +#, c-format +msgid "Listing directory: %1" +msgstr "A analisar a pasta: %1" + +#: kdiff3.cpp:142 +msgid "Current Configuration:" +msgstr "Configuração Actual:" + +#: kdiff3.cpp:147 +msgid "Config Option Error:" +msgstr "Erro da Opção de Configuração:" + +#: kdiff3.cpp:187 +msgid "Option --auto used, but no output file specified." +msgstr "" +"A opção --auto foi indicada, mas não foi especificado nenhum ficheiro de saída." + +#: kdiff3.cpp:323 +msgid "Option --auto ignored for directory comparison." +msgstr "A opção --auto é ignorada para a comparação de pastas." + +#: kdiff3.cpp:359 +msgid "Saving failed." +msgstr "A gravação falhou." + +#: kdiff3.cpp:386 pdiff.cpp:1041 pdiff.cpp:1112 +msgid "Opening of these files failed:" +msgstr "O acesso a estes ficheiros falhou:" + +#: kdiff3.cpp:395 +msgid "File Open Error" +msgstr "Erro de Acesso ao Ficheiro" + +#: kdiff3.cpp:418 +msgid "Opens documents for comparison..." +msgstr "Abre os documentos para os comparar..." + +#: kdiff3.cpp:423 +msgid "Saves the merge result. All conflicts must be solved!" +msgstr "" +"Grava o resultado da gravação. Todos os conflitos devem ficar resolvidos!" + +#: kdiff3.cpp:425 +msgid "Saves the current document as..." +msgstr "Grava o documento actual como..." + +#: kdiff3.cpp:427 +msgid "Print the differences" +msgstr "Imprimir as diferenças" + +#: kdiff3.cpp:429 +msgid "Quits the application" +msgstr "Sai da aplicação" + +#: kdiff3.cpp:431 +msgid "Cuts the selected section and puts it to the clipboard" +msgstr "Corta a secção seleccionada e coloca-a na área de transferência" + +#: kdiff3.cpp:433 +msgid "Copies the selected section to the clipboard" +msgstr "Copia a secção seleccionada para a área de transferência" + +#: kdiff3.cpp:435 +msgid "Pastes the clipboard contents to actual position" +msgstr "Cola o conteúdo da área de transferência na posição actual" + +#: kdiff3.cpp:437 +msgid "Select everything in current window" +msgstr "Selecciona tudo na janela actual" + +#: kdiff3.cpp:439 +msgid "Search for a string" +msgstr "Procura por um texto" + +#: kdiff3.cpp:441 +msgid "Search again for the string" +msgstr "Procura de novo pelo texto" + +#: kdiff3.cpp:443 +msgid "Enables/disables the toolbar" +msgstr "Activa/desactiva a barra de ferramentas" + +#: kdiff3.cpp:445 +msgid "Enables/disables the statusbar" +msgstr "Activa/desactiva a barra de estado" + +#: kdiff3.cpp:449 +msgid "Configure KDiff3..." +msgstr "Configurar o KDiff3..." + +#: kdiff3.cpp:470 +msgid "Go to Current Delta" +msgstr "Ir para o Delta Actual" + +#: kdiff3.cpp:471 +msgid "Go to First Delta" +msgstr "Ir para o Primeiro Delta" + +#: kdiff3.cpp:472 +msgid "Go to Last Delta" +msgstr "Ir para o Último Delta" + +#: kdiff3.cpp:473 +msgid "(Skips white space differences when \"Show White Space\" is disabled.)" +msgstr "" +"(Ignora as diferenças de espaço em branco quando \"Mostrar os Espaços em " +"Branco\" está desactivado.)" + +#: kdiff3.cpp:474 +msgid "" +"(Does not skip white space differences even when \"Show White Space\" is " +"disabled.)" +msgstr "" +"(Não ignora as diferenças de espaço em branco mesmo quando \"Mostrar os Espaços " +"em Branco\" está desactivado.)" + +#: kdiff3.cpp:475 +msgid "Go to Previous Delta" +msgstr "Ir para o Delta Anterior" + +#: kdiff3.cpp:477 +msgid "Go to Next Delta" +msgstr "Ir para o Próximo Delta" + +#: kdiff3.cpp:479 +msgid "Go to Previous Conflict" +msgstr "Ir para o Conflito Anterior" + +#: kdiff3.cpp:481 +msgid "Go to Next Conflict" +msgstr "Ir para o Próximo Conflito" + +#: kdiff3.cpp:483 +msgid "Go to Previous Unsolved Conflict" +msgstr "Ir para o Conflito por Resolver Anterior" + +#: kdiff3.cpp:485 +msgid "Go to Next Unsolved Conflict" +msgstr "Ir para o Conflito por Resolver Seguinte" + +#: kdiff3.cpp:487 +msgid "Select Line(s) From A" +msgstr "Seleccionar as Linhas do A" + +#: kdiff3.cpp:488 +msgid "Select Line(s) From B" +msgstr "Seleccionar as Linhas do B" + +#: kdiff3.cpp:489 +msgid "Select Line(s) From C" +msgstr "Seleccionar as Linhas do C" + +#: kdiff3.cpp:490 +msgid "Automatically Go to Next Unsolved Conflict After Source Selection" +msgstr "" +"Ir Automaticamente para o Próximo Conflito por Resolver Após a Selecção do " +"Código" + +#: kdiff3.cpp:492 +msgid "Show Space && Tabulator Characters for Differences" +msgstr "Mostrar as Diferenças de Espaços e Tabulações" + +#: kdiff3.cpp:493 +msgid "Show White Space" +msgstr "Mostrar os Espaços em Branco" + +#: kdiff3.cpp:495 +msgid "Show Line Numbers" +msgstr "Mostrar os Números de Linha" + +#: kdiff3.cpp:496 +msgid "Choose A Everywhere" +msgstr "Escolher o A em Todo o Lado" + +#: kdiff3.cpp:497 +msgid "Choose B Everywhere" +msgstr "Escolher o B em Todo o Lado" + +#: kdiff3.cpp:498 +msgid "Choose C Everywhere" +msgstr "Escolher o C em Todo o Lado" + +#: kdiff3.cpp:499 +msgid "Choose A for All Unsolved Conflicts" +msgstr "Escolher A em Todos os Conflitos por Resolver" + +#: kdiff3.cpp:500 +msgid "Choose B for All Unsolved Conflicts" +msgstr "Escolher B em Todos os Conflitos por Resolver" + +#: kdiff3.cpp:501 +msgid "Choose C for All Unsolved Conflicts" +msgstr "Escolher C em Todos os Conflitos por Resolver" + +#: kdiff3.cpp:502 +msgid "Choose A for All Unsolved Whitespace Conflicts" +msgstr "Escolher A em Todos os Conflitos de Espaço em Branco por Resolver" + +#: kdiff3.cpp:503 +msgid "Choose B for All Unsolved Whitespace Conflicts" +msgstr "Escolher B em Todos os Conflitos de Espaço em Branco por Resolver" + +#: kdiff3.cpp:504 +msgid "Choose C for All Unsolved Whitespace Conflicts" +msgstr "Escolher C em Todos os Conflitos de Espaço em Branco por Resolver" + +#: kdiff3.cpp:505 +msgid "Automatically Solve Simple Conflicts" +msgstr "Resolver Automaticamente os Conflitos Simples" + +#: kdiff3.cpp:506 +msgid "Set Deltas to Conflicts" +msgstr "Passar os Deltas para Conflitos" + +#: kdiff3.cpp:507 +msgid "Run Regular Expression Auto Merge" +msgstr "Executar a Junção Automática de Expressões Regulares" + +#: kdiff3.cpp:508 +msgid "Automatically Solve History Conflicts" +msgstr "Resolver Automaticamente os Conflitos do Histórico" + +#: kdiff3.cpp:509 +msgid "Split Diff At Selection" +msgstr "Dividir a Diferença na Selecção" + +#: kdiff3.cpp:510 +msgid "Join Selected Diffs" +msgstr "Juntar as Diferenças Seleccionadas" + +#: kdiff3.cpp:512 +msgid "Show Window A" +msgstr "Mostrar a Janela A" + +#: kdiff3.cpp:513 +msgid "Show Window B" +msgstr "Mostrar a Janela B" + +#: kdiff3.cpp:514 +msgid "Show Window C" +msgstr "Mostrar a Janela C" + +#: kdiff3.cpp:515 kdiff3.cpp:526 +msgid "Focus Next Window" +msgstr "Foco na Próxima Janela" + +#: kdiff3.cpp:517 +msgid "Normal Overview" +msgstr "Vista Normal" + +#: kdiff3.cpp:518 +msgid "A vs. B Overview" +msgstr "Vista A vs. B" + +#: kdiff3.cpp:519 +msgid "A vs. C Overview" +msgstr "Vista A vs. C" + +#: kdiff3.cpp:520 +msgid "B vs. C Overview" +msgstr "Vista B vs. C" + +#: kdiff3.cpp:521 +msgid "Word Wrap Diff Windows" +msgstr "Quebrar Linha nas Janelas de Diferenças" + +#: kdiff3.cpp:522 +msgid "Add Manual Diff Alignment" +msgstr "Adicionar o Alinhamento Manual das Diferenças" + +#: kdiff3.cpp:523 +msgid "Clear All Manual Diff Alignments" +msgstr "Limpar Todos os Alinhamentos de Diferenças Manuais" + +#: kdiff3.cpp:528 +msgid "Focus Prev Window" +msgstr "Foco na Janela Anterior" + +#: kdiff3.cpp:529 +msgid "Toggle Split Orientation" +msgstr "Comutar a Orientação da Repartição" + +#: kdiff3.cpp:531 +msgid "Dir && Text Split Screen View" +msgstr "Janela Repartida de Pastas e Texto" + +#: kdiff3.cpp:533 +msgid "Toggle Between Dir && Text View" +msgstr "Mudar Entre a Janela de Pastas e de Texto" + +#: kdiff3.cpp:582 pdiff.cpp:1712 +msgid "The merge result hasn't been saved." +msgstr "O resultado da junção não foi ainda gravado." + +#: kdiff3.cpp:583 +msgid "Save && Quit" +msgstr "Gravar e Sair" + +#: kdiff3.cpp:583 +msgid "Quit Without Saving" +msgstr "Sair sem Gravar" + +#: kdiff3.cpp:591 pdiff.cpp:1721 +msgid "Saving the merge result failed." +msgstr "A gravação do resultado da junção falhou." + +#: kdiff3.cpp:602 pdiff.cpp:978 +msgid "" +"You are currently doing a directory merge. Are you sure, you want to abort?" +msgstr "" +"Você está a fazer uma junção de pastas de momento. Tem a certeza que quer " +"interromper?" + +#: kdiff3.cpp:625 +msgid "Saving file..." +msgstr "A gravar o ficheiro..." + +#: kdiff3.cpp:642 +msgid "Saving file with a new filename..." +msgstr "A gravar o ficheiro com um novo nome..." + +#: kdiff3.cpp:732 +msgid "Printing..." +msgstr "A imprimir..." + +#: kdiff3.cpp:738 kdiff3.cpp:900 +msgid "Printing aborted." +msgstr "Impressão cancelada." + +#: kdiff3.cpp:870 +msgid "Selection" +msgstr "Selecção" + +#: kdiff3.cpp:896 +msgid "Printing completed." +msgstr "A impressão terminou." + +#: kdiff3.cpp:906 +msgid "Exiting..." +msgstr "A sair..." + +#: kdiff3.cpp:918 +msgid "Toggling toolbar..." +msgstr "A comutar a barra de ferramentas..." + +#: kdiff3.cpp:939 +msgid "Toggle the statusbar..." +msgstr "Comutar a barra de estado..." + +#: kdiff3_part.cpp:155 kdiff3_part.cpp:224 +msgid "Couldn't find files for comparison." +msgstr "Não foi possível encontrar os ficheiros a comparar." + +#: kdiff3_part.cpp:291 +msgid "KDiff3Part" +msgstr "KDiff3Part" + +#: kdiff3_shell.cpp:78 +msgid "" +"Could not find our part!\n" +"This usually happens due to an installation problem. Please read the " +"README-file in the source package for details." +msgstr "" +"Não foi possível obter a componente!\n" +"Isto acontece normalmente devido a um problema de instalação. Leia por favor o " +"ficheiro README no pacote de código para mais detalhes." + +#: main.cpp:35 +msgid "Tool for Comparison and Merge of Files and Directories" +msgstr "Ferramenta para Comparação e Junção de Ficheiros e Pastas" + +#: main.cpp:40 +msgid "Merge the input." +msgstr "Juntar a entrada." + +#: main.cpp:42 +msgid "Explicit base file. For compatibility with certain tools." +msgstr "" +"Ficheiro de base explícito. Para a compatibilidade com certas ferramentas." + +#: main.cpp:44 +msgid "Output file. Implies -m. E.g.: -o newfile.txt" +msgstr "Ficheiro de saída. Implica o -m. P.ex.: -o novoficheiro.txt" + +#: main.cpp:45 +msgid "Output file, again. (For compatibility with certain tools.)" +msgstr "" +"Ficheiro de saída, de novo. (para a compatibilidade com certas ferramentas)" + +#: main.cpp:46 +msgid "No GUI if all conflicts are auto-solvable. (Needs -o file)" +msgstr "" +"Sem interface se todos os conflitos são resolvidos automaticamente (precisa do " +"-o ficheiro)" + +#: main.cpp:47 +msgid "Don't solve conflicts automatically. (For compatibility...)" +msgstr "Não resolver os conflitos automaticamente. (Para compatibilidade...)" + +#: main.cpp:48 +msgid "Visible name replacement for input file 1 (base)." +msgstr "Substituição do nome visível para o ficheiro de entrada 1 (base)." + +#: main.cpp:49 +msgid "Visible name replacement for input file 2." +msgstr "Substituição do nome visível para o ficheiro de entrada 2." + +#: main.cpp:50 +msgid "Visible name replacement for input file 3." +msgstr "Substituição do nome visível para o ficheiro de entrada 3." + +#: main.cpp:52 +msgid "Alternative visible name replacement. Supply this once for every input." +msgstr "" +"Substituição alternativa do nome visível. Indique isto para cada entrada." + +#: main.cpp:53 +msgid "" +"Override a config setting. Use once for every setting. E.g.: --cs " +"\"AutoAdvance=1\"" +msgstr "" +"Substitui uma opção de configuração. Use uma vez para todas as opções. P.ex.: " +"--cs \"AutoAdvance=1\"" + +#: main.cpp:54 +msgid "Show list of config settings and current values." +msgstr "Mostra uma lista das opções de configuração e os valores actuais." + +#: main.cpp:55 +msgid "Use a different config file." +msgstr "Usar um ficheiro de configuração diferente." + +#: main.cpp:59 +msgid "file1 to open (base, if not specified via --base)" +msgstr "o ficheiro 1 a abrir (base, se não for indicado através do --base)" + +#: main.cpp:60 +msgid "file2 to open" +msgstr "o ficheiro 2 a abrir" + +#: main.cpp:61 +msgid "file3 to open" +msgstr "o ficheiro 3 a abrir" + +#: main.cpp:93 +msgid "Ignored. (User defined.)" +msgstr "Ignorado. (Definido pelo utilizador.)" + +#. i18n: file kdiff3_part.rc line 16 +#: main.cpp:173 rc.cpp:9 +#, no-c-format +msgid "KDiff3" +msgstr "KDiff3" + +#: main.cpp:186 +msgid "+ Many thanks to those who reported bugs and contributed ideas!" +msgstr "" +"Muitos agradecimentos a todos os que comunicaram erros e contribuíram ideias!" + +#: mergeresultwindow.cpp:136 mergeresultwindow.cpp:939 +#: mergeresultwindow.cpp:953 mergeresultwindow.cpp:965 +#: mergeresultwindow.cpp:977 +msgid "Number of remaining unsolved conflicts: %1 (of which %2 are whitespace)" +msgstr "" +"Número de conflitos por resolver: %1 (dos quais %2 são espaço em branco)" + +#: mergeresultwindow.cpp:285 +msgid "" +"The output has been modified.\n" +"If you continue your changes will be lost." +msgstr "" +"O resultado foi modificado.\n" +"Se você continuar as suas alterações serão perdidas." + +#: mergeresultwindow.cpp:797 pdiff.cpp:511 +msgid "All input files are binary equal." +msgstr "Todos os ficheiros de entrada são iguais a nível binário." + +#: mergeresultwindow.cpp:799 +msgid "All input files contain the same text." +msgstr "Todos os ficheiros de entrada contêm o mesmo texto." + +#: mergeresultwindow.cpp:801 +msgid "" +"Files A and B are binary equal.\n" +msgstr "" +"Os ficheiros A e B são iguais a nível binário.\n" + +#: mergeresultwindow.cpp:802 +msgid "" +"Files A and B have equal text. \n" +msgstr "" +"Os ficheiros A e B têm texto igual.\n" + +#: mergeresultwindow.cpp:803 +msgid "" +"Files A and C are binary equal.\n" +msgstr "" +"Os ficheiros A e C são iguais a nível binário.\n" + +#: mergeresultwindow.cpp:804 +msgid "" +"Files A and C have equal text. \n" +msgstr "" +"Os ficheiros A e C têm texto igual.\n" + +#: mergeresultwindow.cpp:805 +msgid "" +"Files B and C are binary equal.\n" +msgstr "" +"Os ficheiros B e C são iguais a nível binário.\n" + +#: mergeresultwindow.cpp:806 +msgid "" +"Files B and C have equal text. \n" +msgstr "" +"Os ficheiros B e C têm texto igual.\n" + +#: mergeresultwindow.cpp:812 +msgid "Total number of conflicts: " +msgstr "Número total de conflitos: " + +#: mergeresultwindow.cpp:813 +msgid "" +"\n" +"Nr of automatically solved conflicts: " +msgstr "" +"\n" +"Número total de conflitos resolvidos automaticamente: " + +#: mergeresultwindow.cpp:814 +msgid "" +"\n" +"Nr of unsolved conflicts: " +msgstr "" +"\n" +"Número de conflitos por resolver: " + +#: mergeresultwindow.cpp:816 +msgid "Conflicts" +msgstr "Conflitos" + +#: mergeresultwindow.cpp:1652 +msgid "" +msgstr "" + +#: mergeresultwindow.cpp:1660 +msgid "" +msgstr "" + +#: mergeresultwindow.cpp:1662 mergeresultwindow.cpp:2427 +msgid "" +msgstr "" + +#: mergeresultwindow.cpp:2635 +msgid "" +"Not all conflicts are solved yet.\n" +"File not saved.\n" +msgstr "" +"Nem todos os conflitos estão ainda resolvidos.\n" +"O ficheiro não foi gravado.\n" + +#: mergeresultwindow.cpp:2637 +msgid "Conflicts Left" +msgstr "Conflitos Restantes" + +#: mergeresultwindow.cpp:2649 +msgid "" +"\n" +"\n" +"Creating backup failed. File not saved." +msgstr "" +"\n" +"\n" +"A criação de salvaguarda falhou. Ficheiro não gravado." + +#: mergeresultwindow.cpp:2649 mergeresultwindow.cpp:2689 +msgid "File Save Error" +msgstr "Erro na Gravação do Ficheiro" + +#: mergeresultwindow.cpp:2689 +msgid "Error while writing." +msgstr "Erro ao gravar." + +#: mergeresultwindow.cpp:3020 +msgid "Output" +msgstr "Resultado" + +#: mergeresultwindow.cpp:3032 mergeresultwindow.cpp:3139 +msgid "[Modified]" +msgstr "[Modificado]" + +#: mergeresultwindow.cpp:3039 +msgid "Encoding for saving" +msgstr "Codificação da gravação" + +#: mergeresultwindow.cpp:3075 mergeresultwindow.cpp:3081 +#: mergeresultwindow.cpp:3087 +msgid "Codec from" +msgstr "Codificador de" + +#: optiondialog.cpp:362 +msgid "Unicode, 8 bit" +msgstr "Unicode, 8 bit" + +#: optiondialog.cpp:363 +msgid "Unicode" +msgstr "Unicode" + +#: optiondialog.cpp:364 +msgid "Latin1" +msgstr "Latin1" + +#: optiondialog.cpp:383 +msgid "Change this if non-ASCII characters are not displayed correctly." +msgstr "" +"Altere isto se os caracteres não-ASCII não são mostrados correctamente." + +#: optiondialog.cpp:510 +msgid "Editor & Diff Output Font" +msgstr "Tipo de Letra do Resultado do Diff e do Editor" + +#: optiondialog.cpp:531 +msgid "Italic font for deltas" +msgstr "Texto itálico para os deltas" + +#: optiondialog.cpp:534 +msgid "" +"Selects the italic version of the font for differences.\n" +"If the font doesn't support italic characters, then this does nothing." +msgstr "" +"Seleccionar a versão itálica do texto para as diferenças.\n" +"Se o tipo de letra não suportar caracteres itálicos, isto não fará nada." + +#: optiondialog.cpp:542 +msgid "Color" +msgstr "Cor" + +#: optiondialog.cpp:542 +msgid "Colors Settings" +msgstr "Configuração das Cores" + +#: optiondialog.cpp:556 +msgid "Editor and Diff Views:" +msgstr "Ãreas do Editor e das Diferenças:" + +#: optiondialog.cpp:564 +msgid "Foreground color:" +msgstr "Cor principal:" + +#: optiondialog.cpp:570 +msgid "Background color:" +msgstr "Cor de fundo:" + +#: optiondialog.cpp:578 +msgid "Diff background color:" +msgstr "Cor de fundo das diferenças:" + +#: optiondialog.cpp:585 +msgid "Color A:" +msgstr "Cor A:" + +#: optiondialog.cpp:592 +msgid "Color B:" +msgstr "Cor B:" + +#: optiondialog.cpp:599 +msgid "Color C:" +msgstr "Cor C:" + +#: optiondialog.cpp:605 +msgid "Conflict color:" +msgstr "Cor do conflito:" + +#: optiondialog.cpp:612 +msgid "Current range background color:" +msgstr "Cor de fundo do intervalo actual:" + +#: optiondialog.cpp:619 +msgid "Current range diff background color:" +msgstr "Cor de fundo da diferença do intervalo actual:" + +#: optiondialog.cpp:625 +msgid "Color for manually aligned difference ranges:" +msgstr "Cor dos intervalos de diferenças alinhados manualmente:" + +#: optiondialog.cpp:630 +msgid "Directory Comparison View:" +msgstr "Ãrea de Comparação das Pastas:" + +#: optiondialog.cpp:636 +msgid "Newest file color:" +msgstr "Cor do ficheiro mais recente:" + +#: optiondialog.cpp:639 +msgid "" +"Changing this color will only be effective when starting the next directory " +"comparison." +msgstr "" +"Se mudar esta cor, só fará efeito ao iniciar a próxima comparação de pastas." + +#: optiondialog.cpp:644 +msgid "Oldest file color:" +msgstr "Cor do ficheiro mais antigo:" + +#: optiondialog.cpp:651 +msgid "Middle age file color:" +msgstr "Cor dos ficheiros intermédios:" + +#: optiondialog.cpp:658 +msgid "Color for missing files:" +msgstr "Cor dos ficheiros em falta:" + +#: optiondialog.cpp:670 +msgid "Editor" +msgstr "Editor" + +#: optiondialog.cpp:670 +msgid "Editor Behavior" +msgstr "Comportamento do Editor" + +#: optiondialog.cpp:680 +msgid "Tab inserts spaces" +msgstr "O Tab insere espaços" + +#: optiondialog.cpp:683 +msgid "" +"On: Pressing tab generates the appropriate number of spaces.\n" +"Off: A Tab-character will be inserted." +msgstr "" +"Ligado: se carregar no Tab gera o número apropriado de espaços.\n" +"Desligado: será introduzido um carácter Tab." + +#: optiondialog.cpp:689 +msgid "Tab size:" +msgstr "Tamanho das tabulações:" + +#: optiondialog.cpp:694 +msgid "Auto indentation" +msgstr "Indentação automática" + +#: optiondialog.cpp:697 +msgid "" +"On: The indentation of the previous line is used for a new line.\n" +msgstr "" +"Ligado: A indentação da linha anterior é usada para uma nova linha.\n" + +#: optiondialog.cpp:701 +msgid "Auto copy selection" +msgstr "Copiar automaticamente a selecção" + +#: optiondialog.cpp:704 +msgid "" +"On: Any selection is immediately written to the clipboard.\n" +"Off: You must explicitely copy e.g. via Ctrl-C." +msgstr "" +"Ligado: Qualquer selecção é posta automaticamente na área de transferência.\n" +"Desligado: Você tem de copiar explicitamente, p.ex., com o Ctrl-C." + +#: optiondialog.cpp:709 +msgid "Line end style:" +msgstr "Estilo de fim de linha:" + +#: optiondialog.cpp:721 +msgid "" +"Sets the line endings for when an edited file is saved.\n" +"DOS/Windows: CR+LF; UNIX: LF; with CR=0D, LF=0A" +msgstr "" +"Escolhe os fins de linha para quando um ficheiro editado é gravado.\n" +"DOS/Windows: CR+LF; UNIX: LF; com CR=0D, LF=0A" + +#: optiondialog.cpp:732 +msgid "Diff" +msgstr "Diferenças" + +#: optiondialog.cpp:732 +msgid "Diff Settings" +msgstr "Configuração das Diferenças" + +#: optiondialog.cpp:743 +msgid "Preserve carriage return" +msgstr "Manter o 'carriage return'" + +#: optiondialog.cpp:746 +msgid "" +"Show carriage return characters '\\r' if they exist.\n" +"Helps to compare files that were modified under different operating systems." +msgstr "" +"Mostrar os caracteres de 'carriage return' '\\r' se existirem.\n" +"Ajuda a compara os ficheiros modificados em sistemas operativos diferentes." + +#: optiondialog.cpp:751 +msgid "Ignore numbers" +msgstr "Ignorar os números" + +#: optiondialog.cpp:754 +msgid "" +"Ignore number characters during line matching phase. (Similar to Ignore white " +"space.)\n" +"Might help to compare files with numeric data." +msgstr "" +"Ignora os caracteres numéricos durante a fase de correspondência das linhas " +"(Semelhante ao Ignorar os Espaços).\n" +"Pode ajudar a comparar os ficheiros com dados numéricos." + +#: optiondialog.cpp:759 +msgid "Ignore C/C++ comments" +msgstr "Ignorar comentários de C/C++" + +#: optiondialog.cpp:761 +msgid "Treat C/C++ comments like white space." +msgstr "Tratar os comentários de C/C++ como espaço em branco." + +#: optiondialog.cpp:765 +msgid "Ignore case" +msgstr "Ignorar a capitalização" + +#: optiondialog.cpp:768 +msgid "Treat case differences like white space changes. ('a'<=>'A')" +msgstr "" +"Tratar diferenças de capitalização como mudanças de espaço em branco. ('a'<=>" +"'A')" + +#: optiondialog.cpp:772 +msgid "Preprocessor command:" +msgstr "Comando do pré-processador:" + +#: optiondialog.cpp:776 +msgid "User defined pre-processing. (See the docs for details.)" +msgstr "" +"Pré-processamento definido pelo utilizador. (Veja a documentação para mais " +"detalhes)." + +#: optiondialog.cpp:779 +msgid "Line-matching preprocessor command:" +msgstr "Comando do pré-processador para a correspondência de linhas:" + +#: optiondialog.cpp:783 +msgid "" +"This pre-processor is only used during line matching.\n" +"(See the docs for details.)" +msgstr "" +"Este pré-processador só é usado na correspondência das linhas.\n" +"(Veja a documentação para mais detalhes)." + +#: optiondialog.cpp:786 +msgid "Try hard (slower)" +msgstr "Tentar com persistência (lento)" + +#: optiondialog.cpp:789 +msgid "" +"Enables the --minimal option for the external diff.\n" +"The analysis of big files will be much slower." +msgstr "" +"Activa a opção --minimal do 'diff' externo.\n" +"A análise dos ficheiros grandes será muito mais lenta." + +#: optiondialog.cpp:794 +msgid "Auto advance delay (ms):" +msgstr "Atraso no avanço automático (ms):" + +#: optiondialog.cpp:799 +msgid "" +"When in Auto-Advance mode the result of the current selection is shown \n" +"for the specified time, before jumping to the next conflict. Range: 0-2000 ms" +msgstr "" +"Quando estiver no modo de Avanço Automático, o resultado da selecção actual é " +"mostrado durante o período indicado, antes de saltar para o próximo conflito. " +"Intervalo: 0-2000 ms" + +#: optiondialog.cpp:809 +msgid "Merge Settings" +msgstr "Configuração da Junção" + +#: optiondialog.cpp:822 +msgid "White space 2-file merge default:" +msgstr "Junção de espaço em branco com 2 ficheiros:" + +#: optiondialog.cpp:826 optiondialog.cpp:839 +msgid "Manual Choice" +msgstr "Escolha Manual" + +#: optiondialog.cpp:830 optiondialog.cpp:844 +msgid "" +"Allow the merge algorithm to automatically select an input for white-space-only " +"changes." +msgstr "" +"Permite ao algoritmo de junção escolher automaticamente o ficheiro a utilizar " +"para as alterações de apenas espaço em branco." + +#: optiondialog.cpp:835 +msgid "White space 3-file merge default:" +msgstr "Junção de espaço em branco com 3 ficheiros:" + +#: optiondialog.cpp:849 +msgid "Automatic Merge Regular Expression" +msgstr "Expressão Regular de Junção Automática" + +#: optiondialog.cpp:858 smalldialogs.cpp:397 +msgid "Auto merge regular expression:" +msgstr "Expressão regular de junção automática:" + +#: optiondialog.cpp:862 +msgid "" +"Regular expression for lines where KDiff3 should automatically choose one " +"source.\n" +"When a line with a conflict matches the regular expression then\n" +"- if available - C, otherwise B will be chosen." +msgstr "" +"A expressão regular das linhas em que o KDiff3 deverá escolher automaticamente " +"uma origem.\n" +"Quando uma linha com um conflito corresponder à expressão regular então será -\n" +"se disponível - o C, caso contrário será escolhido o B." + +#: optiondialog.cpp:868 +msgid "Run regular expression auto merge on merge start" +msgstr "Executar a junção automática da expressão regular ao iniciar a junção" + +#: optiondialog.cpp:870 +msgid "" +"Run the merge for auto merge regular expressions\n" +"immediately when a merge starts.\n" +msgstr "" +"Executa a junção para as expressões regulares de junção automática\n" +"imediatamente após o início de uma junção.\n" + +#: optiondialog.cpp:875 +msgid "Version Control History Merging" +msgstr "Junção do Histórico do Controlo de Versões" + +#: optiondialog.cpp:884 smalldialogs.cpp:424 +msgid "History start regular expression:" +msgstr "Expressão regular do início do histórico:" + +#: optiondialog.cpp:888 +msgid "" +"Regular expression for the start of the version control history entry.\n" +"Usually this line contains the \"$Log$\"-keyword.\n" +"Default value: \".*\\$Log.*\\$.*\"" +msgstr "" +"A expressão regular para o início do item de histórico da junção.\n" +"Normalmente, este valor contém a palavra-chave \"$Log$\".\n" +"Valor por omissão: \".*\\$Log.*\\$.*\"" + +#: optiondialog.cpp:894 smalldialogs.cpp:453 +msgid "History entry start regular expression:" +msgstr "Expressão regular do início do item de histórico:" + +#: optiondialog.cpp:906 +msgid "" +"A version control history entry consists of several lines.\n" +"Specify the regular expression to detect the first line (without the leading " +"comment).\n" +"Use parentheses to group the keys you want to use for sorting.\n" +"If left empty, then KDiff3 assumes that empty lines separate history entries.\n" +"See the documentation for details." +msgstr "" +"Um item de histórico da junção consiste em várias linhas.\n" +"Indique a expressão regular usada para detectar a primeira linha (sem o " +"comentário inicial).\n" +"Use os parêntesis para agrupar as chaves que deseja usar na ordenação.\n" +"Se for deixado em branco, o KDiff3 assume que as linhas em branco separar os " +"itens de histórico.\n" +"Veja a documentação para saber mais detalhes." + +#: optiondialog.cpp:914 +msgid "History merge sorting" +msgstr "Ordenação da junção do histórico" + +#: optiondialog.cpp:916 +msgid "Sort version control history by a key." +msgstr "Ordenar o histórico do controlo de versões por uma chave." + +#: optiondialog.cpp:926 +msgid "History entry start sort key order:" +msgstr "Ordem da chave de ordenação do início do item de histórico:" + +#: optiondialog.cpp:930 +msgid "" +"Each parentheses used in the regular expression for the history start entry\n" +"groups a key that can be used for sorting.\n" +"Specify the list of keys (that are numbered in order of occurrence\n" +"starting with 1) using ',' as separator (e.g. \"4,5,6,1,2,3,7\").\n" +"If left empty, then no sorting will be done.\n" +"See the documentation for details." +msgstr "" +"Cada um dos parêntesis usados na expressão regular no item inicial do " +"histórico\n" +"agrupa uma chave que poderá ser usada na ordenação.\n" +"Indique a lista de chaves (que são numeradas por ordem de ocorrência,\n" +"a começar no 1), usando o ',' como separador (p.ex., \"4,5,6,1,2,3,7\").\n" +"Se for deixado em branco, não será feita nenhuma ordenação.\n" +"Veja a documentação para saber mais detalhes." + +#: optiondialog.cpp:941 +msgid "Merge version control history on merge start" +msgstr "Juntar o histórico do controlo de versões ao iniciar a junção" + +#: optiondialog.cpp:943 +msgid "Run version control history automerge on merge start." +msgstr "" +"Executar a junção automática do histórico do controlo de versões ao iniciar a " +"junção." + +#: optiondialog.cpp:947 +msgid "Test your regular expressions" +msgstr "Testar as suas expressões regulares" + +#: optiondialog.cpp:952 +msgid "Irrelevant merge command:" +msgstr "Comando de junção irrelevante:" + +#: optiondialog.cpp:956 +msgid "" +"If specified this script is run after automerge\n" +"when no other relevant changes were detected.\n" +"Called with the parameters: filename1 filename2 filename3" +msgstr "" +"Se for indicado, este programa é executado após a junção automática,\n" +"quando não forem detectadas mais alterações relevantes.\n" +"É invocado com os parâmetros: ficheiro1 ficheiro2 ficheiro3" + +#: optiondialog.cpp:966 +msgid "Directory Merge" +msgstr "Junção de Pastas" + +#: optiondialog.cpp:975 +msgid "Recursive directories" +msgstr "Pastas recursivas" + +#: optiondialog.cpp:977 +msgid "Whether to analyze subdirectories or not." +msgstr "Se se analisam as sub-pastas ou não." + +#: optiondialog.cpp:979 +msgid "File pattern(s):" +msgstr "Padrões de ficheiros:" + +#: optiondialog.cpp:984 +msgid "" +"Pattern(s) of files to be analyzed. \n" +"Wildcards: '*' and '?'\n" +"Several Patterns can be specified by using the separator: ';'" +msgstr "" +"Os padrões dos ficheiros a analisar.\n" +"Caracteres especiais: '*' e '?'\n" +"Podem ser indicados vários padrões usando o separador: ';'" + +#: optiondialog.cpp:990 +msgid "File-anti-pattern(s):" +msgstr "Anti-padrões de ficheiros:" + +#: optiondialog.cpp:995 +msgid "" +"Pattern(s) of files to be excluded from analysis. \n" +"Wildcards: '*' and '?'\n" +"Several Patterns can be specified by using the separator: ';'" +msgstr "" +"Os padrões dos ficheiros a excluir da análise.\n" +"Caracteres especiais: '*' e '?'\n" +"Podem ser indicados vários padrões usando o separador: ';'" + +#: optiondialog.cpp:1001 +msgid "Dir-anti-pattern(s):" +msgstr "Anti-padrões de pastas:" + +#: optiondialog.cpp:1006 +msgid "" +"Pattern(s) of directories to be excluded from analysis. \n" +"Wildcards: '*' and '?'\n" +"Several Patterns can be specified by using the separator: ';'" +msgstr "" +"Os padrões das pastas a excluir da análise.\n" +"Caracteres especiais: '*' e '?'\n" +"Podem ser indicados vários padrões usando o separador: ';'" + +#: optiondialog.cpp:1012 +msgid "Use .cvsignore" +msgstr "Usar o .cvsignore" + +#: optiondialog.cpp:1015 +msgid "" +"Extends the antipattern to anything that would be ignored by CVS.\n" +"Via local \".cvsignore\"-files this can be directory specific." +msgstr "" +"Extende o anti-padrão para tudo o que seria ignorado pelo CVS.\n" +"Isto pode ser específico para cada pasta, através dos ficheiros '.cvsignore' " +"locais." + +#: optiondialog.cpp:1020 +msgid "Find hidden files and directories" +msgstr "Procurar os ficheiros e pastas escondidos" + +#: optiondialog.cpp:1023 +msgid "Finds files and directories with the hidden attribute." +msgstr "Procura os ficheiros e pastas com o atributo 'escondido'." + +#: optiondialog.cpp:1025 +msgid "Finds files and directories starting with '.'." +msgstr "Procura os ficheiros e pastas que comecem por '.'." + +#: optiondialog.cpp:1029 +msgid "Follow file links" +msgstr "Seguir as ligações de ficheiros" + +#: optiondialog.cpp:1032 +msgid "" +"On: Compare the file the link points to.\n" +"Off: Compare the links." +msgstr "" +"Ligado: Compara o ficheiro para o qual a ligação aponta.\n" +"Desligado: Compara as ligações." + +#: optiondialog.cpp:1037 +msgid "Follow directory links" +msgstr "Seguir as ligações de pastas" + +#: optiondialog.cpp:1040 +msgid "" +"On: Compare the directory the link points to.\n" +"Off: Compare the links." +msgstr "" +"Ligado: Compara a pastas para a qual a ligação aponta.\n" +"Desligado: Compara as ligações." + +#: optiondialog.cpp:1056 +msgid "Case sensitive filename comparison" +msgstr "Comparação de nomes de ficheiros com distinção de maiúsculas" + +#: optiondialog.cpp:1059 +msgid "" +"The directory comparison will compare files or directories when their names " +"match.\n" +"Set this option if the case of the names must match. (Default for Windows is " +"off, otherwise on.)" +msgstr "" +"A comparação de pastas irá comparar os ficheiros ou pastas quando os seus nomes " +"corresponderem.\n" +"Configure esta opção, no caso de os nomes terem mesmo de corresponder. (Por " +"omissão, no Windows, está desligada; caso contrário, está ligada.)" + +#: optiondialog.cpp:1063 +msgid "File Comparison Mode" +msgstr "Modo de Comparação de Ficheiros" + +#: optiondialog.cpp:1067 +msgid "Binary comparison" +msgstr "Comparação binária" + +#: optiondialog.cpp:1068 +msgid "Binary comparison of each file. (Default)" +msgstr "Comparação binária de cada ficheiro. (Por omissão)" + +#: optiondialog.cpp:1070 +msgid "Full analysis" +msgstr "Análise completa" + +#: optiondialog.cpp:1071 +msgid "" +"Do a full analysis and show statistics information in extra columns.\n" +"(Slower than a binary comparison, much slower for binary files.)" +msgstr "" +"Fazer uma análise completa e mostrar informações estatísticas em colunas " +"extra.\n" +"(Mais lento que a comparação binária, muito mais lento para ficheiros " +"binários.)" + +#: optiondialog.cpp:1074 +msgid "Trust the modification date (unsafe)" +msgstr "Confiar na data de modificação (inseguro)" + +#: optiondialog.cpp:1075 +msgid "" +"Assume that files are equal if the modification date and file length are " +"equal.\n" +"Useful for big directories or slow networks." +msgstr "" +"Assumir que os ficheiros são iguais se a data de modificação e o tamanho do " +"ficheiro são iguais.\n" +"Útil para as pastas grandes ou para redes lentas." + +#: optiondialog.cpp:1078 +msgid "Trust the size (unsafe)" +msgstr "Confiar no tamanho (inseguro)" + +#: optiondialog.cpp:1079 +msgid "" +"Assume that files are equal if their file lengths are equal.\n" +"Useful for big directories or slow networks when the date is modified during " +"download." +msgstr "" +"Assumir que os ficheiros são iguais se o seu tamanho é igual.\n" +"Útil para as pastas grandes ou para redes lentas." + +#: optiondialog.cpp:1083 +msgid "Synchronize directories" +msgstr "Sincronizar as pastas" + +#: optiondialog.cpp:1086 +msgid "" +"Offers to store files in both directories so that\n" +"both directories are the same afterwards.\n" +"Works only when comparing two directories without specifying a destination." +msgstr "" +"Oferece-se para armazenar os ficheiros em ambas as pastas\n" +"de modo a que ambas as pastas fiquem iguais no fim.\n" +"Funciona apenas ao comparar duas pastas sem indicar um destino." + +#: optiondialog.cpp:1092 +msgid "White space differences considered equal" +msgstr "Diferenças de espaço em branco consideradas iguais" + +#: optiondialog.cpp:1095 +msgid "" +"If files differ only by white space consider them equal.\n" +"This is only active when full analysis is chosen." +msgstr "" +"Se os ficheiros apenas diferem em espaço em branco considerá-los iguais.\n" +"Isto está activo apenas quando é escolhida a análise completa." + +#: optiondialog.cpp:1101 +msgid "Copy newer instead of merging (unsafe)" +msgstr "Copiar o mais recente em vez de juntar (inseguro)" + +#: optiondialog.cpp:1104 +msgid "" +"Don't look inside, just take the newer file.\n" +"(Use this only if you know what you are doing!)\n" +"Only effective when comparing two directories." +msgstr "" +"Não analisa os ficheiros, selecciona apenas o ficheiro mais recente.\n" +"(Use isto apenas se souber o que está a fazer!)\n" +"Só faz efeito ao comparar duas pastas." + +#: optiondialog.cpp:1109 +msgid "Backup files (.orig)" +msgstr "Salvaguarda dos ficheiros (.orig)" + +#: optiondialog.cpp:1112 +msgid "" +"When a file would be saved over an old file, then the old file\n" +"will be renamed with a '.orig'-extension instead of being deleted." +msgstr "" +"Quando um ficheiro for gravado por cima de um anterior, então o ficheiro\n" +"antigo será renomeado para uma extensão '.orig' em vez de ser removido." + +#: optiondialog.cpp:1176 +msgid "Regional Settings" +msgstr "Configuração Regional" + +#: optiondialog.cpp:1272 +msgid "Language (restart required)" +msgstr "Língua (necessário reiniciar)" + +#: optiondialog.cpp:1304 +msgid "" +"Choose the language of the GUI-strings or \"Auto\".\n" +"For a change of language to take place, quit and restart KDiff3." +msgstr "" +"Escolha a língua da interface gráfica ou \"Auto\".\n" +"Para mudar de língua tem que reiniciar o KDiff3." + +#: optiondialog.cpp:1322 +msgid "Use the same encoding for everything:" +msgstr "Utilizar a mesma codificação para tudo:" + +#: optiondialog.cpp:1325 +msgid "" +"Enable this allows to change all encodings by changing the first only.\n" +"Disable this if different individual settings are needed." +msgstr "" +"Active isto para permitir modificar todas as codificações alterando apenas a " +"primeira.\n" +"Torne inactivo se forem necessárias opções individuais." + +#: optiondialog.cpp:1330 +msgid "Note: Local Encoding is " +msgstr "Nota: A codificação local é" + +#: optiondialog.cpp:1334 +msgid "File Encoding for A:" +msgstr "Codificação do Ficheiro A:" + +#: optiondialog.cpp:1340 +msgid "" +"If enabled then Unicode (UTF-16 or UTF-8) encoding will be detected.\n" +"If the file encoding is not detected then the selected encoding will be used as " +"fallback.\n" +"(Unicode detection depends on the first bytes of a file - the byte order mark " +"\"BOM\".)" +msgstr "" +"Se estiver activo, então será detectada a codificação Unicode (UTF-16 ou " +"UTF-8).\n" +"Se a codificação do ficheiro não for detectada, então será usada a codificação " +"seleccionada como alternativa.\n" +"(A detecção de Unicode depende dos primeiros 'bytes' de um ficheiro - a marca " +"de ordem de 'bytes' \"BOM\".)" + +#: optiondialog.cpp:1344 optiondialog.cpp:1353 optiondialog.cpp:1362 +msgid "Auto Detect Unicode" +msgstr "Auto-Detectar o Unicode" + +#: optiondialog.cpp:1349 +msgid "File Encoding for B:" +msgstr "Codificação do Ficheiro B:" + +#: optiondialog.cpp:1358 +msgid "File Encoding for C:" +msgstr "Codificação do Ficheiro C:" + +#: optiondialog.cpp:1367 +msgid "File Encoding for Merge Output and Saving:" +msgstr "Codificação do Ficheiro para Junção de Resultado e Gravação:" + +#: optiondialog.cpp:1371 +msgid "Auto Select" +msgstr "Selecção Automática" + +#: optiondialog.cpp:1374 +msgid "" +"If enabled then the encoding from the input files is used.\n" +"In ambiguous cases a dialog will ask the user to choose the encoding for " +"saving." +msgstr "" +"Se estiver activada a opção, será usada a codificação dos ficheiros de " +"entrada.\n" +"Nos casos ambíguos, irá aparecer uma janela a perguntar ao utilizador qual a " +"codificação com que deseja gravar." + +#: optiondialog.cpp:1378 +msgid "File Encoding for Preprocessor Files:" +msgstr "Codificação do Ficheiro dos Ficheiros de Pré-processador:" + +#: optiondialog.cpp:1389 +msgid "Right To Left Language" +msgstr "Língua da Direita para a Esquerda" + +#: optiondialog.cpp:1392 +msgid "" +"Some languages are read from right to left.\n" +"This setting will change the viewer and editor accordingly." +msgstr "" +"Algumas línguas são lidas da direita para esquerda.\n" +"Esta opção muda o visualizador e editor de acordo com elas." + +#: optiondialog.cpp:1402 +msgid "Integration" +msgstr "Integração" + +#: optiondialog.cpp:1402 +msgid "Integration Settings" +msgstr "Configuração da Integração" + +#: optiondialog.cpp:1412 +msgid "Command line options to ignore:" +msgstr "Opções da linha de comandos a ignorar:" + +#: optiondialog.cpp:1417 +msgid "" +"List of command line options that should be ignored when KDiff3 is used by " +"other tools.\n" +"Several values can be specified if separated via ';'\n" +"This will suppress the \"Unknown option\"-error." +msgstr "" +"Uma lista das opções da linha de comandos que deverão ser ignoradas, quando o " +"KDiff3 for usado por outras ferramentas.\n" +"Se desejar indicar vários valores, separe-os por ';'\n" +"Isto irá eliminar o erro de \"Opção desconhecida\"." + +#: optiondialog.cpp:1480 +msgid "" +"You selected a variable width font.\n" +"\n" +"Because this program doesn't handle variable width fonts\n" +"correctly, you might experience problems while editing.\n" +"\n" +"Do you want to continue or do you want to select another font." +msgstr "" +"Você seleccionou um tamanho de letra variável.\n" +"\n" +"Dado que este programa não lida correctamente com tipos de letra\n" +"de largura variável, você poderá ter problemas ao editar.\n" +"\n" +"Deseja continuar ou prefere seleccionar outro tipo de letra." + +#: optiondialog.cpp:1484 +msgid "Incompatible Font" +msgstr "Tipo de Letra Incompatível" + +#: optiondialog.cpp:1485 +msgid "Continue at Own Risk" +msgstr "Continuar à Mesma" + +#: optiondialog.cpp:1485 +msgid "Select Another Font" +msgstr "Seleccionar Outro Tipo de Letra" + +#: optiondialog.cpp:1521 +msgid "This resets all options. Not only those of the current topic." +msgstr "Isto repõe todas as opções, não só as do tópico actual." + +#: pdiff.cpp:258 +msgid "PreprocessorCmd: " +msgstr "Comando do pré-processador: " + +#: pdiff.cpp:263 +msgid "" +"The following option(s) you selected might change data:\n" +msgstr "" +"As seguintes opções que seleccionou podem alterar os dados:\n" + +#: pdiff.cpp:264 +msgid "" +"\n" +"Most likely this is not wanted during a merge.\n" +"Do you want to disable these settings or continue with these settings active?" +msgstr "" +"\n" +"\n" +"Muito provavelmente isto não é desejável durante uma junção.\n" +"Quer desactivar estas configurações ou continuar com elas activas?" + +#: pdiff.cpp:266 +msgid "Option Unsafe for Merging" +msgstr "Opção Insegura para Junção" + +#: pdiff.cpp:267 +msgid "Use These Options During Merge" +msgstr "Usar Estas Opções Durante a Junção" + +#: pdiff.cpp:267 +msgid "Disable Unsafe Options" +msgstr "Desactivar Opções Inseguras" + +#: pdiff.cpp:297 +msgid "Loading A" +msgstr "A Carregar o A" + +#: pdiff.cpp:301 +msgid "Loading B" +msgstr "A Carregar o B" + +#: pdiff.cpp:318 pdiff.cpp:344 +msgid "Diff: A <-> B" +msgstr "Diferenças: A <-> B" + +#: pdiff.cpp:324 pdiff.cpp:366 +msgid "Linediff: A <-> B" +msgstr "Dif. Linhas: A <-> B" + +#: pdiff.cpp:335 +msgid "Loading C" +msgstr "A Carregar o C" + +#: pdiff.cpp:347 +msgid "Diff: B <-> C" +msgstr "Diferenças: B <-> C" + +#: pdiff.cpp:350 +msgid "Diff: A <-> C" +msgstr "Diferenças: A <-> C" + +#: pdiff.cpp:369 +msgid "Linediff: B <-> C" +msgstr "Dif. Linhas: B <-> C" + +#: pdiff.cpp:372 +msgid "Linediff: A <-> C" +msgstr "Dif. Linhas: A <-> C" + +#: pdiff.cpp:513 +msgid "All input files contain the same text, but are not binary equal." +msgstr "" +"Todos os ficheiros de entrada contêm o mesmo texto, mas não são iguais a nível " +"binário." + +#: pdiff.cpp:515 pdiff.cpp:517 pdiff.cpp:519 +msgid "" +"Files %1 and %2 are binary equal.\n" +msgstr "" +"Os ficheiros %1 e %2 são iguais a nível binário.\n" + +#: pdiff.cpp:516 pdiff.cpp:518 pdiff.cpp:520 +msgid "" +"Files %1 and %2 have equal text, but are not binary equal. \n" +msgstr "" +"Os ficheiros %1 e %2 têm texto igual, mas não são iguais a nível binário.\n" + +#: pdiff.cpp:530 +msgid "" +"Some inputfiles don't seem to be pure textfiles.\n" +"Note that the KDiff3-merge was not meant for binary data.\n" +"Continue at your own risk." +msgstr "" +"Alguns dos ficheiros de entrada não parecem ser ficheiros de texto puros.\n" +"Lembre-se que a junção do KDiff3 não foi pensada para os dados binários.\n" +"Continue por sua conta e risco." + +#: pdiff.cpp:979 +msgid "Abort" +msgstr "Interromper" + +#: pdiff.cpp:985 pdiff.cpp:1073 +msgid "Opening files..." +msgstr "A aceder aos ficheiros..." + +#: pdiff.cpp:1050 pdiff.cpp:1121 +msgid "File open error" +msgstr "Erro ao abrir o ficheiro" + +#: pdiff.cpp:1153 +msgid "Cutting selection..." +msgstr "A cortar a selecção..." + +#: pdiff.cpp:1174 +msgid "Copying selection to clipboard..." +msgstr "A copiar a selecção para a área de transferência..." + +#: pdiff.cpp:1190 +msgid "Inserting clipboard contents..." +msgstr "A inserir o conteúdo da área de transferência..." + +#: pdiff.cpp:1713 +msgid "Save && Continue" +msgstr "Gravar e Continuar" + +#: pdiff.cpp:1713 +msgid "Continue Without Saving" +msgstr "Continuar sem Gravar" + +#: pdiff.cpp:1920 +msgid "Search complete." +msgstr "Procura terminada." + +#: pdiff.cpp:1920 +msgid "Search Complete" +msgstr "Procura Terminada" + +#: pdiff.cpp:2144 +msgid "Nothing is selected in either diff input window." +msgstr "" +"Não está nada seleccionado em nenhuma janela de entrada das diferenças." + +#: pdiff.cpp:2144 +msgid "Error while adding manual diff range" +msgstr "Erro ao adicionar o intervalo manual de diferenças" + +#. i18n: file kdiff3_part.rc line 4 +#: rc.cpp:3 +#, no-c-format +msgid "&KDiff3" +msgstr "&KDiff3" + +#. i18n: file kdiff3_part.rc line 13 +#: rc.cpp:6 +#, no-c-format +msgid "Configure KDiff3" +msgstr "Configurar o KDiff3" + +#. i18n: file kdiff3_shell.rc line 7 +#: rc.cpp:15 +#, no-c-format +msgid "&Directory" +msgstr "&Pasta" + +#. i18n: file kdiff3_shell.rc line 30 +#: rc.cpp:18 +#, no-c-format +msgid "Current Item Merge Operation" +msgstr "Operação de Junção do Item Actual" + +#. i18n: file kdiff3_shell.rc line 38 +#: rc.cpp:21 +#, no-c-format +msgid "Current Item Sync Operation" +msgstr "Operação de Sincronização do Item Actual" + +#. i18n: file kdiff3_shell.rc line 50 +#: rc.cpp:24 +#, no-c-format +msgid "&Movement" +msgstr "&Movimento" + +#. i18n: file kdiff3_shell.rc line 61 +#: rc.cpp:27 +#, no-c-format +msgid "D&iffview" +msgstr "D&iferenças" + +#. i18n: file kdiff3_shell.rc line 73 +#: rc.cpp:30 +#, no-c-format +msgid "&Merge" +msgstr "Reu&nir" + +#. i18n: file kdiff3_shell.rc line 95 +#: rc.cpp:33 +#, no-c-format +msgid "&Window" +msgstr "&Janela" + +#: smalldialogs.cpp:53 +msgid "A (Base):" +msgstr "A (Base):" + +#: smalldialogs.cpp:59 smalldialogs.cpp:75 smalldialogs.cpp:91 +#: smalldialogs.cpp:134 +msgid "File..." +msgstr "Ficheiro..." + +#: smalldialogs.cpp:61 smalldialogs.cpp:77 smalldialogs.cpp:93 +#: smalldialogs.cpp:136 +msgid "Dir..." +msgstr "Pasta..." + +#: smalldialogs.cpp:86 +msgid "C (Optional):" +msgstr "C (Opcional):" + +#: smalldialogs.cpp:108 +msgid "Swap/Copy Names ..." +msgstr "Trocar/Copiar os Nomes ..." + +#: smalldialogs.cpp:114 smalldialogs.cpp:115 smalldialogs.cpp:116 +msgid "Swap %1<->%2" +msgstr "Trocar o %1<->%2" + +#: smalldialogs.cpp:117 smalldialogs.cpp:118 smalldialogs.cpp:119 +msgid "Copy %1->Output" +msgstr "Copiar o %1->Resultado" + +#: smalldialogs.cpp:120 smalldialogs.cpp:121 smalldialogs.cpp:122 +msgid "Swap %1<->Output" +msgstr "Trocar o %1<->Resultado" + +#: smalldialogs.cpp:129 +msgid "Output (optional):" +msgstr "Resultado (opcional):" + +#: smalldialogs.cpp:158 +msgid "Configure..." +msgstr "Configurar..." + +#: smalldialogs.cpp:347 +msgid "Search text:" +msgstr "Texto da procura:" + +#: smalldialogs.cpp:354 +msgid "Case sensitive" +msgstr "Distinguir capitalização" + +#: smalldialogs.cpp:357 +msgid "Search A" +msgstr "Procurar A" + +#: smalldialogs.cpp:362 +msgid "Search B" +msgstr "Procurar B" + +#: smalldialogs.cpp:367 +msgid "Search C" +msgstr "Procurar C" + +#: smalldialogs.cpp:372 +msgid "Search output" +msgstr "Resultado da procura" + +#: smalldialogs.cpp:377 +msgid "&Search" +msgstr "&Procurar" + +#: smalldialogs.cpp:394 +msgid "Regular Expression Tester" +msgstr "Teste de Expressões Regulares" + +#: smalldialogs.cpp:405 +msgid "Example auto merge line:" +msgstr "Linha de junção automática do exemplo:" + +#: smalldialogs.cpp:407 +msgid "For auto merge test copy a line as used in your files." +msgstr "" +"Para um teste da junção automática, copie uma linha usada nos seus ficheiros." + +#: smalldialogs.cpp:413 smalldialogs.cpp:442 smalldialogs.cpp:479 +msgid "Match result:" +msgstr "Resultado correspondente:" + +#: smalldialogs.cpp:432 +msgid "Example history start line (with leading comment):" +msgstr "Linha inicial do histórico do exemplo (com o comentário inicial):" + +#: smalldialogs.cpp:435 +msgid "" +"Copy a history start line as used in your files,\n" +"including the leading comment." +msgstr "" +"Copie uma linha inicial do histórico, como a usada nos seus ficheiros,\n" +"incluindo o comentário inicial." + +#: smalldialogs.cpp:461 +msgid "History sort key order:" +msgstr "Ordem da chave do histórico:" + +#: smalldialogs.cpp:469 +msgid "Example history entry start line (without leading comment):" +msgstr "" +"Linha inicial do item do histórico do exemplo (sem o comentário inicial):" + +#: smalldialogs.cpp:471 +msgid "" +"Copy a history entry start line as used in your files,\n" +"but omit the leading comment." +msgstr "" +"Copie uma linha inicial do item de histórico, como a usada nos seus ficheiros,\n" +"mas omita o comentário inicial." + +#: smalldialogs.cpp:486 +msgid "Sort key result:" +msgstr "Resultado da chave de ordenação:" + +#: smalldialogs.cpp:537 smalldialogs.cpp:547 smalldialogs.cpp:568 +msgid "Match success." +msgstr "Sucesso da correspondência." + +#: smalldialogs.cpp:541 smalldialogs.cpp:551 smalldialogs.cpp:574 +msgid "Match failed." +msgstr "A correspondência falhou." + +#: smalldialogs.cpp:559 +msgid "Opening and closing parentheses don't match in regular expression." +msgstr "" +"Os parêntesis de abertura e fecho não correspondem na expressão regular." diff --git a/po/pt_BR.po b/po/pt_BR.po new file mode 100644 index 0000000..6ee8734 --- /dev/null +++ b/po/pt_BR.po @@ -0,0 +1,2561 @@ +# translation of kdiff3.po to Brazilian Portuguese +# translation of kdiff3.po to +# translation of kdiff3.po to +# translation of kdiff3.po to +# translation of kdiff3.po to +# translation of kdiff3.po to +# translation of kdiff3.po to +# translation of kdiff3.po to +# translation of kdiff3.po to +# translation of kdiff3.po to +# Copyright (C) 2003, 2006, 2007 Free Software Foundation, Inc. +# +# Paulo Henrique Alkmin da Costa , 2003. +# Lisiane Sztoltz , 2003. +# Lisiane Sztoltz Teixeira , 2004. +# Diniz Fernando Bortolotto Ferreira , 2006. +# Diniz Bortolotto , 2006, 2007. +msgid "" +msgstr "" +"Project-Id-Version: kdiff3\n" +"POT-Creation-Date: 2006-11-05 08:45+0100\n" +"PO-Revision-Date: 2007-01-30 20:41-0200\n" +"Last-Translator: Diniz Bortolotto \n" +"Language-Team: Brazilian Portuguese \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: KBabel 1.11.4\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +#: _translatorinfo.cpp:1 +msgid "" +"_: NAME OF TRANSLATORS\n" +"Your names" +msgstr "Diniz Bortolotto, Paulo Henrique Alkmin da Costa" + +#: _translatorinfo.cpp:3 +msgid "" +"_: EMAIL OF TRANSLATORS\n" +"Your emails" +msgstr "diniz.bb@gmail.com, phalkmin@yahoo.com.br" + +#: diff.cpp:246 +msgid "Writing clipboard data to temp file failed." +msgstr "" +"A gravação de dados da área de transferência para o arquivo temporário falhou." + +#: diff.cpp:250 +msgid "From Clipboard" +msgstr "Da Ãrea de Transferência" + +#: diff.cpp:491 +msgid "" +"Preprocessing possibly failed. Check this command:\n" +"\n" +" %1\n" +"\n" +"The preprocessing command will be disabled now." +msgstr "" +"O pré-processamento possivelmente falhou. Verifique este comando:\n" +"\n" +" %1\n" +"\n" +"O comando de pré-processamento vai ser desativado." + +#: diff.cpp:526 +msgid "" +"The line-matching-preprocessing possibly failed. Check this command:\n" +"\n" +" %1\n" +"\n" +"The line-matching-preprocessing command will be disabled now." +msgstr "" +"O pré-processamento com procura de linhas possivelmente falhou. Verifique este " +"comando:\n" +"\n" +" %1\n" +"\n" +"O comando de pré-processamento com procura de linhas vai ser desativado." + +#: diff.cpp:1631 diff.cpp:1645 +msgid "" +"Data loss error:\n" +"If it is reproducable please contact the author.\n" +msgstr "" +"Erro de perda de dados:\n" +"Se for reproduzível por favor contate o autor.\n" + +#: diff.cpp:1633 diff.cpp:1647 +msgid "Severe Internal Error" +msgstr "Erro Interno Grave" + +#: difftextwindow.cpp:1643 kdiff3.cpp:753 +msgid "Top line" +msgstr "Linha de topo" + +#: difftextwindow.cpp:1653 +msgid "End" +msgstr "Fim" + +#: directorymergewindow.cpp:142 +msgid "Mix of links and normal files." +msgstr "Mistura de links e arquivos normais." + +#: directorymergewindow.cpp:149 +msgid "Link: " +msgstr "Link: " + +#: directorymergewindow.cpp:157 +msgid "Size. " +msgstr "Tamanho. " + +#: directorymergewindow.cpp:170 +msgid "Date & Size: " +msgstr "Data e Tamanho: " + +#: directorymergewindow.cpp:179 directorymergewindow.cpp:185 +msgid "Creating temp copy of %1 failed." +msgstr "A criação da cópia temporária de %1 falhou." + +#: directorymergewindow.cpp:196 directorymergewindow.cpp:204 +msgid "Opening %1 failed." +msgstr "O acesso a %1 falhou." + +#: directorymergewindow.cpp:208 +msgid "Comparing file..." +msgstr "Comparando arquivo..." + +#: directorymergewindow.cpp:218 directorymergewindow.cpp:224 +#, c-format +msgid "Error reading from %1" +msgstr "Erro ao ler de %1" + +#: directorymergewindow.cpp:282 +msgid "Name" +msgstr "Nome" + +#: directorymergewindow.cpp:286 +msgid "Operation" +msgstr "Operação" + +#: directorymergewindow.cpp:287 +msgid "Status" +msgstr "Status" + +#: directorymergewindow.cpp:288 +msgid "Unsolved" +msgstr "Não resolvido" + +#: directorymergewindow.cpp:289 +msgid "Solved" +msgstr "Resolvido" + +#: directorymergewindow.cpp:290 +msgid "Nonwhite" +msgstr "Não vazio" + +#: directorymergewindow.cpp:291 +msgid "White" +msgstr "Vazio" + +#: directorymergewindow.cpp:319 +msgid "" +"You are currently doing a directory merge. Are you sure, you want to abort the " +"merge and rescan the directory?" +msgstr "" +"Você está neste momento fazendo uma mesclagem de diretórios. Tem certeza que " +"deseja interromper a mesclagem e analisar o diretório de novo?" + +#: directorymergewindow.cpp:320 directorymergewindow.cpp:2868 +msgid "Rescan" +msgstr "Pesquisar de Novo" + +#: directorymergewindow.cpp:320 kdiff3.cpp:603 pdiff.cpp:979 +msgid "Continue Merging" +msgstr "Continuar Mesclando" + +#: directorymergewindow.cpp:462 +msgid "Opening of directories failed:" +msgstr "Abertura de diretórios falhou:" + +#: directorymergewindow.cpp:465 +msgid "" +"Dir A \"%1\" does not exist or is not a directory.\n" +msgstr "" +"Dir A \"%1\" não existe ou não é um diretório.\n" + +#: directorymergewindow.cpp:468 +msgid "" +"Dir B \"%1\" does not exist or is not a directory.\n" +msgstr "" +"Dir B \"%1\" não existe ou não é um diretório.\n" + +#: directorymergewindow.cpp:471 +msgid "" +"Dir C \"%1\" does not exist or is not a directory.\n" +msgstr "" +"Dir C \"%1\" não existe ou não é um diretório.\n" + +#: directorymergewindow.cpp:473 +msgid "Directory Open Error" +msgstr "Erro na abertura do Diretório" + +#: directorymergewindow.cpp:481 +msgid "" +"The destination directory must not be the same as A or B when three directories " +"are merged.\n" +"Check again before continuing." +msgstr "" +"O diretório de destino não pode ser o mesmo que A ou B quando são mesclados " +"três diretórios.\n" +"Verifique de novo antes de continuar." + +#: directorymergewindow.cpp:483 +msgid "Parameter Warning" +msgstr "Aviso de Parâmetro" + +#: directorymergewindow.cpp:488 +msgid "Scanning directories..." +msgstr "Pesquisando diretórios..." + +#: directorymergewindow.cpp:537 +msgid "Reading Directory A" +msgstr "Lendo Diretório A" + +#: directorymergewindow.cpp:559 +msgid "Reading Directory B" +msgstr "Lendo Diretório B" + +#: directorymergewindow.cpp:581 +msgid "Reading Directory C" +msgstr "Lendo Diretório C" + +#: directorymergewindow.cpp:607 +msgid "Some subdirectories were not readable in" +msgstr "Alguns sub-diretórios não eram legíveis" + +#: directorymergewindow.cpp:612 +msgid "Check the permissions of the subdirectories." +msgstr "Verifique as permissões dos sub-diretórios." + +#: directorymergewindow.cpp:646 kdiff3.cpp:552 kdiff3.cpp:636 kdiff3.cpp:661 +#: kdiff3.cpp:934 kdiff3.cpp:955 pdiff.cpp:1059 pdiff.cpp:1131 pdiff.cpp:1169 +#: pdiff.cpp:1185 pdiff.cpp:1215 pdiff.cpp:1226 +msgid "Ready." +msgstr "Pronto." + +#: directorymergewindow.cpp:660 +msgid "Directory Comparison Status" +msgstr "Status da Comparação de Diretório" + +#: directorymergewindow.cpp:661 +msgid "Number of subdirectories:" +msgstr "Número de sub-diretórios:" + +#: directorymergewindow.cpp:662 +msgid "Number of equal files:" +msgstr "Número de arquivos iguais:" + +#: directorymergewindow.cpp:663 +msgid "Number of different files:" +msgstr "Número de arquivos diferentes:" + +#: directorymergewindow.cpp:666 +msgid "Number of manual merges:" +msgstr "Número de mesclagens manuais:" + +#: directorymergewindow.cpp:802 +msgid "This affects all merge operations." +msgstr "Isto afeta todas as operações de mesclagem." + +#: directorymergewindow.cpp:803 +msgid "Changing All Merge Operations" +msgstr "Mudando Todas as Operações de Mesclagem" + +#: directorymergewindow.cpp:803 mergeresultwindow.cpp:287 +msgid "C&ontinue" +msgstr "C&ontinuar" + +#: directorymergewindow.cpp:1169 +msgid "Processing " +msgstr "Processando " + +#: directorymergewindow.cpp:1647 directorymergewindow.cpp:1653 +msgid "To do." +msgstr "Fazer." + +#: directorymergewindow.cpp:1756 directorymergewindow.cpp:2899 +msgid "Copy A to B" +msgstr "Copiar A para B" + +#: directorymergewindow.cpp:1757 directorymergewindow.cpp:2900 +msgid "Copy B to A" +msgstr "Copiar B para A" + +#: directorymergewindow.cpp:1758 directorymergewindow.cpp:2901 +msgid "Delete A" +msgstr "Apagar A" + +#: directorymergewindow.cpp:1759 directorymergewindow.cpp:2902 +msgid "Delete B" +msgstr "Apagar B" + +#: directorymergewindow.cpp:1760 +msgid "Delete A & B" +msgstr "Apagar A e B" + +#: directorymergewindow.cpp:1761 directorymergewindow.cpp:2904 +msgid "Merge to A" +msgstr "Mesclar com A" + +#: directorymergewindow.cpp:1762 directorymergewindow.cpp:2905 +msgid "Merge to B" +msgstr "Mesclar com B" + +#: directorymergewindow.cpp:1763 +msgid "Merge to A & B" +msgstr "Mesclar com A e B" + +#: directorymergewindow.cpp:1767 directorymergewindow.cpp:2896 +msgid "Delete (if exists)" +msgstr "Apagar (se existir)" + +#: directorymergewindow.cpp:1768 directorymergewindow.cpp:1769 +#: directorymergewindow.cpp:2895 optiondialog.cpp:809 smalldialogs.cpp:102 +msgid "Merge" +msgstr "Mesclar" + +#: directorymergewindow.cpp:1768 directorymergewindow.cpp:1769 +msgid "Merge (manual)" +msgstr "Mesclar (manual)" + +#: directorymergewindow.cpp:1770 +msgid "Error: Conflicting File Types" +msgstr "Erro: Tipos de Arquivos em Conflito" + +#: directorymergewindow.cpp:1771 +msgid "Error: Dates are equal but files are not." +msgstr "Erro: As datas são iguais mas os arquivos não." + +#: directorymergewindow.cpp:1795 directorymergewindow.cpp:1824 +#: directorymergewindow.cpp:1849 +msgid "This operation is currently not possible." +msgstr "Esta operação não é possível no momento." + +#: directorymergewindow.cpp:1795 directorymergewindow.cpp:1824 +#: directorymergewindow.cpp:1849 directorymergewindow.cpp:2106 +msgid "Operation Not Possible" +msgstr "Operação Não Possível" + +#: directorymergewindow.cpp:1888 +msgid "" +"This should never happen: \n" +"\n" +"mergeResultSaved: m_pMFI=0\n" +"\n" +"If you know how to reproduce this, please contact the program author." +msgstr "" +"Isto nunca deve acontecer:\n" +"\n" +"mergeResultSaved: m_pMFI=0\n" +"\n" +"Se souber como reproduzir isto, contate por favor o autor do programa." + +#: directorymergewindow.cpp:1888 +msgid "Program Error" +msgstr "Erro no Programa" + +#: directorymergewindow.cpp:1899 +msgid "" +"An error occurred while copying.\n" +msgstr "" +"Ocorreu um erro ao copiar.\n" + +#: directorymergewindow.cpp:1900 directorymergewindow.cpp:2306 +msgid "Merge Error" +msgstr "Erro na Mesclagem" + +#: directorymergewindow.cpp:1905 directorymergewindow.cpp:2311 +msgid "Error." +msgstr "Erro." + +#: directorymergewindow.cpp:1910 directorymergewindow.cpp:2202 +#: directorymergewindow.cpp:2242 +msgid "Done." +msgstr "Terminado." + +#: directorymergewindow.cpp:1933 +msgid "Not saved." +msgstr "Não salvo." + +#: directorymergewindow.cpp:1968 +msgid "Unknown merge operation. (This must never happen!)" +msgstr "Operação de mesclagem desconhecida. (Isto nunca deve acontecer!)" + +#: directorymergewindow.cpp:2000 +msgid "Unknown merge operation." +msgstr "Operação de mesclagem desconhecida." + +#: directorymergewindow.cpp:2015 +msgid "" +"The merge is about to begin.\n" +"\n" +"Choose \"Do it\" if you have read the instructions and know what you are " +"doing.\n" +"Choosing \"Simulate it\" will tell you what would happen.\n" +"\n" +"Be aware that this program still has beta status and there is NO WARRANTY " +"whatsoever! Make backups of your vital data!" +msgstr "" +"A mesclagem está para começar.\n" +"\n" +"Escolha \"Faça\" se você leu as instruções e sabe o que está fazendo.\n" +"Escolhendo \"Simular\" você verá o que irá acontecer.\n" +"\n" +" Saiba que esse programa ainda está em fase beta, e NÃO Hà GARANTIA alguma! " +"Faça backups dos seus dados!" + +#: directorymergewindow.cpp:2020 +msgid "Starting Merge" +msgstr "Iniciando Mesclagem" + +#: directorymergewindow.cpp:2020 +msgid "Do It" +msgstr "Faça" + +#: directorymergewindow.cpp:2020 +msgid "Simulate It" +msgstr "Simular" + +#: directorymergewindow.cpp:2046 +msgid "" +"The highlighted item has a different type in the different directories. Select " +"what to do." +msgstr "" +"O item selecionado tem um tipo diferente nos diferentes diretórios. Selecione o " +"que fazer." + +#: directorymergewindow.cpp:2055 +msgid "" +"The modification dates of the file are equal but the files are not. Select what " +"to do." +msgstr "" +"As datas de modificação do arquivo são iguais mas os arquivos não são. " +"Selecione o que fazer." + +#: directorymergewindow.cpp:2106 +msgid "" +"This operation is currently not possible because directory merge is currently " +"running." +msgstr "" +"Esta operação não é possível no momento porque uma mesclagem de diretório está " +"em execução." + +#: directorymergewindow.cpp:2166 +msgid "" +"There was an error in the last step.\n" +"Do you want to continue with the item that caused the error or do you want to " +"skip this item?" +msgstr "" +"Houve um erro no último passo.\n" +"Você quer continuar com o item que causou o erro ou prefere pular esse item?" + +#: directorymergewindow.cpp:2168 +msgid "Continue merge after an error" +msgstr "Continuar mesclagem após um erro" + +#: directorymergewindow.cpp:2168 +msgid "Continue With Last Item" +msgstr "Continuar com o Último Item" + +#: directorymergewindow.cpp:2168 +msgid "Skip Item" +msgstr "Pular Item" + +#: directorymergewindow.cpp:2202 +msgid "Skipped." +msgstr "Ignorado." + +#: directorymergewindow.cpp:2209 directorymergewindow.cpp:2435 +msgid "In progress..." +msgstr "Em progresso..." + +#: directorymergewindow.cpp:2257 +msgid "Merge operation complete." +msgstr "Operação de mesclagem completa." + +#: directorymergewindow.cpp:2257 directorymergewindow.cpp:2260 +msgid "Merge Complete" +msgstr "Mesclagem completa." + +#: directorymergewindow.cpp:2269 +msgid "" +"Simulated merge complete: Check if you agree with the proposed operations." +msgstr "" +"A simulação de mesclagem terminou: Verifique se concorda com as operações " +"propostas." + +#: directorymergewindow.cpp:2305 +msgid "" +"An error occurred. Press OK to see detailed information.\n" +msgstr "" +"Ocorreu um erro. Pressione OK para ver informações detalhadas.\n" + +#: directorymergewindow.cpp:2348 +msgid "Error: While deleting %1: Creating backup failed." +msgstr "Erro: Ao tentar apagar %1: Criação da cópia de segurança falhou." + +#: directorymergewindow.cpp:2355 +msgid "delete directory recursively( %1 )" +msgstr "apagar diretório recursivamente( %1 )" + +#: directorymergewindow.cpp:2357 +msgid "delete( %1 )" +msgstr "apagar( %1 )" + +#: directorymergewindow.cpp:2372 +msgid "Error: delete dir operation failed while trying to read the directory." +msgstr "" +"Erro: a operação de remoção de diretório falhou quando tentava ler o diretório." + +#: directorymergewindow.cpp:2391 +msgid "Error: rmdir( %1 ) operation failed." +msgstr "Erro: rmdir( %1 ) operação falhou." + +#: directorymergewindow.cpp:2401 +msgid "Error: delete operation failed." +msgstr "Erro: a operação de remoção falhou." + +#: directorymergewindow.cpp:2427 +msgid "manual merge( %1, %2, %3 -> %4)" +msgstr "mesclagem manual( %1, %2, %3 -> %4)" + +#: directorymergewindow.cpp:2430 +msgid "" +" Note: After a manual merge the user should continue by pressing F7." +msgstr "" +" Nota: Após uma mesclagem manual o usuário deve continuar pressionando F7." + +#: directorymergewindow.cpp:2453 +msgid "Error: copy( %1 -> %2 ) failed.Deleting existing destination failed." +msgstr "Erro: cópia( %1 -> %2 ) falhou. Remoção do destino existente falhou." + +#: directorymergewindow.cpp:2463 +msgid "copyLink( %1 -> %2 )" +msgstr "copyLink( %1 -> %2 )" + +#: directorymergewindow.cpp:2474 +msgid "Error: copyLink failed: Remote links are not yet supported." +msgstr "Erro: copyLink falhou: Ligações remotas ainda não são suportadas." + +#: directorymergewindow.cpp:2480 +msgid "Error: copyLink failed." +msgstr "Erro: copyLink falhou." + +#: directorymergewindow.cpp:2500 +msgid "copy( %1 -> %2 )" +msgstr "cópia( %1 -> %2 )" + +#: directorymergewindow.cpp:2526 +msgid "Error during rename( %1 -> %2 ): Cannot delete existing destination." +msgstr "" +"Erro durante renomear( %1 -> %2 ): Não é possível remover o destino existente." + +#: directorymergewindow.cpp:2532 +msgid "rename( %1 -> %2 )" +msgstr "renomear( %1 -> %2 )" + +#: directorymergewindow.cpp:2541 +msgid "Error: Rename failed." +msgstr "Erro: Renomear falhou." + +#: directorymergewindow.cpp:2559 +msgid "Error during makeDir of %1. Cannot delete existing file." +msgstr "" +"Erro durante makeDir de %1. Não foi possível remover o arquivo existente." + +#: directorymergewindow.cpp:2575 +msgid "makeDir( %1 )" +msgstr "makeDir( %1 )" + +#: directorymergewindow.cpp:2585 +msgid "Error while creating directory." +msgstr "Erro ao criar diretório." + +#: directorymergewindow.cpp:2608 directorymergewindow.cpp:2725 +msgid "Dest" +msgstr "Destino" + +#: directorymergewindow.cpp:2612 directorymergewindow.cpp:2650 +msgid "Dir" +msgstr "Dir" + +#: directorymergewindow.cpp:2613 +msgid "Type" +msgstr "Tipo" + +#: directorymergewindow.cpp:2614 +msgid "Size" +msgstr "Tamanho" + +#: directorymergewindow.cpp:2615 +msgid "Attr" +msgstr "Atributos" + +#: directorymergewindow.cpp:2616 +msgid "Last Modification" +msgstr "Última modificação" + +#: directorymergewindow.cpp:2617 +msgid "Link-Destination" +msgstr "Ligação-Destino" + +#: directorymergewindow.cpp:2667 +msgid "not available" +msgstr "não disponível" + +#: directorymergewindow.cpp:2687 +msgid "A (Dest): " +msgstr "A (Destino):" + +#: directorymergewindow.cpp:2690 +msgid "A (Base): " +msgstr "A (Base): " + +#: directorymergewindow.cpp:2696 +msgid "B (Dest): " +msgstr "B (Destino): " + +#: directorymergewindow.cpp:2704 +msgid "C (Dest): " +msgstr "C (Dest): " + +#: directorymergewindow.cpp:2710 +msgid "Dest: " +msgstr "Destino: " + +#: directorymergewindow.cpp:2775 +msgid "Save Directory Merge State As..." +msgstr "Salvar o Estado da Mesclagem de Diretório Como..." + +#: directorymergewindow.cpp:2862 +msgid "Start/Continue Directory Merge" +msgstr "Iniciar/Continuar Mesclagem de Diretório" + +#: directorymergewindow.cpp:2863 +msgid "Run Operation for Current Item" +msgstr "Executar Operação para o Item Atual" + +#: directorymergewindow.cpp:2864 +msgid "Compare Selected File" +msgstr "Comparar Arquivo Selecionado" + +#: directorymergewindow.cpp:2865 +msgid "Merge Current File" +msgstr "Mesclar Arquivo Atual" + +#: directorymergewindow.cpp:2866 +msgid "Fold All Subdirs" +msgstr "Fechar Todos Sub-diretórios" + +#: directorymergewindow.cpp:2867 +msgid "Unfold All Subdirs" +msgstr "Expandir Todos Sub-diretórios" + +#: directorymergewindow.cpp:2871 +msgid "Choose A for All Items" +msgstr "Selecionar Todos os Itens de A" + +#: directorymergewindow.cpp:2872 +msgid "Choose B for All Items" +msgstr "Selecionar Todos os Itens de B" + +#: directorymergewindow.cpp:2873 +msgid "Choose C for All Items" +msgstr "Selecionar Todos os Itens de C" + +#: directorymergewindow.cpp:2874 +msgid "Auto-Choose Operation for All Items" +msgstr "Escolher Automaticamente a Operação para Todos os Itens" + +#: directorymergewindow.cpp:2875 +msgid "No Operation for All Items" +msgstr "Nenhuma Operação para Todos os Itens" + +#: directorymergewindow.cpp:2880 +msgid "Show Identical Files" +msgstr "Mostrar Arquivos Idênticos" + +#: directorymergewindow.cpp:2881 +msgid "Show Different Files" +msgstr "Mostrar os Arquivos Diferentes" + +#: directorymergewindow.cpp:2882 +msgid "Show Files only in A" +msgstr "Mostrar Arquivos apenas em A" + +#: directorymergewindow.cpp:2883 +msgid "Show Files only in B" +msgstr "Mostrar Arquivos apenas em B" + +#: directorymergewindow.cpp:2884 +msgid "Show Files only in C" +msgstr "Mostrar Arquivos apenas em C" + +#: directorymergewindow.cpp:2888 +msgid "Compare Explicitly Selected Files" +msgstr "Comparar Explicitamente os Arquivos Selecionados" + +#: directorymergewindow.cpp:2889 +msgid "Merge Explicitly Selected Files" +msgstr "Mesclar Explicitamente os Arquivos Selecionados" + +#: directorymergewindow.cpp:2891 directorymergewindow.cpp:2898 +msgid "Do Nothing" +msgstr "Não Faça Nada" + +#: directorymergewindow.cpp:2892 +msgid "A" +msgstr "A" + +#: directorymergewindow.cpp:2893 +msgid "B" +msgstr "B" + +#: directorymergewindow.cpp:2894 +msgid "C" +msgstr "C" + +#: directorymergewindow.cpp:2903 +msgid "Delete A && B" +msgstr "Apagar A e B" + +#: directorymergewindow.cpp:2906 +msgid "Merge to A && B" +msgstr "Mesclar para A e B" + +#: fileaccess.cpp:595 +msgid "" +"While trying to make a backup, deleting an older backup failed. \n" +"Filename: " +msgstr "" +"Ao tentar fazer uma cópia de segurança, a remoção de uma cópia anterior falhou. " +"\n" +"Nome do Arquivo: " + +#: fileaccess.cpp:602 +msgid "" +"While trying to make a backup, renaming failed. \n" +"Filenames: " +msgstr "" +"Ao tentar fazer uma cópia de segurança, a mudança de nome falhou. \n" +"Nome dos Arquivos: " + +#: fileaccess.cpp:624 +#, c-format +msgid "Getting file status: %1" +msgstr "Obtendo status do arquivo: %1" + +#: fileaccess.cpp:667 +#, c-format +msgid "Reading file: %1" +msgstr "Lendo arquivo:%1" + +#: fileaccess.cpp:703 +#, c-format +msgid "Writing file: %1" +msgstr "Gravando arquivo: %1" + +#: fileaccess.cpp:731 +msgid "Out of memory" +msgstr "Memória insuficiente" + +#: fileaccess.cpp:766 +#, c-format +msgid "Making directory: %1" +msgstr "Criando diretório: %1" + +#: fileaccess.cpp:786 +#, c-format +msgid "Removing directory: %1" +msgstr "Removendo diretório: %1" + +#: fileaccess.cpp:801 +#, c-format +msgid "Removing file: %1" +msgstr "Removendo arquivo: %1" + +#: fileaccess.cpp:817 +msgid "Creating symbolic link: %1 -> %2" +msgstr "Criando link simbólico: %1 -> %2" + +#: fileaccess.cpp:843 +msgid "Renaming file: %1 -> %2" +msgstr "Renomeando arquivo: %1 -> %2" + +#: fileaccess.cpp:879 +msgid "Copying file: %1 -> %2" +msgstr "Copiando arquivo: %1 -> %2" + +#: fileaccess.cpp:893 +#, c-format +msgid "" +"Error during file copy operation: Opening file for reading failed. Filename: %1" +msgstr "" +"Erro durante a operação de cópia de arquivo: Abertura de arquivo para leitura " +"falhou. Nome do Arquivo: %1" + +#: fileaccess.cpp:899 +#, c-format +msgid "" +"Error during file copy operation: Opening file for writing failed. Filename: %1" +msgstr "" +"Erro durante operação de cópia de arquivo: Abertura do arquivo para escrita " +"falhou. Nome do Arquivo: %1" + +#: fileaccess.cpp:914 +#, c-format +msgid "Error during file copy operation: Reading failed. Filename: %1" +msgstr "" +"Erro durante operação de cópia de arquivo: Leitura falhou. Nome do Arquivo: %1" + +#: fileaccess.cpp:923 +#, c-format +msgid "Error during file copy operation: Writing failed. Filename: %1" +msgstr "" +"Erro durante operação de cópia de arquivo: Escrita falhou. Nome do Arquivo: %1" + +#: fileaccess.cpp:1219 +msgid "Reading directory: " +msgstr "Lendo diretório: " + +#: fileaccess.cpp:1348 +#, c-format +msgid "Listing directory: %1" +msgstr "Listando diretório: %1" + +#: kdiff3.cpp:142 +msgid "Current Configuration:" +msgstr "Configuração Atual:" + +#: kdiff3.cpp:147 +msgid "Config Option Error:" +msgstr "Erro da Opção de Configuração:" + +#: kdiff3.cpp:187 +msgid "Option --auto used, but no output file specified." +msgstr "Opção --auto usada, mas nenhum arquivo de saída especificado." + +#: kdiff3.cpp:323 +msgid "Option --auto ignored for directory comparison." +msgstr "Opção --auto ignorada para comparação de diretórios." + +#: kdiff3.cpp:359 +msgid "Saving failed." +msgstr "Falha ao salvar." + +#: kdiff3.cpp:386 pdiff.cpp:1041 pdiff.cpp:1112 +msgid "Opening of these files failed:" +msgstr "Abertura desses arquivos falhou: " + +#: kdiff3.cpp:395 +msgid "File Open Error" +msgstr "Erro na abertura do arquivo" + +#: kdiff3.cpp:418 +msgid "Opens documents for comparison..." +msgstr "Abre documentos para comparação..." + +#: kdiff3.cpp:423 +msgid "Saves the merge result. All conflicts must be solved!" +msgstr "" +"Salva o resultado da mesclagem. Todos os conflitos precisam ser resolvidos!" + +#: kdiff3.cpp:425 +msgid "Saves the current document as..." +msgstr "Salva o documento atual como..." + +#: kdiff3.cpp:427 +msgid "Print the differences" +msgstr "Imprimir as diferenças" + +#: kdiff3.cpp:429 +msgid "Quits the application" +msgstr "Fecha o aplicativo" + +#: kdiff3.cpp:431 +msgid "Cuts the selected section and puts it to the clipboard" +msgstr "Recorta a seção selecionada e a coloca na Ãrea de Transferência" + +#: kdiff3.cpp:433 +msgid "Copies the selected section to the clipboard" +msgstr "Copia a seção selecionada para a área de transferência" + +#: kdiff3.cpp:435 +msgid "Pastes the clipboard contents to actual position" +msgstr "Cola o conteúdo da área de transferência na posição atual" + +#: kdiff3.cpp:437 +msgid "Select everything in current window" +msgstr "Seleciona tudo na janela atual" + +#: kdiff3.cpp:439 +msgid "Search for a string" +msgstr "Procura por um texto" + +#: kdiff3.cpp:441 +msgid "Search again for the string" +msgstr "Procura de novo pelo texto" + +#: kdiff3.cpp:443 +msgid "Enables/disables the toolbar" +msgstr "Habilita / Desabilita a barra de ferramentas" + +#: kdiff3.cpp:445 +msgid "Enables/disables the statusbar" +msgstr "Habilita / Desabilita a barra de status" + +#: kdiff3.cpp:449 +msgid "Configure KDiff3..." +msgstr "Configurar KDiff3..." + +#: kdiff3.cpp:470 +msgid "Go to Current Delta" +msgstr "Vá para o Delta Atual" + +#: kdiff3.cpp:471 +msgid "Go to First Delta" +msgstr "Vá para o Primeiro Delta" + +#: kdiff3.cpp:472 +msgid "Go to Last Delta" +msgstr "Vá para o Último Delta" + +#: kdiff3.cpp:473 +msgid "(Skips white space differences when \"Show White Space\" is disabled.)" +msgstr "" +"(Ignora as diferenças de espaço em branco quando \"Mostrar os Espaços em " +"Branco\" está desativado.)" + +#: kdiff3.cpp:474 +msgid "" +"(Does not skip white space differences even when \"Show White Space\" is " +"disabled.)" +msgstr "" +"(Não ignora as diferenças de espaço em branco mesmo quando \"Mostrar os Espaços " +"em Branco\" está desativado.)" + +#: kdiff3.cpp:475 +msgid "Go to Previous Delta" +msgstr "Vá para o Delta Anterior" + +#: kdiff3.cpp:477 +msgid "Go to Next Delta" +msgstr "Vá para o Próximo Delta" + +#: kdiff3.cpp:479 +msgid "Go to Previous Conflict" +msgstr "Vá para o Conflito Anterior" + +#: kdiff3.cpp:481 +msgid "Go to Next Conflict" +msgstr "Vá para o Próximo Conflito" + +#: kdiff3.cpp:483 +msgid "Go to Previous Unsolved Conflict" +msgstr "Vá para o Conflito Não-Resolvido Anterior." + +#: kdiff3.cpp:485 +msgid "Go to Next Unsolved Conflict" +msgstr "Vá para o Próximo Conflito Não-Resolvido" + +#: kdiff3.cpp:487 +msgid "Select Line(s) From A" +msgstr "Seleciona Linha(s) De A" + +#: kdiff3.cpp:488 +msgid "Select Line(s) From B" +msgstr "Seleciona Linha(s) De B" + +#: kdiff3.cpp:489 +msgid "Select Line(s) From C" +msgstr "Selecione Linha(s) De C" + +#: kdiff3.cpp:490 +msgid "Automatically Go to Next Unsolved Conflict After Source Selection" +msgstr "" +"Ir Automaticamente para o Próximo Conflito Não-Resolvido Após a Seleção da " +"Fonte." + +#: kdiff3.cpp:492 +msgid "Show Space && Tabulator Characters for Differences" +msgstr "Mostrar as Diferenças de Espaços e Tabulações" + +#: kdiff3.cpp:493 +msgid "Show White Space" +msgstr "Mostrar Espaços em Branco" + +#: kdiff3.cpp:495 +msgid "Show Line Numbers" +msgstr "Mostrar Números de Linha" + +#: kdiff3.cpp:496 +msgid "Choose A Everywhere" +msgstr "Escolher A em qualquer lugar" + +#: kdiff3.cpp:497 +msgid "Choose B Everywhere" +msgstr "Escolher B em qualquer lugar" + +#: kdiff3.cpp:498 +msgid "Choose C Everywhere" +msgstr "Escolher C em qualquer lugar" + +#: kdiff3.cpp:499 +msgid "Choose A for All Unsolved Conflicts" +msgstr "Escolha A em Todos os Conflitos Não-Resolvidos" + +#: kdiff3.cpp:500 +msgid "Choose B for All Unsolved Conflicts" +msgstr "Escolha B em Todos os Conflitos Não-Resolvidos" + +#: kdiff3.cpp:501 +msgid "Choose C for All Unsolved Conflicts" +msgstr "Escolha C em Todos os Conflitos Não-Resolvidos" + +#: kdiff3.cpp:502 +msgid "Choose A for All Unsolved Whitespace Conflicts" +msgstr "Escolha A em Todos os Conflitos de Espaço em Branco Não-Resolvidos" + +#: kdiff3.cpp:503 +msgid "Choose B for All Unsolved Whitespace Conflicts" +msgstr "Escolha B em Todos os Conflitos de Espaço em Branco Não-Resolvidos" + +#: kdiff3.cpp:504 +msgid "Choose C for All Unsolved Whitespace Conflicts" +msgstr "Escolha C em Todos os Conflitos de Espaço em Branco Não-Resolvidos" + +#: kdiff3.cpp:505 +msgid "Automatically Solve Simple Conflicts" +msgstr "Resolva Conflitos Simples Automaticamente" + +#: kdiff3.cpp:506 +msgid "Set Deltas to Conflicts" +msgstr "Defina Delta para Conflitos" + +#: kdiff3.cpp:507 +msgid "Run Regular Expression Auto Merge" +msgstr "Executar Mesclagem Automática de Expressões Regulares" + +#: kdiff3.cpp:508 +msgid "Automatically Solve History Conflicts" +msgstr "Resolva Conflitos de Histórico Automaticamente" + +#: kdiff3.cpp:509 +msgid "Split Diff At Selection" +msgstr "Dividir Diferenças ao Selecionar" + +#: kdiff3.cpp:510 +msgid "Join Selected Diffs" +msgstr "Juntar Diferenças Selecionadas" + +#: kdiff3.cpp:512 +msgid "Show Window A" +msgstr "Mostrar Janela A" + +#: kdiff3.cpp:513 +msgid "Show Window B" +msgstr "Mostrar Janela B" + +#: kdiff3.cpp:514 +msgid "Show Window C" +msgstr "Mostrar Janela C" + +#: kdiff3.cpp:515 kdiff3.cpp:526 +msgid "Focus Next Window" +msgstr "Foco na Próxima Janela" + +#: kdiff3.cpp:517 +msgid "Normal Overview" +msgstr "Visão Normal" + +#: kdiff3.cpp:518 +msgid "A vs. B Overview" +msgstr "Visão A vs. B" + +#: kdiff3.cpp:519 +msgid "A vs. C Overview" +msgstr "Visão A vs. C" + +#: kdiff3.cpp:520 +msgid "B vs. C Overview" +msgstr "Visão B vs. C" + +#: kdiff3.cpp:521 +msgid "Word Wrap Diff Windows" +msgstr "Quebrar Linha nas Janelas de Diferenças" + +#: kdiff3.cpp:522 +msgid "Add Manual Diff Alignment" +msgstr "Adicionar Alinhamento Manual das Diferenças" + +#: kdiff3.cpp:523 +msgid "Clear All Manual Diff Alignments" +msgstr "Limpar Todos Alinhamentos de Diferenças Manuais" + +#: kdiff3.cpp:528 +msgid "Focus Prev Window" +msgstr "Foco na Janela Anterior" + +#: kdiff3.cpp:529 +msgid "Toggle Split Orientation" +msgstr "Alterar Orientação da Divisão" + +#: kdiff3.cpp:531 +msgid "Dir && Text Split Screen View" +msgstr "Janela Dividida de Diretórios e Texto" + +#: kdiff3.cpp:533 +msgid "Toggle Between Dir && Text View" +msgstr "Alternar entre visualização de Diretório e Texto" + +#: kdiff3.cpp:582 pdiff.cpp:1712 +msgid "The merge result hasn't been saved." +msgstr "O resultado da Mesclagem não foi salvo." + +#: kdiff3.cpp:583 +msgid "Save && Quit" +msgstr "Salvar e Sair" + +#: kdiff3.cpp:583 +msgid "Quit Without Saving" +msgstr "Sair sem Salvar" + +#: kdiff3.cpp:591 pdiff.cpp:1721 +msgid "Saving the merge result failed." +msgstr "Falha ao salvar o resultado da mesclagem" + +#: kdiff3.cpp:602 pdiff.cpp:978 +msgid "" +"You are currently doing a directory merge. Are you sure, you want to abort?" +msgstr "" +"Você está fazendo uma mesclagem de diretórios. Tem certeza de que deseja " +"cancelar?" + +#: kdiff3.cpp:625 +msgid "Saving file..." +msgstr "Salvando arquivo...." + +#: kdiff3.cpp:642 +msgid "Saving file with a new filename..." +msgstr "Salvando arquivo com um novo nome..." + +#: kdiff3.cpp:732 +msgid "Printing..." +msgstr "Imprimindo..." + +#: kdiff3.cpp:738 kdiff3.cpp:900 +msgid "Printing aborted." +msgstr "Impressão cancelada." + +#: kdiff3.cpp:870 +msgid "Selection" +msgstr "Seleção" + +#: kdiff3.cpp:896 +msgid "Printing completed." +msgstr "A impressão terminou." + +#: kdiff3.cpp:906 +msgid "Exiting..." +msgstr "Saindo..." + +#: kdiff3.cpp:918 +msgid "Toggling toolbar..." +msgstr "Mudando Barra de Ferramentas..." + +#: kdiff3.cpp:939 +msgid "Toggle the statusbar..." +msgstr "Mudar a Barra de Status..." + +#: kdiff3_part.cpp:155 kdiff3_part.cpp:224 +msgid "Couldn't find files for comparison." +msgstr "Não encontrou arquivos para comparação." + +#: kdiff3_part.cpp:291 +msgid "KDiff3Part" +msgstr "KDiff3Part" + +#: kdiff3_shell.cpp:78 +msgid "" +"Could not find our part!\n" +"This usually happens due to an installation problem. Please read the " +"README-file in the source package for details." +msgstr "" +"Não foi possível encontrar componente!\n" +"Isso normalmente acontece por problemas na instalação. Leia nosso arquivo de " +"LEIAME no pacote de fontes para detalhes." + +#: main.cpp:35 +msgid "Tool for Comparison and Merge of Files and Directories" +msgstr "Ferramenta para Comparação e Mesclagem de Arquivos e Diretórios" + +#: main.cpp:40 +msgid "Merge the input." +msgstr "Mesclar a Entrada." + +#: main.cpp:42 +msgid "Explicit base file. For compatibility with certain tools." +msgstr "Arquivo Base Explicito. Para compatibilidade com certas ferramentas." + +#: main.cpp:44 +msgid "Output file. Implies -m. E.g.: -o newfile.txt" +msgstr "Arquivo de Saída. Implica -m. P.ex.: -o novoarquivo.txt" + +#: main.cpp:45 +msgid "Output file, again. (For compatibility with certain tools.)" +msgstr "" +"Arquivo de saída, novamente (Para compatibilidade com certas ferramentas.)" + +#: main.cpp:46 +msgid "No GUI if all conflicts are auto-solvable. (Needs -o file)" +msgstr "" +"Sem GUI se todos os conflitos forem auto-solucionáveis. (Necessita -o arquivo)" + +#: main.cpp:47 +msgid "Don't solve conflicts automatically. (For compatibility...)" +msgstr "Não resolver conflitos automaticamente. (Para compatibilidade...)" + +#: main.cpp:48 +msgid "Visible name replacement for input file 1 (base)." +msgstr "Substituição do nome vísivel para o arquivo de entrada 1 (base)." + +#: main.cpp:49 +msgid "Visible name replacement for input file 2." +msgstr "Substituição do nome vísivel para o arquivo de entrada 2." + +#: main.cpp:50 +msgid "Visible name replacement for input file 3." +msgstr "Substituição do nome vísivel para o arquivo de entrada 3." + +#: main.cpp:52 +msgid "Alternative visible name replacement. Supply this once for every input." +msgstr "" +"Substituição alternativa do nome vísivel. Coloque apenas um para cada entrada." + +#: main.cpp:53 +msgid "" +"Override a config setting. Use once for every setting. E.g.: --cs " +"\"AutoAdvance=1\"" +msgstr "" +"Substitui uma opção de configuração. Use uma vez para todas as opções. P.ex.: " +"--cs \"AutoAdvance=1\"" + +#: main.cpp:54 +msgid "Show list of config settings and current values." +msgstr "Mostra uma lista das opções de configuração e os valores atuais." + +#: main.cpp:55 +msgid "Use a different config file." +msgstr "Usar um arquivo de configuração diferente." + +#: main.cpp:59 +msgid "file1 to open (base, if not specified via --base)" +msgstr "arquivo 1 abrindo (base, se não especificado via --base)" + +#: main.cpp:60 +msgid "file2 to open" +msgstr "arquivo 2 abrindo" + +#: main.cpp:61 +msgid "file3 to open" +msgstr "arquivo 3 abrindo" + +#: main.cpp:93 +msgid "Ignored. (User defined.)" +msgstr "Ignorado. (Definido pelo usuário.)" + +#. i18n: file kdiff3_part.rc line 16 +#: main.cpp:173 rc.cpp:9 +#, no-c-format +msgid "KDiff3" +msgstr "KDiff3" + +#: main.cpp:186 +msgid "+ Many thanks to those who reported bugs and contributed ideas!" +msgstr "" +"Muito obrigada para aqueles que relataram bugs e contribuíram com idéias!" + +#: mergeresultwindow.cpp:136 mergeresultwindow.cpp:939 +#: mergeresultwindow.cpp:953 mergeresultwindow.cpp:965 +#: mergeresultwindow.cpp:977 +msgid "Number of remaining unsolved conflicts: %1 (of which %2 are whitespace)" +msgstr "" +"Número de conflitos não resolvidos: %1 (dos quais %2 são espaços em branco)" + +#: mergeresultwindow.cpp:285 +msgid "" +"The output has been modified.\n" +"If you continue your changes will be lost." +msgstr "" +"A saída foi modificada.\n" +"Se você continuar suas mudanças serão perdidas." + +#: mergeresultwindow.cpp:797 pdiff.cpp:511 +msgid "All input files are binary equal." +msgstr "Todos os arquivos de entrada são iguais em nível binário." + +#: mergeresultwindow.cpp:799 +msgid "All input files contain the same text." +msgstr "Todos os arquivos de entrada contém o mesmo texto." + +#: mergeresultwindow.cpp:801 +msgid "" +"Files A and B are binary equal.\n" +msgstr "" +"Arquivos A e B são iguais em nível binário.\n" + +#: mergeresultwindow.cpp:802 +msgid "" +"Files A and B have equal text. \n" +msgstr "" +"Arquivos A e B possuem texto igual. \n" + +#: mergeresultwindow.cpp:803 +msgid "" +"Files A and C are binary equal.\n" +msgstr "" +"Arquivos A e C são iguais em nível binário. \n" + +#: mergeresultwindow.cpp:804 +msgid "" +"Files A and C have equal text. \n" +msgstr "" +"Arquivos A e C possuem texto igual. \n" + +#: mergeresultwindow.cpp:805 +msgid "" +"Files B and C are binary equal.\n" +msgstr "" +"Arquivos B e C são iguais em nível binário. \n" + +#: mergeresultwindow.cpp:806 +msgid "" +"Files B and C have equal text. \n" +msgstr "" +"Arquivos B e C possuem texto igual. \n" + +#: mergeresultwindow.cpp:812 +msgid "Total number of conflicts: " +msgstr "Número total de conflitos:" + +#: mergeresultwindow.cpp:813 +msgid "" +"\n" +"Nr of automatically solved conflicts: " +msgstr "" +"\n" +"Número de conflitos resolvidos automaticamente: " + +#: mergeresultwindow.cpp:814 +msgid "" +"\n" +"Nr of unsolved conflicts: " +msgstr "" +"\n" +"Número de conflitos não resolvidos: " + +#: mergeresultwindow.cpp:816 +msgid "Conflicts" +msgstr "Conflitos" + +#: mergeresultwindow.cpp:1652 +msgid "" +msgstr "" + +#: mergeresultwindow.cpp:1660 +msgid "" +msgstr "" + +#: mergeresultwindow.cpp:1662 mergeresultwindow.cpp:2427 +msgid "" +msgstr "" + +#: mergeresultwindow.cpp:2635 +msgid "" +"Not all conflicts are solved yet.\n" +"File not saved.\n" +msgstr "" +"Nem todos os conflitos foram resolvidos.\n" +"Arquivo não foi salvo.\n" + +#: mergeresultwindow.cpp:2637 +msgid "Conflicts Left" +msgstr "Conflitos Restantes" + +#: mergeresultwindow.cpp:2649 +msgid "" +"\n" +"\n" +"Creating backup failed. File not saved." +msgstr "" +"\n" +"\n" +"Criação do backup falhou. Arquivo não salvo." + +#: mergeresultwindow.cpp:2649 mergeresultwindow.cpp:2689 +msgid "File Save Error" +msgstr "Erro ao salvar arquivo" + +#: mergeresultwindow.cpp:2689 +msgid "Error while writing." +msgstr "Erro ao gravar." + +#: mergeresultwindow.cpp:3020 +msgid "Output" +msgstr "Saída" + +#: mergeresultwindow.cpp:3032 mergeresultwindow.cpp:3139 +msgid "[Modified]" +msgstr "[Modificado]" + +#: mergeresultwindow.cpp:3039 +msgid "Encoding for saving" +msgstr "Codificação da gravação" + +#: mergeresultwindow.cpp:3075 mergeresultwindow.cpp:3081 +#: mergeresultwindow.cpp:3087 +msgid "Codec from" +msgstr "Codificador de" + +#: optiondialog.cpp:362 +msgid "Unicode, 8 bit" +msgstr "Unicode, 8 bit" + +#: optiondialog.cpp:363 +msgid "Unicode" +msgstr "Unicode" + +#: optiondialog.cpp:364 +msgid "Latin1" +msgstr "Latin1" + +#: optiondialog.cpp:383 +msgid "Change this if non-ASCII characters are not displayed correctly." +msgstr "" +"Mude isto se caracteres diferentes de ASCII não forem exibidos corretamente." + +#: optiondialog.cpp:510 +msgid "Editor & Diff Output Font" +msgstr "Fonte de Saída do Editor & Diff " + +#: optiondialog.cpp:531 +msgid "Italic font for deltas" +msgstr "Fonte em Itálico para deltas" + +#: optiondialog.cpp:534 +msgid "" +"Selects the italic version of the font for differences.\n" +"If the font doesn't support italic characters, then this does nothing." +msgstr "" +"Seleciona a versão em itálico da fonte para diferenças.\n" +"Se a fonte não suportar caracteres em itálico, ele não fará nada." + +#: optiondialog.cpp:542 +msgid "Color" +msgstr "Cor" + +#: optiondialog.cpp:542 +msgid "Colors Settings" +msgstr "Configuração de Cores" + +#: optiondialog.cpp:556 +msgid "Editor and Diff Views:" +msgstr "Ãreas do Editor e das Diferenças:" + +#: optiondialog.cpp:564 +msgid "Foreground color:" +msgstr "Cor de Primeiro Plano" + +#: optiondialog.cpp:570 +msgid "Background color:" +msgstr "Cor do plano de fundo" + +#: optiondialog.cpp:578 +msgid "Diff background color:" +msgstr "Cor do plano de fundo do Diferenciador:" + +#: optiondialog.cpp:585 +msgid "Color A:" +msgstr "Cor A:" + +#: optiondialog.cpp:592 +msgid "Color B:" +msgstr "Cor B:" + +#: optiondialog.cpp:599 +msgid "Color C:" +msgstr "Cor C:" + +#: optiondialog.cpp:605 +msgid "Conflict color:" +msgstr "Cor de Conflitos:" + +#: optiondialog.cpp:612 +msgid "Current range background color:" +msgstr "Cor do plano de fundo da seleção atual:" + +#: optiondialog.cpp:619 +msgid "Current range diff background color:" +msgstr "Cor do plano de fundo da seleção atual do Diferenciador:" + +#: optiondialog.cpp:625 +msgid "Color for manually aligned difference ranges:" +msgstr "Cor dos intervalos de diferenças alinhados manualmente:" + +#: optiondialog.cpp:630 +msgid "Directory Comparison View:" +msgstr "Ãrea de Comparação de Diretório:" + +#: optiondialog.cpp:636 +msgid "Newest file color:" +msgstr "Cor do arquivo mais recente:" + +#: optiondialog.cpp:639 +msgid "" +"Changing this color will only be effective when starting the next directory " +"comparison." +msgstr "" +"Mudar esta cor, só terá efeito quando iniciar a próxima comparação de " +"diretório." + +#: optiondialog.cpp:644 +msgid "Oldest file color:" +msgstr "Cor do arquivo mais antigo:" + +#: optiondialog.cpp:651 +msgid "Middle age file color:" +msgstr "Cor dos arquivos intermediários:" + +#: optiondialog.cpp:658 +msgid "Color for missing files:" +msgstr "Cor dos arquivos faltantes:" + +#: optiondialog.cpp:670 +msgid "Editor" +msgstr "Editor" + +#: optiondialog.cpp:670 +msgid "Editor Behavior" +msgstr "Comportamento do Editor" + +#: optiondialog.cpp:680 +msgid "Tab inserts spaces" +msgstr "Tab insere espaços" + +#: optiondialog.cpp:683 +msgid "" +"On: Pressing tab generates the appropriate number of spaces.\n" +"Off: A Tab-character will be inserted." +msgstr "" +"Ligado: Ao pressionar Tab o número apropriado de espaços é gerado.\n" +"Desligado: Um caracter de Tab será inserido." + +#: optiondialog.cpp:689 +msgid "Tab size:" +msgstr "Tamanho da tabulação:" + +#: optiondialog.cpp:694 +msgid "Auto indentation" +msgstr "Auto identação" + +#: optiondialog.cpp:697 +msgid "" +"On: The indentation of the previous line is used for a new line.\n" +msgstr "" +"Ligado: A identação da linha anterior é usada para uma nova linha. \n" + +#: optiondialog.cpp:701 +msgid "Auto copy selection" +msgstr "Auto copiar seleção" + +#: optiondialog.cpp:704 +msgid "" +"On: Any selection is immediately written to the clipboard.\n" +"Off: You must explicitely copy e.g. via Ctrl-C." +msgstr "" +"Ligado: Qualquer seleção é imediatamente enviada para a Ãrea de Transferência.\n" +"Desligado: Você deve explicitamente copiar, p.ex. via Ctrl+C." + +#: optiondialog.cpp:709 +msgid "Line end style:" +msgstr "Estilo de fim de linha:" + +#: optiondialog.cpp:721 +msgid "" +"Sets the line endings for when an edited file is saved.\n" +"DOS/Windows: CR+LF; UNIX: LF; with CR=0D, LF=0A" +msgstr "" +"Configura os finais de linha para quando um arquivo editado for salvo.\n" +"DOS/Windows: CR+LF; Unix: LF; com CR=0D, LF=0A" + +#: optiondialog.cpp:732 +msgid "Diff" +msgstr "Diff" + +#: optiondialog.cpp:732 +msgid "Diff Settings" +msgstr "Configurações de Diff" + +#: optiondialog.cpp:743 +msgid "Preserve carriage return" +msgstr "Preservar retorno de carro." + +#: optiondialog.cpp:746 +msgid "" +"Show carriage return characters '\\r' if they exist.\n" +"Helps to compare files that were modified under different operating systems." +msgstr "" +"Exibir caracteres de retorno de carro '\\r' se existirem.\n" +"Ajuda a comparar arquivos que foram modificados em diferentes sistemas " +"operacionais." + +#: optiondialog.cpp:751 +msgid "Ignore numbers" +msgstr "Ignorar Números" + +#: optiondialog.cpp:754 +msgid "" +"Ignore number characters during line matching phase. (Similar to Ignore white " +"space.)\n" +"Might help to compare files with numeric data." +msgstr "" +"Ignorar caracteres numéricos durante fase de combinação de linhas. (Similar a " +"Ignorar espaços em branco.)\n" +"Pode ajudar a comparar arquivos com dados numéricos." + +#: optiondialog.cpp:759 +msgid "Ignore C/C++ comments" +msgstr "Ignorar comentários de C/C++" + +#: optiondialog.cpp:761 +msgid "Treat C/C++ comments like white space." +msgstr "Trata comentários C/C++ como espaços em branco." + +#: optiondialog.cpp:765 +msgid "Ignore case" +msgstr "Ignorar caixa" + +#: optiondialog.cpp:768 +msgid "Treat case differences like white space changes. ('a'<=>'A')" +msgstr "Tratar casos diferentes como mudanças de espaços em branco ('a'<=>'A')" + +#: optiondialog.cpp:772 +msgid "Preprocessor command:" +msgstr "Comando do Pré-processador:" + +#: optiondialog.cpp:776 +msgid "User defined pre-processing. (See the docs for details.)" +msgstr "" +"Pré-processamento definido pelo usuário. (Veja a documentação para detalhes.)" + +#: optiondialog.cpp:779 +msgid "Line-matching preprocessor command:" +msgstr "Comando do Pré-processador para correspondência de linhas:" + +#: optiondialog.cpp:783 +msgid "" +"This pre-processor is only used during line matching.\n" +"(See the docs for details.)" +msgstr "" +"Esse pré-processador é usado somente durante correspondência de linhas.\n" +"(Veja a documentação para detalhes.)" + +#: optiondialog.cpp:786 +msgid "Try hard (slower)" +msgstr "Tentar com persistência (lento)" + +#: optiondialog.cpp:789 +msgid "" +"Enables the --minimal option for the external diff.\n" +"The analysis of big files will be much slower." +msgstr "" +"Habilita a opção --minimal para o diff externo.\n" +"A análise dos arquivos grandes será muito mais lenta." + +#: optiondialog.cpp:794 +msgid "Auto advance delay (ms):" +msgstr "Atraso no avanço automático (ms):" + +#: optiondialog.cpp:799 +msgid "" +"When in Auto-Advance mode the result of the current selection is shown \n" +"for the specified time, before jumping to the next conflict. Range: 0-2000 ms" +msgstr "" +"Quando estiver no modo de Avanço Automático, o resultado da seleção atual é " +"mostrado\n" +"durante o período indicado, antes de saltar para o próximo conflito. Intervalo: " +"0-2000 ms" + +#: optiondialog.cpp:809 +msgid "Merge Settings" +msgstr "Configurações de Mesclagem" + +#: optiondialog.cpp:822 +msgid "White space 2-file merge default:" +msgstr "Mesclagem padrão de 2 arquivos com espaços em branco:" + +#: optiondialog.cpp:826 optiondialog.cpp:839 +msgid "Manual Choice" +msgstr "Escolha Manual" + +#: optiondialog.cpp:830 optiondialog.cpp:844 +msgid "" +"Allow the merge algorithm to automatically select an input for white-space-only " +"changes." +msgstr "" +"Permite que o algoritmo de mesclagem selecione automaticamente uma entrada para " +"mudanças somente em espaços em branco." + +#: optiondialog.cpp:835 +msgid "White space 3-file merge default:" +msgstr "Mesclagem padrão de 3 arquivos com espaços em branco:" + +#: optiondialog.cpp:849 +msgid "Automatic Merge Regular Expression" +msgstr "Expressão Regular de Mesclagem Automática" + +#: optiondialog.cpp:858 smalldialogs.cpp:397 +msgid "Auto merge regular expression:" +msgstr "Expressão regular de mesclagem automática:" + +#: optiondialog.cpp:862 +msgid "" +"Regular expression for lines where KDiff3 should automatically choose one " +"source.\n" +"When a line with a conflict matches the regular expression then\n" +"- if available - C, otherwise B will be chosen." +msgstr "" +"A expressão regular para linhas em que o KDiff3 deverá escolher automaticamente " +"umaorigem.\n" +"Quando uma linha com um conflito corresponder à expressão regular então\n" +"- se possível - será C, caso contrário B será escolhido." + +#: optiondialog.cpp:868 +msgid "Run regular expression auto merge on merge start" +msgstr "" +"Executar a mesclagem automática da expressão regular ao iniciar a mesclagem" + +#: optiondialog.cpp:870 +msgid "" +"Run the merge for auto merge regular expressions\n" +"immediately when a merge starts.\n" +msgstr "" +"Executa a mesclagem para as expressões regulares de mesclagem automática\n" +"imediatamente após o início de uma mesclagem.\n" + +#: optiondialog.cpp:875 +msgid "Version Control History Merging" +msgstr "Mesclagem do Histórico de Controle de Versões" + +#: optiondialog.cpp:884 smalldialogs.cpp:424 +msgid "History start regular expression:" +msgstr "Expressão regular do início do histórico:" + +#: optiondialog.cpp:888 +msgid "" +"Regular expression for the start of the version control history entry.\n" +"Usually this line contains the \"$Log$\"-keyword.\n" +"Default value: \".*\\$Log.*\\$.*\"" +msgstr "" +"A expressão regular para o início do item de histórico da mesclagem.\n" +"Normalmente este valor contém a palavra-chave \"$Log$\".\n" +"Valor padrão: \".*\\$Log.*\\$.*\"" + +#: optiondialog.cpp:894 smalldialogs.cpp:453 +msgid "History entry start regular expression:" +msgstr "Expressão regular do início do item de histórico:" + +#: optiondialog.cpp:906 +msgid "" +"A version control history entry consists of several lines.\n" +"Specify the regular expression to detect the first line (without the leading " +"comment).\n" +"Use parentheses to group the keys you want to use for sorting.\n" +"If left empty, then KDiff3 assumes that empty lines separate history entries.\n" +"See the documentation for details." +msgstr "" +"Um item de histórico da mesclagem consiste em várias linhas.\n" +"Indique a expressão regular usada para detectar a primeira linha (sem o " +"comentário inicial).\n" +"Use os parênteses para agrupar as chaves que deseja usar na ordenação.\n" +"Se for deixado em branco, o KDiff3 assume que as linhas em branco separam os " +"itens de histórico.\n" +"Veja a documentação para detalhes." + +#: optiondialog.cpp:914 +msgid "History merge sorting" +msgstr "Ordenação da mesclagem do histórico" + +#: optiondialog.cpp:916 +msgid "Sort version control history by a key." +msgstr "Ordenar o histórico do controle de versões por uma chave." + +#: optiondialog.cpp:926 +msgid "History entry start sort key order:" +msgstr "Ordem da chave de ordenação do início do item de histórico:" + +#: optiondialog.cpp:930 +msgid "" +"Each parentheses used in the regular expression for the history start entry\n" +"groups a key that can be used for sorting.\n" +"Specify the list of keys (that are numbered in order of occurrence\n" +"starting with 1) using ',' as separator (e.g. \"4,5,6,1,2,3,7\").\n" +"If left empty, then no sorting will be done.\n" +"See the documentation for details." +msgstr "" +"Cada um dos parênteses usados na expressão regular no item inicial do " +"histórico\n" +"agrupa uma chave que poderá ser usada na ordenação.\n" +"Indique a lista de chaves (que são numeradas por ordem de ocorrência,\n" +"começando com 1), usando ',' como separador (p.ex., \"4,5,6,1,2,3,7\").\n" +"Se for deixado em branco, não será feita nenhuma ordenação.\n" +"Veja a documentação para detalhes." + +#: optiondialog.cpp:941 +msgid "Merge version control history on merge start" +msgstr "Mesclar o histórico do controle de versões ao iniciar a mesclagem" + +#: optiondialog.cpp:943 +msgid "Run version control history automerge on merge start." +msgstr "" +"Executar mesclagem automática do histórico de controlo de versões ao iniciar a " +"mesclagem." + +#: optiondialog.cpp:947 +msgid "Test your regular expressions" +msgstr "Testar suas expressões regulares" + +#: optiondialog.cpp:952 +msgid "Irrelevant merge command:" +msgstr "Comando de mesclagem irrelevante:" + +#: optiondialog.cpp:956 +msgid "" +"If specified this script is run after automerge\n" +"when no other relevant changes were detected.\n" +"Called with the parameters: filename1 filename2 filename3" +msgstr "" +"Se for indicado, este script é executado após a mesclagem automática\n" +"quando não forem detectadas mais alterações relevantes.\n" +"É invocado com os parâmetros: arquivo1 arquivo2 arquivo3" + +#: optiondialog.cpp:966 +msgid "Directory Merge" +msgstr "Mesclagem de Diretório" + +#: optiondialog.cpp:975 +msgid "Recursive directories" +msgstr "Diretórios Recursivos" + +#: optiondialog.cpp:977 +msgid "Whether to analyze subdirectories or not." +msgstr "Decide analisar sub-diretórios ou não." + +#: optiondialog.cpp:979 +msgid "File pattern(s):" +msgstr "Padrão(ões) de Arquivo:" + +#: optiondialog.cpp:984 +msgid "" +"Pattern(s) of files to be analyzed. \n" +"Wildcards: '*' and '?'\n" +"Several Patterns can be specified by using the separator: ';'" +msgstr "" +"Padrão(ões) de arquivos a analisar.\n" +"Caracteres especiais: '*' e '?'\n" +"Podem ser indicados vários padrões usando o separador: ';'" + +#: optiondialog.cpp:990 +msgid "File-anti-pattern(s):" +msgstr "Anti-padrão(ões) de arquivo:" + +#: optiondialog.cpp:995 +msgid "" +"Pattern(s) of files to be excluded from analysis. \n" +"Wildcards: '*' and '?'\n" +"Several Patterns can be specified by using the separator: ';'" +msgstr "" +"Padrão(ões) de arquivos a excluir da análise.\n" +"Caracteres especiais: '*' e '?'\n" +"Podem ser indicados vários padrões usando o separador: ';'" + +#: optiondialog.cpp:1001 +msgid "Dir-anti-pattern(s):" +msgstr "Anti-padrão(ões) de diretório:" + +#: optiondialog.cpp:1006 +msgid "" +"Pattern(s) of directories to be excluded from analysis. \n" +"Wildcards: '*' and '?'\n" +"Several Patterns can be specified by using the separator: ';'" +msgstr "" +"Padrão(ões) de diretórios a excluir da análise.\n" +"Caracteres especiais: '*' e '?'\n" +"Podem ser indicados vários padrões usando o separador: ';'" + +#: optiondialog.cpp:1012 +msgid "Use .cvsignore" +msgstr "Usar .cvsignore" + +#: optiondialog.cpp:1015 +msgid "" +"Extends the antipattern to anything that would be ignored by CVS.\n" +"Via local \".cvsignore\"-files this can be directory specific." +msgstr "" +"Extende o antipadrão para qualquer coisa que possa ser ignorada pelo CVS.\n" +"Através de arquivos \".cvsignore\" locais isso pode ser específico para cada " +"diretório." + +#: optiondialog.cpp:1020 +msgid "Find hidden files and directories" +msgstr "Encontrar arquivos e diretórios ocultos" + +#: optiondialog.cpp:1023 +msgid "Finds files and directories with the hidden attribute." +msgstr "Encontra arquivos e diretórios com o atributo oculto." + +#: optiondialog.cpp:1025 +msgid "Finds files and directories starting with '.'." +msgstr "Encontrar arquivos e diretórios começando com '.'." + +#: optiondialog.cpp:1029 +msgid "Follow file links" +msgstr "Seguir as ligações de arquivos" + +#: optiondialog.cpp:1032 +msgid "" +"On: Compare the file the link points to.\n" +"Off: Compare the links." +msgstr "" +"Ligado: Compara o arquivo para o qual a ligação aponta.\n" +"Desligado: Compara as ligações." + +#: optiondialog.cpp:1037 +msgid "Follow directory links" +msgstr "Seguir ligações de diretório" + +#: optiondialog.cpp:1040 +msgid "" +"On: Compare the directory the link points to.\n" +"Off: Compare the links." +msgstr "" +"Ligado: Compara o diretório para o qual a ligação aponta.\n" +"Desligado: Compara as ligações." + +#: optiondialog.cpp:1056 +msgid "Case sensitive filename comparison" +msgstr "Comparação de nomes de arquivos sensível à caixa" + +#: optiondialog.cpp:1059 +msgid "" +"The directory comparison will compare files or directories when their names " +"match.\n" +"Set this option if the case of the names must match. (Default for Windows is " +"off, otherwise on.)" +msgstr "" +"A comparação de diretório irá comparar os arquivos ou diretórios quando os seus " +"nomes corresponderem.\n" +"Configure esta opção se a caixa dos nomes deve corresponder. (O padrão para " +"Windows é desligada; caso contrário ligada.)" + +#: optiondialog.cpp:1063 +msgid "File Comparison Mode" +msgstr "Modo de Comparação de Arquivo" + +#: optiondialog.cpp:1067 +msgid "Binary comparison" +msgstr "Comparação binária" + +#: optiondialog.cpp:1068 +msgid "Binary comparison of each file. (Default)" +msgstr "Comparação binária de cada arquivo. (Padrão)" + +#: optiondialog.cpp:1070 +msgid "Full analysis" +msgstr "Análise completa" + +#: optiondialog.cpp:1071 +msgid "" +"Do a full analysis and show statistics information in extra columns.\n" +"(Slower than a binary comparison, much slower for binary files.)" +msgstr "" +"Fazer uma análise completa e mostrar informações estatísticas em colunas " +"extra.\n" +"(Mais lento que a comparação binária, muito mais lento para arquivos binários.)" + +#: optiondialog.cpp:1074 +msgid "Trust the modification date (unsafe)" +msgstr "Confiar na data de modificação (inseguro)" + +#: optiondialog.cpp:1075 +msgid "" +"Assume that files are equal if the modification date and file length are " +"equal.\n" +"Useful for big directories or slow networks." +msgstr "" +"Assumir que os arquivos são iguais se a data de modificação e o tamanho do " +"arquivo são iguais.\n" +"Útil para diretórios grandes ou para redes lentas." + +#: optiondialog.cpp:1078 +msgid "Trust the size (unsafe)" +msgstr "Confiar no tamanho (inseguro)" + +#: optiondialog.cpp:1079 +msgid "" +"Assume that files are equal if their file lengths are equal.\n" +"Useful for big directories or slow networks when the date is modified during " +"download." +msgstr "" +"Assumir que os arquivos são iguais se o seu tamanho é igual.\n" +"Útil para diretórios grandes ou para redes lentas quando a data é modificada " +"durante o download." + +#: optiondialog.cpp:1083 +msgid "Synchronize directories" +msgstr "Sincronizar diretórios" + +#: optiondialog.cpp:1086 +msgid "" +"Offers to store files in both directories so that\n" +"both directories are the same afterwards.\n" +"Works only when comparing two directories without specifying a destination." +msgstr "" +"Oferece-se para armazenar arquivos em ambos diretórios\n" +"de modo que ambos fiquem iguais no fim.\n" +"Funciona apenas ao comparar dois diretórios sem indicar um destino." + +#: optiondialog.cpp:1092 +msgid "White space differences considered equal" +msgstr "Diferenças de espaço em branco consideradas iguais" + +#: optiondialog.cpp:1095 +msgid "" +"If files differ only by white space consider them equal.\n" +"This is only active when full analysis is chosen." +msgstr "" +"Se os arquivos apenas diferem em espaço em branco considerá-los iguais.\n" +"Isto está ativo apenas quando é escolhida a análise completa." + +#: optiondialog.cpp:1101 +msgid "Copy newer instead of merging (unsafe)" +msgstr "Copiar mais novo ao invés de mesclar (inseguro)" + +#: optiondialog.cpp:1104 +msgid "" +"Don't look inside, just take the newer file.\n" +"(Use this only if you know what you are doing!)\n" +"Only effective when comparing two directories." +msgstr "" +"Não analisa, apenas pega o arquivo mais novo.\n" +"(Use somente se você sabe o que está fazendo!)\n" +"Só é efetivo quando comparando dois diretórios." + +#: optiondialog.cpp:1109 +msgid "Backup files (.orig)" +msgstr "Backup dos arquivos (.orig)" + +#: optiondialog.cpp:1112 +msgid "" +"When a file would be saved over an old file, then the old file\n" +"will be renamed with a '.orig'-extension instead of being deleted." +msgstr "" +"Quando um arquivo for salvo sobre um arquivo antigo, o arquivo antigo\n" +"será renomeado com uma extensão '.orig' ao invés de ser removido." + +#: optiondialog.cpp:1176 +msgid "Regional Settings" +msgstr "Configurações Regionais" + +#: optiondialog.cpp:1272 +msgid "Language (restart required)" +msgstr "Idioma (é necessário reiniciar)" + +#: optiondialog.cpp:1304 +msgid "" +"Choose the language of the GUI-strings or \"Auto\".\n" +"For a change of language to take place, quit and restart KDiff3." +msgstr "" +"Escolha o idioma dainterface gráfica ou \"Auto\".\n" +"Para que a mudança de idioma tenha efeito, saia e reinicie o KDiff3." + +#: optiondialog.cpp:1322 +msgid "Use the same encoding for everything:" +msgstr "Utilizar a mesma codificação para tudo:" + +#: optiondialog.cpp:1325 +msgid "" +"Enable this allows to change all encodings by changing the first only.\n" +"Disable this if different individual settings are needed." +msgstr "" +"Ative isto para permitir modificar todas as codificações alterando apenas a " +"primeira.\n" +"Desative se forem necessárias opções individuais." + +#: optiondialog.cpp:1330 +msgid "Note: Local Encoding is " +msgstr "Nota: A codificação local é" + +#: optiondialog.cpp:1334 +msgid "File Encoding for A:" +msgstr "Codificação de Arquivo para A:" + +#: optiondialog.cpp:1340 +msgid "" +"If enabled then Unicode (UTF-16 or UTF-8) encoding will be detected.\n" +"If the file encoding is not detected then the selected encoding will be used as " +"fallback.\n" +"(Unicode detection depends on the first bytes of a file - the byte order mark " +"\"BOM\".)" +msgstr "" +"Se estiver ativo, então a codificação Unicode (UTF-16 ou UTF-8) será " +"detectada.\n" +"Se a codificação do arquivo não for detectada, então a codificação selecionada " +"será usada como alternativa.\n" +"(A detecção de Unicode depende dos primeiros bytes de um arquivo - a marca de " +"ordem de bytes \"BOM\".)" + +#: optiondialog.cpp:1344 optiondialog.cpp:1353 optiondialog.cpp:1362 +msgid "Auto Detect Unicode" +msgstr "Auto-Detectar o Unicode" + +#: optiondialog.cpp:1349 +msgid "File Encoding for B:" +msgstr "Codificação de Arquivo para B:" + +#: optiondialog.cpp:1358 +msgid "File Encoding for C:" +msgstr "Codificação de Arquivo para C:" + +#: optiondialog.cpp:1367 +msgid "File Encoding for Merge Output and Saving:" +msgstr "Codificação de Arquivo para Mesclagem de Resultado e Gravação:" + +#: optiondialog.cpp:1371 +msgid "Auto Select" +msgstr "Seleção Automática" + +#: optiondialog.cpp:1374 +msgid "" +"If enabled then the encoding from the input files is used.\n" +"In ambiguous cases a dialog will ask the user to choose the encoding for " +"saving." +msgstr "" +"Se estiver ativada, será usada a codificação dos arquivos de entrada.\n" +"Em casos ambíguos, uma caixa de diálogo irá pedir ao usuário para escolher a " +"codificação com que deseja gravar." + +#: optiondialog.cpp:1378 +msgid "File Encoding for Preprocessor Files:" +msgstr "Codificação de Arquivo dos Arquivos de Pré-processamento:" + +#: optiondialog.cpp:1389 +msgid "Right To Left Language" +msgstr "Idioma da Direita para a Esquerda" + +#: optiondialog.cpp:1392 +msgid "" +"Some languages are read from right to left.\n" +"This setting will change the viewer and editor accordingly." +msgstr "" +"Alguns idiomas são lidos da direita para esquerda.\n" +"Esta opção muda o visualizador e editor apropriadamente." + +#: optiondialog.cpp:1402 +msgid "Integration" +msgstr "Integração" + +#: optiondialog.cpp:1402 +msgid "Integration Settings" +msgstr "Configuração de Integração" + +#: optiondialog.cpp:1412 +msgid "Command line options to ignore:" +msgstr "Opções da linha de comandos a ignorar:" + +#: optiondialog.cpp:1417 +msgid "" +"List of command line options that should be ignored when KDiff3 is used by " +"other tools.\n" +"Several values can be specified if separated via ';'\n" +"This will suppress the \"Unknown option\"-error." +msgstr "" +"Uma lista das opções da linha de comandos que deverão ser ignoradas, quando o " +"KDiff3 for usado por outras ferramentas.\n" +"Se desejar indicar vários valores, separe-os por ';'\n" +"Isto irá eliminar o erro de \"Opção desconhecida\"." + +#: optiondialog.cpp:1480 +msgid "" +"You selected a variable width font.\n" +"\n" +"Because this program doesn't handle variable width fonts\n" +"correctly, you might experience problems while editing.\n" +"\n" +"Do you want to continue or do you want to select another font." +msgstr "" +"Você selecionou um tamanho de letra variável.\n" +"\n" +"Porque este programa não lida corretamente com tipos de letra\n" +"de largura variável, você poderá ter problemas ao editar.\n" +"\n" +"Deseja continuar ou prefere selecionar outro tipo de letra." + +#: optiondialog.cpp:1484 +msgid "Incompatible Font" +msgstr "Fonte Incompatível" + +#: optiondialog.cpp:1485 +msgid "Continue at Own Risk" +msgstr "Continue por sua conta e risco" + +#: optiondialog.cpp:1485 +msgid "Select Another Font" +msgstr "Selecionar outra fonte" + +#: optiondialog.cpp:1521 +msgid "This resets all options. Not only those of the current topic." +msgstr "Reinicia todas as opções. Não somente as desse tópico." + +#: pdiff.cpp:258 +msgid "PreprocessorCmd: " +msgstr "Comando do pré-processador: " + +#: pdiff.cpp:263 +msgid "" +"The following option(s) you selected might change data:\n" +msgstr "" +"A(s) seguinte(s) opção(ões) que você selecionou podem modificar os dados:\n" + +#: pdiff.cpp:264 +msgid "" +"\n" +"Most likely this is not wanted during a merge.\n" +"Do you want to disable these settings or continue with these settings active?" +msgstr "" +"\n" +"Muito provavelmente isso não é desejável durante uma mesclagem.\n" +"Deseja desabilitar estas configurações, ou continuar com elas ativas?" + +#: pdiff.cpp:266 +msgid "Option Unsafe for Merging" +msgstr "Opção Insegura para Mesclagem" + +#: pdiff.cpp:267 +msgid "Use These Options During Merge" +msgstr "Usar Estas Opções Durante a Mesclagem" + +#: pdiff.cpp:267 +msgid "Disable Unsafe Options" +msgstr "Desativar Opções Inseguras" + +#: pdiff.cpp:297 +msgid "Loading A" +msgstr "Carregando A" + +#: pdiff.cpp:301 +msgid "Loading B" +msgstr "Carregando B" + +#: pdiff.cpp:318 pdiff.cpp:344 +msgid "Diff: A <-> B" +msgstr "Diferenças: A <-> B" + +#: pdiff.cpp:324 pdiff.cpp:366 +msgid "Linediff: A <-> B" +msgstr "Dif. Linhas: A <-> B" + +#: pdiff.cpp:335 +msgid "Loading C" +msgstr "Carregando C" + +#: pdiff.cpp:347 +msgid "Diff: B <-> C" +msgstr "Diferenças: B <-> C" + +#: pdiff.cpp:350 +msgid "Diff: A <-> C" +msgstr "Diferenças: A <-> C" + +#: pdiff.cpp:369 +msgid "Linediff: B <-> C" +msgstr "Dif. Linhas: B <-> C" + +#: pdiff.cpp:372 +msgid "Linediff: A <-> C" +msgstr "Dif. Linhas: A <-> C" + +#: pdiff.cpp:513 +msgid "All input files contain the same text, but are not binary equal." +msgstr "" +"Todos os arquivos de entrada contêm o mesmo texto, mas não são iguais em nível " +"binário." + +#: pdiff.cpp:515 pdiff.cpp:517 pdiff.cpp:519 +msgid "" +"Files %1 and %2 are binary equal.\n" +msgstr "" +"Os arquivos %1 e %2 são iguais em nível binário.\n" + +#: pdiff.cpp:516 pdiff.cpp:518 pdiff.cpp:520 +msgid "" +"Files %1 and %2 have equal text, but are not binary equal. \n" +msgstr "" +"Os arquivos %1 e %2 têm texto igual, mas não são iguais em nível binário.\n" + +#: pdiff.cpp:530 +msgid "" +"Some inputfiles don't seem to be pure textfiles.\n" +"Note that the KDiff3-merge was not meant for binary data.\n" +"Continue at your own risk." +msgstr "" +"Alguns dos arquivos de entrada não parecem ser arquivos de texto puro.\n" +"Lembre-se que a mesclagem do KDiff3 não foi pensada para dados binários.\n" +"Continue por sua conta e risco." + +#: pdiff.cpp:979 +msgid "Abort" +msgstr "Interromper" + +#: pdiff.cpp:985 pdiff.cpp:1073 +msgid "Opening files..." +msgstr "Abrindo arquivos..." + +#: pdiff.cpp:1050 pdiff.cpp:1121 +msgid "File open error" +msgstr "Erro ao abrir o arquivo" + +#: pdiff.cpp:1153 +msgid "Cutting selection..." +msgstr "Recortando seleção..." + +#: pdiff.cpp:1174 +msgid "Copying selection to clipboard..." +msgstr "Copiando seleção para a área de transferência..." + +#: pdiff.cpp:1190 +msgid "Inserting clipboard contents..." +msgstr "Inserindo conteúdo da Ãrea de Transferência..." + +#: pdiff.cpp:1713 +msgid "Save && Continue" +msgstr "Salvar e Continuar" + +#: pdiff.cpp:1713 +msgid "Continue Without Saving" +msgstr "Continuar sem Salvar" + +#: pdiff.cpp:1920 +msgid "Search complete." +msgstr "Procura terminada." + +#: pdiff.cpp:1920 +msgid "Search Complete" +msgstr "Procura Terminada" + +#: pdiff.cpp:2144 +msgid "Nothing is selected in either diff input window." +msgstr "Nada foi selecionado em nenhuma janela de entrada de diferenças." + +#: pdiff.cpp:2144 +msgid "Error while adding manual diff range" +msgstr "Erro ao adicionar o intervalo manual de diferenças" + +#. i18n: file kdiff3_part.rc line 4 +#: rc.cpp:3 +#, no-c-format +msgid "&KDiff3" +msgstr "&KDiff3" + +#. i18n: file kdiff3_part.rc line 13 +#: rc.cpp:6 +#, no-c-format +msgid "Configure KDiff3" +msgstr "Configurar KDiff3" + +#. i18n: file kdiff3_shell.rc line 7 +#: rc.cpp:15 +#, no-c-format +msgid "&Directory" +msgstr "&Diretório" + +#. i18n: file kdiff3_shell.rc line 30 +#: rc.cpp:18 +#, no-c-format +msgid "Current Item Merge Operation" +msgstr "Operação de Mesclagem do Item Atual" + +#. i18n: file kdiff3_shell.rc line 38 +#: rc.cpp:21 +#, no-c-format +msgid "Current Item Sync Operation" +msgstr "Operação de Sincronismo do Item Atual" + +#. i18n: file kdiff3_shell.rc line 50 +#: rc.cpp:24 +#, no-c-format +msgid "&Movement" +msgstr "&Movimento" + +#. i18n: file kdiff3_shell.rc line 61 +#: rc.cpp:27 +#, no-c-format +msgid "D&iffview" +msgstr "Visão das D&iferenças" + +#. i18n: file kdiff3_shell.rc line 73 +#: rc.cpp:30 +#, no-c-format +msgid "&Merge" +msgstr "&Mesclar" + +#. i18n: file kdiff3_shell.rc line 95 +#: rc.cpp:33 +#, no-c-format +msgid "&Window" +msgstr "&Janela" + +#: smalldialogs.cpp:53 +msgid "A (Base):" +msgstr "A (Base):" + +#: smalldialogs.cpp:59 smalldialogs.cpp:75 smalldialogs.cpp:91 +#: smalldialogs.cpp:134 +msgid "File..." +msgstr "Arquivo..." + +#: smalldialogs.cpp:61 smalldialogs.cpp:77 smalldialogs.cpp:93 +#: smalldialogs.cpp:136 +msgid "Dir..." +msgstr "Diretório..." + +#: smalldialogs.cpp:86 +msgid "C (Optional):" +msgstr "C (Opcional):" + +#: smalldialogs.cpp:108 +msgid "Swap/Copy Names ..." +msgstr "Trocar/Copiar Nomes ..." + +#: smalldialogs.cpp:114 smalldialogs.cpp:115 smalldialogs.cpp:116 +msgid "Swap %1<->%2" +msgstr "Trocar %1<->%2" + +#: smalldialogs.cpp:117 smalldialogs.cpp:118 smalldialogs.cpp:119 +msgid "Copy %1->Output" +msgstr "Copiar %1->Saída" + +#: smalldialogs.cpp:120 smalldialogs.cpp:121 smalldialogs.cpp:122 +msgid "Swap %1<->Output" +msgstr "Trocar %1<->Saída" + +#: smalldialogs.cpp:129 +msgid "Output (optional):" +msgstr "Saída (opcional):" + +#: smalldialogs.cpp:158 +msgid "Configure..." +msgstr "Configurar..." + +#: smalldialogs.cpp:347 +msgid "Search text:" +msgstr "Texto da procura:" + +#: smalldialogs.cpp:354 +msgid "Case sensitive" +msgstr "Distinguir capitalização" + +#: smalldialogs.cpp:357 +msgid "Search A" +msgstr "Procurar A" + +#: smalldialogs.cpp:362 +msgid "Search B" +msgstr "Procurar B" + +#: smalldialogs.cpp:367 +msgid "Search C" +msgstr "Procurar C" + +#: smalldialogs.cpp:372 +msgid "Search output" +msgstr "Resultado da procura" + +#: smalldialogs.cpp:377 +msgid "&Search" +msgstr "&Procurar" + +#: smalldialogs.cpp:394 +msgid "Regular Expression Tester" +msgstr "Teste de Expressões Regulares" + +#: smalldialogs.cpp:405 +msgid "Example auto merge line:" +msgstr "Linha de mesclagem automática do exemplo:" + +#: smalldialogs.cpp:407 +msgid "For auto merge test copy a line as used in your files." +msgstr "" +"Para um teste da mesclagem automática, copie uma linha usada nos seus arquivos." + +#: smalldialogs.cpp:413 smalldialogs.cpp:442 smalldialogs.cpp:479 +msgid "Match result:" +msgstr "Resultado correspondente:" + +#: smalldialogs.cpp:432 +msgid "Example history start line (with leading comment):" +msgstr "Linha inicial do histórico do exemplo (com o comentário inicial):" + +#: smalldialogs.cpp:435 +msgid "" +"Copy a history start line as used in your files,\n" +"including the leading comment." +msgstr "" +"Copie uma linha inicial do histórico, como a usada nos seus arquivos,\n" +"incluindo o comentário inicial." + +#: smalldialogs.cpp:461 +msgid "History sort key order:" +msgstr "Ordem da chave do histórico:" + +#: smalldialogs.cpp:469 +msgid "Example history entry start line (without leading comment):" +msgstr "" +"Linha inicial do item do histórico do exemplo (sem o comentário inicial):" + +#: smalldialogs.cpp:471 +msgid "" +"Copy a history entry start line as used in your files,\n" +"but omit the leading comment." +msgstr "" +"Copie uma linha inicial do item de histórico, como a usada nos seus arquivos,\n" +"mas omita o comentário inicial." + +#: smalldialogs.cpp:486 +msgid "Sort key result:" +msgstr "Resultado da chave de ordenação:" + +#: smalldialogs.cpp:537 smalldialogs.cpp:547 smalldialogs.cpp:568 +msgid "Match success." +msgstr "Sucesso da correspondência." + +#: smalldialogs.cpp:541 smalldialogs.cpp:551 smalldialogs.cpp:574 +msgid "Match failed." +msgstr "A correspondência falhou." + +#: smalldialogs.cpp:559 +msgid "Opening and closing parentheses don't match in regular expression." +msgstr "" +"Os parênteses de abertura e fechamento não correspondem na expressão regular." diff --git a/po/ro.po b/po/ro.po new file mode 100644 index 0000000..2391c35 --- /dev/null +++ b/po/ro.po @@ -0,0 +1,2309 @@ +# translation of @PACKAGE.po to @LANGUAGE +# Copyright (C) YEAR Free Software Foundation, Inc. +# Claudiu Costin , 2003 +# +msgid "" +msgstr "" +"Project-Id-Version: @PACKAGE\n" +"POT-Creation-Date: 2006-11-05 08:45+0100\n" +"PO-Revision-Date: 2003-11-08 18:45+0200\n" +"Last-Translator: Claudiu Costin \n" +"Language-Team: Romanian \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: KBabel 1.0.1\n" + +#: _translatorinfo.cpp:1 +msgid "" +"_: NAME OF TRANSLATORS\n" +"Your names" +msgstr "Claudiu Costin" + +#: _translatorinfo.cpp:3 +msgid "" +"_: EMAIL OF TRANSLATORS\n" +"Your emails" +msgstr "claudiuc@kde.org" + +#: diff.cpp:246 +msgid "Writing clipboard data to temp file failed." +msgstr "" + +#: diff.cpp:250 +msgid "From Clipboard" +msgstr "" + +#: diff.cpp:491 +msgid "" +"Preprocessing possibly failed. Check this command:\n" +"\n" +" %1\n" +"\n" +"The preprocessing command will be disabled now." +msgstr "" + +#: diff.cpp:526 +msgid "" +"The line-matching-preprocessing possibly failed. Check this command:\n" +"\n" +" %1\n" +"\n" +"The line-matching-preprocessing command will be disabled now." +msgstr "" + +#: diff.cpp:1631 diff.cpp:1645 +msgid "" +"Data loss error:\n" +"If it is reproducable please contact the author.\n" +msgstr "" + +#: diff.cpp:1633 diff.cpp:1647 +msgid "Severe Internal Error" +msgstr "" + +#: difftextwindow.cpp:1643 kdiff3.cpp:753 +msgid "Top line" +msgstr "" + +#: difftextwindow.cpp:1653 +msgid "End" +msgstr "" + +#: directorymergewindow.cpp:142 +msgid "Mix of links and normal files." +msgstr "" + +#: directorymergewindow.cpp:149 +msgid "Link: " +msgstr "" + +#: directorymergewindow.cpp:157 +msgid "Size. " +msgstr "" + +#: directorymergewindow.cpp:170 +msgid "Date & Size: " +msgstr "" + +#: directorymergewindow.cpp:179 directorymergewindow.cpp:185 +msgid "Creating temp copy of %1 failed." +msgstr "" + +#: directorymergewindow.cpp:196 directorymergewindow.cpp:204 +msgid "Opening %1 failed." +msgstr "" + +#: directorymergewindow.cpp:208 +msgid "Comparing file..." +msgstr "" + +#: directorymergewindow.cpp:218 directorymergewindow.cpp:224 +#, c-format +msgid "Error reading from %1" +msgstr "" + +#: directorymergewindow.cpp:282 +msgid "Name" +msgstr "" + +#: directorymergewindow.cpp:286 +msgid "Operation" +msgstr "" + +#: directorymergewindow.cpp:287 +msgid "Status" +msgstr "" + +#: directorymergewindow.cpp:288 +msgid "Unsolved" +msgstr "" + +#: directorymergewindow.cpp:289 +msgid "Solved" +msgstr "" + +#: directorymergewindow.cpp:290 +msgid "Nonwhite" +msgstr "" + +#: directorymergewindow.cpp:291 +msgid "White" +msgstr "" + +#: directorymergewindow.cpp:319 +msgid "" +"You are currently doing a directory merge. Are you sure, you want to abort the " +"merge and rescan the directory?" +msgstr "" + +#: directorymergewindow.cpp:320 directorymergewindow.cpp:2868 +msgid "Rescan" +msgstr "" + +#: directorymergewindow.cpp:320 kdiff3.cpp:603 pdiff.cpp:979 +msgid "Continue Merging" +msgstr "" + +#: directorymergewindow.cpp:462 +msgid "Opening of directories failed:" +msgstr "" + +#: directorymergewindow.cpp:465 +msgid "" +"Dir A \"%1\" does not exist or is not a directory.\n" +msgstr "" + +#: directorymergewindow.cpp:468 +msgid "" +"Dir B \"%1\" does not exist or is not a directory.\n" +msgstr "" + +#: directorymergewindow.cpp:471 +msgid "" +"Dir C \"%1\" does not exist or is not a directory.\n" +msgstr "" + +#: directorymergewindow.cpp:473 +msgid "Directory Open Error" +msgstr "" + +#: directorymergewindow.cpp:481 +msgid "" +"The destination directory must not be the same as A or B when three directories " +"are merged.\n" +"Check again before continuing." +msgstr "" + +#: directorymergewindow.cpp:483 +msgid "Parameter Warning" +msgstr "" + +#: directorymergewindow.cpp:488 +msgid "Scanning directories..." +msgstr "" + +#: directorymergewindow.cpp:537 +msgid "Reading Directory A" +msgstr "" + +#: directorymergewindow.cpp:559 +msgid "Reading Directory B" +msgstr "" + +#: directorymergewindow.cpp:581 +msgid "Reading Directory C" +msgstr "" + +#: directorymergewindow.cpp:607 +msgid "Some subdirectories were not readable in" +msgstr "" + +#: directorymergewindow.cpp:612 +msgid "Check the permissions of the subdirectories." +msgstr "" + +#: directorymergewindow.cpp:646 kdiff3.cpp:552 kdiff3.cpp:636 kdiff3.cpp:661 +#: kdiff3.cpp:934 kdiff3.cpp:955 pdiff.cpp:1059 pdiff.cpp:1131 pdiff.cpp:1169 +#: pdiff.cpp:1185 pdiff.cpp:1215 pdiff.cpp:1226 +msgid "Ready." +msgstr "" + +#: directorymergewindow.cpp:660 +msgid "Directory Comparison Status" +msgstr "" + +#: directorymergewindow.cpp:661 +msgid "Number of subdirectories:" +msgstr "" + +#: directorymergewindow.cpp:662 +msgid "Number of equal files:" +msgstr "" + +#: directorymergewindow.cpp:663 +msgid "Number of different files:" +msgstr "" + +#: directorymergewindow.cpp:666 +msgid "Number of manual merges:" +msgstr "" + +#: directorymergewindow.cpp:802 +msgid "This affects all merge operations." +msgstr "" + +#: directorymergewindow.cpp:803 +msgid "Changing All Merge Operations" +msgstr "" + +#: directorymergewindow.cpp:803 mergeresultwindow.cpp:287 +msgid "C&ontinue" +msgstr "" + +#: directorymergewindow.cpp:1169 +msgid "Processing " +msgstr "" + +#: directorymergewindow.cpp:1647 directorymergewindow.cpp:1653 +msgid "To do." +msgstr "" + +#: directorymergewindow.cpp:1756 directorymergewindow.cpp:2899 +msgid "Copy A to B" +msgstr "" + +#: directorymergewindow.cpp:1757 directorymergewindow.cpp:2900 +msgid "Copy B to A" +msgstr "" + +#: directorymergewindow.cpp:1758 directorymergewindow.cpp:2901 +msgid "Delete A" +msgstr "" + +#: directorymergewindow.cpp:1759 directorymergewindow.cpp:2902 +msgid "Delete B" +msgstr "" + +#: directorymergewindow.cpp:1760 +msgid "Delete A & B" +msgstr "" + +#: directorymergewindow.cpp:1761 directorymergewindow.cpp:2904 +msgid "Merge to A" +msgstr "" + +#: directorymergewindow.cpp:1762 directorymergewindow.cpp:2905 +msgid "Merge to B" +msgstr "" + +#: directorymergewindow.cpp:1763 +msgid "Merge to A & B" +msgstr "" + +#: directorymergewindow.cpp:1767 directorymergewindow.cpp:2896 +msgid "Delete (if exists)" +msgstr "" + +#: directorymergewindow.cpp:1768 directorymergewindow.cpp:1769 +#: directorymergewindow.cpp:2895 optiondialog.cpp:809 smalldialogs.cpp:102 +msgid "Merge" +msgstr "" + +#: directorymergewindow.cpp:1768 directorymergewindow.cpp:1769 +msgid "Merge (manual)" +msgstr "" + +#: directorymergewindow.cpp:1770 +msgid "Error: Conflicting File Types" +msgstr "" + +#: directorymergewindow.cpp:1771 +msgid "Error: Dates are equal but files are not." +msgstr "" + +#: directorymergewindow.cpp:1795 directorymergewindow.cpp:1824 +#: directorymergewindow.cpp:1849 +msgid "This operation is currently not possible." +msgstr "" + +#: directorymergewindow.cpp:1795 directorymergewindow.cpp:1824 +#: directorymergewindow.cpp:1849 directorymergewindow.cpp:2106 +msgid "Operation Not Possible" +msgstr "" + +#: directorymergewindow.cpp:1888 +msgid "" +"This should never happen: \n" +"\n" +"mergeResultSaved: m_pMFI=0\n" +"\n" +"If you know how to reproduce this, please contact the program author." +msgstr "" + +#: directorymergewindow.cpp:1888 +msgid "Program Error" +msgstr "" + +#: directorymergewindow.cpp:1899 +msgid "" +"An error occurred while copying.\n" +msgstr "" + +#: directorymergewindow.cpp:1900 directorymergewindow.cpp:2306 +msgid "Merge Error" +msgstr "" + +#: directorymergewindow.cpp:1905 directorymergewindow.cpp:2311 +msgid "Error." +msgstr "" + +#: directorymergewindow.cpp:1910 directorymergewindow.cpp:2202 +#: directorymergewindow.cpp:2242 +msgid "Done." +msgstr "" + +#: directorymergewindow.cpp:1933 +msgid "Not saved." +msgstr "" + +#: directorymergewindow.cpp:1968 +msgid "Unknown merge operation. (This must never happen!)" +msgstr "" + +#: directorymergewindow.cpp:2000 +msgid "Unknown merge operation." +msgstr "" + +#: directorymergewindow.cpp:2015 +msgid "" +"The merge is about to begin.\n" +"\n" +"Choose \"Do it\" if you have read the instructions and know what you are " +"doing.\n" +"Choosing \"Simulate it\" will tell you what would happen.\n" +"\n" +"Be aware that this program still has beta status and there is NO WARRANTY " +"whatsoever! Make backups of your vital data!" +msgstr "" + +#: directorymergewindow.cpp:2020 +msgid "Starting Merge" +msgstr "" + +#: directorymergewindow.cpp:2020 +msgid "Do It" +msgstr "" + +#: directorymergewindow.cpp:2020 +msgid "Simulate It" +msgstr "" + +#: directorymergewindow.cpp:2046 +msgid "" +"The highlighted item has a different type in the different directories. Select " +"what to do." +msgstr "" + +#: directorymergewindow.cpp:2055 +msgid "" +"The modification dates of the file are equal but the files are not. Select what " +"to do." +msgstr "" + +#: directorymergewindow.cpp:2106 +msgid "" +"This operation is currently not possible because directory merge is currently " +"running." +msgstr "" + +#: directorymergewindow.cpp:2166 +msgid "" +"There was an error in the last step.\n" +"Do you want to continue with the item that caused the error or do you want to " +"skip this item?" +msgstr "" + +#: directorymergewindow.cpp:2168 +msgid "Continue merge after an error" +msgstr "" + +#: directorymergewindow.cpp:2168 +msgid "Continue With Last Item" +msgstr "" + +#: directorymergewindow.cpp:2168 +msgid "Skip Item" +msgstr "" + +#: directorymergewindow.cpp:2202 +msgid "Skipped." +msgstr "" + +#: directorymergewindow.cpp:2209 directorymergewindow.cpp:2435 +msgid "In progress..." +msgstr "" + +#: directorymergewindow.cpp:2257 +msgid "Merge operation complete." +msgstr "" + +#: directorymergewindow.cpp:2257 directorymergewindow.cpp:2260 +msgid "Merge Complete" +msgstr "" + +#: directorymergewindow.cpp:2269 +msgid "" +"Simulated merge complete: Check if you agree with the proposed operations." +msgstr "" + +#: directorymergewindow.cpp:2305 +msgid "" +"An error occurred. Press OK to see detailed information.\n" +msgstr "" + +#: directorymergewindow.cpp:2348 +msgid "Error: While deleting %1: Creating backup failed." +msgstr "" + +#: directorymergewindow.cpp:2355 +msgid "delete directory recursively( %1 )" +msgstr "" + +#: directorymergewindow.cpp:2357 +msgid "delete( %1 )" +msgstr "" + +#: directorymergewindow.cpp:2372 +msgid "Error: delete dir operation failed while trying to read the directory." +msgstr "" + +#: directorymergewindow.cpp:2391 +msgid "Error: rmdir( %1 ) operation failed." +msgstr "" + +#: directorymergewindow.cpp:2401 +msgid "Error: delete operation failed." +msgstr "" + +#: directorymergewindow.cpp:2427 +msgid "manual merge( %1, %2, %3 -> %4)" +msgstr "" + +#: directorymergewindow.cpp:2430 +msgid "" +" Note: After a manual merge the user should continue by pressing F7." +msgstr "" + +#: directorymergewindow.cpp:2453 +msgid "Error: copy( %1 -> %2 ) failed.Deleting existing destination failed." +msgstr "" + +#: directorymergewindow.cpp:2463 +msgid "copyLink( %1 -> %2 )" +msgstr "" + +#: directorymergewindow.cpp:2474 +msgid "Error: copyLink failed: Remote links are not yet supported." +msgstr "" + +#: directorymergewindow.cpp:2480 +msgid "Error: copyLink failed." +msgstr "" + +#: directorymergewindow.cpp:2500 +msgid "copy( %1 -> %2 )" +msgstr "" + +#: directorymergewindow.cpp:2526 +msgid "Error during rename( %1 -> %2 ): Cannot delete existing destination." +msgstr "" + +#: directorymergewindow.cpp:2532 +msgid "rename( %1 -> %2 )" +msgstr "" + +#: directorymergewindow.cpp:2541 +msgid "Error: Rename failed." +msgstr "" + +#: directorymergewindow.cpp:2559 +msgid "Error during makeDir of %1. Cannot delete existing file." +msgstr "" + +#: directorymergewindow.cpp:2575 +msgid "makeDir( %1 )" +msgstr "" + +#: directorymergewindow.cpp:2585 +msgid "Error while creating directory." +msgstr "" + +#: directorymergewindow.cpp:2608 directorymergewindow.cpp:2725 +msgid "Dest" +msgstr "" + +#: directorymergewindow.cpp:2612 directorymergewindow.cpp:2650 +msgid "Dir" +msgstr "" + +#: directorymergewindow.cpp:2613 +msgid "Type" +msgstr "" + +#: directorymergewindow.cpp:2614 +msgid "Size" +msgstr "" + +#: directorymergewindow.cpp:2615 +msgid "Attr" +msgstr "" + +#: directorymergewindow.cpp:2616 +msgid "Last Modification" +msgstr "" + +#: directorymergewindow.cpp:2617 +msgid "Link-Destination" +msgstr "" + +#: directorymergewindow.cpp:2667 +msgid "not available" +msgstr "" + +#: directorymergewindow.cpp:2687 +msgid "A (Dest): " +msgstr "" + +#: directorymergewindow.cpp:2690 +msgid "A (Base): " +msgstr "" + +#: directorymergewindow.cpp:2696 +msgid "B (Dest): " +msgstr "" + +#: directorymergewindow.cpp:2704 +msgid "C (Dest): " +msgstr "" + +#: directorymergewindow.cpp:2710 +msgid "Dest: " +msgstr "" + +#: directorymergewindow.cpp:2775 +msgid "Save Directory Merge State As..." +msgstr "" + +#: directorymergewindow.cpp:2862 +msgid "Start/Continue Directory Merge" +msgstr "" + +#: directorymergewindow.cpp:2863 +msgid "Run Operation for Current Item" +msgstr "" + +#: directorymergewindow.cpp:2864 +msgid "Compare Selected File" +msgstr "" + +#: directorymergewindow.cpp:2865 +msgid "Merge Current File" +msgstr "" + +#: directorymergewindow.cpp:2866 +msgid "Fold All Subdirs" +msgstr "" + +#: directorymergewindow.cpp:2867 +msgid "Unfold All Subdirs" +msgstr "" + +#: directorymergewindow.cpp:2871 +msgid "Choose A for All Items" +msgstr "" + +#: directorymergewindow.cpp:2872 +msgid "Choose B for All Items" +msgstr "" + +#: directorymergewindow.cpp:2873 +msgid "Choose C for All Items" +msgstr "" + +#: directorymergewindow.cpp:2874 +msgid "Auto-Choose Operation for All Items" +msgstr "" + +#: directorymergewindow.cpp:2875 +msgid "No Operation for All Items" +msgstr "" + +#: directorymergewindow.cpp:2880 +msgid "Show Identical Files" +msgstr "" + +#: directorymergewindow.cpp:2881 +msgid "Show Different Files" +msgstr "" + +#: directorymergewindow.cpp:2882 +msgid "Show Files only in A" +msgstr "" + +#: directorymergewindow.cpp:2883 +msgid "Show Files only in B" +msgstr "" + +#: directorymergewindow.cpp:2884 +msgid "Show Files only in C" +msgstr "" + +#: directorymergewindow.cpp:2888 +msgid "Compare Explicitly Selected Files" +msgstr "" + +#: directorymergewindow.cpp:2889 +msgid "Merge Explicitly Selected Files" +msgstr "" + +#: directorymergewindow.cpp:2891 directorymergewindow.cpp:2898 +msgid "Do Nothing" +msgstr "" + +#: directorymergewindow.cpp:2892 +msgid "A" +msgstr "" + +#: directorymergewindow.cpp:2893 +msgid "B" +msgstr "" + +#: directorymergewindow.cpp:2894 +msgid "C" +msgstr "" + +#: directorymergewindow.cpp:2903 +msgid "Delete A && B" +msgstr "" + +#: directorymergewindow.cpp:2906 +msgid "Merge to A && B" +msgstr "" + +#: fileaccess.cpp:595 +msgid "" +"While trying to make a backup, deleting an older backup failed. \n" +"Filename: " +msgstr "" + +#: fileaccess.cpp:602 +msgid "" +"While trying to make a backup, renaming failed. \n" +"Filenames: " +msgstr "" + +#: fileaccess.cpp:624 +#, c-format +msgid "Getting file status: %1" +msgstr "" + +#: fileaccess.cpp:667 +#, c-format +msgid "Reading file: %1" +msgstr "" + +#: fileaccess.cpp:703 +#, c-format +msgid "Writing file: %1" +msgstr "" + +#: fileaccess.cpp:731 +msgid "Out of memory" +msgstr "" + +#: fileaccess.cpp:766 +#, c-format +msgid "Making directory: %1" +msgstr "" + +#: fileaccess.cpp:786 +#, c-format +msgid "Removing directory: %1" +msgstr "" + +#: fileaccess.cpp:801 +#, c-format +msgid "Removing file: %1" +msgstr "" + +#: fileaccess.cpp:817 +msgid "Creating symbolic link: %1 -> %2" +msgstr "" + +#: fileaccess.cpp:843 +msgid "Renaming file: %1 -> %2" +msgstr "" + +#: fileaccess.cpp:879 +msgid "Copying file: %1 -> %2" +msgstr "" + +#: fileaccess.cpp:893 +#, c-format +msgid "" +"Error during file copy operation: Opening file for reading failed. Filename: %1" +msgstr "" + +#: fileaccess.cpp:899 +#, c-format +msgid "" +"Error during file copy operation: Opening file for writing failed. Filename: %1" +msgstr "" + +#: fileaccess.cpp:914 +#, c-format +msgid "Error during file copy operation: Reading failed. Filename: %1" +msgstr "" + +#: fileaccess.cpp:923 +#, c-format +msgid "Error during file copy operation: Writing failed. Filename: %1" +msgstr "" + +#: fileaccess.cpp:1219 +msgid "Reading directory: " +msgstr "" + +#: fileaccess.cpp:1348 +#, c-format +msgid "Listing directory: %1" +msgstr "" + +#: kdiff3.cpp:142 +msgid "Current Configuration:" +msgstr "" + +#: kdiff3.cpp:147 +msgid "Config Option Error:" +msgstr "" + +#: kdiff3.cpp:187 +msgid "Option --auto used, but no output file specified." +msgstr "" + +#: kdiff3.cpp:323 +msgid "Option --auto ignored for directory comparison." +msgstr "" + +#: kdiff3.cpp:359 +msgid "Saving failed." +msgstr "" + +#: kdiff3.cpp:386 pdiff.cpp:1041 pdiff.cpp:1112 +msgid "Opening of these files failed:" +msgstr "" + +#: kdiff3.cpp:395 +msgid "File Open Error" +msgstr "" + +#: kdiff3.cpp:418 +msgid "Opens documents for comparison..." +msgstr "" + +#: kdiff3.cpp:423 +msgid "Saves the merge result. All conflicts must be solved!" +msgstr "" + +#: kdiff3.cpp:425 +msgid "Saves the current document as..." +msgstr "" + +#: kdiff3.cpp:427 +msgid "Print the differences" +msgstr "" + +#: kdiff3.cpp:429 +msgid "Quits the application" +msgstr "" + +#: kdiff3.cpp:431 +msgid "Cuts the selected section and puts it to the clipboard" +msgstr "" + +#: kdiff3.cpp:433 +msgid "Copies the selected section to the clipboard" +msgstr "" + +#: kdiff3.cpp:435 +msgid "Pastes the clipboard contents to actual position" +msgstr "" + +#: kdiff3.cpp:437 +msgid "Select everything in current window" +msgstr "" + +#: kdiff3.cpp:439 +msgid "Search for a string" +msgstr "" + +#: kdiff3.cpp:441 +msgid "Search again for the string" +msgstr "" + +#: kdiff3.cpp:443 +msgid "Enables/disables the toolbar" +msgstr "" + +#: kdiff3.cpp:445 +msgid "Enables/disables the statusbar" +msgstr "" + +#: kdiff3.cpp:449 +msgid "Configure KDiff3..." +msgstr "" + +#: kdiff3.cpp:470 +msgid "Go to Current Delta" +msgstr "" + +#: kdiff3.cpp:471 +msgid "Go to First Delta" +msgstr "" + +#: kdiff3.cpp:472 +msgid "Go to Last Delta" +msgstr "" + +#: kdiff3.cpp:473 +msgid "(Skips white space differences when \"Show White Space\" is disabled.)" +msgstr "" + +#: kdiff3.cpp:474 +msgid "" +"(Does not skip white space differences even when \"Show White Space\" is " +"disabled.)" +msgstr "" + +#: kdiff3.cpp:475 +msgid "Go to Previous Delta" +msgstr "" + +#: kdiff3.cpp:477 +msgid "Go to Next Delta" +msgstr "" + +#: kdiff3.cpp:479 +msgid "Go to Previous Conflict" +msgstr "" + +#: kdiff3.cpp:481 +msgid "Go to Next Conflict" +msgstr "" + +#: kdiff3.cpp:483 +msgid "Go to Previous Unsolved Conflict" +msgstr "" + +#: kdiff3.cpp:485 +msgid "Go to Next Unsolved Conflict" +msgstr "" + +#: kdiff3.cpp:487 +msgid "Select Line(s) From A" +msgstr "" + +#: kdiff3.cpp:488 +msgid "Select Line(s) From B" +msgstr "" + +#: kdiff3.cpp:489 +msgid "Select Line(s) From C" +msgstr "" + +#: kdiff3.cpp:490 +msgid "Automatically Go to Next Unsolved Conflict After Source Selection" +msgstr "" + +#: kdiff3.cpp:492 +msgid "Show Space && Tabulator Characters for Differences" +msgstr "" + +#: kdiff3.cpp:493 +msgid "Show White Space" +msgstr "" + +#: kdiff3.cpp:495 +msgid "Show Line Numbers" +msgstr "" + +#: kdiff3.cpp:496 +msgid "Choose A Everywhere" +msgstr "" + +#: kdiff3.cpp:497 +msgid "Choose B Everywhere" +msgstr "" + +#: kdiff3.cpp:498 +msgid "Choose C Everywhere" +msgstr "" + +#: kdiff3.cpp:499 +msgid "Choose A for All Unsolved Conflicts" +msgstr "" + +#: kdiff3.cpp:500 +msgid "Choose B for All Unsolved Conflicts" +msgstr "" + +#: kdiff3.cpp:501 +msgid "Choose C for All Unsolved Conflicts" +msgstr "" + +#: kdiff3.cpp:502 +msgid "Choose A for All Unsolved Whitespace Conflicts" +msgstr "" + +#: kdiff3.cpp:503 +msgid "Choose B for All Unsolved Whitespace Conflicts" +msgstr "" + +#: kdiff3.cpp:504 +msgid "Choose C for All Unsolved Whitespace Conflicts" +msgstr "" + +#: kdiff3.cpp:505 +msgid "Automatically Solve Simple Conflicts" +msgstr "" + +#: kdiff3.cpp:506 +msgid "Set Deltas to Conflicts" +msgstr "" + +#: kdiff3.cpp:507 +msgid "Run Regular Expression Auto Merge" +msgstr "" + +#: kdiff3.cpp:508 +msgid "Automatically Solve History Conflicts" +msgstr "" + +#: kdiff3.cpp:509 +msgid "Split Diff At Selection" +msgstr "" + +#: kdiff3.cpp:510 +msgid "Join Selected Diffs" +msgstr "" + +#: kdiff3.cpp:512 +msgid "Show Window A" +msgstr "" + +#: kdiff3.cpp:513 +msgid "Show Window B" +msgstr "" + +#: kdiff3.cpp:514 +msgid "Show Window C" +msgstr "" + +#: kdiff3.cpp:515 kdiff3.cpp:526 +msgid "Focus Next Window" +msgstr "" + +#: kdiff3.cpp:517 +msgid "Normal Overview" +msgstr "" + +#: kdiff3.cpp:518 +msgid "A vs. B Overview" +msgstr "" + +#: kdiff3.cpp:519 +msgid "A vs. C Overview" +msgstr "" + +#: kdiff3.cpp:520 +msgid "B vs. C Overview" +msgstr "" + +#: kdiff3.cpp:521 +msgid "Word Wrap Diff Windows" +msgstr "" + +#: kdiff3.cpp:522 +msgid "Add Manual Diff Alignment" +msgstr "" + +#: kdiff3.cpp:523 +msgid "Clear All Manual Diff Alignments" +msgstr "" + +#: kdiff3.cpp:528 +msgid "Focus Prev Window" +msgstr "" + +#: kdiff3.cpp:529 +msgid "Toggle Split Orientation" +msgstr "" + +#: kdiff3.cpp:531 +msgid "Dir && Text Split Screen View" +msgstr "" + +#: kdiff3.cpp:533 +msgid "Toggle Between Dir && Text View" +msgstr "" + +#: kdiff3.cpp:582 pdiff.cpp:1712 +msgid "The merge result hasn't been saved." +msgstr "" + +#: kdiff3.cpp:583 +msgid "Save && Quit" +msgstr "" + +#: kdiff3.cpp:583 +msgid "Quit Without Saving" +msgstr "" + +#: kdiff3.cpp:591 pdiff.cpp:1721 +msgid "Saving the merge result failed." +msgstr "" + +#: kdiff3.cpp:602 pdiff.cpp:978 +msgid "" +"You are currently doing a directory merge. Are you sure, you want to abort?" +msgstr "" + +#: kdiff3.cpp:625 +msgid "Saving file..." +msgstr "" + +#: kdiff3.cpp:642 +msgid "Saving file with a new filename..." +msgstr "" + +#: kdiff3.cpp:732 +msgid "Printing..." +msgstr "" + +#: kdiff3.cpp:738 kdiff3.cpp:900 +msgid "Printing aborted." +msgstr "" + +#: kdiff3.cpp:870 +msgid "Selection" +msgstr "" + +#: kdiff3.cpp:896 +msgid "Printing completed." +msgstr "" + +#: kdiff3.cpp:906 +msgid "Exiting..." +msgstr "" + +#: kdiff3.cpp:918 +msgid "Toggling toolbar..." +msgstr "" + +#: kdiff3.cpp:939 +msgid "Toggle the statusbar..." +msgstr "" + +#: kdiff3_part.cpp:155 kdiff3_part.cpp:224 +msgid "Couldn't find files for comparison." +msgstr "" + +#: kdiff3_part.cpp:291 +msgid "KDiff3Part" +msgstr "" + +#: kdiff3_shell.cpp:78 +msgid "" +"Could not find our part!\n" +"This usually happens due to an installation problem. Please read the " +"README-file in the source package for details." +msgstr "" + +#: main.cpp:35 +msgid "Tool for Comparison and Merge of Files and Directories" +msgstr "" + +#: main.cpp:40 +msgid "Merge the input." +msgstr "" + +#: main.cpp:42 +msgid "Explicit base file. For compatibility with certain tools." +msgstr "" + +#: main.cpp:44 +msgid "Output file. Implies -m. E.g.: -o newfile.txt" +msgstr "" + +#: main.cpp:45 +msgid "Output file, again. (For compatibility with certain tools.)" +msgstr "" + +#: main.cpp:46 +msgid "No GUI if all conflicts are auto-solvable. (Needs -o file)" +msgstr "" + +#: main.cpp:47 +msgid "Don't solve conflicts automatically. (For compatibility...)" +msgstr "" + +#: main.cpp:48 +msgid "Visible name replacement for input file 1 (base)." +msgstr "" + +#: main.cpp:49 +msgid "Visible name replacement for input file 2." +msgstr "" + +#: main.cpp:50 +msgid "Visible name replacement for input file 3." +msgstr "" + +#: main.cpp:52 +msgid "Alternative visible name replacement. Supply this once for every input." +msgstr "" + +#: main.cpp:53 +msgid "" +"Override a config setting. Use once for every setting. E.g.: --cs " +"\"AutoAdvance=1\"" +msgstr "" + +#: main.cpp:54 +msgid "Show list of config settings and current values." +msgstr "" + +#: main.cpp:55 +msgid "Use a different config file." +msgstr "" + +#: main.cpp:59 +msgid "file1 to open (base, if not specified via --base)" +msgstr "" + +#: main.cpp:60 +msgid "file2 to open" +msgstr "" + +#: main.cpp:61 +msgid "file3 to open" +msgstr "" + +#: main.cpp:93 +msgid "Ignored. (User defined.)" +msgstr "" + +#. i18n: file kdiff3_part.rc line 16 +#: main.cpp:173 rc.cpp:9 +#, no-c-format +msgid "KDiff3" +msgstr "" + +#: main.cpp:186 +msgid "+ Many thanks to those who reported bugs and contributed ideas!" +msgstr "" + +#: mergeresultwindow.cpp:136 mergeresultwindow.cpp:939 +#: mergeresultwindow.cpp:953 mergeresultwindow.cpp:965 +#: mergeresultwindow.cpp:977 +msgid "Number of remaining unsolved conflicts: %1 (of which %2 are whitespace)" +msgstr "" + +#: mergeresultwindow.cpp:285 +msgid "" +"The output has been modified.\n" +"If you continue your changes will be lost." +msgstr "" + +#: mergeresultwindow.cpp:797 pdiff.cpp:511 +msgid "All input files are binary equal." +msgstr "" + +#: mergeresultwindow.cpp:799 +msgid "All input files contain the same text." +msgstr "" + +#: mergeresultwindow.cpp:801 +msgid "" +"Files A and B are binary equal.\n" +msgstr "" + +#: mergeresultwindow.cpp:802 +msgid "" +"Files A and B have equal text. \n" +msgstr "" + +#: mergeresultwindow.cpp:803 +msgid "" +"Files A and C are binary equal.\n" +msgstr "" + +#: mergeresultwindow.cpp:804 +msgid "" +"Files A and C have equal text. \n" +msgstr "" + +#: mergeresultwindow.cpp:805 +msgid "" +"Files B and C are binary equal.\n" +msgstr "" + +#: mergeresultwindow.cpp:806 +msgid "" +"Files B and C have equal text. \n" +msgstr "" + +#: mergeresultwindow.cpp:812 +msgid "Total number of conflicts: " +msgstr "" + +#: mergeresultwindow.cpp:813 +msgid "" +"\n" +"Nr of automatically solved conflicts: " +msgstr "" + +#: mergeresultwindow.cpp:814 +msgid "" +"\n" +"Nr of unsolved conflicts: " +msgstr "" + +#: mergeresultwindow.cpp:816 +msgid "Conflicts" +msgstr "" + +#: mergeresultwindow.cpp:1652 +msgid "" +msgstr "" + +#: mergeresultwindow.cpp:1660 +msgid "" +msgstr "" + +#: mergeresultwindow.cpp:1662 mergeresultwindow.cpp:2427 +msgid "" +msgstr "" + +#: mergeresultwindow.cpp:2635 +msgid "" +"Not all conflicts are solved yet.\n" +"File not saved.\n" +msgstr "" + +#: mergeresultwindow.cpp:2637 +msgid "Conflicts Left" +msgstr "" + +#: mergeresultwindow.cpp:2649 +msgid "" +"\n" +"\n" +"Creating backup failed. File not saved." +msgstr "" + +#: mergeresultwindow.cpp:2649 mergeresultwindow.cpp:2689 +msgid "File Save Error" +msgstr "" + +#: mergeresultwindow.cpp:2689 +msgid "Error while writing." +msgstr "" + +#: mergeresultwindow.cpp:3020 +msgid "Output" +msgstr "" + +#: mergeresultwindow.cpp:3032 mergeresultwindow.cpp:3139 +msgid "[Modified]" +msgstr "" + +#: mergeresultwindow.cpp:3039 +msgid "Encoding for saving" +msgstr "" + +#: mergeresultwindow.cpp:3075 mergeresultwindow.cpp:3081 +#: mergeresultwindow.cpp:3087 +msgid "Codec from" +msgstr "" + +#: optiondialog.cpp:362 +msgid "Unicode, 8 bit" +msgstr "" + +#: optiondialog.cpp:363 +msgid "Unicode" +msgstr "" + +#: optiondialog.cpp:364 +msgid "Latin1" +msgstr "" + +#: optiondialog.cpp:383 +msgid "Change this if non-ASCII characters are not displayed correctly." +msgstr "" + +#: optiondialog.cpp:510 +msgid "Editor & Diff Output Font" +msgstr "" + +#: optiondialog.cpp:531 +msgid "Italic font for deltas" +msgstr "" + +#: optiondialog.cpp:534 +msgid "" +"Selects the italic version of the font for differences.\n" +"If the font doesn't support italic characters, then this does nothing." +msgstr "" + +#: optiondialog.cpp:542 +msgid "Color" +msgstr "" + +#: optiondialog.cpp:542 +msgid "Colors Settings" +msgstr "" + +#: optiondialog.cpp:556 +msgid "Editor and Diff Views:" +msgstr "" + +#: optiondialog.cpp:564 +msgid "Foreground color:" +msgstr "" + +#: optiondialog.cpp:570 +msgid "Background color:" +msgstr "" + +#: optiondialog.cpp:578 +msgid "Diff background color:" +msgstr "" + +#: optiondialog.cpp:585 +msgid "Color A:" +msgstr "" + +#: optiondialog.cpp:592 +msgid "Color B:" +msgstr "" + +#: optiondialog.cpp:599 +msgid "Color C:" +msgstr "" + +#: optiondialog.cpp:605 +msgid "Conflict color:" +msgstr "" + +#: optiondialog.cpp:612 +msgid "Current range background color:" +msgstr "" + +#: optiondialog.cpp:619 +msgid "Current range diff background color:" +msgstr "" + +#: optiondialog.cpp:625 +msgid "Color for manually aligned difference ranges:" +msgstr "" + +#: optiondialog.cpp:630 +msgid "Directory Comparison View:" +msgstr "" + +#: optiondialog.cpp:636 +msgid "Newest file color:" +msgstr "" + +#: optiondialog.cpp:639 +msgid "" +"Changing this color will only be effective when starting the next directory " +"comparison." +msgstr "" + +#: optiondialog.cpp:644 +msgid "Oldest file color:" +msgstr "" + +#: optiondialog.cpp:651 +msgid "Middle age file color:" +msgstr "" + +#: optiondialog.cpp:658 +msgid "Color for missing files:" +msgstr "" + +#: optiondialog.cpp:670 +msgid "Editor" +msgstr "" + +#: optiondialog.cpp:670 +msgid "Editor Behavior" +msgstr "" + +#: optiondialog.cpp:680 +msgid "Tab inserts spaces" +msgstr "" + +#: optiondialog.cpp:683 +msgid "" +"On: Pressing tab generates the appropriate number of spaces.\n" +"Off: A Tab-character will be inserted." +msgstr "" + +#: optiondialog.cpp:689 +msgid "Tab size:" +msgstr "" + +#: optiondialog.cpp:694 +msgid "Auto indentation" +msgstr "" + +#: optiondialog.cpp:697 +msgid "" +"On: The indentation of the previous line is used for a new line.\n" +msgstr "" + +#: optiondialog.cpp:701 +msgid "Auto copy selection" +msgstr "" + +#: optiondialog.cpp:704 +msgid "" +"On: Any selection is immediately written to the clipboard.\n" +"Off: You must explicitely copy e.g. via Ctrl-C." +msgstr "" + +#: optiondialog.cpp:709 +msgid "Line end style:" +msgstr "" + +#: optiondialog.cpp:721 +msgid "" +"Sets the line endings for when an edited file is saved.\n" +"DOS/Windows: CR+LF; UNIX: LF; with CR=0D, LF=0A" +msgstr "" + +#: optiondialog.cpp:732 +msgid "Diff" +msgstr "" + +#: optiondialog.cpp:732 +msgid "Diff Settings" +msgstr "" + +#: optiondialog.cpp:743 +msgid "Preserve carriage return" +msgstr "" + +#: optiondialog.cpp:746 +msgid "" +"Show carriage return characters '\\r' if they exist.\n" +"Helps to compare files that were modified under different operating systems." +msgstr "" + +#: optiondialog.cpp:751 +msgid "Ignore numbers" +msgstr "" + +#: optiondialog.cpp:754 +msgid "" +"Ignore number characters during line matching phase. (Similar to Ignore white " +"space.)\n" +"Might help to compare files with numeric data." +msgstr "" + +#: optiondialog.cpp:759 +msgid "Ignore C/C++ comments" +msgstr "" + +#: optiondialog.cpp:761 +msgid "Treat C/C++ comments like white space." +msgstr "" + +#: optiondialog.cpp:765 +msgid "Ignore case" +msgstr "" + +#: optiondialog.cpp:768 +msgid "Treat case differences like white space changes. ('a'<=>'A')" +msgstr "" + +#: optiondialog.cpp:772 +msgid "Preprocessor command:" +msgstr "" + +#: optiondialog.cpp:776 +msgid "User defined pre-processing. (See the docs for details.)" +msgstr "" + +#: optiondialog.cpp:779 +msgid "Line-matching preprocessor command:" +msgstr "" + +#: optiondialog.cpp:783 +msgid "" +"This pre-processor is only used during line matching.\n" +"(See the docs for details.)" +msgstr "" + +#: optiondialog.cpp:786 +msgid "Try hard (slower)" +msgstr "" + +#: optiondialog.cpp:789 +msgid "" +"Enables the --minimal option for the external diff.\n" +"The analysis of big files will be much slower." +msgstr "" + +#: optiondialog.cpp:794 +msgid "Auto advance delay (ms):" +msgstr "" + +#: optiondialog.cpp:799 +msgid "" +"When in Auto-Advance mode the result of the current selection is shown \n" +"for the specified time, before jumping to the next conflict. Range: 0-2000 ms" +msgstr "" + +#: optiondialog.cpp:809 +msgid "Merge Settings" +msgstr "" + +#: optiondialog.cpp:822 +msgid "White space 2-file merge default:" +msgstr "" + +#: optiondialog.cpp:826 optiondialog.cpp:839 +msgid "Manual Choice" +msgstr "" + +#: optiondialog.cpp:830 optiondialog.cpp:844 +msgid "" +"Allow the merge algorithm to automatically select an input for white-space-only " +"changes." +msgstr "" + +#: optiondialog.cpp:835 +msgid "White space 3-file merge default:" +msgstr "" + +#: optiondialog.cpp:849 +msgid "Automatic Merge Regular Expression" +msgstr "" + +#: optiondialog.cpp:858 smalldialogs.cpp:397 +msgid "Auto merge regular expression:" +msgstr "" + +#: optiondialog.cpp:862 +msgid "" +"Regular expression for lines where KDiff3 should automatically choose one " +"source.\n" +"When a line with a conflict matches the regular expression then\n" +"- if available - C, otherwise B will be chosen." +msgstr "" + +#: optiondialog.cpp:868 +msgid "Run regular expression auto merge on merge start" +msgstr "" + +#: optiondialog.cpp:870 +msgid "" +"Run the merge for auto merge regular expressions\n" +"immediately when a merge starts.\n" +msgstr "" + +#: optiondialog.cpp:875 +msgid "Version Control History Merging" +msgstr "" + +#: optiondialog.cpp:884 smalldialogs.cpp:424 +msgid "History start regular expression:" +msgstr "" + +#: optiondialog.cpp:888 +msgid "" +"Regular expression for the start of the version control history entry.\n" +"Usually this line contains the \"$Log$\"-keyword.\n" +"Default value: \".*\\$Log.*\\$.*\"" +msgstr "" + +#: optiondialog.cpp:894 smalldialogs.cpp:453 +msgid "History entry start regular expression:" +msgstr "" + +#: optiondialog.cpp:906 +msgid "" +"A version control history entry consists of several lines.\n" +"Specify the regular expression to detect the first line (without the leading " +"comment).\n" +"Use parentheses to group the keys you want to use for sorting.\n" +"If left empty, then KDiff3 assumes that empty lines separate history entries.\n" +"See the documentation for details." +msgstr "" + +#: optiondialog.cpp:914 +msgid "History merge sorting" +msgstr "" + +#: optiondialog.cpp:916 +msgid "Sort version control history by a key." +msgstr "" + +#: optiondialog.cpp:926 +msgid "History entry start sort key order:" +msgstr "" + +#: optiondialog.cpp:930 +msgid "" +"Each parentheses used in the regular expression for the history start entry\n" +"groups a key that can be used for sorting.\n" +"Specify the list of keys (that are numbered in order of occurrence\n" +"starting with 1) using ',' as separator (e.g. \"4,5,6,1,2,3,7\").\n" +"If left empty, then no sorting will be done.\n" +"See the documentation for details." +msgstr "" + +#: optiondialog.cpp:941 +msgid "Merge version control history on merge start" +msgstr "" + +#: optiondialog.cpp:943 +msgid "Run version control history automerge on merge start." +msgstr "" + +#: optiondialog.cpp:947 +msgid "Test your regular expressions" +msgstr "" + +#: optiondialog.cpp:952 +msgid "Irrelevant merge command:" +msgstr "" + +#: optiondialog.cpp:956 +msgid "" +"If specified this script is run after automerge\n" +"when no other relevant changes were detected.\n" +"Called with the parameters: filename1 filename2 filename3" +msgstr "" + +#: optiondialog.cpp:966 +msgid "Directory Merge" +msgstr "" + +#: optiondialog.cpp:975 +msgid "Recursive directories" +msgstr "" + +#: optiondialog.cpp:977 +msgid "Whether to analyze subdirectories or not." +msgstr "" + +#: optiondialog.cpp:979 +msgid "File pattern(s):" +msgstr "" + +#: optiondialog.cpp:984 +msgid "" +"Pattern(s) of files to be analyzed. \n" +"Wildcards: '*' and '?'\n" +"Several Patterns can be specified by using the separator: ';'" +msgstr "" + +#: optiondialog.cpp:990 +msgid "File-anti-pattern(s):" +msgstr "" + +#: optiondialog.cpp:995 +msgid "" +"Pattern(s) of files to be excluded from analysis. \n" +"Wildcards: '*' and '?'\n" +"Several Patterns can be specified by using the separator: ';'" +msgstr "" + +#: optiondialog.cpp:1001 +msgid "Dir-anti-pattern(s):" +msgstr "" + +#: optiondialog.cpp:1006 +msgid "" +"Pattern(s) of directories to be excluded from analysis. \n" +"Wildcards: '*' and '?'\n" +"Several Patterns can be specified by using the separator: ';'" +msgstr "" + +#: optiondialog.cpp:1012 +msgid "Use .cvsignore" +msgstr "" + +#: optiondialog.cpp:1015 +msgid "" +"Extends the antipattern to anything that would be ignored by CVS.\n" +"Via local \".cvsignore\"-files this can be directory specific." +msgstr "" + +#: optiondialog.cpp:1020 +msgid "Find hidden files and directories" +msgstr "" + +#: optiondialog.cpp:1023 +msgid "Finds files and directories with the hidden attribute." +msgstr "" + +#: optiondialog.cpp:1025 +msgid "Finds files and directories starting with '.'." +msgstr "" + +#: optiondialog.cpp:1029 +msgid "Follow file links" +msgstr "" + +#: optiondialog.cpp:1032 +msgid "" +"On: Compare the file the link points to.\n" +"Off: Compare the links." +msgstr "" + +#: optiondialog.cpp:1037 +msgid "Follow directory links" +msgstr "" + +#: optiondialog.cpp:1040 +msgid "" +"On: Compare the directory the link points to.\n" +"Off: Compare the links." +msgstr "" + +#: optiondialog.cpp:1056 +msgid "Case sensitive filename comparison" +msgstr "" + +#: optiondialog.cpp:1059 +msgid "" +"The directory comparison will compare files or directories when their names " +"match.\n" +"Set this option if the case of the names must match. (Default for Windows is " +"off, otherwise on.)" +msgstr "" + +#: optiondialog.cpp:1063 +msgid "File Comparison Mode" +msgstr "" + +#: optiondialog.cpp:1067 +msgid "Binary comparison" +msgstr "" + +#: optiondialog.cpp:1068 +msgid "Binary comparison of each file. (Default)" +msgstr "" + +#: optiondialog.cpp:1070 +msgid "Full analysis" +msgstr "" + +#: optiondialog.cpp:1071 +msgid "" +"Do a full analysis and show statistics information in extra columns.\n" +"(Slower than a binary comparison, much slower for binary files.)" +msgstr "" + +#: optiondialog.cpp:1074 +msgid "Trust the modification date (unsafe)" +msgstr "" + +#: optiondialog.cpp:1075 +msgid "" +"Assume that files are equal if the modification date and file length are " +"equal.\n" +"Useful for big directories or slow networks." +msgstr "" + +#: optiondialog.cpp:1078 +msgid "Trust the size (unsafe)" +msgstr "" + +#: optiondialog.cpp:1079 +msgid "" +"Assume that files are equal if their file lengths are equal.\n" +"Useful for big directories or slow networks when the date is modified during " +"download." +msgstr "" + +#: optiondialog.cpp:1083 +msgid "Synchronize directories" +msgstr "" + +#: optiondialog.cpp:1086 +msgid "" +"Offers to store files in both directories so that\n" +"both directories are the same afterwards.\n" +"Works only when comparing two directories without specifying a destination." +msgstr "" + +#: optiondialog.cpp:1092 +msgid "White space differences considered equal" +msgstr "" + +#: optiondialog.cpp:1095 +msgid "" +"If files differ only by white space consider them equal.\n" +"This is only active when full analysis is chosen." +msgstr "" + +#: optiondialog.cpp:1101 +msgid "Copy newer instead of merging (unsafe)" +msgstr "" + +#: optiondialog.cpp:1104 +msgid "" +"Don't look inside, just take the newer file.\n" +"(Use this only if you know what you are doing!)\n" +"Only effective when comparing two directories." +msgstr "" + +#: optiondialog.cpp:1109 +msgid "Backup files (.orig)" +msgstr "" + +#: optiondialog.cpp:1112 +msgid "" +"When a file would be saved over an old file, then the old file\n" +"will be renamed with a '.orig'-extension instead of being deleted." +msgstr "" + +#: optiondialog.cpp:1176 +msgid "Regional Settings" +msgstr "" + +#: optiondialog.cpp:1272 +msgid "Language (restart required)" +msgstr "" + +#: optiondialog.cpp:1304 +msgid "" +"Choose the language of the GUI-strings or \"Auto\".\n" +"For a change of language to take place, quit and restart KDiff3." +msgstr "" + +#: optiondialog.cpp:1322 +msgid "Use the same encoding for everything:" +msgstr "" + +#: optiondialog.cpp:1325 +msgid "" +"Enable this allows to change all encodings by changing the first only.\n" +"Disable this if different individual settings are needed." +msgstr "" + +#: optiondialog.cpp:1330 +msgid "Note: Local Encoding is " +msgstr "" + +#: optiondialog.cpp:1334 +msgid "File Encoding for A:" +msgstr "" + +#: optiondialog.cpp:1340 +msgid "" +"If enabled then Unicode (UTF-16 or UTF-8) encoding will be detected.\n" +"If the file encoding is not detected then the selected encoding will be used as " +"fallback.\n" +"(Unicode detection depends on the first bytes of a file - the byte order mark " +"\"BOM\".)" +msgstr "" + +#: optiondialog.cpp:1344 optiondialog.cpp:1353 optiondialog.cpp:1362 +msgid "Auto Detect Unicode" +msgstr "" + +#: optiondialog.cpp:1349 +msgid "File Encoding for B:" +msgstr "" + +#: optiondialog.cpp:1358 +msgid "File Encoding for C:" +msgstr "" + +#: optiondialog.cpp:1367 +msgid "File Encoding for Merge Output and Saving:" +msgstr "" + +#: optiondialog.cpp:1371 +msgid "Auto Select" +msgstr "" + +#: optiondialog.cpp:1374 +msgid "" +"If enabled then the encoding from the input files is used.\n" +"In ambiguous cases a dialog will ask the user to choose the encoding for " +"saving." +msgstr "" + +#: optiondialog.cpp:1378 +msgid "File Encoding for Preprocessor Files:" +msgstr "" + +#: optiondialog.cpp:1389 +msgid "Right To Left Language" +msgstr "" + +#: optiondialog.cpp:1392 +msgid "" +"Some languages are read from right to left.\n" +"This setting will change the viewer and editor accordingly." +msgstr "" + +#: optiondialog.cpp:1402 +msgid "Integration" +msgstr "" + +#: optiondialog.cpp:1402 +msgid "Integration Settings" +msgstr "" + +#: optiondialog.cpp:1412 +msgid "Command line options to ignore:" +msgstr "" + +#: optiondialog.cpp:1417 +msgid "" +"List of command line options that should be ignored when KDiff3 is used by " +"other tools.\n" +"Several values can be specified if separated via ';'\n" +"This will suppress the \"Unknown option\"-error." +msgstr "" + +#: optiondialog.cpp:1480 +msgid "" +"You selected a variable width font.\n" +"\n" +"Because this program doesn't handle variable width fonts\n" +"correctly, you might experience problems while editing.\n" +"\n" +"Do you want to continue or do you want to select another font." +msgstr "" + +#: optiondialog.cpp:1484 +msgid "Incompatible Font" +msgstr "" + +#: optiondialog.cpp:1485 +msgid "Continue at Own Risk" +msgstr "" + +#: optiondialog.cpp:1485 +msgid "Select Another Font" +msgstr "" + +#: optiondialog.cpp:1521 +msgid "This resets all options. Not only those of the current topic." +msgstr "" + +#: pdiff.cpp:258 +msgid "PreprocessorCmd: " +msgstr "" + +#: pdiff.cpp:263 +msgid "" +"The following option(s) you selected might change data:\n" +msgstr "" + +#: pdiff.cpp:264 +msgid "" +"\n" +"Most likely this is not wanted during a merge.\n" +"Do you want to disable these settings or continue with these settings active?" +msgstr "" + +#: pdiff.cpp:266 +msgid "Option Unsafe for Merging" +msgstr "" + +#: pdiff.cpp:267 +msgid "Use These Options During Merge" +msgstr "" + +#: pdiff.cpp:267 +msgid "Disable Unsafe Options" +msgstr "" + +#: pdiff.cpp:297 +msgid "Loading A" +msgstr "" + +#: pdiff.cpp:301 +msgid "Loading B" +msgstr "" + +#: pdiff.cpp:318 pdiff.cpp:344 +msgid "Diff: A <-> B" +msgstr "" + +#: pdiff.cpp:324 pdiff.cpp:366 +msgid "Linediff: A <-> B" +msgstr "" + +#: pdiff.cpp:335 +msgid "Loading C" +msgstr "" + +#: pdiff.cpp:347 +msgid "Diff: B <-> C" +msgstr "" + +#: pdiff.cpp:350 +msgid "Diff: A <-> C" +msgstr "" + +#: pdiff.cpp:369 +msgid "Linediff: B <-> C" +msgstr "" + +#: pdiff.cpp:372 +msgid "Linediff: A <-> C" +msgstr "" + +#: pdiff.cpp:513 +msgid "All input files contain the same text, but are not binary equal." +msgstr "" + +#: pdiff.cpp:515 pdiff.cpp:517 pdiff.cpp:519 +msgid "" +"Files %1 and %2 are binary equal.\n" +msgstr "" + +#: pdiff.cpp:516 pdiff.cpp:518 pdiff.cpp:520 +msgid "" +"Files %1 and %2 have equal text, but are not binary equal. \n" +msgstr "" + +#: pdiff.cpp:530 +msgid "" +"Some inputfiles don't seem to be pure textfiles.\n" +"Note that the KDiff3-merge was not meant for binary data.\n" +"Continue at your own risk." +msgstr "" + +#: pdiff.cpp:979 +msgid "Abort" +msgstr "" + +#: pdiff.cpp:985 pdiff.cpp:1073 +msgid "Opening files..." +msgstr "" + +#: pdiff.cpp:1050 pdiff.cpp:1121 +msgid "File open error" +msgstr "" + +#: pdiff.cpp:1153 +msgid "Cutting selection..." +msgstr "" + +#: pdiff.cpp:1174 +msgid "Copying selection to clipboard..." +msgstr "" + +#: pdiff.cpp:1190 +msgid "Inserting clipboard contents..." +msgstr "" + +#: pdiff.cpp:1713 +msgid "Save && Continue" +msgstr "" + +#: pdiff.cpp:1713 +msgid "Continue Without Saving" +msgstr "" + +#: pdiff.cpp:1920 +msgid "Search complete." +msgstr "" + +#: pdiff.cpp:1920 +msgid "Search Complete" +msgstr "" + +#: pdiff.cpp:2144 +msgid "Nothing is selected in either diff input window." +msgstr "" + +#: pdiff.cpp:2144 +msgid "Error while adding manual diff range" +msgstr "" + +#. i18n: file kdiff3_part.rc line 4 +#: rc.cpp:3 +#, no-c-format +msgid "&KDiff3" +msgstr "" + +#. i18n: file kdiff3_part.rc line 13 +#: rc.cpp:6 +#, no-c-format +msgid "Configure KDiff3" +msgstr "" + +#. i18n: file kdiff3_shell.rc line 7 +#: rc.cpp:15 +#, no-c-format +msgid "&Directory" +msgstr "" + +#. i18n: file kdiff3_shell.rc line 30 +#: rc.cpp:18 +#, no-c-format +msgid "Current Item Merge Operation" +msgstr "" + +#. i18n: file kdiff3_shell.rc line 38 +#: rc.cpp:21 +#, no-c-format +msgid "Current Item Sync Operation" +msgstr "" + +#. i18n: file kdiff3_shell.rc line 50 +#: rc.cpp:24 +#, no-c-format +msgid "&Movement" +msgstr "" + +#. i18n: file kdiff3_shell.rc line 61 +#: rc.cpp:27 +#, no-c-format +msgid "D&iffview" +msgstr "" + +#. i18n: file kdiff3_shell.rc line 73 +#: rc.cpp:30 +#, no-c-format +msgid "&Merge" +msgstr "" + +#. i18n: file kdiff3_shell.rc line 95 +#: rc.cpp:33 +#, no-c-format +msgid "&Window" +msgstr "" + +#: smalldialogs.cpp:53 +msgid "A (Base):" +msgstr "" + +#: smalldialogs.cpp:59 smalldialogs.cpp:75 smalldialogs.cpp:91 +#: smalldialogs.cpp:134 +msgid "File..." +msgstr "" + +#: smalldialogs.cpp:61 smalldialogs.cpp:77 smalldialogs.cpp:93 +#: smalldialogs.cpp:136 +msgid "Dir..." +msgstr "" + +#: smalldialogs.cpp:86 +msgid "C (Optional):" +msgstr "" + +#: smalldialogs.cpp:108 +msgid "Swap/Copy Names ..." +msgstr "" + +#: smalldialogs.cpp:114 smalldialogs.cpp:115 smalldialogs.cpp:116 +msgid "Swap %1<->%2" +msgstr "" + +#: smalldialogs.cpp:117 smalldialogs.cpp:118 smalldialogs.cpp:119 +msgid "Copy %1->Output" +msgstr "" + +#: smalldialogs.cpp:120 smalldialogs.cpp:121 smalldialogs.cpp:122 +msgid "Swap %1<->Output" +msgstr "" + +#: smalldialogs.cpp:129 +msgid "Output (optional):" +msgstr "" + +#: smalldialogs.cpp:158 +msgid "Configure..." +msgstr "" + +#: smalldialogs.cpp:347 +msgid "Search text:" +msgstr "" + +#: smalldialogs.cpp:354 +msgid "Case sensitive" +msgstr "" + +#: smalldialogs.cpp:357 +msgid "Search A" +msgstr "" + +#: smalldialogs.cpp:362 +msgid "Search B" +msgstr "" + +#: smalldialogs.cpp:367 +msgid "Search C" +msgstr "" + +#: smalldialogs.cpp:372 +msgid "Search output" +msgstr "" + +#: smalldialogs.cpp:377 +msgid "&Search" +msgstr "" + +#: smalldialogs.cpp:394 +msgid "Regular Expression Tester" +msgstr "" + +#: smalldialogs.cpp:405 +msgid "Example auto merge line:" +msgstr "" + +#: smalldialogs.cpp:407 +msgid "For auto merge test copy a line as used in your files." +msgstr "" + +#: smalldialogs.cpp:413 smalldialogs.cpp:442 smalldialogs.cpp:479 +msgid "Match result:" +msgstr "" + +#: smalldialogs.cpp:432 +msgid "Example history start line (with leading comment):" +msgstr "" + +#: smalldialogs.cpp:435 +msgid "" +"Copy a history start line as used in your files,\n" +"including the leading comment." +msgstr "" + +#: smalldialogs.cpp:461 +msgid "History sort key order:" +msgstr "" + +#: smalldialogs.cpp:469 +msgid "Example history entry start line (without leading comment):" +msgstr "" + +#: smalldialogs.cpp:471 +msgid "" +"Copy a history entry start line as used in your files,\n" +"but omit the leading comment." +msgstr "" + +#: smalldialogs.cpp:486 +msgid "Sort key result:" +msgstr "" + +#: smalldialogs.cpp:537 smalldialogs.cpp:547 smalldialogs.cpp:568 +msgid "Match success." +msgstr "" + +#: smalldialogs.cpp:541 smalldialogs.cpp:551 smalldialogs.cpp:574 +msgid "Match failed." +msgstr "" + +#: smalldialogs.cpp:559 +msgid "Opening and closing parentheses don't match in regular expression." +msgstr "" diff --git a/po/ru.po b/po/ru.po new file mode 100644 index 0000000..a152f27 --- /dev/null +++ b/po/ru.po @@ -0,0 +1,2430 @@ +# KDE3 - kdiff3.pot Russian translation. +# KDE3 - kdeextragear-1/kdiff3.po Russian translation. +# Nick Shaforostoff , 2004-2005. +# +msgid "" +msgstr "" +"Project-Id-Version: kdiff3\n" +"POT-Creation-Date: 2006-11-05 08:45+0100\n" +"PO-Revision-Date: 2005-02-01 10:56+0200\n" +"Last-Translator: Nick Shaforostoff \n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: KBabel 1.9.1\n" + +#: _translatorinfo.cpp:1 +msgid "" +"_: NAME OF TRANSLATORS\n" +"Your names" +msgstr "Ðиколай ШафороÑтов" + +#: _translatorinfo.cpp:3 +msgid "" +"_: EMAIL OF TRANSLATORS\n" +"Your emails" +msgstr "linux@l10n.org.ua" + +#: diff.cpp:246 +msgid "Writing clipboard data to temp file failed." +msgstr "" + +#: diff.cpp:250 +msgid "From Clipboard" +msgstr "Из буфера обмена" + +#: diff.cpp:491 +msgid "" +"Preprocessing possibly failed. Check this command:\n" +"\n" +" %1\n" +"\n" +"The preprocessing command will be disabled now." +msgstr "" + +#: diff.cpp:526 +msgid "" +"The line-matching-preprocessing possibly failed. Check this command:\n" +"\n" +" %1\n" +"\n" +"The line-matching-preprocessing command will be disabled now." +msgstr "" + +#: diff.cpp:1631 diff.cpp:1645 +msgid "" +"Data loss error:\n" +"If it is reproducable please contact the author.\n" +msgstr "" +"ÐŸÐ¾Ñ‚ÐµÑ€Ñ Ð´Ð°Ð½Ð½Ñ‹Ñ….\n" + +#: diff.cpp:1633 diff.cpp:1647 +msgid "Severe Internal Error" +msgstr "ВнутреннÑÑ Ð¾ÑˆÐ¸Ð±ÐºÐ°" + +#: difftextwindow.cpp:1643 kdiff3.cpp:753 +#, fuzzy +msgid "Top line" +msgstr "ÐŸÐµÑ€Ð²Ð°Ñ Ñтрока %1" + +#: difftextwindow.cpp:1653 +msgid "End" +msgstr "Конец" + +#: directorymergewindow.cpp:142 +msgid "Mix of links and normal files." +msgstr "Совмещение ÑÑылок и обычных файлов" + +#: directorymergewindow.cpp:149 +msgid "Link: " +msgstr "СÑылка: " + +#: directorymergewindow.cpp:157 +msgid "Size. " +msgstr "Размер. " + +#: directorymergewindow.cpp:170 +msgid "Date & Size: " +msgstr "Дата и размер: " + +#: directorymergewindow.cpp:179 directorymergewindow.cpp:185 +msgid "Creating temp copy of %1 failed." +msgstr "Ðе удалоÑÑŒ Ñоздать временную копию %1." + +#: directorymergewindow.cpp:196 directorymergewindow.cpp:204 +msgid "Opening %1 failed." +msgstr "Ðе удалоÑÑŒ открыть %1." + +#: directorymergewindow.cpp:208 +msgid "Comparing file..." +msgstr "Сравнивание файла..." + +#: directorymergewindow.cpp:218 directorymergewindow.cpp:224 +#, c-format +msgid "Error reading from %1" +msgstr "Ошибка Ñ‡Ñ‚ÐµÐ½Ð¸Ñ Ð¸Ð· %1" + +#: directorymergewindow.cpp:282 +msgid "Name" +msgstr "ИмÑ" + +#: directorymergewindow.cpp:286 +msgid "Operation" +msgstr "ДейÑтвие" + +#: directorymergewindow.cpp:287 +msgid "Status" +msgstr "СоÑтоÑние" + +#: directorymergewindow.cpp:288 +msgid "Unsolved" +msgstr "Ðеразрешённый" + +#: directorymergewindow.cpp:289 +msgid "Solved" +msgstr "Разрешённый" + +#: directorymergewindow.cpp:290 +msgid "Nonwhite" +msgstr "Чёрный" + +#: directorymergewindow.cpp:291 +msgid "White" +msgstr "Белый" + +#: directorymergewindow.cpp:319 +msgid "" +"You are currently doing a directory merge. Are you sure, you want to abort the " +"merge and rescan the directory?" +msgstr "" +"Ð¡ÐµÐ¹Ñ‡Ð°Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð° работает в режиме Ð¾Ð±ÑŠÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ ÐºÐ°Ñ‚Ð°Ð»Ð¾Ð³Ð¾Ð². Ð’Ñ‹ дейÑтвительно " +"хотите отменить вÑе Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð¸ обновить Ñодержание каталогов?" + +#: directorymergewindow.cpp:320 directorymergewindow.cpp:2868 +msgid "Rescan" +msgstr "Обновить" + +#: directorymergewindow.cpp:320 kdiff3.cpp:603 pdiff.cpp:979 +msgid "Continue Merging" +msgstr "Продолжить" + +#: directorymergewindow.cpp:462 +msgid "Opening of directories failed:" +msgstr "Ðе удалоÑÑŒ открыть каталоги:" + +#: directorymergewindow.cpp:465 +msgid "" +"Dir A \"%1\" does not exist or is not a directory.\n" +msgstr "" +"Каталог A \"%1\" не ÑущеÑтвует.\n" + +#: directorymergewindow.cpp:468 +msgid "" +"Dir B \"%1\" does not exist or is not a directory.\n" +msgstr "" +"Каталог B \"%1\" не ÑущеÑтвует.\n" + +#: directorymergewindow.cpp:471 +msgid "" +"Dir C \"%1\" does not exist or is not a directory.\n" +msgstr "" +"Каталог C \"%1\" не ÑущеÑтвует.\n" + +#: directorymergewindow.cpp:473 +msgid "Directory Open Error" +msgstr "Ошибка Ñ‡Ñ‚ÐµÐ½Ð¸Ñ ÐºÐ°Ñ‚Ð°Ð»Ð¾Ð³Ð°" + +#: directorymergewindow.cpp:481 +msgid "" +"The destination directory must not be the same as A or B when three directories " +"are merged.\n" +"Check again before continuing." +msgstr "Путь к конечному каталогу не должен Ñовпадать Ñ A или B." + +#: directorymergewindow.cpp:483 +msgid "Parameter Warning" +msgstr "Ðеправильный параметр" + +#: directorymergewindow.cpp:488 +msgid "Scanning directories..." +msgstr "Сканирование каталогов..." + +#: directorymergewindow.cpp:537 +msgid "Reading Directory A" +msgstr "Чтение каталога A" + +#: directorymergewindow.cpp:559 +msgid "Reading Directory B" +msgstr "Чтение каталога B" + +#: directorymergewindow.cpp:581 +msgid "Reading Directory C" +msgstr "Чтение каталога C" + +#: directorymergewindow.cpp:607 +msgid "Some subdirectories were not readable in" +msgstr "Ðе удалоÑÑŒ почитать некоторые подкаталоги в" + +#: directorymergewindow.cpp:612 +msgid "Check the permissions of the subdirectories." +msgstr "Проверьте права Ñтих каталогов." + +#: directorymergewindow.cpp:646 kdiff3.cpp:552 kdiff3.cpp:636 kdiff3.cpp:661 +#: kdiff3.cpp:934 kdiff3.cpp:955 pdiff.cpp:1059 pdiff.cpp:1131 pdiff.cpp:1169 +#: pdiff.cpp:1185 pdiff.cpp:1215 pdiff.cpp:1226 +msgid "Ready." +msgstr "Готово." + +#: directorymergewindow.cpp:660 +msgid "Directory Comparison Status" +msgstr "СоÑтоÑние ÑÑ€Ð°Ð²Ð½ÐµÐ½Ð¸Ñ ÐºÐ°Ñ‚Ð°Ð»Ð¾Ð³Ð¾Ð²" + +#: directorymergewindow.cpp:661 +msgid "Number of subdirectories:" +msgstr "КоличеÑтво подкаталогов:" + +#: directorymergewindow.cpp:662 +msgid "Number of equal files:" +msgstr "КоличеÑтво одинаковых файлов:" + +#: directorymergewindow.cpp:663 +msgid "Number of different files:" +msgstr "КоличеÑтво разных файлов:" + +#: directorymergewindow.cpp:666 +msgid "Number of manual merges:" +msgstr "КоличеÑтво объединений вручную:" + +#: directorymergewindow.cpp:802 +msgid "This affects all merge operations." +msgstr "Это влиÑет на вÑе объединениÑ" + +#: directorymergewindow.cpp:803 +msgid "Changing All Merge Operations" +msgstr "Изменение вÑех объединений" + +#: directorymergewindow.cpp:803 mergeresultwindow.cpp:287 +msgid "C&ontinue" +msgstr "&Продолжить" + +#: directorymergewindow.cpp:1169 +msgid "Processing " +msgstr "Обработка " + +#: directorymergewindow.cpp:1647 directorymergewindow.cpp:1653 +msgid "To do." +msgstr "ОÑталоÑÑŒ Ñделать." + +#: directorymergewindow.cpp:1756 directorymergewindow.cpp:2899 +msgid "Copy A to B" +msgstr "Копировать A в B" + +#: directorymergewindow.cpp:1757 directorymergewindow.cpp:2900 +msgid "Copy B to A" +msgstr "Копировать B в A" + +#: directorymergewindow.cpp:1758 directorymergewindow.cpp:2901 +msgid "Delete A" +msgstr "Удалить A" + +#: directorymergewindow.cpp:1759 directorymergewindow.cpp:2902 +msgid "Delete B" +msgstr "Удалить B" + +#: directorymergewindow.cpp:1760 +msgid "Delete A & B" +msgstr "Удалить A и B" + +#: directorymergewindow.cpp:1761 directorymergewindow.cpp:2904 +msgid "Merge to A" +msgstr "Объединить в A" + +#: directorymergewindow.cpp:1762 directorymergewindow.cpp:2905 +msgid "Merge to B" +msgstr "Объединить в B" + +#: directorymergewindow.cpp:1763 +msgid "Merge to A & B" +msgstr "Объединить в A & B" + +#: directorymergewindow.cpp:1767 directorymergewindow.cpp:2896 +msgid "Delete (if exists)" +msgstr "Удалить (еÑли ÑущеÑтвует)" + +#: directorymergewindow.cpp:1768 directorymergewindow.cpp:1769 +#: directorymergewindow.cpp:2895 optiondialog.cpp:809 smalldialogs.cpp:102 +msgid "Merge" +msgstr "Объединить" + +#: directorymergewindow.cpp:1768 directorymergewindow.cpp:1769 +msgid "Merge (manual)" +msgstr "Объединить (вручную)" + +#: directorymergewindow.cpp:1770 +msgid "Error: Conflicting File Types" +msgstr "Ошибка: ÐеÑовмеÑтимые типы файлов" + +#: directorymergewindow.cpp:1771 +msgid "Error: Dates are equal but files are not." +msgstr "Ошибка: Ð’Ñ€ÐµÐ¼Ñ Ñовпадает, а Ñодержимое файлов - нет." + +#: directorymergewindow.cpp:1795 directorymergewindow.cpp:1824 +#: directorymergewindow.cpp:1849 +msgid "This operation is currently not possible." +msgstr "Пока невозможно" + +#: directorymergewindow.cpp:1795 directorymergewindow.cpp:1824 +#: directorymergewindow.cpp:1849 directorymergewindow.cpp:2106 +msgid "Operation Not Possible" +msgstr "Пока невозможно" + +#: directorymergewindow.cpp:1888 +msgid "" +"This should never happen: \n" +"\n" +"mergeResultSaved: m_pMFI=0\n" +"\n" +"If you know how to reproduce this, please contact the program author." +msgstr "" +"mergeResultSaved: m_pMFI=0\n" +"\n" +"ЕÑли вы знаете в чём причина, Ñообщите автору." + +#: directorymergewindow.cpp:1888 +msgid "Program Error" +msgstr "Ошибка программы" + +#: directorymergewindow.cpp:1899 +msgid "" +"An error occurred while copying.\n" +msgstr "" +"Ошибка копированиÑ.\n" + +#: directorymergewindow.cpp:1900 directorymergewindow.cpp:2306 +msgid "Merge Error" +msgstr "Ошибка объединениÑ" + +#: directorymergewindow.cpp:1905 directorymergewindow.cpp:2311 +msgid "Error." +msgstr "Ошибка." + +#: directorymergewindow.cpp:1910 directorymergewindow.cpp:2202 +#: directorymergewindow.cpp:2242 +msgid "Done." +msgstr "Готово." + +#: directorymergewindow.cpp:1933 +msgid "Not saved." +msgstr "Ðе Ñохранено." + +#: directorymergewindow.cpp:1968 +msgid "Unknown merge operation. (This must never happen!)" +msgstr "ÐеизвеÑтное объединение" + +#: directorymergewindow.cpp:2000 +msgid "Unknown merge operation." +msgstr "ÐеизвеÑтное объединение" + +#: directorymergewindow.cpp:2015 +msgid "" +"The merge is about to begin.\n" +"\n" +"Choose \"Do it\" if you have read the instructions and know what you are " +"doing.\n" +"Choosing \"Simulate it\" will tell you what would happen.\n" +"\n" +"Be aware that this program still has beta status and there is NO WARRANTY " +"whatsoever! Make backups of your vital data!" +msgstr "" +"Ð¡ÐµÐ¹Ñ‡Ð°Ñ Ð½Ð°Ñ‡Ð½Ñ‘Ñ‚ÑÑ Ð¾Ð±ÑŠÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ.\n" +"\n" +"Ðажмите \"Выполнить\" поÑле Ð¿Ñ€Ð¾Ñ‡Ñ‚ÐµÐ½Ð¸Ñ Ð¸Ð½Ñтрукций.\n" +"Ðажмите \"Эмулировать\" чтобы увидеть, что должно произойти.\n" +"\n" +"Мы Ñоветуем вÑегда делать резервные копии данных перед объединением!" + +#: directorymergewindow.cpp:2020 +msgid "Starting Merge" +msgstr "Ðачало объединениÑ" + +#: directorymergewindow.cpp:2020 +msgid "Do It" +msgstr "Выполнить" + +#: directorymergewindow.cpp:2020 +msgid "Simulate It" +msgstr "Эмулировать" + +#: directorymergewindow.cpp:2046 +msgid "" +"The highlighted item has a different type in the different directories. Select " +"what to do." +msgstr "" +"Выделенный файл имеет разный тип в каждом каталоге. Выберите что делать." + +#: directorymergewindow.cpp:2055 +msgid "" +"The modification dates of the file are equal but the files are not. Select what " +"to do." +msgstr "" +"Даты поÑледнего Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ñ„Ð°Ð¹Ð»Ð¾Ð² одинаковы, о Ñодержимое - нет. Выберите что " +"делать." + +#: directorymergewindow.cpp:2106 +msgid "" +"This operation is currently not possible because directory merge is currently " +"running." +msgstr "Ð¡ÐµÐ¹Ñ‡Ð°Ñ Ð²Ñ‹Ð¿Ð¾Ð»Ð½ÑетÑÑ Ð¾Ð±ÑŠÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ðµ каталогов" + +#: directorymergewindow.cpp:2166 +msgid "" +"There was an error in the last step.\n" +"Do you want to continue with the item that caused the error or do you want to " +"skip this item?" +msgstr "" +"Ðа текущем Ñтапе произошла ошибка.\n" +"Продолжить или пропуÑтить?" + +#: directorymergewindow.cpp:2168 +msgid "Continue merge after an error" +msgstr "Продолжить поÑле ошибки" + +#: directorymergewindow.cpp:2168 +msgid "Continue With Last Item" +msgstr "Продолжить" + +#: directorymergewindow.cpp:2168 +msgid "Skip Item" +msgstr "ПропуÑтить" + +#: directorymergewindow.cpp:2202 +msgid "Skipped." +msgstr "Пропущено." + +#: directorymergewindow.cpp:2209 directorymergewindow.cpp:2435 +msgid "In progress..." +msgstr "Идёт работа..." + +#: directorymergewindow.cpp:2257 +msgid "Merge operation complete." +msgstr "Объединение завершено." + +#: directorymergewindow.cpp:2257 directorymergewindow.cpp:2260 +msgid "Merge Complete" +msgstr "Объединение завершено" + +#: directorymergewindow.cpp:2269 +msgid "" +"Simulated merge complete: Check if you agree with the proposed operations." +msgstr "Объединение завершено. Ð’Ñ‹ ÑоглаÑны Ñ Ð¿Ñ€ÐµÐ´Ð»Ð°Ð³Ð°ÐµÐ¼Ñ‹Ð¼Ð¸ изменениÑми?" + +#: directorymergewindow.cpp:2305 +msgid "" +"An error occurred. Press OK to see detailed information.\n" +msgstr "" +"Произошла ошибка. Ðажмите OK Ð´Ð»Ñ Ð¿Ð¾Ð´Ñ€Ð¾Ð±Ð½Ð¾Ñтей.\n" + +#: directorymergewindow.cpp:2348 +msgid "Error: While deleting %1: Creating backup failed." +msgstr "Ðе удалоÑÑŒ Ñоздать резервную копию %1." + +#: directorymergewindow.cpp:2355 +msgid "delete directory recursively( %1 )" +msgstr "удалить каталог рекурÑивно(%1 )" + +#: directorymergewindow.cpp:2357 +msgid "delete( %1 )" +msgstr "удалить( %1 )" + +#: directorymergewindow.cpp:2372 +msgid "Error: delete dir operation failed while trying to read the directory." +msgstr "Ðе удалоÑÑŒ удалить каталог" + +#: directorymergewindow.cpp:2391 +msgid "Error: rmdir( %1 ) operation failed." +msgstr "Ошибка rmdir( %1 )." + +#: directorymergewindow.cpp:2401 +msgid "Error: delete operation failed." +msgstr "Ðе удалоÑÑŒ удалить." + +#: directorymergewindow.cpp:2427 +msgid "manual merge( %1, %2, %3 -> %4)" +msgstr "объединение вручную( %1, %2, %3 -> %4)" + +#: directorymergewindow.cpp:2430 +msgid "" +" Note: After a manual merge the user should continue by pressing F7." +msgstr " ПоÑле Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð¸Ñ Ð¾Ð±ÑŠÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ Ð²Ñ€ÑƒÑ‡Ð½ÑƒÑŽ нажмите F7." + +#: directorymergewindow.cpp:2453 +msgid "Error: copy( %1 -> %2 ) failed.Deleting existing destination failed." +msgstr "" +"Ðе удалоÑÑŒ Ñкопировать %1 в %2. Ðе удалоÑÑŒ удалить ÑущеÑтвующее назначение." + +#: directorymergewindow.cpp:2463 +msgid "copyLink( %1 -> %2 )" +msgstr "ÑимволичеÑÐºÐ°Ñ ÑÑылка( %1 -> %2 )" + +#: directorymergewindow.cpp:2474 +msgid "Error: copyLink failed: Remote links are not yet supported." +msgstr "Ошибка: Удалённые ÑÑылки не поддерживаютÑÑ." + +#: directorymergewindow.cpp:2480 +msgid "Error: copyLink failed." +msgstr "Ðе удалоÑÑŒ Ñоздать ÑÑылку." + +#: directorymergewindow.cpp:2500 +msgid "copy( %1 -> %2 )" +msgstr "копировать( %1 -> %2 )" + +#: directorymergewindow.cpp:2526 +msgid "Error during rename( %1 -> %2 ): Cannot delete existing destination." +msgstr "" +"Ðе удалоÑÑŒ переименовать %1 в%2. Ðе удалоÑÑŒ удалить ÑущеÑтвующее назначение." + +#: directorymergewindow.cpp:2532 +msgid "rename( %1 -> %2 )" +msgstr "переименовать( %1 -> %2 )" + +#: directorymergewindow.cpp:2541 +msgid "Error: Rename failed." +msgstr "Ðе удалоÑÑŒ переименовать" + +#: directorymergewindow.cpp:2559 +msgid "Error during makeDir of %1. Cannot delete existing file." +msgstr "Ðе удалоÑÑŒ Ñоздать каталог %1. Ðе удалоÑÑŒ удалить ÑущеÑтвующий файл." + +#: directorymergewindow.cpp:2575 +msgid "makeDir( %1 )" +msgstr "Ñоздать каталог( %1 )" + +#: directorymergewindow.cpp:2585 +msgid "Error while creating directory." +msgstr "Ðе удалоÑÑŒ Ñоздать каталог" + +#: directorymergewindow.cpp:2608 directorymergewindow.cpp:2725 +msgid "Dest" +msgstr "Ðазначение" + +#: directorymergewindow.cpp:2612 directorymergewindow.cpp:2650 +msgid "Dir" +msgstr "Каталог" + +#: directorymergewindow.cpp:2613 +msgid "Type" +msgstr "Тип" + +#: directorymergewindow.cpp:2614 +msgid "Size" +msgstr "Размер" + +#: directorymergewindow.cpp:2615 +msgid "Attr" +msgstr "Ðтрибуты" + +#: directorymergewindow.cpp:2616 +msgid "Last Modification" +msgstr "ПоÑледнее изменение" + +#: directorymergewindow.cpp:2617 +msgid "Link-Destination" +msgstr "Объект ÑÑылки" + +#: directorymergewindow.cpp:2667 +msgid "not available" +msgstr "не доÑтупно" + +#: directorymergewindow.cpp:2687 +msgid "A (Dest): " +msgstr "A (назначение): " + +#: directorymergewindow.cpp:2690 +msgid "A (Base): " +msgstr "A (иÑходное): " + +#: directorymergewindow.cpp:2696 +msgid "B (Dest): " +msgstr "B (назначение): " + +#: directorymergewindow.cpp:2704 +msgid "C (Dest): " +msgstr "C (назначение): " + +#: directorymergewindow.cpp:2710 +msgid "Dest: " +msgstr "Ðазначение: " + +#: directorymergewindow.cpp:2775 +#, fuzzy +msgid "Save Directory Merge State As..." +msgstr "Объединение каталогов" + +#: directorymergewindow.cpp:2862 +msgid "Start/Continue Directory Merge" +msgstr "Ðачать/продолжить объединение каталогов" + +#: directorymergewindow.cpp:2863 +msgid "Run Operation for Current Item" +msgstr "Выполнить Ð´Ð»Ñ Ñ‚ÐµÐºÑƒÑ‰ÐµÐ³Ð¾ пункта" + +#: directorymergewindow.cpp:2864 +msgid "Compare Selected File" +msgstr "Сравнить выделенный файл" + +#: directorymergewindow.cpp:2865 +msgid "Merge Current File" +msgstr "Объединить текущий файл" + +#: directorymergewindow.cpp:2866 +msgid "Fold All Subdirs" +msgstr "Ð’ÐºÐ»ÑŽÑ‡Ð°Ñ Ð²Ñе подкаталоги" + +#: directorymergewindow.cpp:2867 +msgid "Unfold All Subdirs" +msgstr "ИÑÐºÐ»ÑŽÑ‡Ð°Ñ Ð²Ñе подкаталоги" + +#: directorymergewindow.cpp:2871 +msgid "Choose A for All Items" +msgstr "Выбрать A Ð´Ð»Ñ Ð²Ñех" + +#: directorymergewindow.cpp:2872 +msgid "Choose B for All Items" +msgstr "Выбрать B Ð´Ð»Ñ Ð²Ñех" + +#: directorymergewindow.cpp:2873 +msgid "Choose C for All Items" +msgstr "Выбрать C Ð´Ð»Ñ Ð²Ñех" + +#: directorymergewindow.cpp:2874 +msgid "Auto-Choose Operation for All Items" +msgstr "ÐвтоматичеÑки выбирать тип дейÑÑ‚Ð²Ð¸Ñ Ð´Ð»Ñ Ð²Ñех" + +#: directorymergewindow.cpp:2875 +msgid "No Operation for All Items" +msgstr "Убрать дейÑÑ‚Ð²Ð¸Ñ Ð´Ð»Ñ Ð²Ñех" + +#: directorymergewindow.cpp:2880 +msgid "Show Identical Files" +msgstr "" + +#: directorymergewindow.cpp:2881 +#, fuzzy +msgid "Show Different Files" +msgstr "КоличеÑтво разных файлов:" + +#: directorymergewindow.cpp:2882 +msgid "Show Files only in A" +msgstr "" + +#: directorymergewindow.cpp:2883 +msgid "Show Files only in B" +msgstr "" + +#: directorymergewindow.cpp:2884 +msgid "Show Files only in C" +msgstr "" + +#: directorymergewindow.cpp:2888 +#, fuzzy +msgid "Compare Explicitly Selected Files" +msgstr "Сравнить выделенный файл" + +#: directorymergewindow.cpp:2889 +#, fuzzy +msgid "Merge Explicitly Selected Files" +msgstr "Сравнить выделенный файл" + +#: directorymergewindow.cpp:2891 directorymergewindow.cpp:2898 +msgid "Do Nothing" +msgstr "Ðичего" + +#: directorymergewindow.cpp:2892 +msgid "A" +msgstr "A" + +#: directorymergewindow.cpp:2893 +msgid "B" +msgstr "B" + +#: directorymergewindow.cpp:2894 +msgid "C" +msgstr "C" + +#: directorymergewindow.cpp:2903 +msgid "Delete A && B" +msgstr "Удалить A и B" + +#: directorymergewindow.cpp:2906 +msgid "Merge to A && B" +msgstr "Объединить в A & B" + +#: fileaccess.cpp:595 +msgid "" +"While trying to make a backup, deleting an older backup failed. \n" +"Filename: " +msgstr "" +"Ðе удалоÑÑŒ удалить Ñтарую резервную копию. \n" +"Файл: " + +#: fileaccess.cpp:602 +msgid "" +"While trying to make a backup, renaming failed. \n" +"Filenames: " +msgstr "" +"Ðе удалоÑÑŒ выполнить переименование. \n" +"Файлы: " + +#: fileaccess.cpp:624 +#, c-format +msgid "Getting file status: %1" +msgstr "Получение ÑоÑтоÑÐ½Ð¸Ñ Ñ„Ð°Ð¹Ð»Ð°: %1" + +#: fileaccess.cpp:667 +#, c-format +msgid "Reading file: %1" +msgstr "Чтение файла: %1" + +#: fileaccess.cpp:703 +#, c-format +msgid "Writing file: %1" +msgstr "ЗапиÑÑŒ в файл: %1" + +#: fileaccess.cpp:731 +msgid "Out of memory" +msgstr "Вне памÑти" + +#: fileaccess.cpp:766 +#, c-format +msgid "Making directory: %1" +msgstr "Создание каталога: %1" + +#: fileaccess.cpp:786 +#, c-format +msgid "Removing directory: %1" +msgstr "Удаление каталога: %1" + +#: fileaccess.cpp:801 +#, c-format +msgid "Removing file: %1" +msgstr "Удаление файла: %1" + +#: fileaccess.cpp:817 +msgid "Creating symbolic link: %1 -> %2" +msgstr "Создание ÑимволичеÑкой ÑÑылки: %1 -> %2" + +#: fileaccess.cpp:843 +msgid "Renaming file: %1 -> %2" +msgstr "Переименование файла: %1 -> %2" + +#: fileaccess.cpp:879 +msgid "Copying file: %1 -> %2" +msgstr "Копирование файла: %1 -> %2" + +#: fileaccess.cpp:893 +#, c-format +msgid "" +"Error during file copy operation: Opening file for reading failed. Filename: %1" +msgstr "Ðе удалоÑÑŒ открыть Ð´Ð»Ñ Ñ‡Ñ‚ÐµÐ½Ð¸Ñ Ñ„Ð°Ð¹Ð» %1" + +#: fileaccess.cpp:899 +#, c-format +msgid "" +"Error during file copy operation: Opening file for writing failed. Filename: %1" +msgstr "Ðе удалоÑÑŒ открыть Ð´Ð»Ñ Ð·Ð°Ð¿Ð¸Ñи файл %1" + +#: fileaccess.cpp:914 +#, c-format +msgid "Error during file copy operation: Reading failed. Filename: %1" +msgstr "Ðе удалоÑÑŒ прочитать файл %1" + +#: fileaccess.cpp:923 +#, c-format +msgid "Error during file copy operation: Writing failed. Filename: %1" +msgstr "Ðе удалоÑÑŒ запиÑать в файл %1" + +#: fileaccess.cpp:1219 +msgid "Reading directory: " +msgstr "Чтение каталога: " + +#: fileaccess.cpp:1348 +#, c-format +msgid "Listing directory: %1" +msgstr "Вывод Ñодержимого каталога: %1" + +#: kdiff3.cpp:142 +msgid "Current Configuration:" +msgstr "" + +#: kdiff3.cpp:147 +#, fuzzy +msgid "Config Option Error:" +msgstr "Ошибка Ð¾Ñ‚ÐºÑ€Ñ‹Ñ‚Ð¸Ñ Ñ„Ð°Ð¹Ð»Ð¾Ð²" + +#: kdiff3.cpp:187 +msgid "Option --auto used, but no output file specified." +msgstr "Ключ --auto иÑпользован, но не указаны выходные файлы." + +#: kdiff3.cpp:323 +msgid "Option --auto ignored for directory comparison." +msgstr "Ключ --auto игнорируетÑÑ Ð´Ð»Ñ ÐºÐ°Ñ‚Ð°Ð»Ð¾Ð³Ð¾Ð²" + +#: kdiff3.cpp:359 +msgid "Saving failed." +msgstr "Ðе удалоÑÑŒ произвеÑти Ñохранение." + +#: kdiff3.cpp:386 pdiff.cpp:1041 pdiff.cpp:1112 +msgid "Opening of these files failed:" +msgstr "Ðе удалоÑÑŒ открыть файлы:" + +#: kdiff3.cpp:395 +msgid "File Open Error" +msgstr "Ошибка Ð¾Ñ‚ÐºÑ€Ñ‹Ñ‚Ð¸Ñ Ñ„Ð°Ð¹Ð»Ð¾Ð²" + +#: kdiff3.cpp:418 +msgid "Opens documents for comparison..." +msgstr "Открыть файлы Ð´Ð»Ñ ÑравнениÑ..." + +#: kdiff3.cpp:423 +msgid "Saves the merge result. All conflicts must be solved!" +msgstr "Сохранить результат объединениÑ. Ð’Ñе конфликты должны быть разрешены!" + +#: kdiff3.cpp:425 +msgid "Saves the current document as..." +msgstr "Сохранить Ñ Ð´Ñ€ÑƒÐ³Ð¸Ð¼ именем..." + +#: kdiff3.cpp:427 +msgid "Print the differences" +msgstr "" + +#: kdiff3.cpp:429 +msgid "Quits the application" +msgstr "Выйти" + +#: kdiff3.cpp:431 +msgid "Cuts the selected section and puts it to the clipboard" +msgstr "Вырезать в буфер обмена" + +#: kdiff3.cpp:433 +msgid "Copies the selected section to the clipboard" +msgstr "Скопировать в буфер обмена" + +#: kdiff3.cpp:435 +msgid "Pastes the clipboard contents to actual position" +msgstr "Ð’Ñтавить из буфера обмена" + +#: kdiff3.cpp:437 +msgid "Select everything in current window" +msgstr "" + +#: kdiff3.cpp:439 +msgid "Search for a string" +msgstr "ИÑкать текÑÑ‚" + +#: kdiff3.cpp:441 +msgid "Search again for the string" +msgstr "Продолжить поиÑк текÑта" + +#: kdiff3.cpp:443 +msgid "Enables/disables the toolbar" +msgstr "Отобразить/Ñкрыть панель инÑтрументов" + +#: kdiff3.cpp:445 +msgid "Enables/disables the statusbar" +msgstr "Отобразить/Ñкрыть панель ÑоÑтоÑниÑ" + +#: kdiff3.cpp:449 +msgid "Configure KDiff3..." +msgstr "ÐаÑтроить KDiff3..." + +#: kdiff3.cpp:470 +msgid "Go to Current Delta" +msgstr "Перейти к текущему различию" + +#: kdiff3.cpp:471 +msgid "Go to First Delta" +msgstr "Перейти к первому различию" + +#: kdiff3.cpp:472 +msgid "Go to Last Delta" +msgstr "Перейти к поÑледнему различию" + +#: kdiff3.cpp:473 +msgid "(Skips white space differences when \"Show White Space\" is disabled.)" +msgstr "" + +#: kdiff3.cpp:474 +msgid "" +"(Does not skip white space differences even when \"Show White Space\" is " +"disabled.)" +msgstr "" + +#: kdiff3.cpp:475 +msgid "Go to Previous Delta" +msgstr "Перейти к предыдущему различию" + +#: kdiff3.cpp:477 +msgid "Go to Next Delta" +msgstr "Перейти к Ñледующему различию" + +#: kdiff3.cpp:479 +msgid "Go to Previous Conflict" +msgstr "Перейти к предыдущему конфликту" + +#: kdiff3.cpp:481 +msgid "Go to Next Conflict" +msgstr "Перейти к Ñледующему конфликту" + +#: kdiff3.cpp:483 +msgid "Go to Previous Unsolved Conflict" +msgstr "Перейти к предыдущему неразрешённому конфликту" + +#: kdiff3.cpp:485 +msgid "Go to Next Unsolved Conflict" +msgstr "Перейти к Ñледующему неразрешённому конфликту" + +#: kdiff3.cpp:487 +msgid "Select Line(s) From A" +msgstr "Выбрать Ñтроки из A" + +#: kdiff3.cpp:488 +msgid "Select Line(s) From B" +msgstr "Выбрать Ñтроки из B" + +#: kdiff3.cpp:489 +msgid "Select Line(s) From C" +msgstr "Выбрать Ñтроки из C" + +#: kdiff3.cpp:490 +msgid "Automatically Go to Next Unsolved Conflict After Source Selection" +msgstr "" +"Перейти к Ñледующему неразрешённому конфликту поÑле Ð²Ñ‹Ð´ÐµÐ»ÐµÐ½Ð¸Ñ Ð¸Ñходника" + +#: kdiff3.cpp:492 +msgid "Show Space && Tabulator Characters for Differences" +msgstr "Отображать пробелы и табулÑции в различиÑÑ…" + +#: kdiff3.cpp:493 +msgid "Show White Space" +msgstr "Отображать пуÑтые промежутки" + +#: kdiff3.cpp:495 +msgid "Show Line Numbers" +msgstr "Отображать номера Ñтрок" + +#: kdiff3.cpp:496 +msgid "Choose A Everywhere" +msgstr "Выбрать A везде" + +#: kdiff3.cpp:497 +msgid "Choose B Everywhere" +msgstr "Выбрать B везде" + +#: kdiff3.cpp:498 +msgid "Choose C Everywhere" +msgstr "Выбрать C везде" + +#: kdiff3.cpp:499 +msgid "Choose A for All Unsolved Conflicts" +msgstr "Выбрать A Ð´Ð»Ñ Ð²Ñех неразрешённых конфликтов" + +#: kdiff3.cpp:500 +msgid "Choose B for All Unsolved Conflicts" +msgstr "Выбрать B Ð´Ð»Ñ Ð²Ñех неразрешённых конфликтов" + +#: kdiff3.cpp:501 +msgid "Choose C for All Unsolved Conflicts" +msgstr "Выбрать C Ð´Ð»Ñ Ð²Ñех неразрешённых конфликтов" + +#: kdiff3.cpp:502 +msgid "Choose A for All Unsolved Whitespace Conflicts" +msgstr "Выбрать A Ð´Ð»Ñ Ð²Ñех неразрешённых конфликтов пуÑÑ‚Ñ‹Ñ… промежутков" + +#: kdiff3.cpp:503 +msgid "Choose B for All Unsolved Whitespace Conflicts" +msgstr "Выбрать B Ð´Ð»Ñ Ð²Ñех неразрешённых конфликтов пуÑÑ‚Ñ‹Ñ… промежутков" + +#: kdiff3.cpp:504 +msgid "Choose C for All Unsolved Whitespace Conflicts" +msgstr "Выбрать C Ð´Ð»Ñ Ð²Ñех неразрешённых конфликтов пуÑÑ‚Ñ‹Ñ… промежутков" + +#: kdiff3.cpp:505 +msgid "Automatically Solve Simple Conflicts" +msgstr "Разрешать проÑтые конфликты автоматичеÑки" + +#: kdiff3.cpp:506 +msgid "Set Deltas to Conflicts" +msgstr "Определить Ñ€Ð°Ð·Ð»Ð¸Ñ‡Ð¸Ñ ÐºÐ°Ðº конфликты" + +#: kdiff3.cpp:507 +msgid "Run Regular Expression Auto Merge" +msgstr "" + +#: kdiff3.cpp:508 +#, fuzzy +msgid "Automatically Solve History Conflicts" +msgstr "Разрешать проÑтые конфликты автоматичеÑки" + +#: kdiff3.cpp:509 +msgid "Split Diff At Selection" +msgstr "" + +#: kdiff3.cpp:510 +#, fuzzy +msgid "Join Selected Diffs" +msgstr "Сравнить выделенный файл" + +#: kdiff3.cpp:512 +msgid "Show Window A" +msgstr "Отобразить окно A" + +#: kdiff3.cpp:513 +msgid "Show Window B" +msgstr "Отобразить окно B" + +#: kdiff3.cpp:514 +msgid "Show Window C" +msgstr "Отобразить окно C" + +#: kdiff3.cpp:515 kdiff3.cpp:526 +msgid "Focus Next Window" +msgstr "Ðктивировать Ñледующее окно" + +#: kdiff3.cpp:517 +msgid "Normal Overview" +msgstr "Обычнный обзор " + +#: kdiff3.cpp:518 +msgid "A vs. B Overview" +msgstr "Обзор A vs. B" + +#: kdiff3.cpp:519 +msgid "A vs. C Overview" +msgstr "Обзор A vs. C " + +#: kdiff3.cpp:520 +msgid "B vs. C Overview" +msgstr "Обзор B vs. C" + +#: kdiff3.cpp:521 +msgid "Word Wrap Diff Windows" +msgstr "" + +#: kdiff3.cpp:522 +msgid "Add Manual Diff Alignment" +msgstr "" + +#: kdiff3.cpp:523 +msgid "Clear All Manual Diff Alignments" +msgstr "" + +#: kdiff3.cpp:528 +msgid "Focus Prev Window" +msgstr "Ðктивировать предыдущее окно" + +#: kdiff3.cpp:529 +msgid "Toggle Split Orientation" +msgstr "ПоменÑÑ‚ÑŒ Ð¾Ñ€Ð¸ÐµÐ½Ñ‚Ð°Ñ†Ð¸Ñ Ñ€Ð°Ð·Ð´ÐµÐ»ÐµÐ½Ð¸Ñ" + +#: kdiff3.cpp:531 +msgid "Dir && Text Split Screen View" +msgstr "" + +#: kdiff3.cpp:533 +msgid "Toggle Between Dir && Text View" +msgstr "Каталоги/текÑÑ‚" + +#: kdiff3.cpp:582 pdiff.cpp:1712 +msgid "The merge result hasn't been saved." +msgstr "Результат Ð¾Ð±ÑŠÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ Ð½Ðµ Ñохранён" + +#: kdiff3.cpp:583 +msgid "Save && Quit" +msgstr "Сохранить и выйти" + +#: kdiff3.cpp:583 +msgid "Quit Without Saving" +msgstr "Выйти без ÑохранениÑ" + +#: kdiff3.cpp:591 pdiff.cpp:1721 +msgid "Saving the merge result failed." +msgstr "Ðе удалоÑÑŒ Ñохранить результат объединениÑ" + +#: kdiff3.cpp:602 pdiff.cpp:978 +msgid "" +"You are currently doing a directory merge. Are you sure, you want to abort?" +msgstr "ОÑтановить объединение каталогов?" + +#: kdiff3.cpp:625 +msgid "Saving file..." +msgstr "Сохранение файла..." + +#: kdiff3.cpp:642 +msgid "Saving file with a new filename..." +msgstr "Сохранение файла Ñ Ð½Ð¾Ð²Ñ‹Ð¼ именем..." + +#: kdiff3.cpp:732 +#, fuzzy +msgid "Printing..." +msgstr "Выход..." + +#: kdiff3.cpp:738 kdiff3.cpp:900 +msgid "Printing aborted." +msgstr "" + +#: kdiff3.cpp:870 +msgid "Selection" +msgstr "" + +#: kdiff3.cpp:896 +#, fuzzy +msgid "Printing completed." +msgstr "Объединение завершено." + +#: kdiff3.cpp:906 +msgid "Exiting..." +msgstr "Выход..." + +#: kdiff3.cpp:918 +msgid "Toggling toolbar..." +msgstr "Отображение/Ñкрытие панели инÑтрументов..." + +#: kdiff3.cpp:939 +msgid "Toggle the statusbar..." +msgstr "Отображение/Ñкрытие панели ÑоÑтоÑниÑ..." + +#: kdiff3_part.cpp:155 kdiff3_part.cpp:224 +msgid "Couldn't find files for comparison." +msgstr "Ðе удалоÑÑŒ найти файлы Ð´Ð»Ñ ÑравнениÑ." + +#: kdiff3_part.cpp:291 +msgid "KDiff3Part" +msgstr "KDiff3Part" + +#: kdiff3_shell.cpp:78 +msgid "" +"Could not find our part!\n" +"This usually happens due to an installation problem. Please read the " +"README-file in the source package for details." +msgstr "" + +#: main.cpp:35 +msgid "Tool for Comparison and Merge of Files and Directories" +msgstr "" + +#: main.cpp:40 +msgid "Merge the input." +msgstr "Объединить ввод." + +#: main.cpp:42 +msgid "Explicit base file. For compatibility with certain tools." +msgstr "" + +#: main.cpp:44 +msgid "Output file. Implies -m. E.g.: -o newfile.txt" +msgstr "Выходной файл. Подразумевет наличие также -m. Ðапример: -o newfile.txt" + +#: main.cpp:45 +msgid "Output file, again. (For compatibility with certain tools.)" +msgstr "" + +#: main.cpp:46 +msgid "No GUI if all conflicts are auto-solvable. (Needs -o file)" +msgstr "" +"Ðе выводить гафичеÑкий Ð¸Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñ ÐµÑли вÑе конфликты удалоÑÑŒ разрешить " +"автоматичеÑки. (треубет также ключа -o)" + +#: main.cpp:47 +msgid "Don't solve conflicts automatically. (For compatibility...)" +msgstr "Ðе разрешить конфликты автоматичеÑки (Ð´Ð»Ñ ÑовмеÑтимоÑти)" + +#: main.cpp:48 +msgid "Visible name replacement for input file 1 (base)." +msgstr "" + +#: main.cpp:49 +msgid "Visible name replacement for input file 2." +msgstr "" + +#: main.cpp:50 +msgid "Visible name replacement for input file 3." +msgstr "" + +#: main.cpp:52 +msgid "Alternative visible name replacement. Supply this once for every input." +msgstr "" + +#: main.cpp:53 +msgid "" +"Override a config setting. Use once for every setting. E.g.: --cs " +"\"AutoAdvance=1\"" +msgstr "" + +#: main.cpp:54 +msgid "Show list of config settings and current values." +msgstr "" + +#: main.cpp:55 +#, fuzzy +msgid "Use a different config file." +msgstr "КоличеÑтво разных файлов:" + +#: main.cpp:59 +msgid "file1 to open (base, if not specified via --base)" +msgstr "" + +#: main.cpp:60 +msgid "file2 to open" +msgstr "" + +#: main.cpp:61 +msgid "file3 to open" +msgstr "" + +#: main.cpp:93 +msgid "Ignored. (User defined.)" +msgstr "" + +#. i18n: file kdiff3_part.rc line 16 +#: main.cpp:173 rc.cpp:9 +#, no-c-format +msgid "KDiff3" +msgstr "KDiff3" + +#: main.cpp:186 +msgid "+ Many thanks to those who reported bugs and contributed ideas!" +msgstr "" +"Благодарю вÑех, кто отправлÑÑ… отчёты об ошибках и предлагал новые идеи!" + +#: mergeresultwindow.cpp:136 mergeresultwindow.cpp:939 +#: mergeresultwindow.cpp:953 mergeresultwindow.cpp:965 +#: mergeresultwindow.cpp:977 +msgid "Number of remaining unsolved conflicts: %1 (of which %2 are whitespace)" +msgstr "" +"Ðеразрешённых конфликтов оÑталоÑÑŒ: %1 (%2 из которых - конфликты пуÑÑ‚Ñ‹Ñ… " +"промежутков)" + +#: mergeresultwindow.cpp:285 +msgid "" +"The output has been modified.\n" +"If you continue your changes will be lost." +msgstr "" +"Вывод был изменён.\n" +"ЕÑли вы продолжите, Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð±ÑƒÐ´ÑƒÑ‚ утерÑны." + +#: mergeresultwindow.cpp:797 pdiff.cpp:511 +msgid "All input files are binary equal." +msgstr "Ð’Ñе входные файлы одинаковы бинарно" + +#: mergeresultwindow.cpp:799 +msgid "All input files contain the same text." +msgstr "Ð’Ñе входные файлы Ñодержт одинаковый текÑÑ‚" + +#: mergeresultwindow.cpp:801 +msgid "" +"Files A and B are binary equal.\n" +msgstr "" +"Файлы A и B бинарно одинаковы.\n" + +#: mergeresultwindow.cpp:802 +msgid "" +"Files A and B have equal text. \n" +msgstr "" +"Файлы A и B Ñодержат одинаковый текÑÑ‚. \n" + +#: mergeresultwindow.cpp:803 +msgid "" +"Files A and C are binary equal.\n" +msgstr "" +"Файлы A и C бинарно одинаковы.\n" + +#: mergeresultwindow.cpp:804 +msgid "" +"Files A and C have equal text. \n" +msgstr "" +"Файлы A и C Ñодержат одинаковый текÑÑ‚. \n" + +#: mergeresultwindow.cpp:805 +msgid "" +"Files B and C are binary equal.\n" +msgstr "" +"Файлы B и C бинарно одинаковы.\n" + +#: mergeresultwindow.cpp:806 +msgid "" +"Files B and C have equal text. \n" +msgstr "" +"Файлы B и C Ñодержат одинаковый текÑÑ‚. \n" + +#: mergeresultwindow.cpp:812 +msgid "Total number of conflicts: " +msgstr "Общее количеÑтво конфликтов: " + +#: mergeresultwindow.cpp:813 +msgid "" +"\n" +"Nr of automatically solved conflicts: " +msgstr "" +"\n" +"КоличеÑтво разрешённых автоматичеÑки конфликтов: " + +#: mergeresultwindow.cpp:814 +msgid "" +"\n" +"Nr of unsolved conflicts: " +msgstr "" +"\n" +"КоличеÑтво неразрешённых конфликтов: " + +#: mergeresultwindow.cpp:816 +msgid "Conflicts" +msgstr "Конфликты" + +#: mergeresultwindow.cpp:1652 +msgid "" +msgstr "<Ðет иÑходной Ñтроки>" + +#: mergeresultwindow.cpp:1660 +msgid "" +msgstr "<Конфликт Ð¾Ð±ÑŠÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ (пуÑтые промежутки)>" + +#: mergeresultwindow.cpp:1662 mergeresultwindow.cpp:2427 +msgid "" +msgstr "<Конфликт объединениÑ>" + +#: mergeresultwindow.cpp:2635 +msgid "" +"Not all conflicts are solved yet.\n" +"File not saved.\n" +msgstr "" +"Ðе вÑе конфликты разрешены.\n" +"Файл не Ñохранён.\n" + +#: mergeresultwindow.cpp:2637 +msgid "Conflicts Left" +msgstr "ОÑталоÑÑŒ конфликтов" + +#: mergeresultwindow.cpp:2649 +msgid "" +"\n" +"\n" +"Creating backup failed. File not saved." +msgstr "" + +#: mergeresultwindow.cpp:2649 mergeresultwindow.cpp:2689 +msgid "File Save Error" +msgstr "Ошибка ÑÐ¾Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ Ñ„Ð°Ð¹Ð»Ð°" + +#: mergeresultwindow.cpp:2689 +msgid "Error while writing." +msgstr "Ошибка запиÑи" + +#: mergeresultwindow.cpp:3020 +msgid "Output" +msgstr "Вывод" + +#: mergeresultwindow.cpp:3032 mergeresultwindow.cpp:3139 +msgid "[Modified]" +msgstr "[Изменён]" + +#: mergeresultwindow.cpp:3039 +#, fuzzy +msgid "Encoding for saving" +msgstr "Кодировка файла C:" + +#: mergeresultwindow.cpp:3075 mergeresultwindow.cpp:3081 +#: mergeresultwindow.cpp:3087 +msgid "Codec from" +msgstr "" + +#: optiondialog.cpp:362 +msgid "Unicode, 8 bit" +msgstr "" + +#: optiondialog.cpp:363 +msgid "Unicode" +msgstr "" + +#: optiondialog.cpp:364 +msgid "Latin1" +msgstr "" + +#: optiondialog.cpp:383 +msgid "Change this if non-ASCII characters are not displayed correctly." +msgstr "" + +#: optiondialog.cpp:510 +msgid "Editor & Diff Output Font" +msgstr "Шрифт редактора и вывода различий" + +#: optiondialog.cpp:531 +msgid "Italic font for deltas" +msgstr "Ð Ð°Ð·Ð»Ð¸Ñ‡Ð¸Ñ ÐºÑƒÑ€Ñивом" + +#: optiondialog.cpp:534 +msgid "" +"Selects the italic version of the font for differences.\n" +"If the font doesn't support italic characters, then this does nothing." +msgstr "ЕÑли шрифт не Ñодержит курÑива, Ñтот параметр не работает." + +#: optiondialog.cpp:542 +msgid "Color" +msgstr "Цвет" + +#: optiondialog.cpp:542 +#, fuzzy +msgid "Colors Settings" +msgstr "Региональные наÑтройки" + +#: optiondialog.cpp:556 +msgid "Editor and Diff Views:" +msgstr "" + +#: optiondialog.cpp:564 +msgid "Foreground color:" +msgstr "Цвет текÑта:" + +#: optiondialog.cpp:570 +msgid "Background color:" +msgstr "Цвет фона:" + +#: optiondialog.cpp:578 +msgid "Diff background color:" +msgstr "Цвет фона различий:" + +#: optiondialog.cpp:585 +msgid "Color A:" +msgstr "Цвет A:" + +#: optiondialog.cpp:592 +msgid "Color B:" +msgstr "Цвет B:" + +#: optiondialog.cpp:599 +msgid "Color C:" +msgstr "Цвет C:" + +#: optiondialog.cpp:605 +msgid "Conflict color:" +msgstr "Цвет конфликтов:" + +#: optiondialog.cpp:612 +msgid "Current range background color:" +msgstr "" + +#: optiondialog.cpp:619 +msgid "Current range diff background color:" +msgstr "" + +#: optiondialog.cpp:625 +msgid "Color for manually aligned difference ranges:" +msgstr "" + +#: optiondialog.cpp:630 +#, fuzzy +msgid "Directory Comparison View:" +msgstr "СоÑтоÑние ÑÑ€Ð°Ð²Ð½ÐµÐ½Ð¸Ñ ÐºÐ°Ñ‚Ð°Ð»Ð¾Ð³Ð¾Ð²" + +#: optiondialog.cpp:636 +msgid "Newest file color:" +msgstr "" + +#: optiondialog.cpp:639 +msgid "" +"Changing this color will only be effective when starting the next directory " +"comparison." +msgstr "" + +#: optiondialog.cpp:644 +msgid "Oldest file color:" +msgstr "" + +#: optiondialog.cpp:651 +msgid "Middle age file color:" +msgstr "" + +#: optiondialog.cpp:658 +msgid "Color for missing files:" +msgstr "" + +#: optiondialog.cpp:670 +msgid "Editor" +msgstr "Редактор" + +#: optiondialog.cpp:670 +msgid "Editor Behavior" +msgstr "Поведение редактора" + +#: optiondialog.cpp:680 +msgid "Tab inserts spaces" +msgstr "ЗаменÑÑ‚ÑŒ табулÑцию пробелами" + +#: optiondialog.cpp:683 +msgid "" +"On: Pressing tab generates the appropriate number of spaces.\n" +"Off: A Tab-character will be inserted." +msgstr "" + +#: optiondialog.cpp:689 +msgid "Tab size:" +msgstr "ТабулÑциÑ:" + +#: optiondialog.cpp:694 +msgid "Auto indentation" +msgstr "ПроÑтавлÑÑ‚ÑŒ отÑтупы автоматичеÑки" + +#: optiondialog.cpp:697 +msgid "" +"On: The indentation of the previous line is used for a new line.\n" +msgstr "" + +#: optiondialog.cpp:701 +msgid "Auto copy selection" +msgstr "Копировать выделение в буфер обмена автоматичеÑки" + +#: optiondialog.cpp:704 +msgid "" +"On: Any selection is immediately written to the clipboard.\n" +"Off: You must explicitely copy e.g. via Ctrl-C." +msgstr "" + +#: optiondialog.cpp:709 +msgid "Line end style:" +msgstr "Конец Ñтроки:" + +#: optiondialog.cpp:721 +msgid "" +"Sets the line endings for when an edited file is saved.\n" +"DOS/Windows: CR+LF; UNIX: LF; with CR=0D, LF=0A" +msgstr "" + +#: optiondialog.cpp:732 +#, fuzzy +msgid "Diff" +msgstr "KDiff3" + +#: optiondialog.cpp:732 +#, fuzzy +msgid "Diff Settings" +msgstr "ÐаÑтройки ÑÑ€Ð°Ð²Ð½ÐµÐ½Ð¸Ñ Ð¸ объединениÑ" + +#: optiondialog.cpp:743 +msgid "Preserve carriage return" +msgstr "Отображать Ñимвол перевода каретки" + +#: optiondialog.cpp:746 +msgid "" +"Show carriage return characters '\\r' if they exist.\n" +"Helps to compare files that were modified under different operating systems." +msgstr "" + +#: optiondialog.cpp:751 +msgid "Ignore numbers" +msgstr "ПропуÑкать цифры" + +#: optiondialog.cpp:754 +msgid "" +"Ignore number characters during line matching phase. (Similar to Ignore white " +"space.)\n" +"Might help to compare files with numeric data." +msgstr "" + +#: optiondialog.cpp:759 +msgid "Ignore C/C++ comments" +msgstr "ПропуÑкать комментарии C/C++" + +#: optiondialog.cpp:761 +msgid "Treat C/C++ comments like white space." +msgstr "Обрабатывать комментарии C/C++ как пробелы." + +#: optiondialog.cpp:765 +msgid "Ignore case" +msgstr "Без учёта региÑтра" + +#: optiondialog.cpp:768 +msgid "Treat case differences like white space changes. ('a'<=>'A')" +msgstr "" + +#: optiondialog.cpp:772 +msgid "Preprocessor command:" +msgstr "ÐŸÑ€ÐµÐ´Ð²Ð°Ñ€Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð°Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð°:" + +#: optiondialog.cpp:776 +msgid "User defined pre-processing. (See the docs for details.)" +msgstr "" +"ÐŸÑ€ÐµÐ´Ð²Ð°Ñ€Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð°Ñ Ð¾Ð±Ñ€Ð°Ð±Ð¾Ñ‚ÐºÐ°, определÑÐµÐ¼Ð°Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»ÐµÐ¼ (Ð´Ð»Ñ Ð¿Ð¾Ð´Ñ€Ð¾Ð±Ð½Ð¾Ñтей Ñм. " +"документацию)." + +#: optiondialog.cpp:779 +msgid "Line-matching preprocessor command:" +msgstr "ÐŸÑ€ÐµÐ´Ð²Ð°Ñ€Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð°Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð° Ð´Ð»Ñ ÑÑ€Ð°Ð²Ð½ÐµÐ½Ð¸Ñ Ñтрок:" + +#: optiondialog.cpp:783 +msgid "" +"This pre-processor is only used during line matching.\n" +"(See the docs for details.)" +msgstr "" + +#: optiondialog.cpp:786 +msgid "Try hard (slower)" +msgstr "ЗадейÑтвовать вÑе алгоритмы (медленно)" + +#: optiondialog.cpp:789 +msgid "" +"Enables the --minimal option for the external diff.\n" +"The analysis of big files will be much slower." +msgstr "" + +#: optiondialog.cpp:794 +msgid "Auto advance delay (ms):" +msgstr "Задержка перед переходом, мÑ:" + +#: optiondialog.cpp:799 +msgid "" +"When in Auto-Advance mode the result of the current selection is shown \n" +"for the specified time, before jumping to the next conflict. Range: 0-2000 ms" +msgstr "" +"Показывать результат текущего выбора на некоторое времÑ, а затем переходить к " +"Ñледующему конфликту. Диапазон: 0..2000 мÑ" + +#: optiondialog.cpp:809 +#, fuzzy +msgid "Merge Settings" +msgstr "ÐаÑтройки ÑÑ€Ð°Ð²Ð½ÐµÐ½Ð¸Ñ Ð¸ объединениÑ" + +#: optiondialog.cpp:822 +msgid "White space 2-file merge default:" +msgstr "" + +#: optiondialog.cpp:826 optiondialog.cpp:839 +msgid "Manual Choice" +msgstr "Выбор вручную" + +#: optiondialog.cpp:830 optiondialog.cpp:844 +msgid "" +"Allow the merge algorithm to automatically select an input for white-space-only " +"changes." +msgstr "" + +#: optiondialog.cpp:835 +msgid "White space 3-file merge default:" +msgstr "" + +#: optiondialog.cpp:849 +msgid "Automatic Merge Regular Expression" +msgstr "" + +#: optiondialog.cpp:858 smalldialogs.cpp:397 +msgid "Auto merge regular expression:" +msgstr "" + +#: optiondialog.cpp:862 +msgid "" +"Regular expression for lines where KDiff3 should automatically choose one " +"source.\n" +"When a line with a conflict matches the regular expression then\n" +"- if available - C, otherwise B will be chosen." +msgstr "" + +#: optiondialog.cpp:868 +msgid "Run regular expression auto merge on merge start" +msgstr "" + +#: optiondialog.cpp:870 +msgid "" +"Run the merge for auto merge regular expressions\n" +"immediately when a merge starts.\n" +msgstr "" + +#: optiondialog.cpp:875 +msgid "Version Control History Merging" +msgstr "" + +#: optiondialog.cpp:884 smalldialogs.cpp:424 +msgid "History start regular expression:" +msgstr "" + +#: optiondialog.cpp:888 +msgid "" +"Regular expression for the start of the version control history entry.\n" +"Usually this line contains the \"$Log$\"-keyword.\n" +"Default value: \".*\\$Log.*\\$.*\"" +msgstr "" + +#: optiondialog.cpp:894 smalldialogs.cpp:453 +msgid "History entry start regular expression:" +msgstr "" + +#: optiondialog.cpp:906 +msgid "" +"A version control history entry consists of several lines.\n" +"Specify the regular expression to detect the first line (without the leading " +"comment).\n" +"Use parentheses to group the keys you want to use for sorting.\n" +"If left empty, then KDiff3 assumes that empty lines separate history entries.\n" +"See the documentation for details." +msgstr "" + +#: optiondialog.cpp:914 +msgid "History merge sorting" +msgstr "" + +#: optiondialog.cpp:916 +msgid "Sort version control history by a key." +msgstr "" + +#: optiondialog.cpp:926 +msgid "History entry start sort key order:" +msgstr "" + +#: optiondialog.cpp:930 +msgid "" +"Each parentheses used in the regular expression for the history start entry\n" +"groups a key that can be used for sorting.\n" +"Specify the list of keys (that are numbered in order of occurrence\n" +"starting with 1) using ',' as separator (e.g. \"4,5,6,1,2,3,7\").\n" +"If left empty, then no sorting will be done.\n" +"See the documentation for details." +msgstr "" + +#: optiondialog.cpp:941 +msgid "Merge version control history on merge start" +msgstr "" + +#: optiondialog.cpp:943 +msgid "Run version control history automerge on merge start." +msgstr "" + +#: optiondialog.cpp:947 +msgid "Test your regular expressions" +msgstr "" + +#: optiondialog.cpp:952 +msgid "Irrelevant merge command:" +msgstr "" + +#: optiondialog.cpp:956 +msgid "" +"If specified this script is run after automerge\n" +"when no other relevant changes were detected.\n" +"Called with the parameters: filename1 filename2 filename3" +msgstr "" + +#: optiondialog.cpp:966 +msgid "Directory Merge" +msgstr "Объединение каталогов" + +#: optiondialog.cpp:975 +msgid "Recursive directories" +msgstr "РекурÑиÑ" + +#: optiondialog.cpp:977 +msgid "Whether to analyze subdirectories or not." +msgstr "" + +#: optiondialog.cpp:979 +msgid "File pattern(s):" +msgstr "МаÑки файлов:" + +#: optiondialog.cpp:984 +msgid "" +"Pattern(s) of files to be analyzed. \n" +"Wildcards: '*' and '?'\n" +"Several Patterns can be specified by using the separator: ';'" +msgstr "" + +#: optiondialog.cpp:990 +msgid "File-anti-pattern(s):" +msgstr "ПропуÑкать файлы по маÑке:" + +#: optiondialog.cpp:995 +msgid "" +"Pattern(s) of files to be excluded from analysis. \n" +"Wildcards: '*' and '?'\n" +"Several Patterns can be specified by using the separator: ';'" +msgstr "" + +#: optiondialog.cpp:1001 +msgid "Dir-anti-pattern(s):" +msgstr "ПропуÑкать каталоги по маÑке:" + +#: optiondialog.cpp:1006 +msgid "" +"Pattern(s) of directories to be excluded from analysis. \n" +"Wildcards: '*' and '?'\n" +"Several Patterns can be specified by using the separator: ';'" +msgstr "" + +#: optiondialog.cpp:1012 +msgid "Use .cvsignore" +msgstr "ИÑпользовать .cvsignore" + +#: optiondialog.cpp:1015 +msgid "" +"Extends the antipattern to anything that would be ignored by CVS.\n" +"Via local \".cvsignore\"-files this can be directory specific." +msgstr "" + +#: optiondialog.cpp:1020 +msgid "Find hidden files and directories" +msgstr "Учитывать Ñкрытые файлы и каталоги" + +#: optiondialog.cpp:1023 +msgid "Finds files and directories with the hidden attribute." +msgstr "" + +#: optiondialog.cpp:1025 +msgid "Finds files and directories starting with '.'." +msgstr "Учитывать файлы и каталоги, начинающиеÑÑ Ñ '.'." + +#: optiondialog.cpp:1029 +msgid "Follow file links" +msgstr "Следовать по ÑÑылкам на файлы" + +#: optiondialog.cpp:1032 +msgid "" +"On: Compare the file the link points to.\n" +"Off: Compare the links." +msgstr "" + +#: optiondialog.cpp:1037 +msgid "Follow directory links" +msgstr "Следовать по ÑÑылкам на каталоги" + +#: optiondialog.cpp:1040 +msgid "" +"On: Compare the directory the link points to.\n" +"Off: Compare the links." +msgstr "" + +#: optiondialog.cpp:1056 +msgid "Case sensitive filename comparison" +msgstr "" + +#: optiondialog.cpp:1059 +msgid "" +"The directory comparison will compare files or directories when their names " +"match.\n" +"Set this option if the case of the names must match. (Default for Windows is " +"off, otherwise on.)" +msgstr "" + +#: optiondialog.cpp:1063 +msgid "File Comparison Mode" +msgstr "Режим ÑÑ€Ð°Ð²Ð½Ð¸Ð²Ð°Ð½Ð¸Ñ Ñ„Ð°Ð¹Ð»Ð¾Ð²" + +#: optiondialog.cpp:1067 +msgid "Binary comparison" +msgstr "Бинарное Ñравнение" + +#: optiondialog.cpp:1068 +msgid "Binary comparison of each file. (Default)" +msgstr "Бинарное Ñравнение каждого файла (по умолчанию)" + +#: optiondialog.cpp:1070 +msgid "Full analysis" +msgstr "Полный анализ" + +#: optiondialog.cpp:1071 +msgid "" +"Do a full analysis and show statistics information in extra columns.\n" +"(Slower than a binary comparison, much slower for binary files.)" +msgstr "" + +#: optiondialog.cpp:1074 +msgid "Trust the modification date (unsafe)" +msgstr "Сравнивать по дате Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ (неточно)" + +#: optiondialog.cpp:1075 +msgid "" +"Assume that files are equal if the modification date and file length are " +"equal.\n" +"Useful for big directories or slow networks." +msgstr "" +"Считать файлы одинаковыми, еÑли Ð²Ñ€ÐµÐ¼Ñ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð¸ размер Ñовпадают.\n" +"Полезно Ð´Ð»Ñ Ð±Ð¾Ð»ÑŒÑˆÐ¸Ñ… каталогов или медленных Ñетей." + +#: optiondialog.cpp:1078 +msgid "Trust the size (unsafe)" +msgstr "Сравнивать по размеру (неточно)" + +#: optiondialog.cpp:1079 +msgid "" +"Assume that files are equal if their file lengths are equal.\n" +"Useful for big directories or slow networks when the date is modified during " +"download." +msgstr "" + +#: optiondialog.cpp:1083 +msgid "Synchronize directories" +msgstr "Синхронизировать каталоги" + +#: optiondialog.cpp:1086 +msgid "" +"Offers to store files in both directories so that\n" +"both directories are the same afterwards.\n" +"Works only when comparing two directories without specifying a destination." +msgstr "" + +#: optiondialog.cpp:1092 +msgid "White space differences considered equal" +msgstr "" + +#: optiondialog.cpp:1095 +msgid "" +"If files differ only by white space consider them equal.\n" +"This is only active when full analysis is chosen." +msgstr "" + +#: optiondialog.cpp:1101 +msgid "Copy newer instead of merging (unsafe)" +msgstr "Принимать Ñразу новые файлы вмеÑто Ð¾Ð±ÑŠÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ (небезопаÑно)" + +#: optiondialog.cpp:1104 +msgid "" +"Don't look inside, just take the newer file.\n" +"(Use this only if you know what you are doing!)\n" +"Only effective when comparing two directories." +msgstr "" + +#: optiondialog.cpp:1109 +msgid "Backup files (.orig)" +msgstr "Сохранить резервные копии (.orig)" + +#: optiondialog.cpp:1112 +msgid "" +"When a file would be saved over an old file, then the old file\n" +"will be renamed with a '.orig'-extension instead of being deleted." +msgstr "" + +#: optiondialog.cpp:1176 +msgid "Regional Settings" +msgstr "Региональные наÑтройки" + +#: optiondialog.cpp:1272 +msgid "Language (restart required)" +msgstr "Язык (требуетÑÑ Ð¿ÐµÑ€ÐµÐ·Ð°Ð¿ÑƒÑк)" + +#: optiondialog.cpp:1304 +msgid "" +"Choose the language of the GUI-strings or \"Auto\".\n" +"For a change of language to take place, quit and restart KDiff3." +msgstr "" + +#: optiondialog.cpp:1322 +msgid "Use the same encoding for everything:" +msgstr "" + +#: optiondialog.cpp:1325 +msgid "" +"Enable this allows to change all encodings by changing the first only.\n" +"Disable this if different individual settings are needed." +msgstr "" + +#: optiondialog.cpp:1330 +msgid "Note: Local Encoding is " +msgstr "Кодировку локали - " + +#: optiondialog.cpp:1334 +msgid "File Encoding for A:" +msgstr "Кодировка файла A:" + +#: optiondialog.cpp:1340 +msgid "" +"If enabled then Unicode (UTF-16 or UTF-8) encoding will be detected.\n" +"If the file encoding is not detected then the selected encoding will be used as " +"fallback.\n" +"(Unicode detection depends on the first bytes of a file - the byte order mark " +"\"BOM\".)" +msgstr "" + +#: optiondialog.cpp:1344 optiondialog.cpp:1353 optiondialog.cpp:1362 +msgid "Auto Detect Unicode" +msgstr "" + +#: optiondialog.cpp:1349 +msgid "File Encoding for B:" +msgstr "Кодировка файла B:" + +#: optiondialog.cpp:1358 +msgid "File Encoding for C:" +msgstr "Кодировка файла C:" + +#: optiondialog.cpp:1367 +msgid "File Encoding for Merge Output and Saving:" +msgstr "Кодировка Ð´Ð»Ñ Ð¾Ð±ÑŠÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ Ð¸ ÑохранениÑ:" + +#: optiondialog.cpp:1371 +#, fuzzy +msgid "Auto Select" +msgstr "Копировать выделение в буфер обмена автоматичеÑки" + +#: optiondialog.cpp:1374 +msgid "" +"If enabled then the encoding from the input files is used.\n" +"In ambiguous cases a dialog will ask the user to choose the encoding for " +"saving." +msgstr "" + +#: optiondialog.cpp:1378 +msgid "File Encoding for Preprocessor Files:" +msgstr "Кодировка препроцеÑÑора:" + +#: optiondialog.cpp:1389 +msgid "Right To Left Language" +msgstr "" + +#: optiondialog.cpp:1392 +msgid "" +"Some languages are read from right to left.\n" +"This setting will change the viewer and editor accordingly." +msgstr "" + +#: optiondialog.cpp:1402 +#, fuzzy +msgid "Integration" +msgstr "ДейÑтвие" + +#: optiondialog.cpp:1402 +#, fuzzy +msgid "Integration Settings" +msgstr "Региональные наÑтройки" + +#: optiondialog.cpp:1412 +msgid "Command line options to ignore:" +msgstr "" + +#: optiondialog.cpp:1417 +msgid "" +"List of command line options that should be ignored when KDiff3 is used by " +"other tools.\n" +"Several values can be specified if separated via ';'\n" +"This will suppress the \"Unknown option\"-error." +msgstr "" + +#: optiondialog.cpp:1480 +msgid "" +"You selected a variable width font.\n" +"\n" +"Because this program doesn't handle variable width fonts\n" +"correctly, you might experience problems while editing.\n" +"\n" +"Do you want to continue or do you want to select another font." +msgstr "" + +#: optiondialog.cpp:1484 +msgid "Incompatible Font" +msgstr "ÐеÑовмеÑтимый шрифт" + +#: optiondialog.cpp:1485 +msgid "Continue at Own Risk" +msgstr "Продолжить" + +#: optiondialog.cpp:1485 +msgid "Select Another Font" +msgstr "Выбрать другой шрифт" + +#: optiondialog.cpp:1521 +msgid "This resets all options. Not only those of the current topic." +msgstr "Это ÑброÑит абÑолютно вÑе параметры, а не только текущей вкладки." + +#: pdiff.cpp:258 +msgid "PreprocessorCmd: " +msgstr "ÐŸÑ€ÐµÐ´Ð²Ð°Ñ€Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð°Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð°:" + +#: pdiff.cpp:263 +msgid "" +"The following option(s) you selected might change data:\n" +msgstr "" + +#: pdiff.cpp:264 +msgid "" +"\n" +"Most likely this is not wanted during a merge.\n" +"Do you want to disable these settings or continue with these settings active?" +msgstr "" + +#: pdiff.cpp:266 +msgid "Option Unsafe for Merging" +msgstr "" + +#: pdiff.cpp:267 +msgid "Use These Options During Merge" +msgstr "" + +#: pdiff.cpp:267 +msgid "Disable Unsafe Options" +msgstr "Отключить небезопаÑные" + +#: pdiff.cpp:297 +msgid "Loading A" +msgstr "Загрузка A" + +#: pdiff.cpp:301 +msgid "Loading B" +msgstr "Загрузка B" + +#: pdiff.cpp:318 pdiff.cpp:344 +msgid "Diff: A <-> B" +msgstr "Различие: A <-> B" + +#: pdiff.cpp:324 pdiff.cpp:366 +msgid "Linediff: A <-> B" +msgstr "ПоÑтрочное Ñравнение: A <-> B" + +#: pdiff.cpp:335 +msgid "Loading C" +msgstr "Загрузка C" + +#: pdiff.cpp:347 +msgid "Diff: B <-> C" +msgstr "Различие: B <-> C" + +#: pdiff.cpp:350 +msgid "Diff: A <-> C" +msgstr "Различие: A <-> C" + +#: pdiff.cpp:369 +msgid "Linediff: B <-> C" +msgstr "ПоÑтрочное Ñравнение: B <-> C" + +#: pdiff.cpp:372 +msgid "Linediff: A <-> C" +msgstr "ПоÑтрочное Ñравнение: A <-> C" + +#: pdiff.cpp:513 +#, fuzzy +msgid "All input files contain the same text, but are not binary equal." +msgstr "Ð’Ñе входные файлы Ñодержт одинаковый текÑÑ‚" + +#: pdiff.cpp:515 pdiff.cpp:517 pdiff.cpp:519 +#, fuzzy +msgid "" +"Files %1 and %2 are binary equal.\n" +msgstr "" +"Файлы B и C бинарно одинаковы.\n" + +#: pdiff.cpp:516 pdiff.cpp:518 pdiff.cpp:520 +#, fuzzy +msgid "" +"Files %1 and %2 have equal text, but are not binary equal. \n" +msgstr "" +"Файлы A и B бинарно одинаковы.\n" + +#: pdiff.cpp:530 +msgid "" +"Some inputfiles don't seem to be pure textfiles.\n" +"Note that the KDiff3-merge was not meant for binary data.\n" +"Continue at your own risk." +msgstr "" + +#: pdiff.cpp:979 +msgid "Abort" +msgstr "Стоп" + +#: pdiff.cpp:985 pdiff.cpp:1073 +msgid "Opening files..." +msgstr "Открытие файлов..." + +#: pdiff.cpp:1050 pdiff.cpp:1121 +msgid "File open error" +msgstr "Ошибка Ð¾Ñ‚ÐºÑ€Ñ‹Ñ‚Ð¸Ñ Ñ„Ð°Ð¹Ð»Ð°" + +#: pdiff.cpp:1153 +msgid "Cutting selection..." +msgstr "Вырезание в буфер обмена..." + +#: pdiff.cpp:1174 +msgid "Copying selection to clipboard..." +msgstr "Копирование в буфер обмена..." + +#: pdiff.cpp:1190 +msgid "Inserting clipboard contents..." +msgstr "Ð’Ñтавка из буфера обмена..." + +#: pdiff.cpp:1713 +msgid "Save && Continue" +msgstr "Сохранить и продолжить" + +#: pdiff.cpp:1713 +msgid "Continue Without Saving" +msgstr "Продолжить без ÑохранениÑ" + +#: pdiff.cpp:1920 +msgid "Search complete." +msgstr "ПоиÑк завершён." + +#: pdiff.cpp:1920 +msgid "Search Complete" +msgstr "ПоиÑк завершён" + +#: pdiff.cpp:2144 +msgid "Nothing is selected in either diff input window." +msgstr "" + +#: pdiff.cpp:2144 +#, fuzzy +msgid "Error while adding manual diff range" +msgstr "Ðе удалоÑÑŒ Ñоздать каталог" + +#. i18n: file kdiff3_part.rc line 4 +#: rc.cpp:3 +#, no-c-format +msgid "&KDiff3" +msgstr "&KDiff3" + +#. i18n: file kdiff3_part.rc line 13 +#: rc.cpp:6 +#, no-c-format +msgid "Configure KDiff3" +msgstr "ÐаÑтроить KDiff3" + +#. i18n: file kdiff3_shell.rc line 7 +#: rc.cpp:15 +#, no-c-format +msgid "&Directory" +msgstr "&Каталог" + +#. i18n: file kdiff3_shell.rc line 30 +#: rc.cpp:18 +#, no-c-format +msgid "Current Item Merge Operation" +msgstr "" + +#. i18n: file kdiff3_shell.rc line 38 +#: rc.cpp:21 +#, no-c-format +msgid "Current Item Sync Operation" +msgstr "" + +#. i18n: file kdiff3_shell.rc line 50 +#: rc.cpp:24 +#, no-c-format +msgid "&Movement" +msgstr "&Перемещение" + +#. i18n: file kdiff3_shell.rc line 61 +#: rc.cpp:27 +#, no-c-format +msgid "D&iffview" +msgstr "D&iff" + +#. i18n: file kdiff3_shell.rc line 73 +#: rc.cpp:30 +#, no-c-format +msgid "&Merge" +msgstr "&Объединение" + +#. i18n: file kdiff3_shell.rc line 95 +#: rc.cpp:33 +#, no-c-format +msgid "&Window" +msgstr "&Окно" + +#: smalldialogs.cpp:53 +msgid "A (Base):" +msgstr "A (иÑходное):" + +#: smalldialogs.cpp:59 smalldialogs.cpp:75 smalldialogs.cpp:91 +#: smalldialogs.cpp:134 +msgid "File..." +msgstr "Файл..." + +#: smalldialogs.cpp:61 smalldialogs.cpp:77 smalldialogs.cpp:93 +#: smalldialogs.cpp:136 +msgid "Dir..." +msgstr "Каталог..." + +#: smalldialogs.cpp:86 +msgid "C (Optional):" +msgstr "С (необÑзательно):" + +#: smalldialogs.cpp:108 +msgid "Swap/Copy Names ..." +msgstr "" + +#: smalldialogs.cpp:114 smalldialogs.cpp:115 smalldialogs.cpp:116 +msgid "Swap %1<->%2" +msgstr "" + +#: smalldialogs.cpp:117 smalldialogs.cpp:118 smalldialogs.cpp:119 +msgid "Copy %1->Output" +msgstr "" + +#: smalldialogs.cpp:120 smalldialogs.cpp:121 smalldialogs.cpp:122 +msgid "Swap %1<->Output" +msgstr "" + +#: smalldialogs.cpp:129 +msgid "Output (optional):" +msgstr "Вывод (необÑзательно):" + +#: smalldialogs.cpp:158 +msgid "Configure..." +msgstr "ÐаÑтроить..." + +#: smalldialogs.cpp:347 +msgid "Search text:" +msgstr "Ðайти:" + +#: smalldialogs.cpp:354 +msgid "Case sensitive" +msgstr "С учётом региÑтра" + +#: smalldialogs.cpp:357 +msgid "Search A" +msgstr "ПоиÑк в A" + +#: smalldialogs.cpp:362 +msgid "Search B" +msgstr "ПоиÑк в B" + +#: smalldialogs.cpp:367 +msgid "Search C" +msgstr "ПоиÑк в C" + +#: smalldialogs.cpp:372 +msgid "Search output" +msgstr "ПоиÑк в выводе" + +#: smalldialogs.cpp:377 +msgid "&Search" +msgstr "&ИÑкать" + +#: smalldialogs.cpp:394 +msgid "Regular Expression Tester" +msgstr "" + +#: smalldialogs.cpp:405 +msgid "Example auto merge line:" +msgstr "" + +#: smalldialogs.cpp:407 +msgid "For auto merge test copy a line as used in your files." +msgstr "" + +#: smalldialogs.cpp:413 smalldialogs.cpp:442 smalldialogs.cpp:479 +msgid "Match result:" +msgstr "" + +#: smalldialogs.cpp:432 +msgid "Example history start line (with leading comment):" +msgstr "" + +#: smalldialogs.cpp:435 +msgid "" +"Copy a history start line as used in your files,\n" +"including the leading comment." +msgstr "" + +#: smalldialogs.cpp:461 +msgid "History sort key order:" +msgstr "" + +#: smalldialogs.cpp:469 +msgid "Example history entry start line (without leading comment):" +msgstr "" + +#: smalldialogs.cpp:471 +msgid "" +"Copy a history entry start line as used in your files,\n" +"but omit the leading comment." +msgstr "" + +#: smalldialogs.cpp:486 +msgid "Sort key result:" +msgstr "" + +#: smalldialogs.cpp:537 smalldialogs.cpp:547 smalldialogs.cpp:568 +msgid "Match success." +msgstr "" + +#: smalldialogs.cpp:541 smalldialogs.cpp:551 smalldialogs.cpp:574 +#, fuzzy +msgid "Match failed." +msgstr "Ðе удалоÑÑŒ произвеÑти Ñохранение." + +#: smalldialogs.cpp:559 +msgid "Opening and closing parentheses don't match in regular expression." +msgstr "" + +#, fuzzy +#~ msgid "Diff and Merge" +#~ msgstr "Сравнить и объединить" + +#, fuzzy +#~ msgid "Save Directory Merge State ..." +#~ msgstr "Объединение каталогов" + +#, fuzzy +#~ msgid "Load Directory Merge State ..." +#~ msgstr "Объединение каталогов" + +#, fuzzy +#~ msgid "Synchronize Directories" +#~ msgstr "Синхронизировать каталоги" + +#, fuzzy +#~ msgid "Copy Newer Files Instead of Merging" +#~ msgstr "Принимать Ñразу новые файлы вмеÑто Ð¾Ð±ÑŠÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ (небезопаÑно)" + +#~ msgid "List only deltas" +#~ msgstr "Только различиÑ" + +#, fuzzy +#~ msgid "no selection" +#~ msgstr "Копировать выделение в буфер обмена автоматичеÑки" + +#, fuzzy +#~ msgid "Manually match lines" +#~ msgstr "Выбор вручную" + +#~ msgid "Has no effect. For compatibility with certain tools." +#~ msgstr "Ð”Ð»Ñ ÑовмеÑтимоÑти Ñ Ð½ÐµÐºÐ¾Ñ‚Ð¾Ñ€Ñ‹Ð¼Ð¸ ÑредÑтвами." + +#~ msgid "For compatibility with certain tools." +#~ msgstr "Ð”Ð»Ñ ÑовмеÑтимоÑти Ñ Ð½ÐµÐºÐ¾Ñ‚Ð¾Ñ€Ñ‹Ð¼Ð¸ ÑредÑтвами." + +#~ msgid "Colors in Editor & Diff Output" +#~ msgstr "Цвета редактора и вывода различий" diff --git a/po/rw.po b/po/rw.po new file mode 100644 index 0000000..afc7937 --- /dev/null +++ b/po/rw.po @@ -0,0 +1,2875 @@ +# translation of kdiff3 to Kinyarwanda. +# Copyright (C) +# This file is distributed under the same license as the kdiff3 package. +# Steve Murphy , 2005. +# Steve performed initial rough translation from compendium built from translations provided by the following translators: +# Philibert Ndandali , 2005. +# Viateur MUGENZI , 2005. +# Noëlla Mupole , 2005. +# Carole Karema , 2005. +# JEAN BAPTISTE NGENDAHAYO , 2005. +# Augustin KIBERWA , 2005. +# Donatien NSENGIYUMVA , 2005. +# Antoine Bigirimana , 2005. +# +msgid "" +msgstr "" +"Project-Id-Version: kdiff3 3.4\n" +"POT-Creation-Date: 2006-11-05 08:45+0100\n" +"PO-Revision-Date: 2005-05-25 18:07-0600\n" +"Last-Translator: Steve Murphy \n" +"Language-Team: Kinyarwanda \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: _translatorinfo.cpp:1 +msgid "" +"_: NAME OF TRANSLATORS\n" +"Your names" +msgstr "" +"Viateur MUGENZI, JEAN BAPTISTE NGENDAHAYO, Augustin KIBERWA, Donatien " +"NSENGIYUMVA" + +#: _translatorinfo.cpp:3 +msgid "" +"_: EMAIL OF TRANSLATORS\n" +"Your emails" +msgstr "" +"muvia1@yahoo.fr, ngenda_denis@yahoo.co.uk, akiberwa@yahoo.co.uk, " +"ndonatienuk@yahoo.co.uk" + +#: diff.cpp:246 +#, fuzzy +msgid "Writing clipboard data to temp file failed." +msgstr "Ububikokoporora Ibyatanzwe Kuri Idosiye Byanze . " + +#: diff.cpp:250 +#, fuzzy +msgid "From Clipboard" +msgstr "Ububikokoporora" + +#: diff.cpp:491 +#, fuzzy +msgid "" +"Preprocessing possibly failed. Check this command:\n" +"\n" +" %1\n" +"\n" +"The preprocessing command will be disabled now." +msgstr "" +"Byanze . iyi command : \n" +"\n" +"%1 \n" +"\n" +"command Yahagaritswe NONEAHA . " + +#: diff.cpp:526 +#, fuzzy +msgid "" +"The line-matching-preprocessing possibly failed. Check this command:\n" +"\n" +" %1\n" +"\n" +"The line-matching-preprocessing command will be disabled now." +msgstr "" +"Umurongo: - - Byanze . iyi command : \n" +"\n" +"%1 \n" +"\n" +"Umurongo: - - command Yahagaritswe NONEAHA . " + +#: diff.cpp:1631 diff.cpp:1645 +#, fuzzy +msgid "" +"Data loss error:\n" +"If it is reproducable please contact the author.\n" +msgstr "" +"Ikosa : \n" +"ni Umuntu i Umwanditsi: . \n" + +#: diff.cpp:1633 diff.cpp:1647 +#, fuzzy +msgid "Severe Internal Error" +msgstr "Ikosa " + +#: difftextwindow.cpp:1643 kdiff3.cpp:753 +#, fuzzy +msgid "Top line" +msgstr "Umurongo: %1 " + +#: difftextwindow.cpp:1653 +msgid "End" +msgstr "Impera" + +#: directorymergewindow.cpp:142 +#, fuzzy +msgid "Mix of links and normal files." +msgstr "Bya amahuza na Bisanzwe Idosiye . " + +#: directorymergewindow.cpp:149 +#, fuzzy +msgid "Link: " +msgstr "Ihuza..." + +#: directorymergewindow.cpp:157 +#, fuzzy +msgid "Size. " +msgstr "Ingano:" + +#: directorymergewindow.cpp:170 +#, fuzzy +msgid "Date & Size: " +msgstr "Itariki & Igihe" + +#: directorymergewindow.cpp:179 directorymergewindow.cpp:185 +#, fuzzy +msgid "Creating temp copy of %1 failed." +msgstr "Gukoporora Bya %1 Byanze . " + +#: directorymergewindow.cpp:196 directorymergewindow.cpp:204 +#, fuzzy +msgid "Opening %1 failed." +msgstr "%1 Byanze . " + +#: directorymergewindow.cpp:208 +#, fuzzy +msgid "Comparing file..." +msgstr "Idosiye ... " + +#: directorymergewindow.cpp:218 directorymergewindow.cpp:224 +#, fuzzy, c-format +msgid "Error reading from %1" +msgstr "Ikosa Kuva: %1 " + +#: directorymergewindow.cpp:282 +msgid "Name" +msgstr "Izina" + +#: directorymergewindow.cpp:286 +msgid "Operation" +msgstr "Igikorwa" + +#: directorymergewindow.cpp:287 +msgid "Status" +msgstr "Imimerere" + +#: directorymergewindow.cpp:288 +#, fuzzy +msgid "Unsolved" +msgstr "Kidakoreshwa" + +#: directorymergewindow.cpp:289 +#, fuzzy +msgid "Solved" +msgstr "Gikomeye" + +#: directorymergewindow.cpp:290 +#, fuzzy +msgid "Nonwhite" +msgstr "Nta na kimwe" + +#: directorymergewindow.cpp:291 +msgid "White" +msgstr "Umweru" + +#: directorymergewindow.cpp:319 +#, fuzzy +msgid "" +"You are currently doing a directory merge. Are you sure, you want to abort the " +"merge and rescan the directory?" +msgstr "A Ububiko Gukomatanya . , Kuri Kureka i Gukomatanya na i Ububiko ? " + +#: directorymergewindow.cpp:320 directorymergewindow.cpp:2868 +#, fuzzy +msgid "Rescan" +msgstr "Urukiramende" + +#: directorymergewindow.cpp:320 kdiff3.cpp:603 pdiff.cpp:979 +#, fuzzy +msgid "Continue Merging" +msgstr "Gukomeza " + +#: directorymergewindow.cpp:462 +#, fuzzy +msgid "Opening of directories failed:" +msgstr "Bya ububiko bw'amaderese Byanze : " + +#: directorymergewindow.cpp:465 +#, fuzzy +msgid "" +"Dir A \"%1\" does not exist or is not a directory.\n" +msgstr "" +"A \" %1 \" OYA Cyangwa ni OYA A Ububiko . \n" + +#: directorymergewindow.cpp:468 +#, fuzzy +msgid "" +"Dir B \"%1\" does not exist or is not a directory.\n" +msgstr "" +"\" %1 \" OYA Cyangwa ni OYA A Ububiko . \n" + +#: directorymergewindow.cpp:471 +#, fuzzy +msgid "" +"Dir C \"%1\" does not exist or is not a directory.\n" +msgstr "" +"\" %1 \" OYA Cyangwa ni OYA A Ububiko . \n" + +#: directorymergewindow.cpp:473 +#, fuzzy +msgid "Directory Open Error" +msgstr "Gufungura Ikosa " + +#: directorymergewindow.cpp:481 +#, fuzzy +msgid "" +"The destination directory must not be the same as A or B when three directories " +"are merged.\n" +"Check again before continuing." +msgstr "" +"Ishyika: Ububiko OYA i Nka A Cyangwa Ryari: ububiko bw'amaderese . \n" +"Nanone Mbere . " + +#: directorymergewindow.cpp:483 +#, fuzzy +msgid "Parameter Warning" +msgstr "Kuburira bijyanye na mucapyi" + +#: directorymergewindow.cpp:488 +#, fuzzy +msgid "Scanning directories..." +msgstr "ububiko bw'amaderese ... " + +#: directorymergewindow.cpp:537 +#, fuzzy +msgid "Reading Directory A" +msgstr "A " + +#: directorymergewindow.cpp:559 +#, fuzzy +msgid "Reading Directory B" +msgstr "Guhanga ububiko " + +#: directorymergewindow.cpp:581 +#, fuzzy +msgid "Reading Directory C" +msgstr "Guhanga ububiko " + +#: directorymergewindow.cpp:607 +#, fuzzy +msgid "Some subdirectories were not readable in" +msgstr "Ububiko bwungirije OYA in " + +#: directorymergewindow.cpp:612 +#, fuzzy +msgid "Check the permissions of the subdirectories." +msgstr "i Uruhushya Bya i Ububiko bwungirije . " + +#: directorymergewindow.cpp:646 kdiff3.cpp:552 kdiff3.cpp:636 kdiff3.cpp:661 +#: kdiff3.cpp:934 kdiff3.cpp:955 pdiff.cpp:1059 pdiff.cpp:1131 pdiff.cpp:1169 +#: pdiff.cpp:1185 pdiff.cpp:1215 pdiff.cpp:1226 +msgid "Ready." +msgstr "Cyiteguye." + +#: directorymergewindow.cpp:660 +#, fuzzy +msgid "Directory Comparison Status" +msgstr "Inzira y'ububiko" + +#: directorymergewindow.cpp:661 +#, fuzzy +msgid "Number of subdirectories:" +msgstr "Bya Ububiko bwungirije : " + +#: directorymergewindow.cpp:662 +#, fuzzy +msgid "Number of equal files:" +msgstr "Bya bingana Idosiye : " + +#: directorymergewindow.cpp:663 +#, fuzzy +msgid "Number of different files:" +msgstr "Bya Idosiye : " + +#: directorymergewindow.cpp:666 +#, fuzzy +msgid "Number of manual merges:" +msgstr "Bya Bikorwa : " + +#: directorymergewindow.cpp:802 +#, fuzzy +msgid "This affects all merge operations." +msgstr "Byose Gukomatanya Ibikorwa: . " + +#: directorymergewindow.cpp:803 +#, fuzzy +msgid "Changing All Merge Operations" +msgstr "Ibikorerwa Ishusho" + +#: directorymergewindow.cpp:803 mergeresultwindow.cpp:287 +msgid "C&ontinue" +msgstr "Komeza" + +#: directorymergewindow.cpp:1169 +#, fuzzy +msgid "Processing " +msgstr "Inonosora" + +#: directorymergewindow.cpp:1647 directorymergewindow.cpp:1653 +#, fuzzy +msgid "To do." +msgstr "Gukora" + +#: directorymergewindow.cpp:1756 directorymergewindow.cpp:2899 +#, fuzzy +msgid "Copy A to B" +msgstr "A Kuri " + +#: directorymergewindow.cpp:1757 directorymergewindow.cpp:2900 +#, fuzzy +msgid "Copy B to A" +msgstr "Kuri A " + +#: directorymergewindow.cpp:1758 directorymergewindow.cpp:2901 +#, fuzzy +msgid "Delete A" +msgstr "A " + +#: directorymergewindow.cpp:1759 directorymergewindow.cpp:2902 +#, fuzzy +msgid "Delete B" +msgstr "Gusiba #" + +#: directorymergewindow.cpp:1760 +#, fuzzy +msgid "Delete A & B" +msgstr "A & " + +#: directorymergewindow.cpp:1761 directorymergewindow.cpp:2904 +#, fuzzy +msgid "Merge to A" +msgstr "Kuri A " + +#: directorymergewindow.cpp:1762 directorymergewindow.cpp:2905 +#, fuzzy +msgid "Merge to B" +msgstr "Kuri " + +#: directorymergewindow.cpp:1763 +#, fuzzy +msgid "Merge to A & B" +msgstr "Kuri A & " + +#: directorymergewindow.cpp:1767 directorymergewindow.cpp:2896 +#, fuzzy +msgid "Delete (if exists)" +msgstr "( NIBA ) " + +#: directorymergewindow.cpp:1768 directorymergewindow.cpp:1769 +#: directorymergewindow.cpp:2895 optiondialog.cpp:809 smalldialogs.cpp:102 +msgid "Merge" +msgstr "Gukomatanya" + +#: directorymergewindow.cpp:1768 directorymergewindow.cpp:1769 +#, fuzzy +msgid "Merge (manual)" +msgstr "( Bikorwa ) " + +#: directorymergewindow.cpp:1770 +#, fuzzy +msgid "Error: Conflicting File Types" +msgstr "Ikosa : Idosiye " + +#: directorymergewindow.cpp:1771 +#, fuzzy +msgid "Error: Dates are equal but files are not." +msgstr "Ikosa : bingana Idosiye OYA . " + +#: directorymergewindow.cpp:1795 directorymergewindow.cpp:1824 +#: directorymergewindow.cpp:1849 +#, fuzzy +msgid "This operation is currently not possible." +msgstr "Igikorwa ni OYA . " + +#: directorymergewindow.cpp:1795 directorymergewindow.cpp:1824 +#: directorymergewindow.cpp:1849 directorymergewindow.cpp:2106 +#, fuzzy +msgid "Operation Not Possible" +msgstr "Igikorwa nticyashobotse" + +#: directorymergewindow.cpp:1888 +#, fuzzy +msgid "" +"This should never happen: \n" +"\n" +"mergeResultSaved: m_pMFI=0\n" +"\n" +"If you know how to reproduce this, please contact the program author." +msgstr "" +"Nta na rimwe : \n" +"\n" +": = Kuri iyi , Umuntu i Porogaramu Umwanditsi: . " + +#: directorymergewindow.cpp:1888 +#, fuzzy +msgid "Program Error" +msgstr "Ikosa " + +#: directorymergewindow.cpp:1899 +#, fuzzy +msgid "" +"An error occurred while copying.\n" +msgstr "" +"Ikosa Gukoporora . \n" + +#: directorymergewindow.cpp:1900 directorymergewindow.cpp:2306 +#, fuzzy +msgid "Merge Error" +msgstr "Ikosa " + +#: directorymergewindow.cpp:1905 directorymergewindow.cpp:2311 +msgid "Error." +msgstr "Ikosa." + +#: directorymergewindow.cpp:1910 directorymergewindow.cpp:2202 +#: directorymergewindow.cpp:2242 +msgid "Done." +msgstr "Byakozwe." + +#: directorymergewindow.cpp:1933 +#, fuzzy +msgid "Not saved." +msgstr "Bidasangiwe" + +#: directorymergewindow.cpp:1968 +#, fuzzy +msgid "Unknown merge operation. (This must never happen!)" +msgstr "Gukomatanya Igikorwa . ( Nta na rimwe ! ) " + +#: directorymergewindow.cpp:2000 +#, fuzzy +msgid "Unknown merge operation." +msgstr "Gukomatanya Igikorwa . " + +#: directorymergewindow.cpp:2015 +#, fuzzy +msgid "" +"The merge is about to begin.\n" +"\n" +"Choose \"Do it\" if you have read the instructions and know what you are " +"doing.\n" +"Choosing \"Simulate it\" will tell you what would happen.\n" +"\n" +"Be aware that this program still has beta status and there is NO WARRANTY " +"whatsoever! Make backups of your vital data!" +msgstr "" +"Gukomatanya ni Bigyanye Kuri . \n" +"\n" +"\" \" NIBA Soma i Amabwiriza na . \n" +"\" \" . \n" +"\n" +"iyi Porogaramu beta Imimerere na ni ! Ibyashyinguwe Bya Ibyatanzwe ! " + +#: directorymergewindow.cpp:2020 +#, fuzzy +msgid "Starting Merge" +msgstr "Gutangiza serivise" + +#: directorymergewindow.cpp:2020 +#, fuzzy +msgid "Do It" +msgstr "Akadomo" + +#: directorymergewindow.cpp:2020 +#, fuzzy +msgid "Simulate It" +msgstr "Kwigana Igaragaza" + +#: directorymergewindow.cpp:2046 +#, fuzzy +msgid "" +"The highlighted item has a different type in the different directories. Select " +"what to do." +msgstr "Ikintu A Ubwoko: in i ububiko bw'amaderese . Kuri . " + +#: directorymergewindow.cpp:2055 +#, fuzzy +msgid "" +"The modification dates of the file are equal but the files are not. Select what " +"to do." +msgstr "Amatariki Bya i Idosiye bingana i Idosiye OYA . Kuri . " + +#: directorymergewindow.cpp:2106 +#, fuzzy +msgid "" +"This operation is currently not possible because directory merge is currently " +"running." +msgstr "Igikorwa ni OYA Ububiko Gukomatanya ni . " + +#: directorymergewindow.cpp:2166 +#, fuzzy +msgid "" +"There was an error in the last step.\n" +"Do you want to continue with the item that caused the error or do you want to " +"skip this item?" +msgstr "" +"Ikosa in i Iheruka Intera . \n" +"Kuri Gukomeza Na: i Ikintu i Ikosa Cyangwa Kuri Gusimbuka iyi Ikintu ? " + +#: directorymergewindow.cpp:2168 +#, fuzzy +msgid "Continue merge after an error" +msgstr "Gukomeza Gukomatanya Nyuma Ikosa " + +#: directorymergewindow.cpp:2168 +#, fuzzy +msgid "Continue With Last Item" +msgstr "Gukomeza " + +#: directorymergewindow.cpp:2168 +#, fuzzy +msgid "Skip Item" +msgstr "Ibigize by'ilisiti" + +#: directorymergewindow.cpp:2202 +#, fuzzy +msgid "Skipped." +msgstr "Byoherejwe ku" + +#: directorymergewindow.cpp:2209 directorymergewindow.cpp:2435 +#, fuzzy +msgid "In progress..." +msgstr "Aho bigeze: ... " + +#: directorymergewindow.cpp:2257 +#, fuzzy +msgid "Merge operation complete." +msgstr "Igikorwa Byuzuye . " + +#: directorymergewindow.cpp:2257 directorymergewindow.cpp:2260 +#, fuzzy +msgid "Merge Complete" +msgstr "Gushyira ku gihe byarangiye" + +#: directorymergewindow.cpp:2269 +#, fuzzy +msgid "" +"Simulated merge complete: Check if you agree with the proposed operations." +msgstr "Gukomatanya Byuzuye : NIBA Na: i Ibikorwa: . " + +#: directorymergewindow.cpp:2305 +#, fuzzy +msgid "" +"An error occurred. Press OK to see detailed information.\n" +msgstr "Habayemoikosa." + +#: directorymergewindow.cpp:2348 +#, fuzzy +msgid "Error: While deleting %1: Creating backup failed." +msgstr "Ikosa : Gusiba %1 : Inyibutsa Byanze . " + +#: directorymergewindow.cpp:2355 +#, fuzzy +msgid "delete directory recursively( %1 )" +msgstr "Gusiba Ububiko ( %1 ) " + +#: directorymergewindow.cpp:2357 +#, fuzzy +msgid "delete( %1 )" +msgstr "Gusiba" + +#: directorymergewindow.cpp:2372 +#, fuzzy +msgid "Error: delete dir operation failed while trying to read the directory." +msgstr "Ikosa : Gusiba Igikorwa Byanze Kuri Soma i Ububiko . " + +#: directorymergewindow.cpp:2391 +#, fuzzy +msgid "Error: rmdir( %1 ) operation failed." +msgstr "Ikosa : ( %1 ) Igikorwa Byanze . " + +#: directorymergewindow.cpp:2401 +#, fuzzy +msgid "Error: delete operation failed." +msgstr "Ikosa : Gusiba Igikorwa Byanze . " + +#: directorymergewindow.cpp:2427 +#, fuzzy +msgid "manual merge( %1, %2, %3 -> %4)" +msgstr "Bikorwa Gukomatanya ( %1 , %2 , %3 - > %4 ) " + +#: directorymergewindow.cpp:2430 +#, fuzzy +msgid "" +" Note: After a manual merge the user should continue by pressing F7." +msgstr "icyitonderwa : A Bikorwa Gukomatanya i Umukoresha Gukomeza ku . " + +#: directorymergewindow.cpp:2453 +#, fuzzy +msgid "Error: copy( %1 -> %2 ) failed.Deleting existing destination failed." +msgstr "Ikosa : Gukoporora ( %1 - > %2 ) Byanze . Ishyika: Byanze . " + +#: directorymergewindow.cpp:2463 +#, fuzzy +msgid "copyLink( %1 -> %2 )" +msgstr "Ihuza ku %1 (%2)" + +#: directorymergewindow.cpp:2474 +#, fuzzy +msgid "Error: copyLink failed: Remote links are not yet supported." +msgstr "Ikosa : Byanze : amahuza OYA . " + +#: directorymergewindow.cpp:2480 +#, fuzzy +msgid "Error: copyLink failed." +msgstr "Ikosa : Byanze . " + +#: directorymergewindow.cpp:2500 +#, fuzzy +msgid "copy( %1 -> %2 )" +msgstr "Gukoporora" + +#: directorymergewindow.cpp:2526 +#, fuzzy +msgid "Error during rename( %1 -> %2 ): Cannot delete existing destination." +msgstr "Ikosa Guhindura izina ( %1 - > %2 ) : Gusiba Ishyika: . " + +#: directorymergewindow.cpp:2532 +#, fuzzy +msgid "rename( %1 -> %2 )" +msgstr "Guhindura izina" + +#: directorymergewindow.cpp:2541 +#, fuzzy +msgid "Error: Rename failed." +msgstr "Ikosa : Byanze . " + +#: directorymergewindow.cpp:2559 +#, fuzzy +msgid "Error during makeDir of %1. Cannot delete existing file." +msgstr "Ikosa Bya %1 . Gusiba Idosiye . " + +#: directorymergewindow.cpp:2575 +msgid "makeDir( %1 )" +msgstr "" + +#: directorymergewindow.cpp:2585 +#, fuzzy +msgid "Error while creating directory." +msgstr "Ikosa Kurema Ububiko . " + +#: directorymergewindow.cpp:2608 directorymergewindow.cpp:2725 +#, fuzzy +msgid "Dest" +msgstr "Kugogora" + +#: directorymergewindow.cpp:2612 directorymergewindow.cpp:2650 +#, fuzzy +msgid "Dir" +msgstr "Muhamagazatelefoni" + +#: directorymergewindow.cpp:2613 +msgid "Type" +msgstr "Ubwoko" + +#: directorymergewindow.cpp:2614 +msgid "Size" +msgstr "Ingano" + +#: directorymergewindow.cpp:2615 +#, fuzzy +msgid "Attr" +msgstr "Nyuma" + +#: directorymergewindow.cpp:2616 +#, fuzzy +msgid "Last Modification" +msgstr "Iherutse guhindurwa" + +#: directorymergewindow.cpp:2617 +#, fuzzy +msgid "Link-Destination" +msgstr "Ishyika" + +#: directorymergewindow.cpp:2667 +#, fuzzy +msgid "not available" +msgstr "Ntibonetse" + +#: directorymergewindow.cpp:2687 +#, fuzzy +msgid "A (Dest): " +msgstr "A ( ) : " + +#: directorymergewindow.cpp:2690 +#, fuzzy +msgid "A (Base): " +msgstr "A ( Base ) : " + +#: directorymergewindow.cpp:2696 +msgid "B (Dest): " +msgstr "" + +#: directorymergewindow.cpp:2704 +msgid "C (Dest): " +msgstr "" + +#: directorymergewindow.cpp:2710 +#, fuzzy +msgid "Dest: " +msgstr "Ibiro: %1" + +#: directorymergewindow.cpp:2775 +#, fuzzy +msgid "Save Directory Merge State As..." +msgstr "Seriveri y'ububiko:" + +#: directorymergewindow.cpp:2862 +#, fuzzy +msgid "Start/Continue Directory Merge" +msgstr "Gutangira /Gukomeza " + +#: directorymergewindow.cpp:2863 +#, fuzzy +msgid "Run Operation for Current Item" +msgstr "ya: " + +#: directorymergewindow.cpp:2864 +#, fuzzy +msgid "Compare Selected File" +msgstr "Idosiye " + +#: directorymergewindow.cpp:2865 +#, fuzzy +msgid "Merge Current File" +msgstr "Idosiye " + +#: directorymergewindow.cpp:2866 +#, fuzzy +msgid "Fold All Subdirs" +msgstr "Amajwi Yose" + +#: directorymergewindow.cpp:2867 +msgid "Unfold All Subdirs" +msgstr "" + +#: directorymergewindow.cpp:2871 +#, fuzzy +msgid "Choose A for All Items" +msgstr "A ya: " + +#: directorymergewindow.cpp:2872 +#, fuzzy +msgid "Choose B for All Items" +msgstr "ya: " + +#: directorymergewindow.cpp:2873 +#, fuzzy +msgid "Choose C for All Items" +msgstr "ya: " + +#: directorymergewindow.cpp:2874 +#, fuzzy +msgid "Auto-Choose Operation for All Items" +msgstr "- ya: " + +#: directorymergewindow.cpp:2875 +#, fuzzy +msgid "No Operation for All Items" +msgstr "ya: " + +#: directorymergewindow.cpp:2880 +msgid "Show Identical Files" +msgstr "" + +#: directorymergewindow.cpp:2881 +#, fuzzy +msgid "Show Different Files" +msgstr "Bya Idosiye : " + +#: directorymergewindow.cpp:2882 +msgid "Show Files only in A" +msgstr "" + +#: directorymergewindow.cpp:2883 +msgid "Show Files only in B" +msgstr "" + +#: directorymergewindow.cpp:2884 +msgid "Show Files only in C" +msgstr "" + +#: directorymergewindow.cpp:2888 +#, fuzzy +msgid "Compare Explicitly Selected Files" +msgstr "Idosiye " + +#: directorymergewindow.cpp:2889 +#, fuzzy +msgid "Merge Explicitly Selected Files" +msgstr "Idosiye " + +#: directorymergewindow.cpp:2891 directorymergewindow.cpp:2898 +msgid "Do Nothing" +msgstr "Ntugire icyo Ukora" + +#: directorymergewindow.cpp:2892 +msgid "A" +msgstr "A" + +#: directorymergewindow.cpp:2893 +msgid "B" +msgstr "B" + +#: directorymergewindow.cpp:2894 +msgid "C" +msgstr "C" + +#: directorymergewindow.cpp:2903 +#, fuzzy +msgid "Delete A && B" +msgstr "A & & " + +#: directorymergewindow.cpp:2906 +#, fuzzy +msgid "Merge to A && B" +msgstr "Kuri A & & " + +#: fileaccess.cpp:595 +#, fuzzy +msgid "" +"While trying to make a backup, deleting an older backup failed. \n" +"Filename: " +msgstr "" +"Kuri Ubwoko A Inyibutsa , Gusiba Inyibutsa Byanze . \n" +": " + +#: fileaccess.cpp:602 +#, fuzzy +msgid "" +"While trying to make a backup, renaming failed. \n" +"Filenames: " +msgstr "" +"Kuri Ubwoko A Inyibutsa , Guhindura izina Byanze . \n" +": " + +#: fileaccess.cpp:624 +#, fuzzy, c-format +msgid "Getting file status: %1" +msgstr "Idosiye Imimerere : %1 " + +#: fileaccess.cpp:667 +#, fuzzy, c-format +msgid "Reading file: %1" +msgstr "Idosiye : %1 " + +#: fileaccess.cpp:703 +#, fuzzy, c-format +msgid "Writing file: %1" +msgstr "Idosiye : %1 " + +#: fileaccess.cpp:731 +msgid "Out of memory" +msgstr "Ububiko bwarenzwe" + +#: fileaccess.cpp:766 +#, fuzzy, c-format +msgid "Making directory: %1" +msgstr "Ububiko : %1 " + +#: fileaccess.cpp:786 +#, fuzzy, c-format +msgid "Removing directory: %1" +msgstr "Ububiko : %1 " + +#: fileaccess.cpp:801 +#, fuzzy, c-format +msgid "Removing file: %1" +msgstr "Idosiye : %1 " + +#: fileaccess.cpp:817 +#, fuzzy +msgid "Creating symbolic link: %1 -> %2" +msgstr "Ihuza : %1 - > %2 " + +#: fileaccess.cpp:843 +#, fuzzy +msgid "Renaming file: %1 -> %2" +msgstr "Idosiye : %1 - > %2 " + +#: fileaccess.cpp:879 +#, fuzzy +msgid "Copying file: %1 -> %2" +msgstr "Idosiye : %1 - > %2 " + +#: fileaccess.cpp:893 +#, fuzzy, c-format +msgid "" +"Error during file copy operation: Opening file for reading failed. Filename: %1" +msgstr "Ikosa Idosiye Gukoporora Igikorwa : Idosiye ya: Byanze . : %1 " + +#: fileaccess.cpp:899 +#, fuzzy, c-format +msgid "" +"Error during file copy operation: Opening file for writing failed. Filename: %1" +msgstr "Ikosa Idosiye Gukoporora Igikorwa : Idosiye ya: Byanze . : %1 " + +#: fileaccess.cpp:914 +#, fuzzy, c-format +msgid "Error during file copy operation: Reading failed. Filename: %1" +msgstr "Ikosa Idosiye Gukoporora Igikorwa : Byanze . : %1 " + +#: fileaccess.cpp:923 +#, fuzzy, c-format +msgid "Error during file copy operation: Writing failed. Filename: %1" +msgstr "Ikosa Idosiye Gukoporora Igikorwa : Byanze . : %1 " + +#: fileaccess.cpp:1219 +#, fuzzy +msgid "Reading directory: " +msgstr "Ububiko : " + +#: fileaccess.cpp:1348 +#, fuzzy, c-format +msgid "Listing directory: %1" +msgstr "Ububiko : %1 " + +#: kdiff3.cpp:142 +#, fuzzy +msgid "Current Configuration:" +msgstr "Iki cyiciro" + +#: kdiff3.cpp:147 +#, fuzzy +msgid "Config Option Error:" +msgstr "Ikosa gufungura idosiye" + +#: kdiff3.cpp:187 +#, fuzzy +msgid "Option --auto used, but no output file specified." +msgstr "- - Ikiyega Byakoreshejwe , Oya Ibisohoka Idosiye . " + +#: kdiff3.cpp:323 +#, fuzzy +msgid "Option --auto ignored for directory comparison." +msgstr "- - Ikiyega ya: Ububiko . " + +#: kdiff3.cpp:359 +#, fuzzy +msgid "Saving failed." +msgstr "Byanze . " + +#: kdiff3.cpp:386 pdiff.cpp:1041 pdiff.cpp:1112 +#, fuzzy +msgid "Opening of these files failed:" +msgstr "Bya Idosiye Byanze : " + +#: kdiff3.cpp:395 +#, fuzzy +msgid "File Open Error" +msgstr "Ikosa gufungura idosiye" + +#: kdiff3.cpp:418 +#, fuzzy +msgid "Opens documents for comparison..." +msgstr "Inyandiko ya: ... " + +#: kdiff3.cpp:423 +#, fuzzy +msgid "Saves the merge result. All conflicts must be solved!" +msgstr "i Gukomatanya Igisubizo . ! " + +#: kdiff3.cpp:425 +#, fuzzy +msgid "Saves the current document as..." +msgstr "i KIGEZWEHO Inyandiko Nka ... " + +#: kdiff3.cpp:427 +msgid "Print the differences" +msgstr "" + +#: kdiff3.cpp:429 +#, fuzzy +msgid "Quits the application" +msgstr "i Porogaramu " + +#: kdiff3.cpp:431 +#, fuzzy +msgid "Cuts the selected section and puts it to the clipboard" +msgstr "i Byahiswemo Icyiciro na Kuri i Ububikokoporora " + +#: kdiff3.cpp:433 +#, fuzzy +msgid "Copies the selected section to the clipboard" +msgstr "i Byahiswemo Icyiciro Kuri i Ububikokoporora " + +#: kdiff3.cpp:435 +#, fuzzy +msgid "Pastes the clipboard contents to actual position" +msgstr "i Ububikokoporora Ibigize Kuri Ibirindiro: " + +#: kdiff3.cpp:437 +msgid "Select everything in current window" +msgstr "" + +#: kdiff3.cpp:439 +#, fuzzy +msgid "Search for a string" +msgstr "ya: A Ikurikiranyanyuguti " + +#: kdiff3.cpp:441 +#, fuzzy +msgid "Search again for the string" +msgstr "Nanone ya: i Ikurikiranyanyuguti " + +#: kdiff3.cpp:443 +#, fuzzy +msgid "Enables/disables the toolbar" +msgstr "/i Umwanyabikoresho " + +#: kdiff3.cpp:445 +#, fuzzy +msgid "Enables/disables the statusbar" +msgstr "/i Umurongomiterere " + +#: kdiff3.cpp:449 +#, fuzzy +msgid "Configure KDiff3..." +msgstr "Kugena imiterere..." + +#: kdiff3.cpp:470 +#, fuzzy +msgid "Go to Current Delta" +msgstr "Kuri " + +#: kdiff3.cpp:471 +#, fuzzy +msgid "Go to First Delta" +msgstr "Kuri " + +#: kdiff3.cpp:472 +#, fuzzy +msgid "Go to Last Delta" +msgstr "Kuri " + +#: kdiff3.cpp:473 +#, fuzzy +msgid "(Skips white space differences when \"Show White Space\" is disabled.)" +msgstr "( Umweru Umwanya Ibinyuranyo Ryari: \" \" ni Yahagaritswe . ) " + +#: kdiff3.cpp:474 +#, fuzzy +msgid "" +"(Does not skip white space differences even when \"Show White Space\" is " +"disabled.)" +msgstr "" +"( OYA Gusimbuka Umweru Umwanya Ibinyuranyo ATARIIGIHARWE Ryari: \" \" ni " +"Yahagaritswe . ) " + +#: kdiff3.cpp:475 +#, fuzzy +msgid "Go to Previous Delta" +msgstr "Kuri " + +#: kdiff3.cpp:477 +#, fuzzy +msgid "Go to Next Delta" +msgstr "Kuri " + +#: kdiff3.cpp:479 +#, fuzzy +msgid "Go to Previous Conflict" +msgstr "Kuri " + +#: kdiff3.cpp:481 +#, fuzzy +msgid "Go to Next Conflict" +msgstr "Kuri " + +#: kdiff3.cpp:483 +#, fuzzy +msgid "Go to Previous Unsolved Conflict" +msgstr "Kuri " + +#: kdiff3.cpp:485 +#, fuzzy +msgid "Go to Next Unsolved Conflict" +msgstr "Kuri " + +#: kdiff3.cpp:487 +#, fuzzy +msgid "Select Line(s) From A" +msgstr "( S ) A " + +#: kdiff3.cpp:488 +#, fuzzy +msgid "Select Line(s) From B" +msgstr "( S ) " + +#: kdiff3.cpp:489 +#, fuzzy +msgid "Select Line(s) From C" +msgstr "( S ) " + +#: kdiff3.cpp:490 +#, fuzzy +msgid "Automatically Go to Next Unsolved Conflict After Source Selection" +msgstr "Kuri " + +#: kdiff3.cpp:492 +#, fuzzy +msgid "Show Space && Tabulator Characters for Differences" +msgstr "& & ya: " + +#: kdiff3.cpp:493 +#, fuzzy +msgid "Show White Space" +msgstr "Umwanya w'Umweru" + +#: kdiff3.cpp:495 +#, fuzzy +msgid "Show Line Numbers" +msgstr "Kwerekana nomero z'umurongo" + +#: kdiff3.cpp:496 +#, fuzzy +msgid "Choose A Everywhere" +msgstr "A " + +#: kdiff3.cpp:497 +#, fuzzy +msgid "Choose B Everywhere" +msgstr "Hitamo darayiva" + +#: kdiff3.cpp:498 +#, fuzzy +msgid "Choose C Everywhere" +msgstr "Hitamo darayiva" + +#: kdiff3.cpp:499 +#, fuzzy +msgid "Choose A for All Unsolved Conflicts" +msgstr "A ya: " + +#: kdiff3.cpp:500 +#, fuzzy +msgid "Choose B for All Unsolved Conflicts" +msgstr "ya: " + +#: kdiff3.cpp:501 +#, fuzzy +msgid "Choose C for All Unsolved Conflicts" +msgstr "ya: " + +#: kdiff3.cpp:502 +#, fuzzy +msgid "Choose A for All Unsolved Whitespace Conflicts" +msgstr "A ya: " + +#: kdiff3.cpp:503 +#, fuzzy +msgid "Choose B for All Unsolved Whitespace Conflicts" +msgstr "ya: " + +#: kdiff3.cpp:504 +#, fuzzy +msgid "Choose C for All Unsolved Whitespace Conflicts" +msgstr "ya: " + +#: kdiff3.cpp:505 +#, fuzzy +msgid "Automatically Solve Simple Conflicts" +msgstr "Gufunga mu buryo bwikoresha impago zidakoreshwa" + +#: kdiff3.cpp:506 +#, fuzzy +msgid "Set Deltas to Conflicts" +msgstr "Kuri " + +#: kdiff3.cpp:507 +msgid "Run Regular Expression Auto Merge" +msgstr "" + +#: kdiff3.cpp:508 +#, fuzzy +msgid "Automatically Solve History Conflicts" +msgstr "Gufunga mu buryo bwikoresha impago zidakoreshwa" + +#: kdiff3.cpp:509 +msgid "Split Diff At Selection" +msgstr "" + +#: kdiff3.cpp:510 +#, fuzzy +msgid "Join Selected Diffs" +msgstr "Idosiye " + +#: kdiff3.cpp:512 +#, fuzzy +msgid "Show Window A" +msgstr "A " + +#: kdiff3.cpp:513 +#, fuzzy +msgid "Show Window B" +msgstr "Kwerekana Ilisiti y'Amadirishya" + +#: kdiff3.cpp:514 +#, fuzzy +msgid "Show Window C" +msgstr "Kwerekana Ilisiti y'Amadirishya" + +#: kdiff3.cpp:515 kdiff3.cpp:526 +#, fuzzy +msgid "Focus Next Window" +msgstr "idirishya rikurikira" + +#: kdiff3.cpp:517 +#, fuzzy +msgid "Normal Overview" +msgstr "Gahunda-Nyamwaka" + +#: kdiff3.cpp:518 +#, fuzzy +msgid "A vs. B Overview" +msgstr "A . " + +#: kdiff3.cpp:519 +#, fuzzy +msgid "A vs. C Overview" +msgstr "A . " + +#: kdiff3.cpp:520 +#, fuzzy +msgid "B vs. C Overview" +msgstr "Incamake" + +#: kdiff3.cpp:521 +msgid "Word Wrap Diff Windows" +msgstr "" + +#: kdiff3.cpp:522 +msgid "Add Manual Diff Alignment" +msgstr "" + +#: kdiff3.cpp:523 +msgid "Clear All Manual Diff Alignments" +msgstr "" + +#: kdiff3.cpp:528 +#, fuzzy +msgid "Focus Prev Window" +msgstr "Kwerekeza ku idirishya: " + +#: kdiff3.cpp:529 +#, fuzzy +msgid "Toggle Split Orientation" +msgstr "Icyerekezo mwandiko" + +#: kdiff3.cpp:531 +msgid "Dir && Text Split Screen View" +msgstr "" + +#: kdiff3.cpp:533 +msgid "Toggle Between Dir && Text View" +msgstr "" + +#: kdiff3.cpp:582 pdiff.cpp:1712 +#, fuzzy +msgid "The merge result hasn't been saved." +msgstr "Gukomatanya Igisubizo . " + +#: kdiff3.cpp:583 +#, fuzzy +msgid "Save && Quit" +msgstr "Kubika & & " + +#: kdiff3.cpp:583 +#, fuzzy +msgid "Quit Without Saving" +msgstr "Komeka utahinduye imiterere" + +#: kdiff3.cpp:591 pdiff.cpp:1721 +#, fuzzy +msgid "Saving the merge result failed." +msgstr "i Gukomatanya Igisubizo Byanze . " + +#: kdiff3.cpp:602 pdiff.cpp:978 +#, fuzzy +msgid "" +"You are currently doing a directory merge. Are you sure, you want to abort?" +msgstr "A Ububiko Gukomatanya . , Kuri Kureka ? " + +#: kdiff3.cpp:625 +#, fuzzy +msgid "Saving file..." +msgstr "Idosiye ... " + +#: kdiff3.cpp:642 +#, fuzzy +msgid "Saving file with a new filename..." +msgstr "Idosiye Na: A Gishya Izina ry'idosiye: ... " + +#: kdiff3.cpp:732 +#, fuzzy +msgid "Printing..." +msgstr "Tegereza..." + +#: kdiff3.cpp:738 kdiff3.cpp:900 +msgid "Printing aborted." +msgstr "" + +#: kdiff3.cpp:870 +msgid "Selection" +msgstr "" + +#: kdiff3.cpp:896 +#, fuzzy +msgid "Printing completed." +msgstr "Igikorwa Byuzuye . " + +#: kdiff3.cpp:906 +#, fuzzy +msgid "Exiting..." +msgstr "Tegereza..." + +#: kdiff3.cpp:918 +#, fuzzy +msgid "Toggling toolbar..." +msgstr "Umwanyabikoresho ... " + +#: kdiff3.cpp:939 +#, fuzzy +msgid "Toggle the statusbar..." +msgstr "i Umurongomiterere ... " + +#: kdiff3_part.cpp:155 kdiff3_part.cpp:224 +#, fuzzy +msgid "Couldn't find files for comparison." +msgstr "Gushaka Idosiye ya: . " + +#: kdiff3_part.cpp:291 +msgid "KDiff3Part" +msgstr "" + +#: kdiff3_shell.cpp:78 +#, fuzzy +msgid "" +"Could not find our part!\n" +"This usually happens due to an installation problem. Please read the " +"README-file in the source package for details." +msgstr "" +"OYA Gushaka Inzira %s ! \n" +"Kuri iyinjizaporogaramu . Soma i - Idosiye in i Inkomoko Porogaramu ya: " +"Birambuye . " + +#: main.cpp:35 +#, fuzzy +msgid "Tool for Comparison and Merge of Files and Directories" +msgstr "ya: na Bya na " + +#: main.cpp:40 +#, fuzzy +msgid "Merge the input." +msgstr "i Iyinjiza . " + +#: main.cpp:42 +#, fuzzy +msgid "Explicit base file. For compatibility with certain tools." +msgstr "SHINGIRO Idosiye . Bihuye neza Na: Ibikoresho . " + +#: main.cpp:44 +#, fuzzy +msgid "Output file. Implies -m. E.g.: -o newfile.txt" +msgstr "E. G." + +#: main.cpp:45 +#, fuzzy +msgid "Output file, again. (For compatibility with certain tools.)" +msgstr "Idosiye , Nanone . ( Bihuye neza Na: Ibikoresho . ) " + +#: main.cpp:46 +#, fuzzy +msgid "No GUI if all conflicts are auto-solvable. (Needs -o file)" +msgstr "NIBA Byose Ikiyega - . ( - o Idosiye ) " + +#: main.cpp:47 +#, fuzzy +msgid "Don't solve conflicts automatically. (For compatibility...)" +msgstr "mu buryo bwikora: . ( Bihuye neza ... ) " + +#: main.cpp:48 +#, fuzzy +msgid "Visible name replacement for input file 1 (base)." +msgstr "Izina: ya: Iyinjiza Idosiye 1 ( SHINGIRO ) . " + +#: main.cpp:49 +#, fuzzy +msgid "Visible name replacement for input file 2." +msgstr "Izina: ya: Iyinjiza Idosiye 2 . " + +#: main.cpp:50 +#, fuzzy +msgid "Visible name replacement for input file 3." +msgstr "Izina: ya: Iyinjiza Idosiye 3 . " + +#: main.cpp:52 +#, fuzzy +msgid "Alternative visible name replacement. Supply this once for every input." +msgstr "Kigaragara Izina: . iyi Rimwe ya: buri Iyinjiza . " + +#: main.cpp:53 +msgid "" +"Override a config setting. Use once for every setting. E.g.: --cs " +"\"AutoAdvance=1\"" +msgstr "" + +#: main.cpp:54 +msgid "Show list of config settings and current values." +msgstr "" + +#: main.cpp:55 +#, fuzzy +msgid "Use a different config file." +msgstr "Bya Idosiye : " + +#: main.cpp:59 +#, fuzzy +msgid "file1 to open (base, if not specified via --base)" +msgstr "Kuri Gufungura ( SHINGIRO , NIBA OYA Biturutse - - SHINGIRO ) " + +#: main.cpp:60 +#, fuzzy +msgid "file2 to open" +msgstr "Kuri Gufungura " + +#: main.cpp:61 +#, fuzzy +msgid "file3 to open" +msgstr "Kuri Gufungura " + +#: main.cpp:93 +msgid "Ignored. (User defined.)" +msgstr "" + +#. i18n: file kdiff3_part.rc line 16 +#: main.cpp:173 rc.cpp:9 +#, no-c-format +msgid "KDiff3" +msgstr "" + +#: main.cpp:186 +#, fuzzy +msgid "+ Many thanks to those who reported bugs and contributed ideas!" +msgstr "+ Kuri na ! " + +#: mergeresultwindow.cpp:136 mergeresultwindow.cpp:939 +#: mergeresultwindow.cpp:953 mergeresultwindow.cpp:965 +#: mergeresultwindow.cpp:977 +#, fuzzy +msgid "Number of remaining unsolved conflicts: %1 (of which %2 are whitespace)" +msgstr "Bya : %1 ( Bya %2 ) " + +#: mergeresultwindow.cpp:285 +#, fuzzy +msgid "" +"The output has been modified.\n" +"If you continue your changes will be lost." +msgstr "" +"Ibisohoka Byahinduwe: . \n" +"Gukomeza Amahinduka . " + +#: mergeresultwindow.cpp:797 pdiff.cpp:511 +#, fuzzy +msgid "All input files are binary equal." +msgstr "Iyinjiza Idosiye Nyabibiri bingana . " + +#: mergeresultwindow.cpp:799 +#, fuzzy +msgid "All input files contain the same text." +msgstr "Iyinjiza Idosiye i Umwandiko . " + +#: mergeresultwindow.cpp:801 +#, fuzzy +msgid "" +"Files A and B are binary equal.\n" +msgstr "" +"A na Nyabibiri bingana . \n" + +#: mergeresultwindow.cpp:802 +#, fuzzy +msgid "" +"Files A and B have equal text. \n" +msgstr "" +"A na bingana Umwandiko . \n" + +#: mergeresultwindow.cpp:803 +#, fuzzy +msgid "" +"Files A and C are binary equal.\n" +msgstr "" +"A na Nyabibiri bingana . \n" + +#: mergeresultwindow.cpp:804 +#, fuzzy +msgid "" +"Files A and C have equal text. \n" +msgstr "" +"A na bingana Umwandiko . \n" + +#: mergeresultwindow.cpp:805 +#, fuzzy +msgid "" +"Files B and C are binary equal.\n" +msgstr "" +"na Nyabibiri bingana . \n" + +#: mergeresultwindow.cpp:806 +#, fuzzy +msgid "" +"Files B and C have equal text. \n" +msgstr "" +"na bingana Umwandiko . \n" + +#: mergeresultwindow.cpp:812 +#, fuzzy +msgid "Total number of conflicts: " +msgstr "Umubare Bya : " + +#: mergeresultwindow.cpp:813 +#, fuzzy +msgid "" +"\n" +"Nr of automatically solved conflicts: " +msgstr "" +"\n" +"Bya mu buryo bwikora: : " + +#: mergeresultwindow.cpp:814 +#, fuzzy +msgid "" +"\n" +"Nr of unsolved conflicts: " +msgstr "" +"\n" +"Bya : " + +#: mergeresultwindow.cpp:816 +#, fuzzy +msgid "Conflicts" +msgstr "Ishyamirana ry'ingenzi" + +#: mergeresultwindow.cpp:1652 +#, fuzzy +msgid "" +msgstr "< Umurongo: > " + +#: mergeresultwindow.cpp:1660 +msgid "" +msgstr "" + +#: mergeresultwindow.cpp:1662 mergeresultwindow.cpp:2427 +#, fuzzy +msgid "" +msgstr "Ishyamirana ry'ingenzi" + +#: mergeresultwindow.cpp:2635 +#, fuzzy +msgid "" +"Not all conflicts are solved yet.\n" +"File not saved.\n" +msgstr "" +"Byose . \n" +"Idosiye OYA . \n" + +#: mergeresultwindow.cpp:2637 +#, fuzzy +msgid "Conflicts Left" +msgstr "Guhitamo Ibumoso" + +#: mergeresultwindow.cpp:2649 +#, fuzzy +msgid "" +"\n" +"\n" +"Creating backup failed. File not saved." +msgstr "" +"\n" +"\n" +"Inyibutsa Byanze . Idosiye OYA . " + +#: mergeresultwindow.cpp:2649 mergeresultwindow.cpp:2689 +#, fuzzy +msgid "File Save Error" +msgstr "Idosiye Kubika Ikosa " + +#: mergeresultwindow.cpp:2689 +#, fuzzy +msgid "Error while writing." +msgstr "Ikosa . " + +#: mergeresultwindow.cpp:3020 +msgid "Output" +msgstr "Ibisohoka" + +#: mergeresultwindow.cpp:3032 mergeresultwindow.cpp:3139 +#, fuzzy +msgid "[Modified]" +msgstr "Byahinduwe" + +#: mergeresultwindow.cpp:3039 +#, fuzzy +msgid "Encoding for saving" +msgstr "Idosiye ya: : " + +#: mergeresultwindow.cpp:3075 mergeresultwindow.cpp:3081 +#: mergeresultwindow.cpp:3087 +msgid "Codec from" +msgstr "" + +#: optiondialog.cpp:362 +#, fuzzy +msgid "Unicode, 8 bit" +msgstr ", 8 " + +#: optiondialog.cpp:363 +msgid "Unicode" +msgstr "Inikode" + +#: optiondialog.cpp:364 +#, fuzzy +msgid "Latin1" +msgstr "Ikilatini-1" + +#: optiondialog.cpp:383 +#, fuzzy +msgid "Change this if non-ASCII characters are not displayed correctly." +msgstr "iyi NIBA - Inyuguti OYA . " + +#: optiondialog.cpp:510 +msgid "Editor & Diff Output Font" +msgstr "" + +#: optiondialog.cpp:531 +#, fuzzy +msgid "Italic font for deltas" +msgstr "Imyandikire ya: " + +#: optiondialog.cpp:534 +#, fuzzy +msgid "" +"Selects the italic version of the font for differences.\n" +"If the font doesn't support italic characters, then this does nothing." +msgstr "" +"i Biberamye Verisiyo Bya i Imyandikire ya: Ibinyuranyo . \n" +"i Imyandikire Gushigikira Biberamye Inyuguti , Hanyuma iyi Nta na kimwe . " + +#: optiondialog.cpp:542 +msgid "Color" +msgstr "Ibara" + +#: optiondialog.cpp:542 +#, fuzzy +msgid "Colors Settings" +msgstr "Amagenamiterere y'Akarere" + +#: optiondialog.cpp:556 +msgid "Editor and Diff Views:" +msgstr "" + +#: optiondialog.cpp:564 +msgid "Foreground color:" +msgstr "Ibara ry'imbugambanza:" + +#: optiondialog.cpp:570 +msgid "Background color:" +msgstr "Ibara ry'imbuganyuma:" + +#: optiondialog.cpp:578 +#, fuzzy +msgid "Diff background color:" +msgstr "Mbuganyuma Ibara: : " + +#: optiondialog.cpp:585 +#, fuzzy +msgid "Color A:" +msgstr "A : " + +#: optiondialog.cpp:592 +#, fuzzy +msgid "Color B:" +msgstr "Ibara:" + +#: optiondialog.cpp:599 +#, fuzzy +msgid "Color C:" +msgstr "Ibara:" + +#: optiondialog.cpp:605 +#, fuzzy +msgid "Conflict color:" +msgstr "Ibara: : " + +#: optiondialog.cpp:612 +#, fuzzy +msgid "Current range background color:" +msgstr "Urutonde Mbuganyuma Ibara: : " + +#: optiondialog.cpp:619 +#, fuzzy +msgid "Current range diff background color:" +msgstr "Urutonde Mbuganyuma Ibara: : " + +#: optiondialog.cpp:625 +msgid "Color for manually aligned difference ranges:" +msgstr "" + +#: optiondialog.cpp:630 +#, fuzzy +msgid "Directory Comparison View:" +msgstr "Inzira y'ububiko" + +#: optiondialog.cpp:636 +msgid "Newest file color:" +msgstr "" + +#: optiondialog.cpp:639 +msgid "" +"Changing this color will only be effective when starting the next directory " +"comparison." +msgstr "" + +#: optiondialog.cpp:644 +msgid "Oldest file color:" +msgstr "" + +#: optiondialog.cpp:651 +msgid "Middle age file color:" +msgstr "" + +#: optiondialog.cpp:658 +msgid "Color for missing files:" +msgstr "" + +#: optiondialog.cpp:670 +msgid "Editor" +msgstr "Muhinduzi" + +#: optiondialog.cpp:670 +#, fuzzy +msgid "Editor Behavior" +msgstr "imyitwarire" + +#: optiondialog.cpp:680 +#, fuzzy +msgid "Tab inserts spaces" +msgstr "Imyanya " + +#: optiondialog.cpp:683 +#, fuzzy +msgid "" +"On: Pressing tab generates the appropriate number of spaces.\n" +"Off: A Tab-character will be inserted." +msgstr "" +": tab i Umubare Bya Imyanya . \n" +": A - Inyuguti: Byinjijwemo . " + +#: optiondialog.cpp:689 +#, fuzzy +msgid "Tab size:" +msgstr "Ingano: : " + +#: optiondialog.cpp:694 +#, fuzzy +msgid "Auto indentation" +msgstr "Isunika " + +#: optiondialog.cpp:697 +#, fuzzy +msgid "" +"On: The indentation of the previous line is used for a new line.\n" +msgstr "" +": Isunika Bya i Ibanjirije Umurongo: ni Byakoreshejwe ya: A Gishya Umurongo: . " +"\n" + +#: optiondialog.cpp:701 +#, fuzzy +msgid "Auto copy selection" +msgstr "Gukoporora Ihitamo " + +#: optiondialog.cpp:704 +#, fuzzy +msgid "" +"On: Any selection is immediately written to the clipboard.\n" +"Off: You must explicitely copy e.g. via Ctrl-C." +msgstr "G." + +#: optiondialog.cpp:709 +#, fuzzy +msgid "Line end style:" +msgstr "Impera Imisusire : " + +#: optiondialog.cpp:721 +#, fuzzy +msgid "" +"Sets the line endings for when an edited file is saved.\n" +"DOS/Windows: CR+LF; UNIX: LF; with CR=0D, LF=0A" +msgstr "" +"i Umurongo: ya: Ryari: Idosiye ni . \n" +"/: + ; : ; Na: = , = " + +#: optiondialog.cpp:732 +#, fuzzy +msgid "Diff" +msgstr "Igabanya" + +#: optiondialog.cpp:732 +#, fuzzy +msgid "Diff Settings" +msgstr "Iganamiterere rya musomyi" + +#: optiondialog.cpp:743 +#, fuzzy +msgid "Preserve carriage return" +msgstr "Garuka " + +#: optiondialog.cpp:746 +#, fuzzy +msgid "" +"Show carriage return characters '\\r' if they exist.\n" +"Helps to compare files that were modified under different operating systems." +msgstr "" +"Garuka Inyuguti ' \\r ' NIBA . \n" +"Kuri Kugereranya # Idosiye Byahinduwe: . " + +#: optiondialog.cpp:751 +#, fuzzy +msgid "Ignore numbers" +msgstr "Imibare " + +#: optiondialog.cpp:754 +#, fuzzy +msgid "" +"Ignore number characters during line matching phase. (Similar to Ignore white " +"space.)\n" +"Might help to compare files with numeric data." +msgstr "" +"Umubare Inyuguti Umurongo: . ( Kuri Umweru Umwanya . ) \n" +"Ifashayobora Kuri Kugereranya # Idosiye Na: Bikurikije umubare Ibyatanzwe . " + +#: optiondialog.cpp:759 +#, fuzzy +msgid "Ignore C/C++ comments" +msgstr "/+ + Ibisobanuro " + +#: optiondialog.cpp:761 +#, fuzzy +msgid "Treat C/C++ comments like white space." +msgstr "/+ + Ibisobanuro nka Umweru Umwanya . " + +#: optiondialog.cpp:765 +#, fuzzy +msgid "Ignore case" +msgstr "Kwirengagiza Inshuro Imwe" + +#: optiondialog.cpp:768 +#, fuzzy +msgid "Treat case differences like white space changes. ('a'<=>'A')" +msgstr "Ibinyuranyo nka Umweru Umwanya Amahinduka . ( ' < = > ' ) " + +#: optiondialog.cpp:772 +#, fuzzy +msgid "Preprocessor command:" +msgstr "command : " + +#: optiondialog.cpp:776 +#, fuzzy +msgid "User defined pre-processing. (See the docs for details.)" +msgstr "Byahawe imiterere mbere - Inonosora . ( i ya: Birambuye . ) " + +#: optiondialog.cpp:779 +#, fuzzy +msgid "Line-matching preprocessor command:" +msgstr "- command : " + +#: optiondialog.cpp:783 +#, fuzzy +msgid "" +"This pre-processor is only used during line matching.\n" +"(See the docs for details.)" +msgstr "" +"Byahawe imiterere mbere - ni Byakoreshejwe Umurongo: . \n" +"( i ya: Birambuye . ) " + +#: optiondialog.cpp:786 +#, fuzzy +msgid "Try hard (slower)" +msgstr "Ikomeye ( ) " + +#: optiondialog.cpp:789 +#, fuzzy +msgid "" +"Enables the --minimal option for the external diff.\n" +"The analysis of big files will be much slower." +msgstr "" +"i - - Ihitamo ya: i external . \n" +"Bya Idosiye . " + +#: optiondialog.cpp:794 +#, fuzzy +msgid "Auto advance delay (ms):" +msgstr "Gutinda ( Madamu ) : " + +#: optiondialog.cpp:799 +#, fuzzy +msgid "" +"When in Auto-Advance mode the result of the current selection is shown \n" +"for the specified time, before jumping to the next conflict. Range: 0-2000 ms" +msgstr "" +"in - Ubwoko i Igisubizo Bya i KIGEZWEHO Ihitamo ni \n" +"ya: i Igihe , Mbere Kuri i Ibikurikira > . : 0 %S - Madamu " + +#: optiondialog.cpp:809 +#, fuzzy +msgid "Merge Settings" +msgstr "Iganamiterere rya musomyi" + +#: optiondialog.cpp:822 +#, fuzzy +msgid "White space 2-file merge default:" +msgstr "Umwanya 2 - Idosiye Gukomatanya Mburabuzi : " + +#: optiondialog.cpp:826 optiondialog.cpp:839 +#, fuzzy +msgid "Manual Choice" +msgstr "Ibishushanyo by'Intoki" + +#: optiondialog.cpp:830 optiondialog.cpp:844 +#, fuzzy +msgid "" +"Allow the merge algorithm to automatically select an input for white-space-only " +"changes." +msgstr "" +"i Gukomatanya Kuri mu buryo bwikora: Guhitamo Iyinjiza ya: Umweru - Umwanya - " +"Amahinduka . " + +#: optiondialog.cpp:835 +#, fuzzy +msgid "White space 3-file merge default:" +msgstr "Umwanya 3 - Idosiye Gukomatanya Mburabuzi : " + +#: optiondialog.cpp:849 +msgid "Automatic Merge Regular Expression" +msgstr "" + +#: optiondialog.cpp:858 smalldialogs.cpp:397 +msgid "Auto merge regular expression:" +msgstr "" + +#: optiondialog.cpp:862 +msgid "" +"Regular expression for lines where KDiff3 should automatically choose one " +"source.\n" +"When a line with a conflict matches the regular expression then\n" +"- if available - C, otherwise B will be chosen." +msgstr "" + +#: optiondialog.cpp:868 +msgid "Run regular expression auto merge on merge start" +msgstr "" + +#: optiondialog.cpp:870 +msgid "" +"Run the merge for auto merge regular expressions\n" +"immediately when a merge starts.\n" +msgstr "" + +#: optiondialog.cpp:875 +msgid "Version Control History Merging" +msgstr "" + +#: optiondialog.cpp:884 smalldialogs.cpp:424 +msgid "History start regular expression:" +msgstr "" + +#: optiondialog.cpp:888 +msgid "" +"Regular expression for the start of the version control history entry.\n" +"Usually this line contains the \"$Log$\"-keyword.\n" +"Default value: \".*\\$Log.*\\$.*\"" +msgstr "" + +#: optiondialog.cpp:894 smalldialogs.cpp:453 +msgid "History entry start regular expression:" +msgstr "" + +#: optiondialog.cpp:906 +msgid "" +"A version control history entry consists of several lines.\n" +"Specify the regular expression to detect the first line (without the leading " +"comment).\n" +"Use parentheses to group the keys you want to use for sorting.\n" +"If left empty, then KDiff3 assumes that empty lines separate history entries.\n" +"See the documentation for details." +msgstr "" + +#: optiondialog.cpp:914 +msgid "History merge sorting" +msgstr "" + +#: optiondialog.cpp:916 +msgid "Sort version control history by a key." +msgstr "" + +#: optiondialog.cpp:926 +msgid "History entry start sort key order:" +msgstr "" + +#: optiondialog.cpp:930 +msgid "" +"Each parentheses used in the regular expression for the history start entry\n" +"groups a key that can be used for sorting.\n" +"Specify the list of keys (that are numbered in order of occurrence\n" +"starting with 1) using ',' as separator (e.g. \"4,5,6,1,2,3,7\").\n" +"If left empty, then no sorting will be done.\n" +"See the documentation for details." +msgstr "" + +#: optiondialog.cpp:941 +msgid "Merge version control history on merge start" +msgstr "" + +#: optiondialog.cpp:943 +msgid "Run version control history automerge on merge start." +msgstr "" + +#: optiondialog.cpp:947 +msgid "Test your regular expressions" +msgstr "" + +#: optiondialog.cpp:952 +msgid "Irrelevant merge command:" +msgstr "" + +#: optiondialog.cpp:956 +msgid "" +"If specified this script is run after automerge\n" +"when no other relevant changes were detected.\n" +"Called with the parameters: filename1 filename2 filename3" +msgstr "" + +#: optiondialog.cpp:966 +#, fuzzy +msgid "Directory Merge" +msgstr "Seriveri y'ububiko:" + +#: optiondialog.cpp:975 +#, fuzzy +msgid "Recursive directories" +msgstr "ububiko bw'amaderese " + +#: optiondialog.cpp:977 +#, fuzzy +msgid "Whether to analyze subdirectories or not." +msgstr "Kuri Ububiko bwungirije Cyangwa OYA . " + +#: optiondialog.cpp:979 +#, fuzzy +msgid "File pattern(s):" +msgstr "Idosiye Ishusho ( S ) : " + +#: optiondialog.cpp:984 +#, fuzzy +msgid "" +"Pattern(s) of files to be analyzed. \n" +"Wildcards: '*' and '?'\n" +"Several Patterns can be specified by using the separator: ';'" +msgstr "" +"( S ) Bya Idosiye Kuri . \n" +": ' * ' na ' ? ' \n" +"ku ikoresha i Mutandukanya : ' ; ' " + +#: optiondialog.cpp:990 +#, fuzzy +msgid "File-anti-pattern(s):" +msgstr "Idosiye - - Ishusho ( S ) : " + +#: optiondialog.cpp:995 +#, fuzzy +msgid "" +"Pattern(s) of files to be excluded from analysis. \n" +"Wildcards: '*' and '?'\n" +"Several Patterns can be specified by using the separator: ';'" +msgstr "" +"( S ) Bya Idosiye Kuri Kuva: . \n" +": ' * ' na ' ? ' \n" +"ku ikoresha i Mutandukanya : ' ; ' " + +#: optiondialog.cpp:1001 +#, fuzzy +msgid "Dir-anti-pattern(s):" +msgstr "- - Ishusho ( S ) : " + +#: optiondialog.cpp:1006 +#, fuzzy +msgid "" +"Pattern(s) of directories to be excluded from analysis. \n" +"Wildcards: '*' and '?'\n" +"Several Patterns can be specified by using the separator: ';'" +msgstr "" +"( S ) Bya ububiko bw'amaderese Kuri Kuva: . \n" +": ' * ' na ' ? ' \n" +"ku ikoresha i Mutandukanya : ' " + +#: optiondialog.cpp:1012 +msgid "Use .cvsignore" +msgstr "" + +#: optiondialog.cpp:1015 +#, fuzzy +msgid "" +"Extends the antipattern to anything that would be ignored by CVS.\n" +"Via local \".cvsignore\"-files this can be directory specific." +msgstr "" +"i Kuri ku . \n" +"Bya hafi \" . \" - Idosiye iyi Ububiko . " + +#: optiondialog.cpp:1020 +#, fuzzy +msgid "Find hidden files and directories" +msgstr "Birahishe Idosiye na ububiko bw'amaderese " + +#: optiondialog.cpp:1023 +#, fuzzy +msgid "Finds files and directories with the hidden attribute." +msgstr "Idosiye na ububiko bw'amaderese Na: i Birahishe Ikiranga: . " + +#: optiondialog.cpp:1025 +#, fuzzy +msgid "Finds files and directories starting with '.'." +msgstr "Idosiye na ububiko bw'amaderese Itangira... Na: ' . ' . " + +#: optiondialog.cpp:1029 +#, fuzzy +msgid "Follow file links" +msgstr "Idosiye amahuza " + +#: optiondialog.cpp:1032 +#, fuzzy +msgid "" +"On: Compare the file the link points to.\n" +"Off: Compare the links." +msgstr "" +": i Idosiye i Ihuza Utudomo Kuri . \n" +": i amahuza . " + +#: optiondialog.cpp:1037 +#, fuzzy +msgid "Follow directory links" +msgstr "Ububiko amahuza " + +#: optiondialog.cpp:1040 +#, fuzzy +msgid "" +"On: Compare the directory the link points to.\n" +"Off: Compare the links." +msgstr "" +": i Ububiko i Ihuza Utudomo Kuri . \n" +": i amahuza . " + +#: optiondialog.cpp:1056 +msgid "Case sensitive filename comparison" +msgstr "" + +#: optiondialog.cpp:1059 +msgid "" +"The directory comparison will compare files or directories when their names " +"match.\n" +"Set this option if the case of the names must match. (Default for Windows is " +"off, otherwise on.)" +msgstr "" + +#: optiondialog.cpp:1063 +#, fuzzy +msgid "File Comparison Mode" +msgstr "Idosiye " + +#: optiondialog.cpp:1067 +msgid "Binary comparison" +msgstr "" + +#: optiondialog.cpp:1068 +#, fuzzy +msgid "Binary comparison of each file. (Default)" +msgstr "Bya Idosiye . ( ) " + +#: optiondialog.cpp:1070 +#, fuzzy +msgid "Full analysis" +msgstr "Kwikaraga hose" + +#: optiondialog.cpp:1071 +#, fuzzy +msgid "" +"Do a full analysis and show statistics information in extra columns.\n" +"(Slower than a binary comparison, much slower for binary files.)" +msgstr "" +"A Cyuzuye na Herekana %S Sitatisitiki Ibisobanuro: in Birenga Inkingi: . \n" +"( A Nyabibiri , ya: Nyabibiri Idosiye . ) " + +#: optiondialog.cpp:1074 +#, fuzzy +msgid "Trust the modification date (unsafe)" +msgstr "i Itariki: ( ) " + +#: optiondialog.cpp:1075 +#, fuzzy +msgid "" +"Assume that files are equal if the modification date and file length are " +"equal.\n" +"Useful for big directories or slow networks." +msgstr "" +"Idosiye bingana NIBA i Itariki: na Idosiye Uburebure bingana . \n" +"ya: ububiko bw'amaderese Cyangwa Buhoro . " + +#: optiondialog.cpp:1078 +#, fuzzy +msgid "Trust the size (unsafe)" +msgstr "i Ingano: ( ) " + +#: optiondialog.cpp:1079 +#, fuzzy +msgid "" +"Assume that files are equal if their file lengths are equal.\n" +"Useful for big directories or slow networks when the date is modified during " +"download." +msgstr "" +"Idosiye bingana NIBA Idosiye bingana . \n" +"ya: ububiko bw'amaderese Cyangwa Buhoro Ryari: i Itariki: ni Byahinduwe: " +"Iyimura . " + +#: optiondialog.cpp:1083 +#, fuzzy +msgid "Synchronize directories" +msgstr "ububiko bw'amaderese " + +#: optiondialog.cpp:1086 +#, fuzzy +msgid "" +"Offers to store files in both directories so that\n" +"both directories are the same afterwards.\n" +"Works only when comparing two directories without specifying a destination." +msgstr "" +"Kuri Idosiye in Byombi ububiko bw'amaderese ububiko bw'amaderese i . \n" +"Ryari: Kabiri ububiko bw'amaderese A Ishyika: . " + +#: optiondialog.cpp:1092 +#, fuzzy +msgid "White space differences considered equal" +msgstr "Umwanya Ibinyuranyo bingana " + +#: optiondialog.cpp:1095 +#, fuzzy +msgid "" +"If files differ only by white space consider them equal.\n" +"This is only active when full analysis is chosen." +msgstr "" +"Idosiye ku Umweru Umwanya bingana . \n" +"ni Gikora Ryari: Cyuzuye ni . " + +#: optiondialog.cpp:1101 +#, fuzzy +msgid "Copy newer instead of merging (unsafe)" +msgstr "Bya ( ) " + +#: optiondialog.cpp:1104 +#, fuzzy +msgid "" +"Don't look inside, just take the newer file.\n" +"(Use this only if you know what you are doing!)\n" +"Only effective when comparing two directories." +msgstr "" +"Kureba Mo Imbere , i Idosiye . \n" +"( iyi NIBA ! ) \n" +"CYUZUYE Ryari: Kabiri ububiko bw'amaderese . " + +#: optiondialog.cpp:1109 +#, fuzzy +msgid "Backup files (.orig)" +msgstr "Idosiye ( . ) " + +#: optiondialog.cpp:1112 +#, fuzzy +msgid "" +"When a file would be saved over an old file, then the old file\n" +"will be renamed with a '.orig'-extension instead of being deleted." +msgstr "" +"A Idosiye KURI ki/bishaje Idosiye , Hanyuma i ki/bishaje Na: A ' . - Umugereka: " +"Bya Kyasibwe: %S . " + +#: optiondialog.cpp:1176 +#, fuzzy +msgid "Regional Settings" +msgstr "Amagenamiterere y'Akarere" + +#: optiondialog.cpp:1272 +#, fuzzy +msgid "Language (restart required)" +msgstr "( Ongera utangire Bya ngombwa ) " + +#: optiondialog.cpp:1304 +#, fuzzy +msgid "" +"Choose the language of the GUI-strings or \"Auto\".\n" +"For a change of language to take place, quit and restart KDiff3." +msgstr "" +"i Ururimi: Bya i - Ikurikiranyanyuguti Cyangwa \" \" . \n" +"A Guhindura... Bya Ururimi: Kuri , &Kuvamo na Ongera utangire . " + +#: optiondialog.cpp:1322 +#, fuzzy +msgid "Use the same encoding for everything:" +msgstr "i Imisobekere: ya: : " + +#: optiondialog.cpp:1325 +#, fuzzy +msgid "" +"Enable this allows to change all encodings by changing the first only.\n" +"Disable this if different individual settings are needed." +msgstr "" +"iyi Kuri Guhindura... Byose ku i Itangira . \n" +"iyi NIBA Igenamiterere . " + +#: optiondialog.cpp:1330 +#, fuzzy +msgid "Note: Local Encoding is " +msgstr "icyitonderwa : ni " + +#: optiondialog.cpp:1334 +#, fuzzy +msgid "File Encoding for A:" +msgstr "Idosiye ya: A : " + +#: optiondialog.cpp:1340 +msgid "" +"If enabled then Unicode (UTF-16 or UTF-8) encoding will be detected.\n" +"If the file encoding is not detected then the selected encoding will be used as " +"fallback.\n" +"(Unicode detection depends on the first bytes of a file - the byte order mark " +"\"BOM\".)" +msgstr "" + +#: optiondialog.cpp:1344 optiondialog.cpp:1353 optiondialog.cpp:1362 +msgid "Auto Detect Unicode" +msgstr "" + +#: optiondialog.cpp:1349 +#, fuzzy +msgid "File Encoding for B:" +msgstr "Idosiye ya: : " + +#: optiondialog.cpp:1358 +#, fuzzy +msgid "File Encoding for C:" +msgstr "Idosiye ya: : " + +#: optiondialog.cpp:1367 +#, fuzzy +msgid "File Encoding for Merge Output and Saving:" +msgstr "Idosiye ya: na : " + +#: optiondialog.cpp:1371 +#, fuzzy +msgid "Auto Select" +msgstr "Gukoporora Ihitamo " + +#: optiondialog.cpp:1374 +msgid "" +"If enabled then the encoding from the input files is used.\n" +"In ambiguous cases a dialog will ask the user to choose the encoding for " +"saving." +msgstr "" + +#: optiondialog.cpp:1378 +#, fuzzy +msgid "File Encoding for Preprocessor Files:" +msgstr "Idosiye ya: : " + +#: optiondialog.cpp:1389 +#, fuzzy +msgid "Right To Left Language" +msgstr "Iburyo ku ibumoso" + +#: optiondialog.cpp:1392 +#, fuzzy +msgid "" +"Some languages are read from right to left.\n" +"This setting will change the viewer and editor accordingly." +msgstr "" +"Indimi Soma Kuva: Iburyo: Kuri Ibumoso: . \n" +"Igenamiterere Guhindura... i na Muhinduzi . " + +#: optiondialog.cpp:1402 +#, fuzzy +msgid "Integration" +msgstr "Igikorwa" + +#: optiondialog.cpp:1402 +#, fuzzy +msgid "Integration Settings" +msgstr "Amagenamiterere y'Akarere" + +#: optiondialog.cpp:1412 +msgid "Command line options to ignore:" +msgstr "" + +#: optiondialog.cpp:1417 +msgid "" +"List of command line options that should be ignored when KDiff3 is used by " +"other tools.\n" +"Several values can be specified if separated via ';'\n" +"This will suppress the \"Unknown option\"-error." +msgstr "" + +#: optiondialog.cpp:1480 +#, fuzzy +msgid "" +"You selected a variable width font.\n" +"\n" +"Because this program doesn't handle variable width fonts\n" +"correctly, you might experience problems while editing.\n" +"\n" +"Do you want to continue or do you want to select another font." +msgstr "" +"Byahiswemo A Impinduragaciro Ubugari: Imyandikire . \n" +"\n" +"iyi Porogaramu Impinduragaciro Ubugari: , Guhindura . \n" +"\n" +"Kuri Gukomeza Cyangwa Kuri Guhitamo Imyandikire . " + +#: optiondialog.cpp:1484 +#, fuzzy +msgid "Incompatible Font" +msgstr "%S Itakorana" + +#: optiondialog.cpp:1485 +#, fuzzy +msgid "Continue at Own Risk" +msgstr "Gukomeza Ku " + +#: optiondialog.cpp:1485 +#, fuzzy +msgid "Select Another Font" +msgstr "Gutoranya imyandikire" + +#: optiondialog.cpp:1521 +#, fuzzy +msgid "This resets all options. Not only those of the current topic." +msgstr "Byose Amahitamo . Bya i KIGEZWEHO . " + +#: pdiff.cpp:258 +#, fuzzy +msgid "PreprocessorCmd: " +msgstr "Munonosora" + +#: pdiff.cpp:263 +#, fuzzy +msgid "" +"The following option(s) you selected might change data:\n" +msgstr "" +"Ihitamo ( S ) Byahiswemo Guhindura... Ibyatanzwe : \n" + +#: pdiff.cpp:264 +#, fuzzy +msgid "" +"\n" +"Most likely this is not wanted during a merge.\n" +"Do you want to disable these settings or continue with these settings active?" +msgstr "" +"\n" +"iyi ni OYA A Gukomatanya . \n" +"Kuri Kwangira Igenamiterere Cyangwa Gukomeza Na: Igenamiterere Gikora ? " + +#: pdiff.cpp:266 +#, fuzzy +msgid "Option Unsafe for Merging" +msgstr "ya: " + +#: pdiff.cpp:267 +msgid "Use These Options During Merge" +msgstr "" + +#: pdiff.cpp:267 +#, fuzzy +msgid "Disable Unsafe Options" +msgstr "Anga amahitamo y'ishakisha y'urwego rwo hejuru" + +#: pdiff.cpp:297 +#, fuzzy +msgid "Loading A" +msgstr "A " + +#: pdiff.cpp:301 +#, fuzzy +msgid "Loading B" +msgstr "Ifungura" + +#: pdiff.cpp:318 pdiff.cpp:344 +#, fuzzy +msgid "Diff: A <-> B" +msgstr ": A < - > " + +#: pdiff.cpp:324 pdiff.cpp:366 +#, fuzzy +msgid "Linediff: A <-> B" +msgstr ": A < - > " + +#: pdiff.cpp:335 +#, fuzzy +msgid "Loading C" +msgstr "Ifungura" + +#: pdiff.cpp:347 +msgid "Diff: B <-> C" +msgstr "" + +#: pdiff.cpp:350 +#, fuzzy +msgid "Diff: A <-> C" +msgstr ": A < - > " + +#: pdiff.cpp:369 +msgid "Linediff: B <-> C" +msgstr "" + +#: pdiff.cpp:372 +#, fuzzy +msgid "Linediff: A <-> C" +msgstr ": A < - > " + +#: pdiff.cpp:513 +#, fuzzy +msgid "All input files contain the same text, but are not binary equal." +msgstr "Iyinjiza Idosiye i Umwandiko . " + +#: pdiff.cpp:515 pdiff.cpp:517 pdiff.cpp:519 +#, fuzzy +msgid "" +"Files %1 and %2 are binary equal.\n" +msgstr "" +"na Nyabibiri bingana . \n" + +#: pdiff.cpp:516 pdiff.cpp:518 pdiff.cpp:520 +#, fuzzy +msgid "" +"Files %1 and %2 have equal text, but are not binary equal. \n" +msgstr "" +"A na Nyabibiri bingana . \n" + +#: pdiff.cpp:530 +#, fuzzy +msgid "" +"Some inputfiles don't seem to be pure textfiles.\n" +"Note that the KDiff3-merge was not meant for binary data.\n" +"Continue at your own risk." +msgstr "" +"Kuri . \n" +"icyitonderwa i - Gukomatanya OYA ya: Nyabibiri Ibyatanzwe . \n" +"Gukomeza Ku . " + +#: pdiff.cpp:979 +msgid "Abort" +msgstr "Ntibyakunze" + +#: pdiff.cpp:985 pdiff.cpp:1073 +#, fuzzy +msgid "Opening files..." +msgstr "Mu Gufungura dosiye" + +#: pdiff.cpp:1050 pdiff.cpp:1121 +msgid "File open error" +msgstr "Ikosa gufungura idosiye" + +#: pdiff.cpp:1153 +#, fuzzy +msgid "Cutting selection..." +msgstr "Ihitamo ... " + +#: pdiff.cpp:1174 +#, fuzzy +msgid "Copying selection to clipboard..." +msgstr "Ihitamo Kuri Ububikokoporora ... " + +#: pdiff.cpp:1190 +#, fuzzy +msgid "Inserting clipboard contents..." +msgstr "Ububikokoporora Ibigize ... " + +#: pdiff.cpp:1713 +#, fuzzy +msgid "Save && Continue" +msgstr "Kubika & & Gukomeza " + +#: pdiff.cpp:1713 +#, fuzzy +msgid "Continue Without Saving" +msgstr "Gukomeza " + +#: pdiff.cpp:1920 +#, fuzzy +msgid "Search complete." +msgstr "Byuzuye . " + +#: pdiff.cpp:1920 +#, fuzzy +msgid "Search Complete" +msgstr "Igishushanyombonera cy'Ishakisha" + +#: pdiff.cpp:2144 +msgid "Nothing is selected in either diff input window." +msgstr "" + +#: pdiff.cpp:2144 +#, fuzzy +msgid "Error while adding manual diff range" +msgstr "Ikosa Kurema Ububiko . " + +#. i18n: file kdiff3_part.rc line 4 +#: rc.cpp:3 +#, no-c-format +msgid "&KDiff3" +msgstr "" + +#. i18n: file kdiff3_part.rc line 13 +#: rc.cpp:6 +#, fuzzy, no-c-format +msgid "Configure KDiff3" +msgstr "Kuboneza Gucapa na KDE" + +#. i18n: file kdiff3_shell.rc line 7 +#: rc.cpp:15 +#, fuzzy, no-c-format +msgid "&Directory" +msgstr "Ububiko" + +#. i18n: file kdiff3_shell.rc line 30 +#: rc.cpp:18 +#, fuzzy, no-c-format +msgid "Current Item Merge Operation" +msgstr "Ibikorerwa Ishusho" + +#. i18n: file kdiff3_shell.rc line 38 +#: rc.cpp:21 +#, fuzzy, no-c-format +msgid "Current Item Sync Operation" +msgstr "Iki cyiciro" + +#. i18n: file kdiff3_shell.rc line 50 +#: rc.cpp:24 +#, fuzzy, no-c-format +msgid "&Movement" +msgstr "Igenda" + +#. i18n: file kdiff3_shell.rc line 61 +#: rc.cpp:27 +#, fuzzy, no-c-format +msgid "D&iffview" +msgstr "Igabanya" + +#. i18n: file kdiff3_shell.rc line 73 +#: rc.cpp:30 +#, fuzzy, no-c-format +msgid "&Merge" +msgstr "Gukomatanya" + +#. i18n: file kdiff3_shell.rc line 95 +#: rc.cpp:33 +#, no-c-format +msgid "&Window" +msgstr "Idirishya" + +#: smalldialogs.cpp:53 +#, fuzzy +msgid "A (Base):" +msgstr "A ( Base ) : " + +#: smalldialogs.cpp:59 smalldialogs.cpp:75 smalldialogs.cpp:91 +#: smalldialogs.cpp:134 +#, fuzzy +msgid "File..." +msgstr "Idosiye..." + +#: smalldialogs.cpp:61 smalldialogs.cpp:77 smalldialogs.cpp:93 +#: smalldialogs.cpp:136 +#, fuzzy +msgid "Dir..." +msgstr "..." + +#: smalldialogs.cpp:86 +#, fuzzy +msgid "C (Optional):" +msgstr "(bitari ngombwa)" + +#: smalldialogs.cpp:108 +msgid "Swap/Copy Names ..." +msgstr "" + +#: smalldialogs.cpp:114 smalldialogs.cpp:115 smalldialogs.cpp:116 +msgid "Swap %1<->%2" +msgstr "" + +#: smalldialogs.cpp:117 smalldialogs.cpp:118 smalldialogs.cpp:119 +msgid "Copy %1->Output" +msgstr "" + +#: smalldialogs.cpp:120 smalldialogs.cpp:121 smalldialogs.cpp:122 +msgid "Swap %1<->Output" +msgstr "" + +#: smalldialogs.cpp:129 +#, fuzzy +msgid "Output (optional):" +msgstr "( Bitari ngombwa ) : " + +#: smalldialogs.cpp:158 +msgid "Configure..." +msgstr "Kugena imiterere..." + +#: smalldialogs.cpp:347 +#, fuzzy +msgid "Search text:" +msgstr "Umwandiko : " + +#: smalldialogs.cpp:354 +msgid "Case sensitive" +msgstr "Imyandikire y'inyuguti nkuru/nto" + +#: smalldialogs.cpp:357 +#, fuzzy +msgid "Search A" +msgstr "A " + +#: smalldialogs.cpp:362 +#, fuzzy +msgid "Search B" +msgstr "Gushaka" + +#: smalldialogs.cpp:367 +#, fuzzy +msgid "Search C" +msgstr "Gushaka" + +#: smalldialogs.cpp:372 +#, fuzzy +msgid "Search output" +msgstr "Ibisohoka " + +#: smalldialogs.cpp:377 +msgid "&Search" +msgstr "Shakisha" + +#: smalldialogs.cpp:394 +msgid "Regular Expression Tester" +msgstr "" + +#: smalldialogs.cpp:405 +msgid "Example auto merge line:" +msgstr "" + +#: smalldialogs.cpp:407 +msgid "For auto merge test copy a line as used in your files." +msgstr "" + +#: smalldialogs.cpp:413 smalldialogs.cpp:442 smalldialogs.cpp:479 +msgid "Match result:" +msgstr "" + +#: smalldialogs.cpp:432 +msgid "Example history start line (with leading comment):" +msgstr "" + +#: smalldialogs.cpp:435 +msgid "" +"Copy a history start line as used in your files,\n" +"including the leading comment." +msgstr "" + +#: smalldialogs.cpp:461 +msgid "History sort key order:" +msgstr "" + +#: smalldialogs.cpp:469 +msgid "Example history entry start line (without leading comment):" +msgstr "" + +#: smalldialogs.cpp:471 +msgid "" +"Copy a history entry start line as used in your files,\n" +"but omit the leading comment." +msgstr "" + +#: smalldialogs.cpp:486 +msgid "Sort key result:" +msgstr "" + +#: smalldialogs.cpp:537 smalldialogs.cpp:547 smalldialogs.cpp:568 +msgid "Match success." +msgstr "" + +#: smalldialogs.cpp:541 smalldialogs.cpp:551 smalldialogs.cpp:574 +#, fuzzy +msgid "Match failed." +msgstr "Byanze . " + +#: smalldialogs.cpp:559 +msgid "Opening and closing parentheses don't match in regular expression." +msgstr "" + +#, fuzzy +#~ msgid "Diff and Merge" +#~ msgstr "Ikinyuranyo/Itandukaniro" + +#, fuzzy +#~ msgid "Save Directory Merge State ..." +#~ msgstr "Seriveri y'ububiko:" + +#, fuzzy +#~ msgid "Load Directory Merge State ..." +#~ msgstr "Seriveri y'ububiko:" + +#, fuzzy +#~ msgid "Synchronize Directories" +#~ msgstr "ububiko bw'amaderese " + +#, fuzzy +#~ msgid "Copy Newer Files Instead of Merging" +#~ msgstr "Bya ( ) " + +#, fuzzy +#~ msgid "List only deltas" +#~ msgstr "Ibiri ku rutonde" + +#, fuzzy +#~ msgid "Files and directories without change will not appear in the list." +#~ msgstr "na ububiko bw'amaderese Guhindura... OYA Kugaragara in i Urutonde . " + +#, fuzzy +#~ msgid "no selection" +#~ msgstr "Gukoporora Ihitamo " + +#, fuzzy +#~ msgid "Manually match lines" +#~ msgstr "Ibishushanyo by'Intoki" + +#, fuzzy +#~ msgid "Has no effect. For compatibility with certain tools." +#~ msgstr "Oya INGARUKA . Bihuye neza Na: Ibikoresho . " + +#, fuzzy +#~ msgid "For compatibility with certain tools." +#~ msgstr "Bihuye neza Na: Ibikoresho . " + +#, fuzzy +#~ msgid "Colors in Editor & Diff Output" +#~ msgstr "in & " diff --git a/po/sk.po b/po/sk.po new file mode 100644 index 0000000..edc8f28 --- /dev/null +++ b/po/sk.po @@ -0,0 +1,2309 @@ +# translation of kdiff3.po to Slovak +# +# Richard Fric , 2006. +msgid "" +msgstr "" +"Project-Id-Version: kdiff3\n" +"POT-Creation-Date: 2006-11-05 08:45+0100\n" +"PO-Revision-Date: 2006-09-15 18:02+0200\n" +"Last-Translator: Richard Fric \n" +"Language-Team: Slovak \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: KBabel 1.11.4\n" +"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" + +#: _translatorinfo.cpp:1 +msgid "" +"_: NAME OF TRANSLATORS\n" +"Your names" +msgstr "" + +#: _translatorinfo.cpp:3 +msgid "" +"_: EMAIL OF TRANSLATORS\n" +"Your emails" +msgstr "" + +#: diff.cpp:246 +msgid "Writing clipboard data to temp file failed." +msgstr "" + +#: diff.cpp:250 +msgid "From Clipboard" +msgstr "" + +#: diff.cpp:491 +msgid "" +"Preprocessing possibly failed. Check this command:\n" +"\n" +" %1\n" +"\n" +"The preprocessing command will be disabled now." +msgstr "" + +#: diff.cpp:526 +msgid "" +"The line-matching-preprocessing possibly failed. Check this command:\n" +"\n" +" %1\n" +"\n" +"The line-matching-preprocessing command will be disabled now." +msgstr "" + +#: diff.cpp:1631 diff.cpp:1645 +msgid "" +"Data loss error:\n" +"If it is reproducable please contact the author.\n" +msgstr "" + +#: diff.cpp:1633 diff.cpp:1647 +msgid "Severe Internal Error" +msgstr "" + +#: difftextwindow.cpp:1643 kdiff3.cpp:753 +msgid "Top line" +msgstr "" + +#: difftextwindow.cpp:1653 +msgid "End" +msgstr "" + +#: directorymergewindow.cpp:142 +msgid "Mix of links and normal files." +msgstr "" + +#: directorymergewindow.cpp:149 +msgid "Link: " +msgstr "" + +#: directorymergewindow.cpp:157 +msgid "Size. " +msgstr "" + +#: directorymergewindow.cpp:170 +msgid "Date & Size: " +msgstr "" + +#: directorymergewindow.cpp:179 directorymergewindow.cpp:185 +msgid "Creating temp copy of %1 failed." +msgstr "" + +#: directorymergewindow.cpp:196 directorymergewindow.cpp:204 +msgid "Opening %1 failed." +msgstr "" + +#: directorymergewindow.cpp:208 +msgid "Comparing file..." +msgstr "" + +#: directorymergewindow.cpp:218 directorymergewindow.cpp:224 +#, c-format +msgid "Error reading from %1" +msgstr "" + +#: directorymergewindow.cpp:282 +msgid "Name" +msgstr "" + +#: directorymergewindow.cpp:286 +msgid "Operation" +msgstr "" + +#: directorymergewindow.cpp:287 +msgid "Status" +msgstr "" + +#: directorymergewindow.cpp:288 +msgid "Unsolved" +msgstr "" + +#: directorymergewindow.cpp:289 +msgid "Solved" +msgstr "" + +#: directorymergewindow.cpp:290 +msgid "Nonwhite" +msgstr "" + +#: directorymergewindow.cpp:291 +msgid "White" +msgstr "" + +#: directorymergewindow.cpp:319 +msgid "" +"You are currently doing a directory merge. Are you sure, you want to abort the " +"merge and rescan the directory?" +msgstr "" + +#: directorymergewindow.cpp:320 directorymergewindow.cpp:2868 +msgid "Rescan" +msgstr "" + +#: directorymergewindow.cpp:320 kdiff3.cpp:603 pdiff.cpp:979 +msgid "Continue Merging" +msgstr "" + +#: directorymergewindow.cpp:462 +msgid "Opening of directories failed:" +msgstr "" + +#: directorymergewindow.cpp:465 +msgid "" +"Dir A \"%1\" does not exist or is not a directory.\n" +msgstr "" + +#: directorymergewindow.cpp:468 +msgid "" +"Dir B \"%1\" does not exist or is not a directory.\n" +msgstr "" + +#: directorymergewindow.cpp:471 +msgid "" +"Dir C \"%1\" does not exist or is not a directory.\n" +msgstr "" + +#: directorymergewindow.cpp:473 +msgid "Directory Open Error" +msgstr "" + +#: directorymergewindow.cpp:481 +msgid "" +"The destination directory must not be the same as A or B when three directories " +"are merged.\n" +"Check again before continuing." +msgstr "" + +#: directorymergewindow.cpp:483 +msgid "Parameter Warning" +msgstr "" + +#: directorymergewindow.cpp:488 +msgid "Scanning directories..." +msgstr "" + +#: directorymergewindow.cpp:537 +msgid "Reading Directory A" +msgstr "" + +#: directorymergewindow.cpp:559 +msgid "Reading Directory B" +msgstr "" + +#: directorymergewindow.cpp:581 +msgid "Reading Directory C" +msgstr "" + +#: directorymergewindow.cpp:607 +msgid "Some subdirectories were not readable in" +msgstr "" + +#: directorymergewindow.cpp:612 +msgid "Check the permissions of the subdirectories." +msgstr "" + +#: directorymergewindow.cpp:646 kdiff3.cpp:552 kdiff3.cpp:636 kdiff3.cpp:661 +#: kdiff3.cpp:934 kdiff3.cpp:955 pdiff.cpp:1059 pdiff.cpp:1131 pdiff.cpp:1169 +#: pdiff.cpp:1185 pdiff.cpp:1215 pdiff.cpp:1226 +msgid "Ready." +msgstr "" + +#: directorymergewindow.cpp:660 +msgid "Directory Comparison Status" +msgstr "" + +#: directorymergewindow.cpp:661 +msgid "Number of subdirectories:" +msgstr "" + +#: directorymergewindow.cpp:662 +msgid "Number of equal files:" +msgstr "" + +#: directorymergewindow.cpp:663 +msgid "Number of different files:" +msgstr "" + +#: directorymergewindow.cpp:666 +msgid "Number of manual merges:" +msgstr "" + +#: directorymergewindow.cpp:802 +msgid "This affects all merge operations." +msgstr "" + +#: directorymergewindow.cpp:803 +msgid "Changing All Merge Operations" +msgstr "" + +#: directorymergewindow.cpp:803 mergeresultwindow.cpp:287 +msgid "C&ontinue" +msgstr "" + +#: directorymergewindow.cpp:1169 +msgid "Processing " +msgstr "" + +#: directorymergewindow.cpp:1647 directorymergewindow.cpp:1653 +msgid "To do." +msgstr "" + +#: directorymergewindow.cpp:1756 directorymergewindow.cpp:2899 +msgid "Copy A to B" +msgstr "" + +#: directorymergewindow.cpp:1757 directorymergewindow.cpp:2900 +msgid "Copy B to A" +msgstr "" + +#: directorymergewindow.cpp:1758 directorymergewindow.cpp:2901 +msgid "Delete A" +msgstr "" + +#: directorymergewindow.cpp:1759 directorymergewindow.cpp:2902 +msgid "Delete B" +msgstr "" + +#: directorymergewindow.cpp:1760 +msgid "Delete A & B" +msgstr "" + +#: directorymergewindow.cpp:1761 directorymergewindow.cpp:2904 +msgid "Merge to A" +msgstr "" + +#: directorymergewindow.cpp:1762 directorymergewindow.cpp:2905 +msgid "Merge to B" +msgstr "" + +#: directorymergewindow.cpp:1763 +msgid "Merge to A & B" +msgstr "" + +#: directorymergewindow.cpp:1767 directorymergewindow.cpp:2896 +msgid "Delete (if exists)" +msgstr "" + +#: directorymergewindow.cpp:1768 directorymergewindow.cpp:1769 +#: directorymergewindow.cpp:2895 optiondialog.cpp:809 smalldialogs.cpp:102 +msgid "Merge" +msgstr "" + +#: directorymergewindow.cpp:1768 directorymergewindow.cpp:1769 +msgid "Merge (manual)" +msgstr "" + +#: directorymergewindow.cpp:1770 +msgid "Error: Conflicting File Types" +msgstr "" + +#: directorymergewindow.cpp:1771 +msgid "Error: Dates are equal but files are not." +msgstr "" + +#: directorymergewindow.cpp:1795 directorymergewindow.cpp:1824 +#: directorymergewindow.cpp:1849 +msgid "This operation is currently not possible." +msgstr "" + +#: directorymergewindow.cpp:1795 directorymergewindow.cpp:1824 +#: directorymergewindow.cpp:1849 directorymergewindow.cpp:2106 +msgid "Operation Not Possible" +msgstr "" + +#: directorymergewindow.cpp:1888 +msgid "" +"This should never happen: \n" +"\n" +"mergeResultSaved: m_pMFI=0\n" +"\n" +"If you know how to reproduce this, please contact the program author." +msgstr "" + +#: directorymergewindow.cpp:1888 +msgid "Program Error" +msgstr "" + +#: directorymergewindow.cpp:1899 +msgid "" +"An error occurred while copying.\n" +msgstr "" + +#: directorymergewindow.cpp:1900 directorymergewindow.cpp:2306 +msgid "Merge Error" +msgstr "" + +#: directorymergewindow.cpp:1905 directorymergewindow.cpp:2311 +msgid "Error." +msgstr "" + +#: directorymergewindow.cpp:1910 directorymergewindow.cpp:2202 +#: directorymergewindow.cpp:2242 +msgid "Done." +msgstr "" + +#: directorymergewindow.cpp:1933 +msgid "Not saved." +msgstr "" + +#: directorymergewindow.cpp:1968 +msgid "Unknown merge operation. (This must never happen!)" +msgstr "" + +#: directorymergewindow.cpp:2000 +msgid "Unknown merge operation." +msgstr "" + +#: directorymergewindow.cpp:2015 +msgid "" +"The merge is about to begin.\n" +"\n" +"Choose \"Do it\" if you have read the instructions and know what you are " +"doing.\n" +"Choosing \"Simulate it\" will tell you what would happen.\n" +"\n" +"Be aware that this program still has beta status and there is NO WARRANTY " +"whatsoever! Make backups of your vital data!" +msgstr "" + +#: directorymergewindow.cpp:2020 +msgid "Starting Merge" +msgstr "" + +#: directorymergewindow.cpp:2020 +msgid "Do It" +msgstr "" + +#: directorymergewindow.cpp:2020 +msgid "Simulate It" +msgstr "" + +#: directorymergewindow.cpp:2046 +msgid "" +"The highlighted item has a different type in the different directories. Select " +"what to do." +msgstr "" + +#: directorymergewindow.cpp:2055 +msgid "" +"The modification dates of the file are equal but the files are not. Select what " +"to do." +msgstr "" + +#: directorymergewindow.cpp:2106 +msgid "" +"This operation is currently not possible because directory merge is currently " +"running." +msgstr "" + +#: directorymergewindow.cpp:2166 +msgid "" +"There was an error in the last step.\n" +"Do you want to continue with the item that caused the error or do you want to " +"skip this item?" +msgstr "" + +#: directorymergewindow.cpp:2168 +msgid "Continue merge after an error" +msgstr "" + +#: directorymergewindow.cpp:2168 +msgid "Continue With Last Item" +msgstr "" + +#: directorymergewindow.cpp:2168 +msgid "Skip Item" +msgstr "" + +#: directorymergewindow.cpp:2202 +msgid "Skipped." +msgstr "" + +#: directorymergewindow.cpp:2209 directorymergewindow.cpp:2435 +msgid "In progress..." +msgstr "" + +#: directorymergewindow.cpp:2257 +msgid "Merge operation complete." +msgstr "" + +#: directorymergewindow.cpp:2257 directorymergewindow.cpp:2260 +msgid "Merge Complete" +msgstr "" + +#: directorymergewindow.cpp:2269 +msgid "" +"Simulated merge complete: Check if you agree with the proposed operations." +msgstr "" + +#: directorymergewindow.cpp:2305 +msgid "" +"An error occurred. Press OK to see detailed information.\n" +msgstr "" + +#: directorymergewindow.cpp:2348 +msgid "Error: While deleting %1: Creating backup failed." +msgstr "" + +#: directorymergewindow.cpp:2355 +msgid "delete directory recursively( %1 )" +msgstr "" + +#: directorymergewindow.cpp:2357 +msgid "delete( %1 )" +msgstr "" + +#: directorymergewindow.cpp:2372 +msgid "Error: delete dir operation failed while trying to read the directory." +msgstr "" + +#: directorymergewindow.cpp:2391 +msgid "Error: rmdir( %1 ) operation failed." +msgstr "" + +#: directorymergewindow.cpp:2401 +msgid "Error: delete operation failed." +msgstr "" + +#: directorymergewindow.cpp:2427 +msgid "manual merge( %1, %2, %3 -> %4)" +msgstr "" + +#: directorymergewindow.cpp:2430 +msgid "" +" Note: After a manual merge the user should continue by pressing F7." +msgstr "" + +#: directorymergewindow.cpp:2453 +msgid "Error: copy( %1 -> %2 ) failed.Deleting existing destination failed." +msgstr "" + +#: directorymergewindow.cpp:2463 +msgid "copyLink( %1 -> %2 )" +msgstr "" + +#: directorymergewindow.cpp:2474 +msgid "Error: copyLink failed: Remote links are not yet supported." +msgstr "" + +#: directorymergewindow.cpp:2480 +msgid "Error: copyLink failed." +msgstr "" + +#: directorymergewindow.cpp:2500 +msgid "copy( %1 -> %2 )" +msgstr "" + +#: directorymergewindow.cpp:2526 +msgid "Error during rename( %1 -> %2 ): Cannot delete existing destination." +msgstr "" + +#: directorymergewindow.cpp:2532 +msgid "rename( %1 -> %2 )" +msgstr "" + +#: directorymergewindow.cpp:2541 +msgid "Error: Rename failed." +msgstr "" + +#: directorymergewindow.cpp:2559 +msgid "Error during makeDir of %1. Cannot delete existing file." +msgstr "" + +#: directorymergewindow.cpp:2575 +msgid "makeDir( %1 )" +msgstr "" + +#: directorymergewindow.cpp:2585 +msgid "Error while creating directory." +msgstr "" + +#: directorymergewindow.cpp:2608 directorymergewindow.cpp:2725 +msgid "Dest" +msgstr "" + +#: directorymergewindow.cpp:2612 directorymergewindow.cpp:2650 +msgid "Dir" +msgstr "" + +#: directorymergewindow.cpp:2613 +msgid "Type" +msgstr "" + +#: directorymergewindow.cpp:2614 +msgid "Size" +msgstr "" + +#: directorymergewindow.cpp:2615 +msgid "Attr" +msgstr "" + +#: directorymergewindow.cpp:2616 +msgid "Last Modification" +msgstr "" + +#: directorymergewindow.cpp:2617 +msgid "Link-Destination" +msgstr "" + +#: directorymergewindow.cpp:2667 +msgid "not available" +msgstr "" + +#: directorymergewindow.cpp:2687 +msgid "A (Dest): " +msgstr "" + +#: directorymergewindow.cpp:2690 +msgid "A (Base): " +msgstr "" + +#: directorymergewindow.cpp:2696 +msgid "B (Dest): " +msgstr "" + +#: directorymergewindow.cpp:2704 +msgid "C (Dest): " +msgstr "" + +#: directorymergewindow.cpp:2710 +msgid "Dest: " +msgstr "" + +#: directorymergewindow.cpp:2775 +msgid "Save Directory Merge State As..." +msgstr "" + +#: directorymergewindow.cpp:2862 +msgid "Start/Continue Directory Merge" +msgstr "" + +#: directorymergewindow.cpp:2863 +msgid "Run Operation for Current Item" +msgstr "" + +#: directorymergewindow.cpp:2864 +msgid "Compare Selected File" +msgstr "" + +#: directorymergewindow.cpp:2865 +msgid "Merge Current File" +msgstr "" + +#: directorymergewindow.cpp:2866 +msgid "Fold All Subdirs" +msgstr "" + +#: directorymergewindow.cpp:2867 +msgid "Unfold All Subdirs" +msgstr "" + +#: directorymergewindow.cpp:2871 +msgid "Choose A for All Items" +msgstr "" + +#: directorymergewindow.cpp:2872 +msgid "Choose B for All Items" +msgstr "" + +#: directorymergewindow.cpp:2873 +msgid "Choose C for All Items" +msgstr "" + +#: directorymergewindow.cpp:2874 +msgid "Auto-Choose Operation for All Items" +msgstr "" + +#: directorymergewindow.cpp:2875 +msgid "No Operation for All Items" +msgstr "" + +#: directorymergewindow.cpp:2880 +msgid "Show Identical Files" +msgstr "" + +#: directorymergewindow.cpp:2881 +msgid "Show Different Files" +msgstr "" + +#: directorymergewindow.cpp:2882 +msgid "Show Files only in A" +msgstr "" + +#: directorymergewindow.cpp:2883 +msgid "Show Files only in B" +msgstr "" + +#: directorymergewindow.cpp:2884 +msgid "Show Files only in C" +msgstr "" + +#: directorymergewindow.cpp:2888 +msgid "Compare Explicitly Selected Files" +msgstr "" + +#: directorymergewindow.cpp:2889 +msgid "Merge Explicitly Selected Files" +msgstr "" + +#: directorymergewindow.cpp:2891 directorymergewindow.cpp:2898 +msgid "Do Nothing" +msgstr "" + +#: directorymergewindow.cpp:2892 +msgid "A" +msgstr "" + +#: directorymergewindow.cpp:2893 +msgid "B" +msgstr "" + +#: directorymergewindow.cpp:2894 +msgid "C" +msgstr "" + +#: directorymergewindow.cpp:2903 +msgid "Delete A && B" +msgstr "" + +#: directorymergewindow.cpp:2906 +msgid "Merge to A && B" +msgstr "" + +#: fileaccess.cpp:595 +msgid "" +"While trying to make a backup, deleting an older backup failed. \n" +"Filename: " +msgstr "" + +#: fileaccess.cpp:602 +msgid "" +"While trying to make a backup, renaming failed. \n" +"Filenames: " +msgstr "" + +#: fileaccess.cpp:624 +#, c-format +msgid "Getting file status: %1" +msgstr "" + +#: fileaccess.cpp:667 +#, c-format +msgid "Reading file: %1" +msgstr "" + +#: fileaccess.cpp:703 +#, c-format +msgid "Writing file: %1" +msgstr "" + +#: fileaccess.cpp:731 +msgid "Out of memory" +msgstr "" + +#: fileaccess.cpp:766 +#, c-format +msgid "Making directory: %1" +msgstr "" + +#: fileaccess.cpp:786 +#, c-format +msgid "Removing directory: %1" +msgstr "" + +#: fileaccess.cpp:801 +#, c-format +msgid "Removing file: %1" +msgstr "" + +#: fileaccess.cpp:817 +msgid "Creating symbolic link: %1 -> %2" +msgstr "" + +#: fileaccess.cpp:843 +msgid "Renaming file: %1 -> %2" +msgstr "" + +#: fileaccess.cpp:879 +msgid "Copying file: %1 -> %2" +msgstr "" + +#: fileaccess.cpp:893 +#, c-format +msgid "" +"Error during file copy operation: Opening file for reading failed. Filename: %1" +msgstr "" + +#: fileaccess.cpp:899 +#, c-format +msgid "" +"Error during file copy operation: Opening file for writing failed. Filename: %1" +msgstr "" + +#: fileaccess.cpp:914 +#, c-format +msgid "Error during file copy operation: Reading failed. Filename: %1" +msgstr "" + +#: fileaccess.cpp:923 +#, c-format +msgid "Error during file copy operation: Writing failed. Filename: %1" +msgstr "" + +#: fileaccess.cpp:1219 +msgid "Reading directory: " +msgstr "" + +#: fileaccess.cpp:1348 +#, c-format +msgid "Listing directory: %1" +msgstr "" + +#: kdiff3.cpp:142 +msgid "Current Configuration:" +msgstr "" + +#: kdiff3.cpp:147 +msgid "Config Option Error:" +msgstr "" + +#: kdiff3.cpp:187 +msgid "Option --auto used, but no output file specified." +msgstr "" + +#: kdiff3.cpp:323 +msgid "Option --auto ignored for directory comparison." +msgstr "" + +#: kdiff3.cpp:359 +msgid "Saving failed." +msgstr "" + +#: kdiff3.cpp:386 pdiff.cpp:1041 pdiff.cpp:1112 +msgid "Opening of these files failed:" +msgstr "" + +#: kdiff3.cpp:395 +msgid "File Open Error" +msgstr "" + +#: kdiff3.cpp:418 +msgid "Opens documents for comparison..." +msgstr "" + +#: kdiff3.cpp:423 +msgid "Saves the merge result. All conflicts must be solved!" +msgstr "" + +#: kdiff3.cpp:425 +msgid "Saves the current document as..." +msgstr "" + +#: kdiff3.cpp:427 +msgid "Print the differences" +msgstr "" + +#: kdiff3.cpp:429 +msgid "Quits the application" +msgstr "" + +#: kdiff3.cpp:431 +msgid "Cuts the selected section and puts it to the clipboard" +msgstr "" + +#: kdiff3.cpp:433 +msgid "Copies the selected section to the clipboard" +msgstr "" + +#: kdiff3.cpp:435 +msgid "Pastes the clipboard contents to actual position" +msgstr "" + +#: kdiff3.cpp:437 +msgid "Select everything in current window" +msgstr "" + +#: kdiff3.cpp:439 +msgid "Search for a string" +msgstr "" + +#: kdiff3.cpp:441 +msgid "Search again for the string" +msgstr "" + +#: kdiff3.cpp:443 +msgid "Enables/disables the toolbar" +msgstr "" + +#: kdiff3.cpp:445 +msgid "Enables/disables the statusbar" +msgstr "" + +#: kdiff3.cpp:449 +msgid "Configure KDiff3..." +msgstr "" + +#: kdiff3.cpp:470 +msgid "Go to Current Delta" +msgstr "" + +#: kdiff3.cpp:471 +msgid "Go to First Delta" +msgstr "" + +#: kdiff3.cpp:472 +msgid "Go to Last Delta" +msgstr "" + +#: kdiff3.cpp:473 +msgid "(Skips white space differences when \"Show White Space\" is disabled.)" +msgstr "" + +#: kdiff3.cpp:474 +msgid "" +"(Does not skip white space differences even when \"Show White Space\" is " +"disabled.)" +msgstr "" + +#: kdiff3.cpp:475 +msgid "Go to Previous Delta" +msgstr "" + +#: kdiff3.cpp:477 +msgid "Go to Next Delta" +msgstr "" + +#: kdiff3.cpp:479 +msgid "Go to Previous Conflict" +msgstr "" + +#: kdiff3.cpp:481 +msgid "Go to Next Conflict" +msgstr "" + +#: kdiff3.cpp:483 +msgid "Go to Previous Unsolved Conflict" +msgstr "" + +#: kdiff3.cpp:485 +msgid "Go to Next Unsolved Conflict" +msgstr "" + +#: kdiff3.cpp:487 +msgid "Select Line(s) From A" +msgstr "" + +#: kdiff3.cpp:488 +msgid "Select Line(s) From B" +msgstr "" + +#: kdiff3.cpp:489 +msgid "Select Line(s) From C" +msgstr "" + +#: kdiff3.cpp:490 +msgid "Automatically Go to Next Unsolved Conflict After Source Selection" +msgstr "" + +#: kdiff3.cpp:492 +msgid "Show Space && Tabulator Characters for Differences" +msgstr "" + +#: kdiff3.cpp:493 +msgid "Show White Space" +msgstr "" + +#: kdiff3.cpp:495 +msgid "Show Line Numbers" +msgstr "" + +#: kdiff3.cpp:496 +msgid "Choose A Everywhere" +msgstr "" + +#: kdiff3.cpp:497 +msgid "Choose B Everywhere" +msgstr "" + +#: kdiff3.cpp:498 +msgid "Choose C Everywhere" +msgstr "" + +#: kdiff3.cpp:499 +msgid "Choose A for All Unsolved Conflicts" +msgstr "" + +#: kdiff3.cpp:500 +msgid "Choose B for All Unsolved Conflicts" +msgstr "" + +#: kdiff3.cpp:501 +msgid "Choose C for All Unsolved Conflicts" +msgstr "" + +#: kdiff3.cpp:502 +msgid "Choose A for All Unsolved Whitespace Conflicts" +msgstr "" + +#: kdiff3.cpp:503 +msgid "Choose B for All Unsolved Whitespace Conflicts" +msgstr "" + +#: kdiff3.cpp:504 +msgid "Choose C for All Unsolved Whitespace Conflicts" +msgstr "" + +#: kdiff3.cpp:505 +msgid "Automatically Solve Simple Conflicts" +msgstr "" + +#: kdiff3.cpp:506 +msgid "Set Deltas to Conflicts" +msgstr "" + +#: kdiff3.cpp:507 +msgid "Run Regular Expression Auto Merge" +msgstr "" + +#: kdiff3.cpp:508 +msgid "Automatically Solve History Conflicts" +msgstr "" + +#: kdiff3.cpp:509 +msgid "Split Diff At Selection" +msgstr "" + +#: kdiff3.cpp:510 +msgid "Join Selected Diffs" +msgstr "" + +#: kdiff3.cpp:512 +msgid "Show Window A" +msgstr "" + +#: kdiff3.cpp:513 +msgid "Show Window B" +msgstr "" + +#: kdiff3.cpp:514 +msgid "Show Window C" +msgstr "" + +#: kdiff3.cpp:515 kdiff3.cpp:526 +msgid "Focus Next Window" +msgstr "" + +#: kdiff3.cpp:517 +msgid "Normal Overview" +msgstr "" + +#: kdiff3.cpp:518 +msgid "A vs. B Overview" +msgstr "" + +#: kdiff3.cpp:519 +msgid "A vs. C Overview" +msgstr "" + +#: kdiff3.cpp:520 +msgid "B vs. C Overview" +msgstr "" + +#: kdiff3.cpp:521 +msgid "Word Wrap Diff Windows" +msgstr "" + +#: kdiff3.cpp:522 +msgid "Add Manual Diff Alignment" +msgstr "" + +#: kdiff3.cpp:523 +msgid "Clear All Manual Diff Alignments" +msgstr "" + +#: kdiff3.cpp:528 +msgid "Focus Prev Window" +msgstr "" + +#: kdiff3.cpp:529 +msgid "Toggle Split Orientation" +msgstr "" + +#: kdiff3.cpp:531 +msgid "Dir && Text Split Screen View" +msgstr "" + +#: kdiff3.cpp:533 +msgid "Toggle Between Dir && Text View" +msgstr "" + +#: kdiff3.cpp:582 pdiff.cpp:1712 +msgid "The merge result hasn't been saved." +msgstr "" + +#: kdiff3.cpp:583 +msgid "Save && Quit" +msgstr "" + +#: kdiff3.cpp:583 +msgid "Quit Without Saving" +msgstr "" + +#: kdiff3.cpp:591 pdiff.cpp:1721 +msgid "Saving the merge result failed." +msgstr "" + +#: kdiff3.cpp:602 pdiff.cpp:978 +msgid "" +"You are currently doing a directory merge. Are you sure, you want to abort?" +msgstr "" + +#: kdiff3.cpp:625 +msgid "Saving file..." +msgstr "" + +#: kdiff3.cpp:642 +msgid "Saving file with a new filename..." +msgstr "" + +#: kdiff3.cpp:732 +msgid "Printing..." +msgstr "" + +#: kdiff3.cpp:738 kdiff3.cpp:900 +msgid "Printing aborted." +msgstr "" + +#: kdiff3.cpp:870 +msgid "Selection" +msgstr "" + +#: kdiff3.cpp:896 +msgid "Printing completed." +msgstr "" + +#: kdiff3.cpp:906 +msgid "Exiting..." +msgstr "" + +#: kdiff3.cpp:918 +msgid "Toggling toolbar..." +msgstr "" + +#: kdiff3.cpp:939 +msgid "Toggle the statusbar..." +msgstr "" + +#: kdiff3_part.cpp:155 kdiff3_part.cpp:224 +msgid "Couldn't find files for comparison." +msgstr "" + +#: kdiff3_part.cpp:291 +msgid "KDiff3Part" +msgstr "" + +#: kdiff3_shell.cpp:78 +msgid "" +"Could not find our part!\n" +"This usually happens due to an installation problem. Please read the " +"README-file in the source package for details." +msgstr "" + +#: main.cpp:35 +msgid "Tool for Comparison and Merge of Files and Directories" +msgstr "" + +#: main.cpp:40 +msgid "Merge the input." +msgstr "" + +#: main.cpp:42 +msgid "Explicit base file. For compatibility with certain tools." +msgstr "" + +#: main.cpp:44 +msgid "Output file. Implies -m. E.g.: -o newfile.txt" +msgstr "" + +#: main.cpp:45 +msgid "Output file, again. (For compatibility with certain tools.)" +msgstr "" + +#: main.cpp:46 +msgid "No GUI if all conflicts are auto-solvable. (Needs -o file)" +msgstr "" + +#: main.cpp:47 +msgid "Don't solve conflicts automatically. (For compatibility...)" +msgstr "" + +#: main.cpp:48 +msgid "Visible name replacement for input file 1 (base)." +msgstr "" + +#: main.cpp:49 +msgid "Visible name replacement for input file 2." +msgstr "" + +#: main.cpp:50 +msgid "Visible name replacement for input file 3." +msgstr "" + +#: main.cpp:52 +msgid "Alternative visible name replacement. Supply this once for every input." +msgstr "" + +#: main.cpp:53 +msgid "" +"Override a config setting. Use once for every setting. E.g.: --cs " +"\"AutoAdvance=1\"" +msgstr "" + +#: main.cpp:54 +msgid "Show list of config settings and current values." +msgstr "" + +#: main.cpp:55 +msgid "Use a different config file." +msgstr "" + +#: main.cpp:59 +msgid "file1 to open (base, if not specified via --base)" +msgstr "" + +#: main.cpp:60 +msgid "file2 to open" +msgstr "" + +#: main.cpp:61 +msgid "file3 to open" +msgstr "" + +#: main.cpp:93 +msgid "Ignored. (User defined.)" +msgstr "" + +#. i18n: file kdiff3_part.rc line 16 +#: main.cpp:173 rc.cpp:9 +#, no-c-format +msgid "KDiff3" +msgstr "" + +#: main.cpp:186 +msgid "+ Many thanks to those who reported bugs and contributed ideas!" +msgstr "" + +#: mergeresultwindow.cpp:136 mergeresultwindow.cpp:939 +#: mergeresultwindow.cpp:953 mergeresultwindow.cpp:965 +#: mergeresultwindow.cpp:977 +msgid "Number of remaining unsolved conflicts: %1 (of which %2 are whitespace)" +msgstr "" + +#: mergeresultwindow.cpp:285 +msgid "" +"The output has been modified.\n" +"If you continue your changes will be lost." +msgstr "" + +#: mergeresultwindow.cpp:797 pdiff.cpp:511 +msgid "All input files are binary equal." +msgstr "" + +#: mergeresultwindow.cpp:799 +msgid "All input files contain the same text." +msgstr "" + +#: mergeresultwindow.cpp:801 +msgid "" +"Files A and B are binary equal.\n" +msgstr "" + +#: mergeresultwindow.cpp:802 +msgid "" +"Files A and B have equal text. \n" +msgstr "" + +#: mergeresultwindow.cpp:803 +msgid "" +"Files A and C are binary equal.\n" +msgstr "" + +#: mergeresultwindow.cpp:804 +msgid "" +"Files A and C have equal text. \n" +msgstr "" + +#: mergeresultwindow.cpp:805 +msgid "" +"Files B and C are binary equal.\n" +msgstr "" + +#: mergeresultwindow.cpp:806 +msgid "" +"Files B and C have equal text. \n" +msgstr "" + +#: mergeresultwindow.cpp:812 +msgid "Total number of conflicts: " +msgstr "" + +#: mergeresultwindow.cpp:813 +msgid "" +"\n" +"Nr of automatically solved conflicts: " +msgstr "" + +#: mergeresultwindow.cpp:814 +msgid "" +"\n" +"Nr of unsolved conflicts: " +msgstr "" + +#: mergeresultwindow.cpp:816 +msgid "Conflicts" +msgstr "" + +#: mergeresultwindow.cpp:1652 +msgid "" +msgstr "" + +#: mergeresultwindow.cpp:1660 +msgid "" +msgstr "" + +#: mergeresultwindow.cpp:1662 mergeresultwindow.cpp:2427 +msgid "" +msgstr "" + +#: mergeresultwindow.cpp:2635 +msgid "" +"Not all conflicts are solved yet.\n" +"File not saved.\n" +msgstr "" + +#: mergeresultwindow.cpp:2637 +msgid "Conflicts Left" +msgstr "" + +#: mergeresultwindow.cpp:2649 +msgid "" +"\n" +"\n" +"Creating backup failed. File not saved." +msgstr "" + +#: mergeresultwindow.cpp:2649 mergeresultwindow.cpp:2689 +msgid "File Save Error" +msgstr "" + +#: mergeresultwindow.cpp:2689 +msgid "Error while writing." +msgstr "" + +#: mergeresultwindow.cpp:3020 +msgid "Output" +msgstr "" + +#: mergeresultwindow.cpp:3032 mergeresultwindow.cpp:3139 +msgid "[Modified]" +msgstr "" + +#: mergeresultwindow.cpp:3039 +msgid "Encoding for saving" +msgstr "" + +#: mergeresultwindow.cpp:3075 mergeresultwindow.cpp:3081 +#: mergeresultwindow.cpp:3087 +msgid "Codec from" +msgstr "" + +#: optiondialog.cpp:362 +msgid "Unicode, 8 bit" +msgstr "" + +#: optiondialog.cpp:363 +msgid "Unicode" +msgstr "" + +#: optiondialog.cpp:364 +msgid "Latin1" +msgstr "" + +#: optiondialog.cpp:383 +msgid "Change this if non-ASCII characters are not displayed correctly." +msgstr "" + +#: optiondialog.cpp:510 +msgid "Editor & Diff Output Font" +msgstr "" + +#: optiondialog.cpp:531 +msgid "Italic font for deltas" +msgstr "" + +#: optiondialog.cpp:534 +msgid "" +"Selects the italic version of the font for differences.\n" +"If the font doesn't support italic characters, then this does nothing." +msgstr "" + +#: optiondialog.cpp:542 +msgid "Color" +msgstr "" + +#: optiondialog.cpp:542 +msgid "Colors Settings" +msgstr "" + +#: optiondialog.cpp:556 +msgid "Editor and Diff Views:" +msgstr "" + +#: optiondialog.cpp:564 +msgid "Foreground color:" +msgstr "" + +#: optiondialog.cpp:570 +msgid "Background color:" +msgstr "" + +#: optiondialog.cpp:578 +msgid "Diff background color:" +msgstr "" + +#: optiondialog.cpp:585 +msgid "Color A:" +msgstr "" + +#: optiondialog.cpp:592 +msgid "Color B:" +msgstr "" + +#: optiondialog.cpp:599 +msgid "Color C:" +msgstr "" + +#: optiondialog.cpp:605 +msgid "Conflict color:" +msgstr "" + +#: optiondialog.cpp:612 +msgid "Current range background color:" +msgstr "" + +#: optiondialog.cpp:619 +msgid "Current range diff background color:" +msgstr "" + +#: optiondialog.cpp:625 +msgid "Color for manually aligned difference ranges:" +msgstr "" + +#: optiondialog.cpp:630 +msgid "Directory Comparison View:" +msgstr "" + +#: optiondialog.cpp:636 +msgid "Newest file color:" +msgstr "" + +#: optiondialog.cpp:639 +msgid "" +"Changing this color will only be effective when starting the next directory " +"comparison." +msgstr "" + +#: optiondialog.cpp:644 +msgid "Oldest file color:" +msgstr "" + +#: optiondialog.cpp:651 +msgid "Middle age file color:" +msgstr "" + +#: optiondialog.cpp:658 +msgid "Color for missing files:" +msgstr "" + +#: optiondialog.cpp:670 +msgid "Editor" +msgstr "" + +#: optiondialog.cpp:670 +msgid "Editor Behavior" +msgstr "" + +#: optiondialog.cpp:680 +msgid "Tab inserts spaces" +msgstr "" + +#: optiondialog.cpp:683 +msgid "" +"On: Pressing tab generates the appropriate number of spaces.\n" +"Off: A Tab-character will be inserted." +msgstr "" + +#: optiondialog.cpp:689 +msgid "Tab size:" +msgstr "" + +#: optiondialog.cpp:694 +msgid "Auto indentation" +msgstr "" + +#: optiondialog.cpp:697 +msgid "" +"On: The indentation of the previous line is used for a new line.\n" +msgstr "" + +#: optiondialog.cpp:701 +msgid "Auto copy selection" +msgstr "" + +#: optiondialog.cpp:704 +msgid "" +"On: Any selection is immediately written to the clipboard.\n" +"Off: You must explicitely copy e.g. via Ctrl-C." +msgstr "" + +#: optiondialog.cpp:709 +msgid "Line end style:" +msgstr "" + +#: optiondialog.cpp:721 +msgid "" +"Sets the line endings for when an edited file is saved.\n" +"DOS/Windows: CR+LF; UNIX: LF; with CR=0D, LF=0A" +msgstr "" + +#: optiondialog.cpp:732 +msgid "Diff" +msgstr "" + +#: optiondialog.cpp:732 +msgid "Diff Settings" +msgstr "" + +#: optiondialog.cpp:743 +msgid "Preserve carriage return" +msgstr "" + +#: optiondialog.cpp:746 +msgid "" +"Show carriage return characters '\\r' if they exist.\n" +"Helps to compare files that were modified under different operating systems." +msgstr "" + +#: optiondialog.cpp:751 +msgid "Ignore numbers" +msgstr "" + +#: optiondialog.cpp:754 +msgid "" +"Ignore number characters during line matching phase. (Similar to Ignore white " +"space.)\n" +"Might help to compare files with numeric data." +msgstr "" + +#: optiondialog.cpp:759 +msgid "Ignore C/C++ comments" +msgstr "" + +#: optiondialog.cpp:761 +msgid "Treat C/C++ comments like white space." +msgstr "" + +#: optiondialog.cpp:765 +msgid "Ignore case" +msgstr "" + +#: optiondialog.cpp:768 +msgid "Treat case differences like white space changes. ('a'<=>'A')" +msgstr "" + +#: optiondialog.cpp:772 +msgid "Preprocessor command:" +msgstr "" + +#: optiondialog.cpp:776 +msgid "User defined pre-processing. (See the docs for details.)" +msgstr "" + +#: optiondialog.cpp:779 +msgid "Line-matching preprocessor command:" +msgstr "" + +#: optiondialog.cpp:783 +msgid "" +"This pre-processor is only used during line matching.\n" +"(See the docs for details.)" +msgstr "" + +#: optiondialog.cpp:786 +msgid "Try hard (slower)" +msgstr "" + +#: optiondialog.cpp:789 +msgid "" +"Enables the --minimal option for the external diff.\n" +"The analysis of big files will be much slower." +msgstr "" + +#: optiondialog.cpp:794 +msgid "Auto advance delay (ms):" +msgstr "" + +#: optiondialog.cpp:799 +msgid "" +"When in Auto-Advance mode the result of the current selection is shown \n" +"for the specified time, before jumping to the next conflict. Range: 0-2000 ms" +msgstr "" + +#: optiondialog.cpp:809 +msgid "Merge Settings" +msgstr "" + +#: optiondialog.cpp:822 +msgid "White space 2-file merge default:" +msgstr "" + +#: optiondialog.cpp:826 optiondialog.cpp:839 +msgid "Manual Choice" +msgstr "" + +#: optiondialog.cpp:830 optiondialog.cpp:844 +msgid "" +"Allow the merge algorithm to automatically select an input for white-space-only " +"changes." +msgstr "" + +#: optiondialog.cpp:835 +msgid "White space 3-file merge default:" +msgstr "" + +#: optiondialog.cpp:849 +msgid "Automatic Merge Regular Expression" +msgstr "" + +#: optiondialog.cpp:858 smalldialogs.cpp:397 +msgid "Auto merge regular expression:" +msgstr "" + +#: optiondialog.cpp:862 +msgid "" +"Regular expression for lines where KDiff3 should automatically choose one " +"source.\n" +"When a line with a conflict matches the regular expression then\n" +"- if available - C, otherwise B will be chosen." +msgstr "" + +#: optiondialog.cpp:868 +msgid "Run regular expression auto merge on merge start" +msgstr "" + +#: optiondialog.cpp:870 +msgid "" +"Run the merge for auto merge regular expressions\n" +"immediately when a merge starts.\n" +msgstr "" + +#: optiondialog.cpp:875 +msgid "Version Control History Merging" +msgstr "" + +#: optiondialog.cpp:884 smalldialogs.cpp:424 +msgid "History start regular expression:" +msgstr "" + +#: optiondialog.cpp:888 +msgid "" +"Regular expression for the start of the version control history entry.\n" +"Usually this line contains the \"$Log$\"-keyword.\n" +"Default value: \".*\\$Log.*\\$.*\"" +msgstr "" + +#: optiondialog.cpp:894 smalldialogs.cpp:453 +msgid "History entry start regular expression:" +msgstr "" + +#: optiondialog.cpp:906 +msgid "" +"A version control history entry consists of several lines.\n" +"Specify the regular expression to detect the first line (without the leading " +"comment).\n" +"Use parentheses to group the keys you want to use for sorting.\n" +"If left empty, then KDiff3 assumes that empty lines separate history entries.\n" +"See the documentation for details." +msgstr "" + +#: optiondialog.cpp:914 +msgid "History merge sorting" +msgstr "" + +#: optiondialog.cpp:916 +msgid "Sort version control history by a key." +msgstr "" + +#: optiondialog.cpp:926 +msgid "History entry start sort key order:" +msgstr "" + +#: optiondialog.cpp:930 +msgid "" +"Each parentheses used in the regular expression for the history start entry\n" +"groups a key that can be used for sorting.\n" +"Specify the list of keys (that are numbered in order of occurrence\n" +"starting with 1) using ',' as separator (e.g. \"4,5,6,1,2,3,7\").\n" +"If left empty, then no sorting will be done.\n" +"See the documentation for details." +msgstr "" + +#: optiondialog.cpp:941 +msgid "Merge version control history on merge start" +msgstr "" + +#: optiondialog.cpp:943 +msgid "Run version control history automerge on merge start." +msgstr "" + +#: optiondialog.cpp:947 +msgid "Test your regular expressions" +msgstr "" + +#: optiondialog.cpp:952 +msgid "Irrelevant merge command:" +msgstr "" + +#: optiondialog.cpp:956 +msgid "" +"If specified this script is run after automerge\n" +"when no other relevant changes were detected.\n" +"Called with the parameters: filename1 filename2 filename3" +msgstr "" + +#: optiondialog.cpp:966 +msgid "Directory Merge" +msgstr "" + +#: optiondialog.cpp:975 +msgid "Recursive directories" +msgstr "" + +#: optiondialog.cpp:977 +msgid "Whether to analyze subdirectories or not." +msgstr "" + +#: optiondialog.cpp:979 +msgid "File pattern(s):" +msgstr "" + +#: optiondialog.cpp:984 +msgid "" +"Pattern(s) of files to be analyzed. \n" +"Wildcards: '*' and '?'\n" +"Several Patterns can be specified by using the separator: ';'" +msgstr "" + +#: optiondialog.cpp:990 +msgid "File-anti-pattern(s):" +msgstr "" + +#: optiondialog.cpp:995 +msgid "" +"Pattern(s) of files to be excluded from analysis. \n" +"Wildcards: '*' and '?'\n" +"Several Patterns can be specified by using the separator: ';'" +msgstr "" + +#: optiondialog.cpp:1001 +msgid "Dir-anti-pattern(s):" +msgstr "" + +#: optiondialog.cpp:1006 +msgid "" +"Pattern(s) of directories to be excluded from analysis. \n" +"Wildcards: '*' and '?'\n" +"Several Patterns can be specified by using the separator: ';'" +msgstr "" + +#: optiondialog.cpp:1012 +msgid "Use .cvsignore" +msgstr "" + +#: optiondialog.cpp:1015 +msgid "" +"Extends the antipattern to anything that would be ignored by CVS.\n" +"Via local \".cvsignore\"-files this can be directory specific." +msgstr "" + +#: optiondialog.cpp:1020 +msgid "Find hidden files and directories" +msgstr "" + +#: optiondialog.cpp:1023 +msgid "Finds files and directories with the hidden attribute." +msgstr "" + +#: optiondialog.cpp:1025 +msgid "Finds files and directories starting with '.'." +msgstr "" + +#: optiondialog.cpp:1029 +msgid "Follow file links" +msgstr "" + +#: optiondialog.cpp:1032 +msgid "" +"On: Compare the file the link points to.\n" +"Off: Compare the links." +msgstr "" + +#: optiondialog.cpp:1037 +msgid "Follow directory links" +msgstr "" + +#: optiondialog.cpp:1040 +msgid "" +"On: Compare the directory the link points to.\n" +"Off: Compare the links." +msgstr "" + +#: optiondialog.cpp:1056 +msgid "Case sensitive filename comparison" +msgstr "" + +#: optiondialog.cpp:1059 +msgid "" +"The directory comparison will compare files or directories when their names " +"match.\n" +"Set this option if the case of the names must match. (Default for Windows is " +"off, otherwise on.)" +msgstr "" + +#: optiondialog.cpp:1063 +msgid "File Comparison Mode" +msgstr "" + +#: optiondialog.cpp:1067 +msgid "Binary comparison" +msgstr "" + +#: optiondialog.cpp:1068 +msgid "Binary comparison of each file. (Default)" +msgstr "" + +#: optiondialog.cpp:1070 +msgid "Full analysis" +msgstr "" + +#: optiondialog.cpp:1071 +msgid "" +"Do a full analysis and show statistics information in extra columns.\n" +"(Slower than a binary comparison, much slower for binary files.)" +msgstr "" + +#: optiondialog.cpp:1074 +msgid "Trust the modification date (unsafe)" +msgstr "" + +#: optiondialog.cpp:1075 +msgid "" +"Assume that files are equal if the modification date and file length are " +"equal.\n" +"Useful for big directories or slow networks." +msgstr "" + +#: optiondialog.cpp:1078 +msgid "Trust the size (unsafe)" +msgstr "" + +#: optiondialog.cpp:1079 +msgid "" +"Assume that files are equal if their file lengths are equal.\n" +"Useful for big directories or slow networks when the date is modified during " +"download." +msgstr "" + +#: optiondialog.cpp:1083 +msgid "Synchronize directories" +msgstr "" + +#: optiondialog.cpp:1086 +msgid "" +"Offers to store files in both directories so that\n" +"both directories are the same afterwards.\n" +"Works only when comparing two directories without specifying a destination." +msgstr "" + +#: optiondialog.cpp:1092 +msgid "White space differences considered equal" +msgstr "" + +#: optiondialog.cpp:1095 +msgid "" +"If files differ only by white space consider them equal.\n" +"This is only active when full analysis is chosen." +msgstr "" + +#: optiondialog.cpp:1101 +msgid "Copy newer instead of merging (unsafe)" +msgstr "" + +#: optiondialog.cpp:1104 +msgid "" +"Don't look inside, just take the newer file.\n" +"(Use this only if you know what you are doing!)\n" +"Only effective when comparing two directories." +msgstr "" + +#: optiondialog.cpp:1109 +msgid "Backup files (.orig)" +msgstr "" + +#: optiondialog.cpp:1112 +msgid "" +"When a file would be saved over an old file, then the old file\n" +"will be renamed with a '.orig'-extension instead of being deleted." +msgstr "" + +#: optiondialog.cpp:1176 +msgid "Regional Settings" +msgstr "" + +#: optiondialog.cpp:1272 +msgid "Language (restart required)" +msgstr "" + +#: optiondialog.cpp:1304 +msgid "" +"Choose the language of the GUI-strings or \"Auto\".\n" +"For a change of language to take place, quit and restart KDiff3." +msgstr "" + +#: optiondialog.cpp:1322 +msgid "Use the same encoding for everything:" +msgstr "" + +#: optiondialog.cpp:1325 +msgid "" +"Enable this allows to change all encodings by changing the first only.\n" +"Disable this if different individual settings are needed." +msgstr "" + +#: optiondialog.cpp:1330 +msgid "Note: Local Encoding is " +msgstr "" + +#: optiondialog.cpp:1334 +msgid "File Encoding for A:" +msgstr "" + +#: optiondialog.cpp:1340 +msgid "" +"If enabled then Unicode (UTF-16 or UTF-8) encoding will be detected.\n" +"If the file encoding is not detected then the selected encoding will be used as " +"fallback.\n" +"(Unicode detection depends on the first bytes of a file - the byte order mark " +"\"BOM\".)" +msgstr "" + +#: optiondialog.cpp:1344 optiondialog.cpp:1353 optiondialog.cpp:1362 +msgid "Auto Detect Unicode" +msgstr "" + +#: optiondialog.cpp:1349 +msgid "File Encoding for B:" +msgstr "" + +#: optiondialog.cpp:1358 +msgid "File Encoding for C:" +msgstr "" + +#: optiondialog.cpp:1367 +msgid "File Encoding for Merge Output and Saving:" +msgstr "" + +#: optiondialog.cpp:1371 +msgid "Auto Select" +msgstr "" + +#: optiondialog.cpp:1374 +msgid "" +"If enabled then the encoding from the input files is used.\n" +"In ambiguous cases a dialog will ask the user to choose the encoding for " +"saving." +msgstr "" + +#: optiondialog.cpp:1378 +msgid "File Encoding for Preprocessor Files:" +msgstr "" + +#: optiondialog.cpp:1389 +msgid "Right To Left Language" +msgstr "" + +#: optiondialog.cpp:1392 +msgid "" +"Some languages are read from right to left.\n" +"This setting will change the viewer and editor accordingly." +msgstr "" + +#: optiondialog.cpp:1402 +msgid "Integration" +msgstr "" + +#: optiondialog.cpp:1402 +msgid "Integration Settings" +msgstr "" + +#: optiondialog.cpp:1412 +msgid "Command line options to ignore:" +msgstr "" + +#: optiondialog.cpp:1417 +msgid "" +"List of command line options that should be ignored when KDiff3 is used by " +"other tools.\n" +"Several values can be specified if separated via ';'\n" +"This will suppress the \"Unknown option\"-error." +msgstr "" + +#: optiondialog.cpp:1480 +msgid "" +"You selected a variable width font.\n" +"\n" +"Because this program doesn't handle variable width fonts\n" +"correctly, you might experience problems while editing.\n" +"\n" +"Do you want to continue or do you want to select another font." +msgstr "" + +#: optiondialog.cpp:1484 +msgid "Incompatible Font" +msgstr "" + +#: optiondialog.cpp:1485 +msgid "Continue at Own Risk" +msgstr "" + +#: optiondialog.cpp:1485 +msgid "Select Another Font" +msgstr "" + +#: optiondialog.cpp:1521 +msgid "This resets all options. Not only those of the current topic." +msgstr "" + +#: pdiff.cpp:258 +msgid "PreprocessorCmd: " +msgstr "" + +#: pdiff.cpp:263 +msgid "" +"The following option(s) you selected might change data:\n" +msgstr "" + +#: pdiff.cpp:264 +msgid "" +"\n" +"Most likely this is not wanted during a merge.\n" +"Do you want to disable these settings or continue with these settings active?" +msgstr "" + +#: pdiff.cpp:266 +msgid "Option Unsafe for Merging" +msgstr "" + +#: pdiff.cpp:267 +msgid "Use These Options During Merge" +msgstr "" + +#: pdiff.cpp:267 +msgid "Disable Unsafe Options" +msgstr "" + +#: pdiff.cpp:297 +msgid "Loading A" +msgstr "" + +#: pdiff.cpp:301 +msgid "Loading B" +msgstr "" + +#: pdiff.cpp:318 pdiff.cpp:344 +msgid "Diff: A <-> B" +msgstr "" + +#: pdiff.cpp:324 pdiff.cpp:366 +msgid "Linediff: A <-> B" +msgstr "" + +#: pdiff.cpp:335 +msgid "Loading C" +msgstr "" + +#: pdiff.cpp:347 +msgid "Diff: B <-> C" +msgstr "" + +#: pdiff.cpp:350 +msgid "Diff: A <-> C" +msgstr "" + +#: pdiff.cpp:369 +msgid "Linediff: B <-> C" +msgstr "" + +#: pdiff.cpp:372 +msgid "Linediff: A <-> C" +msgstr "" + +#: pdiff.cpp:513 +msgid "All input files contain the same text, but are not binary equal." +msgstr "" + +#: pdiff.cpp:515 pdiff.cpp:517 pdiff.cpp:519 +msgid "" +"Files %1 and %2 are binary equal.\n" +msgstr "" + +#: pdiff.cpp:516 pdiff.cpp:518 pdiff.cpp:520 +msgid "" +"Files %1 and %2 have equal text, but are not binary equal. \n" +msgstr "" + +#: pdiff.cpp:530 +msgid "" +"Some inputfiles don't seem to be pure textfiles.\n" +"Note that the KDiff3-merge was not meant for binary data.\n" +"Continue at your own risk." +msgstr "" + +#: pdiff.cpp:979 +msgid "Abort" +msgstr "" + +#: pdiff.cpp:985 pdiff.cpp:1073 +msgid "Opening files..." +msgstr "" + +#: pdiff.cpp:1050 pdiff.cpp:1121 +msgid "File open error" +msgstr "" + +#: pdiff.cpp:1153 +msgid "Cutting selection..." +msgstr "" + +#: pdiff.cpp:1174 +msgid "Copying selection to clipboard..." +msgstr "" + +#: pdiff.cpp:1190 +msgid "Inserting clipboard contents..." +msgstr "" + +#: pdiff.cpp:1713 +msgid "Save && Continue" +msgstr "" + +#: pdiff.cpp:1713 +msgid "Continue Without Saving" +msgstr "" + +#: pdiff.cpp:1920 +msgid "Search complete." +msgstr "" + +#: pdiff.cpp:1920 +msgid "Search Complete" +msgstr "" + +#: pdiff.cpp:2144 +msgid "Nothing is selected in either diff input window." +msgstr "" + +#: pdiff.cpp:2144 +msgid "Error while adding manual diff range" +msgstr "" + +#. i18n: file kdiff3_part.rc line 4 +#: rc.cpp:3 +#, no-c-format +msgid "&KDiff3" +msgstr "" + +#. i18n: file kdiff3_part.rc line 13 +#: rc.cpp:6 +#, no-c-format +msgid "Configure KDiff3" +msgstr "" + +#. i18n: file kdiff3_shell.rc line 7 +#: rc.cpp:15 +#, no-c-format +msgid "&Directory" +msgstr "" + +#. i18n: file kdiff3_shell.rc line 30 +#: rc.cpp:18 +#, no-c-format +msgid "Current Item Merge Operation" +msgstr "" + +#. i18n: file kdiff3_shell.rc line 38 +#: rc.cpp:21 +#, no-c-format +msgid "Current Item Sync Operation" +msgstr "" + +#. i18n: file kdiff3_shell.rc line 50 +#: rc.cpp:24 +#, no-c-format +msgid "&Movement" +msgstr "" + +#. i18n: file kdiff3_shell.rc line 61 +#: rc.cpp:27 +#, no-c-format +msgid "D&iffview" +msgstr "" + +#. i18n: file kdiff3_shell.rc line 73 +#: rc.cpp:30 +#, no-c-format +msgid "&Merge" +msgstr "" + +#. i18n: file kdiff3_shell.rc line 95 +#: rc.cpp:33 +#, no-c-format +msgid "&Window" +msgstr "" + +#: smalldialogs.cpp:53 +msgid "A (Base):" +msgstr "" + +#: smalldialogs.cpp:59 smalldialogs.cpp:75 smalldialogs.cpp:91 +#: smalldialogs.cpp:134 +msgid "File..." +msgstr "" + +#: smalldialogs.cpp:61 smalldialogs.cpp:77 smalldialogs.cpp:93 +#: smalldialogs.cpp:136 +msgid "Dir..." +msgstr "" + +#: smalldialogs.cpp:86 +msgid "C (Optional):" +msgstr "" + +#: smalldialogs.cpp:108 +msgid "Swap/Copy Names ..." +msgstr "" + +#: smalldialogs.cpp:114 smalldialogs.cpp:115 smalldialogs.cpp:116 +msgid "Swap %1<->%2" +msgstr "" + +#: smalldialogs.cpp:117 smalldialogs.cpp:118 smalldialogs.cpp:119 +msgid "Copy %1->Output" +msgstr "" + +#: smalldialogs.cpp:120 smalldialogs.cpp:121 smalldialogs.cpp:122 +msgid "Swap %1<->Output" +msgstr "" + +#: smalldialogs.cpp:129 +msgid "Output (optional):" +msgstr "" + +#: smalldialogs.cpp:158 +msgid "Configure..." +msgstr "" + +#: smalldialogs.cpp:347 +msgid "Search text:" +msgstr "" + +#: smalldialogs.cpp:354 +msgid "Case sensitive" +msgstr "" + +#: smalldialogs.cpp:357 +msgid "Search A" +msgstr "" + +#: smalldialogs.cpp:362 +msgid "Search B" +msgstr "" + +#: smalldialogs.cpp:367 +msgid "Search C" +msgstr "" + +#: smalldialogs.cpp:372 +msgid "Search output" +msgstr "" + +#: smalldialogs.cpp:377 +msgid "&Search" +msgstr "" + +#: smalldialogs.cpp:394 +msgid "Regular Expression Tester" +msgstr "" + +#: smalldialogs.cpp:405 +msgid "Example auto merge line:" +msgstr "" + +#: smalldialogs.cpp:407 +msgid "For auto merge test copy a line as used in your files." +msgstr "" + +#: smalldialogs.cpp:413 smalldialogs.cpp:442 smalldialogs.cpp:479 +msgid "Match result:" +msgstr "" + +#: smalldialogs.cpp:432 +msgid "Example history start line (with leading comment):" +msgstr "" + +#: smalldialogs.cpp:435 +msgid "" +"Copy a history start line as used in your files,\n" +"including the leading comment." +msgstr "" + +#: smalldialogs.cpp:461 +msgid "History sort key order:" +msgstr "" + +#: smalldialogs.cpp:469 +msgid "Example history entry start line (without leading comment):" +msgstr "" + +#: smalldialogs.cpp:471 +msgid "" +"Copy a history entry start line as used in your files,\n" +"but omit the leading comment." +msgstr "" + +#: smalldialogs.cpp:486 +msgid "Sort key result:" +msgstr "" + +#: smalldialogs.cpp:537 smalldialogs.cpp:547 smalldialogs.cpp:568 +msgid "Match success." +msgstr "" + +#: smalldialogs.cpp:541 smalldialogs.cpp:551 smalldialogs.cpp:574 +msgid "Match failed." +msgstr "" + +#: smalldialogs.cpp:559 +msgid "Opening and closing parentheses don't match in regular expression." +msgstr "" diff --git a/po/sr.po b/po/sr.po new file mode 100644 index 0000000..bf7c723 --- /dev/null +++ b/po/sr.po @@ -0,0 +1,2586 @@ +# translation of kdiff3.po to Serbian +# Copyright (C) 2003, 2005 Free Software Foundation, Inc. +# Chusslove Illich , 2003. +# Chusslove Illich , 2005. +# +msgid "" +msgstr "" +"Project-Id-Version: kdiff3\n" +"POT-Creation-Date: 2006-11-05 08:45+0100\n" +"PO-Revision-Date: 2005-02-26 19:41+0100\n" +"Last-Translator: Chusslove Illich \n" +"Language-Team: Serbian\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: KBabel 1.9.1\n" + +#: _translatorinfo.cpp:1 +msgid "" +"_: NAME OF TRANSLATORS\n" +"Your names" +msgstr "ЧаÑлав Илић, Слободан Симић" + +#: _translatorinfo.cpp:3 +msgid "" +"_: EMAIL OF TRANSLATORS\n" +"Your emails" +msgstr "caslav.ilic@gmx.net,simicsl@verat.net" + +#: diff.cpp:246 +msgid "Writing clipboard data to temp file failed." +msgstr "УпиÑивање података из клипборда у привремени фајл није уÑпело." + +#: diff.cpp:250 +msgid "From Clipboard" +msgstr "Из клипборда" + +#: diff.cpp:491 +msgid "" +"Preprocessing possibly failed. Check this command:\n" +"\n" +" %1\n" +"\n" +"The preprocessing command will be disabled now." +msgstr "" +"Предобрада је вероватно неуÑпешна. Проверите ову наредбу:\n" +"\n" +" %1\n" +"\n" +"Ðаредба предобраде ће Ñада бити иÑкључена." + +#: diff.cpp:526 +msgid "" +"The line-matching-preprocessing possibly failed. Check this command:\n" +"\n" +" %1\n" +"\n" +"The line-matching-preprocessing command will be disabled now." +msgstr "" +"Предобрада поклапања линија је неуÑпешна. Проверите ову наредбу:\n" +"\n" +" %1\n" +"\n" +"Предобрада поклапања линија ће Ñада бити иÑкључена." + +#: diff.cpp:1631 diff.cpp:1645 +msgid "" +"Data loss error:\n" +"If it is reproducable please contact the author.\n" +msgstr "" +"Грешка, губитак података:\n" +"Ðко је можете поновити, контактирајте аутора.\n" + +#: diff.cpp:1633 diff.cpp:1647 +msgid "Severe Internal Error" +msgstr "Озбиљна унутрашња грешка" + +#: difftextwindow.cpp:1643 kdiff3.cpp:753 +#, fuzzy +msgid "Top line" +msgstr "Ðајвиша линија %1" + +#: difftextwindow.cpp:1653 +msgid "End" +msgstr "Крај" + +#: directorymergewindow.cpp:142 +msgid "Mix of links and normal files." +msgstr "Мешавина веза и нормалних фајлова." + +#: directorymergewindow.cpp:149 +msgid "Link: " +msgstr "Веза: " + +#: directorymergewindow.cpp:157 +msgid "Size. " +msgstr "Величина: " + +#: directorymergewindow.cpp:170 +msgid "Date & Size: " +msgstr "Датум и величина: " + +#: directorymergewindow.cpp:179 directorymergewindow.cpp:185 +msgid "Creating temp copy of %1 failed." +msgstr "Прављење привремене копије фајла %1 није уÑпело." + +#: directorymergewindow.cpp:196 directorymergewindow.cpp:204 +msgid "Opening %1 failed." +msgstr "Отварање фајла %1 није уÑпело." + +#: directorymergewindow.cpp:208 +msgid "Comparing file..." +msgstr "Упоређујем фајл..." + +#: directorymergewindow.cpp:218 directorymergewindow.cpp:224 +#, c-format +msgid "Error reading from %1" +msgstr "Грешка при читању из %1" + +#: directorymergewindow.cpp:282 +msgid "Name" +msgstr "Име" + +#: directorymergewindow.cpp:286 +msgid "Operation" +msgstr "Операција" + +#: directorymergewindow.cpp:287 +msgid "Status" +msgstr "СтатуÑ" + +#: directorymergewindow.cpp:288 +msgid "Unsolved" +msgstr "Ðерешен" + +#: directorymergewindow.cpp:289 +msgid "Solved" +msgstr "Решен" + +#: directorymergewindow.cpp:290 +msgid "Nonwhite" +msgstr "Ðе-бело" + +#: directorymergewindow.cpp:291 +msgid "White" +msgstr "Бело" + +#: directorymergewindow.cpp:319 +msgid "" +"You are currently doing a directory merge. Are you sure, you want to abort the " +"merge and rescan the directory?" +msgstr "" +"Тренутно Ñтапате директоријуме. Желите ли заиÑта да прекинете Ñтапање и поново " +"Ñкенирате директоријум?" + +#: directorymergewindow.cpp:320 directorymergewindow.cpp:2868 +msgid "Rescan" +msgstr "Поново Ñкенирај" + +#: directorymergewindow.cpp:320 kdiff3.cpp:603 pdiff.cpp:979 +msgid "Continue Merging" +msgstr "ÐаÑтави Ñтапање" + +#: directorymergewindow.cpp:462 +msgid "Opening of directories failed:" +msgstr "Отварање директоријума није уÑпело:" + +#: directorymergewindow.cpp:465 +msgid "" +"Dir A \"%1\" does not exist or is not a directory.\n" +msgstr "" +"Дир. Р„%1“ не поÑтоји или није директоријум.\n" + +#: directorymergewindow.cpp:468 +msgid "" +"Dir B \"%1\" does not exist or is not a directory.\n" +msgstr "" +"Дир. Б „%1“ не поÑтоји или није директоријум.\n" + +#: directorymergewindow.cpp:471 +msgid "" +"Dir C \"%1\" does not exist or is not a directory.\n" +msgstr "" +"Дир. Ц „%1“ не поÑтоји или није директоријум.\n" + +#: directorymergewindow.cpp:473 +msgid "Directory Open Error" +msgstr "Грешка при отварању директоријума" + +#: directorymergewindow.cpp:481 +msgid "" +"The destination directory must not be the same as A or B when three directories " +"are merged.\n" +"Check again before continuing." +msgstr "" +"Одредишни директоријум не Ñме бити иÑти као Рили Б када Ñе Ñтапају три " +"директоријума.\n" +"Проверите поново пре него наÑтавите." + +#: directorymergewindow.cpp:483 +msgid "Parameter Warning" +msgstr "Упозорење о параметрима" + +#: directorymergewindow.cpp:488 +msgid "Scanning directories..." +msgstr "Прегледам директоријуме..." + +#: directorymergewindow.cpp:537 +msgid "Reading Directory A" +msgstr "Читам директоријум Ð" + +#: directorymergewindow.cpp:559 +msgid "Reading Directory B" +msgstr "Читам директоријум Б" + +#: directorymergewindow.cpp:581 +msgid "Reading Directory C" +msgstr "Читам директоријум Ц" + +#: directorymergewindow.cpp:607 +msgid "Some subdirectories were not readable in" +msgstr "Ðеки поддиректоријуми ниÑу били читљиви у" + +#: directorymergewindow.cpp:612 +msgid "Check the permissions of the subdirectories." +msgstr "Проверите дозволе поддиректоријума." + +#: directorymergewindow.cpp:646 kdiff3.cpp:552 kdiff3.cpp:636 kdiff3.cpp:661 +#: kdiff3.cpp:934 kdiff3.cpp:955 pdiff.cpp:1059 pdiff.cpp:1131 pdiff.cpp:1169 +#: pdiff.cpp:1185 pdiff.cpp:1215 pdiff.cpp:1226 +msgid "Ready." +msgstr "Спреман." + +#: directorymergewindow.cpp:660 +msgid "Directory Comparison Status" +msgstr "Ð¡Ñ‚Ð°Ñ‚ÑƒÑ Ð¿Ð¾Ñ€ÐµÑ’ÐµÑšÐ° директоријума" + +#: directorymergewindow.cpp:661 +msgid "Number of subdirectories:" +msgstr "Број поддиректоријума:" + +#: directorymergewindow.cpp:662 +msgid "Number of equal files:" +msgstr "Број једнаких фајлова:" + +#: directorymergewindow.cpp:663 +msgid "Number of different files:" +msgstr "Број различитих фајлова:" + +#: directorymergewindow.cpp:666 +msgid "Number of manual merges:" +msgstr "Број ручних Ñтапања:" + +#: directorymergewindow.cpp:802 +msgid "This affects all merge operations." +msgstr "Ово утиче на Ñве операције Ñтапања." + +#: directorymergewindow.cpp:803 +msgid "Changing All Merge Operations" +msgstr "Мењам Ñве операције Ñтапања" + +#: directorymergewindow.cpp:803 mergeresultwindow.cpp:287 +msgid "C&ontinue" +msgstr "&ÐаÑтави" + +#: directorymergewindow.cpp:1169 +msgid "Processing " +msgstr "Обрађујем " + +#: directorymergewindow.cpp:1647 directorymergewindow.cpp:1653 +msgid "To do." +msgstr "Урадити." + +#: directorymergewindow.cpp:1756 directorymergewindow.cpp:2899 +msgid "Copy A to B" +msgstr "Копирај Ру Б" + +#: directorymergewindow.cpp:1757 directorymergewindow.cpp:2900 +msgid "Copy B to A" +msgstr "Копирај Б у Ð" + +#: directorymergewindow.cpp:1758 directorymergewindow.cpp:2901 +msgid "Delete A" +msgstr "Обриши Ð" + +#: directorymergewindow.cpp:1759 directorymergewindow.cpp:2902 +msgid "Delete B" +msgstr "Обриши Б" + +#: directorymergewindow.cpp:1760 +msgid "Delete A & B" +msgstr "Обриши Ри Б" + +#: directorymergewindow.cpp:1761 directorymergewindow.cpp:2904 +msgid "Merge to A" +msgstr "Стопи у Ð" + +#: directorymergewindow.cpp:1762 directorymergewindow.cpp:2905 +msgid "Merge to B" +msgstr "Стопи у Б" + +#: directorymergewindow.cpp:1763 +msgid "Merge to A & B" +msgstr "Стопи Ри Б" + +#: directorymergewindow.cpp:1767 directorymergewindow.cpp:2896 +msgid "Delete (if exists)" +msgstr "Обриши (ако поÑтоји)" + +#: directorymergewindow.cpp:1768 directorymergewindow.cpp:1769 +#: directorymergewindow.cpp:2895 optiondialog.cpp:809 smalldialogs.cpp:102 +msgid "Merge" +msgstr "Стопи" + +#: directorymergewindow.cpp:1768 directorymergewindow.cpp:1769 +msgid "Merge (manual)" +msgstr "Стопи (ручно)" + +#: directorymergewindow.cpp:1770 +msgid "Error: Conflicting File Types" +msgstr "Грешка: Сукобљени типови фајлова" + +#: directorymergewindow.cpp:1771 +msgid "Error: Dates are equal but files are not." +msgstr "Грешка: Датуми Ñу једнаки али фајлови ниÑу." + +#: directorymergewindow.cpp:1795 directorymergewindow.cpp:1824 +#: directorymergewindow.cpp:1849 +msgid "This operation is currently not possible." +msgstr "Ова операција тренутно није могућа." + +#: directorymergewindow.cpp:1795 directorymergewindow.cpp:1824 +#: directorymergewindow.cpp:1849 directorymergewindow.cpp:2106 +msgid "Operation Not Possible" +msgstr "Операција није могућа" + +#: directorymergewindow.cpp:1888 +msgid "" +"This should never happen: \n" +"\n" +"mergeResultSaved: m_pMFI=0\n" +"\n" +"If you know how to reproduce this, please contact the program author." +msgstr "" +"Ово никада не би требало да Ñе деÑи: \n" +"\n" +"Ðко знате како ово да поновите, контактирајте аутора програма." + +#: directorymergewindow.cpp:1888 +msgid "Program Error" +msgstr "ПрограмÑка грешка" + +#: directorymergewindow.cpp:1899 +msgid "" +"An error occurred while copying.\n" +msgstr "" +"Дошло је до грешке у току копирања.\n" + +#: directorymergewindow.cpp:1900 directorymergewindow.cpp:2306 +msgid "Merge Error" +msgstr "Грешка Ñтапања" + +#: directorymergewindow.cpp:1905 directorymergewindow.cpp:2311 +msgid "Error." +msgstr "Грешка." + +#: directorymergewindow.cpp:1910 directorymergewindow.cpp:2202 +#: directorymergewindow.cpp:2242 +msgid "Done." +msgstr "Готово." + +#: directorymergewindow.cpp:1933 +msgid "Not saved." +msgstr "Ðије Ñнимљено." + +#: directorymergewindow.cpp:1968 +msgid "Unknown merge operation. (This must never happen!)" +msgstr "Ðепозната операција Ñтапања. (Ово никад не Ñме да Ñе деÑи!)" + +#: directorymergewindow.cpp:2000 +msgid "Unknown merge operation." +msgstr "Ðепозната операција Ñтапања." + +#: directorymergewindow.cpp:2015 +msgid "" +"The merge is about to begin.\n" +"\n" +"Choose \"Do it\" if you have read the instructions and know what you are " +"doing.\n" +"Choosing \"Simulate it\" will tell you what would happen.\n" +"\n" +"Be aware that this program still has beta status and there is NO WARRANTY " +"whatsoever! Make backups of your vital data!" +msgstr "" +"Стапање ће управо почети.\n" +"\n" +"Изаберите „Уради“ ако Ñте прочитали инÑтрукције и знате шта радите.\n" +"Изаберите „Симулирај“ ако желите да видите шта би Ñе деÑило.\n" +"\n" +"Пазите да програм још увек има бета ÑÑ‚Ð°Ñ‚ÑƒÑ Ð¸ нема ÐИКÐКВИХ ГÐРÐÐЦИЈРуопште! " +"Ðаправите резерву Ñвојих најважнијих података!" + +#: directorymergewindow.cpp:2020 +msgid "Starting Merge" +msgstr "Почињем Ñтапање" + +#: directorymergewindow.cpp:2020 +msgid "Do It" +msgstr "Уради" + +#: directorymergewindow.cpp:2020 +msgid "Simulate It" +msgstr "Симулирај" + +#: directorymergewindow.cpp:2046 +msgid "" +"The highlighted item has a different type in the different directories. Select " +"what to do." +msgstr "" +"ИÑтакнута Ñтавка има различит тип у различитим директоријумима. Изаберите шта " +"је чинити." + +#: directorymergewindow.cpp:2055 +msgid "" +"The modification dates of the file are equal but the files are not. Select what " +"to do." +msgstr "" +"Датуми измене фајла Ñу једнаки али фајлови ниÑу. Изаберите шта је чинити." + +#: directorymergewindow.cpp:2106 +msgid "" +"This operation is currently not possible because directory merge is currently " +"running." +msgstr "" +"Ова операција тренутно није могућа зато што је Ñтапање директоријума у току." + +#: directorymergewindow.cpp:2166 +msgid "" +"There was an error in the last step.\n" +"Do you want to continue with the item that caused the error or do you want to " +"skip this item?" +msgstr "" +"Дошло је до грешке у поÑледњем кораку.\n" +"Желите ли да наÑтавите Ñа Ñтавком која је изазвала грешку или желите да је " +"преÑкочите?" + +#: directorymergewindow.cpp:2168 +msgid "Continue merge after an error" +msgstr "ÐаÑтави Ñтапање поÑле грешке" + +#: directorymergewindow.cpp:2168 +msgid "Continue With Last Item" +msgstr "ÐаÑтави Ñа поÑледњом Ñтавком" + +#: directorymergewindow.cpp:2168 +msgid "Skip Item" +msgstr "ПреÑкочи Ñтавку" + +#: directorymergewindow.cpp:2202 +msgid "Skipped." +msgstr "ПреÑкочено." + +#: directorymergewindow.cpp:2209 directorymergewindow.cpp:2435 +msgid "In progress..." +msgstr "У току..." + +#: directorymergewindow.cpp:2257 +msgid "Merge operation complete." +msgstr "Операција Ñтапања је завршена." + +#: directorymergewindow.cpp:2257 directorymergewindow.cpp:2260 +msgid "Merge Complete" +msgstr "Стапање је завршено" + +#: directorymergewindow.cpp:2269 +msgid "" +"Simulated merge complete: Check if you agree with the proposed operations." +msgstr "" +"Симулирано Ñтапање је завршено: Проверите да ли Ñе Ñлажете Ñа предложеним " +"операцијама." + +#: directorymergewindow.cpp:2305 +msgid "" +"An error occurred. Press OK to see detailed information.\n" +msgstr "" +"Дошло је до грешке. ПритиÑните „У реду“ да биÑте видели детаљне информације.\n" + +#: directorymergewindow.cpp:2348 +msgid "Error: While deleting %1: Creating backup failed." +msgstr "Грешка: У току бриÑања %1: Прављење резерве није уÑпело." + +#: directorymergewindow.cpp:2355 +msgid "delete directory recursively( %1 )" +msgstr "обриши директоријум рекурзивно( %1 )" + +#: directorymergewindow.cpp:2357 +msgid "delete( %1 )" +msgstr "обриши( %1 )" + +#: directorymergewindow.cpp:2372 +msgid "Error: delete dir operation failed while trying to read the directory." +msgstr "" +"Грешка: Операција бриÑања директоријума није уÑпела у току покушаја да Ñе " +"директоријум прочита." + +#: directorymergewindow.cpp:2391 +msgid "Error: rmdir( %1 ) operation failed." +msgstr "Грешка: Операција rmdir( %1 ) није уÑпела." + +#: directorymergewindow.cpp:2401 +msgid "Error: delete operation failed." +msgstr "Грешка: Операција бриÑања није уÑпела." + +#: directorymergewindow.cpp:2427 +msgid "manual merge( %1, %2, %3 -> %4)" +msgstr "ручно Ñтапање( %1, %2, %3 -> %4)" + +#: directorymergewindow.cpp:2430 +msgid "" +" Note: After a manual merge the user should continue by pressing F7." +msgstr "" +" Ðапомена: ПоÑле ручног Ñтапања кориÑник би требало да наÑтави помоћу F7." + +#: directorymergewindow.cpp:2453 +msgid "Error: copy( %1 -> %2 ) failed.Deleting existing destination failed." +msgstr "" +"Грешка: Копирање( %1 -> %2 ) није уÑпело. БриÑање поÑтојећег одредишта није " +"уÑпело." + +#: directorymergewindow.cpp:2463 +msgid "copyLink( %1 -> %2 )" +msgstr "копирање везе( %1 -> %2 )" + +#: directorymergewindow.cpp:2474 +msgid "Error: copyLink failed: Remote links are not yet supported." +msgstr "" +"Грешка: Копирање везе није уÑпело: Удаљене везе још увек ниÑу подржане." + +#: directorymergewindow.cpp:2480 +msgid "Error: copyLink failed." +msgstr "Грешка: Копирање везе није уÑпело." + +#: directorymergewindow.cpp:2500 +msgid "copy( %1 -> %2 )" +msgstr "копирај( %1 -> %2 )" + +#: directorymergewindow.cpp:2526 +msgid "Error during rename( %1 -> %2 ): Cannot delete existing destination." +msgstr "" +"Грешка у току преименовања( %1 -> %2 ): Ðе могу да обришем поÑтојеће одредиште." + +#: directorymergewindow.cpp:2532 +msgid "rename( %1 -> %2 )" +msgstr "преименуј( %1 -> %2 )" + +#: directorymergewindow.cpp:2541 +msgid "Error: Rename failed." +msgstr "Грешка: Преименовање није уÑпело." + +#: directorymergewindow.cpp:2559 +msgid "Error during makeDir of %1. Cannot delete existing file." +msgstr "" +"Грешка у току прављења директоријума %1. Ðе могу да обришем поÑтојећи фајл." + +#: directorymergewindow.cpp:2575 +msgid "makeDir( %1 )" +msgstr "направи директоријум( %1 )" + +#: directorymergewindow.cpp:2585 +msgid "Error while creating directory." +msgstr "Грешка у току прављења директоријума." + +#: directorymergewindow.cpp:2608 directorymergewindow.cpp:2725 +msgid "Dest" +msgstr "Одр." + +#: directorymergewindow.cpp:2612 directorymergewindow.cpp:2650 +msgid "Dir" +msgstr "Дир." + +#: directorymergewindow.cpp:2613 +msgid "Type" +msgstr "Тип" + +#: directorymergewindow.cpp:2614 +msgid "Size" +msgstr "Вел." + +#: directorymergewindow.cpp:2615 +msgid "Attr" +msgstr "ÐÑ‚Ñ€." + +#: directorymergewindow.cpp:2616 +msgid "Last Modification" +msgstr "ПоÑледња измена" + +#: directorymergewindow.cpp:2617 +msgid "Link-Destination" +msgstr "Веза-одредиште" + +#: directorymergewindow.cpp:2667 +msgid "not available" +msgstr "није доÑтупно" + +#: directorymergewindow.cpp:2687 +msgid "A (Dest): " +msgstr "Ð (одр.): " + +#: directorymergewindow.cpp:2690 +msgid "A (Base): " +msgstr "Ð (база): " + +#: directorymergewindow.cpp:2696 +msgid "B (Dest): " +msgstr "Б (одр.): " + +#: directorymergewindow.cpp:2704 +msgid "C (Dest): " +msgstr "Ц (одр.): " + +#: directorymergewindow.cpp:2710 +msgid "Dest: " +msgstr "Одр.: " + +#: directorymergewindow.cpp:2775 +#, fuzzy +msgid "Save Directory Merge State As..." +msgstr "Стапање директоријума" + +#: directorymergewindow.cpp:2862 +msgid "Start/Continue Directory Merge" +msgstr "Покрени/наÑтави Ñтапање директоријума" + +#: directorymergewindow.cpp:2863 +msgid "Run Operation for Current Item" +msgstr "Покрени операцију за текућу Ñтавку" + +#: directorymergewindow.cpp:2864 +msgid "Compare Selected File" +msgstr "Упореди изабрани фајл" + +#: directorymergewindow.cpp:2865 +msgid "Merge Current File" +msgstr "Стопи текући фајл" + +#: directorymergewindow.cpp:2866 +msgid "Fold All Subdirs" +msgstr "Сажми Ñве поддиректоријуме" + +#: directorymergewindow.cpp:2867 +msgid "Unfold All Subdirs" +msgstr "Рашири Ñве поддиректоријуме" + +#: directorymergewindow.cpp:2871 +msgid "Choose A for All Items" +msgstr "Изабери Рза Ñве Ñтавке" + +#: directorymergewindow.cpp:2872 +msgid "Choose B for All Items" +msgstr "Изабери Б за Ñве Ñтавке" + +#: directorymergewindow.cpp:2873 +msgid "Choose C for All Items" +msgstr "Изабери Ц за Ñве Ñтавке" + +#: directorymergewindow.cpp:2874 +msgid "Auto-Choose Operation for All Items" +msgstr "ÐутоматÑки изабери операцију за Ñве Ñтавке" + +#: directorymergewindow.cpp:2875 +msgid "No Operation for All Items" +msgstr "Ðема операције за Ñве Ñтавке" + +#: directorymergewindow.cpp:2880 +msgid "Show Identical Files" +msgstr "" + +#: directorymergewindow.cpp:2881 +#, fuzzy +msgid "Show Different Files" +msgstr "Број различитих фајлова:" + +#: directorymergewindow.cpp:2882 +msgid "Show Files only in A" +msgstr "" + +#: directorymergewindow.cpp:2883 +msgid "Show Files only in B" +msgstr "" + +#: directorymergewindow.cpp:2884 +msgid "Show Files only in C" +msgstr "" + +#: directorymergewindow.cpp:2888 +#, fuzzy +msgid "Compare Explicitly Selected Files" +msgstr "Упореди изабрани фајл" + +#: directorymergewindow.cpp:2889 +#, fuzzy +msgid "Merge Explicitly Selected Files" +msgstr "Упореди изабрани фајл" + +#: directorymergewindow.cpp:2891 directorymergewindow.cpp:2898 +msgid "Do Nothing" +msgstr "Ðе ради ништа" + +#: directorymergewindow.cpp:2892 +msgid "A" +msgstr "Ð" + +#: directorymergewindow.cpp:2893 +msgid "B" +msgstr "Б" + +#: directorymergewindow.cpp:2894 +msgid "C" +msgstr "Ц" + +#: directorymergewindow.cpp:2903 +msgid "Delete A && B" +msgstr "Обриши Ри Б" + +#: directorymergewindow.cpp:2906 +msgid "Merge to A && B" +msgstr "Стопи у Ри Б" + +#: fileaccess.cpp:595 +msgid "" +"While trying to make a backup, deleting an older backup failed. \n" +"Filename: " +msgstr "" +"У току покушаја да Ñе направи резерва, бриÑање Ñтарије резерве није уÑпело.\n" +"Име фајла: " + +#: fileaccess.cpp:602 +msgid "" +"While trying to make a backup, renaming failed. \n" +"Filenames: " +msgstr "" +"У току покушаја да Ñе направи резерва, преименовање није уÑпело.\n" +"Имена фајлова: " + +#: fileaccess.cpp:624 +#, c-format +msgid "Getting file status: %1" +msgstr "Добављам ÑÑ‚Ð°Ñ‚ÑƒÑ Ñ„Ð°Ñ˜Ð»Ð°: %1" + +#: fileaccess.cpp:667 +#, c-format +msgid "Reading file: %1" +msgstr "Читам фајл: %1" + +#: fileaccess.cpp:703 +#, c-format +msgid "Writing file: %1" +msgstr "Пишем фајл: %1" + +#: fileaccess.cpp:731 +msgid "Out of memory" +msgstr "Ðема меморије" + +#: fileaccess.cpp:766 +#, c-format +msgid "Making directory: %1" +msgstr "Правим директоријум: %1" + +#: fileaccess.cpp:786 +#, c-format +msgid "Removing directory: %1" +msgstr "Уклањам директоријум: %1" + +#: fileaccess.cpp:801 +#, c-format +msgid "Removing file: %1" +msgstr "Уклањам фајл: %1" + +#: fileaccess.cpp:817 +msgid "Creating symbolic link: %1 -> %2" +msgstr "Правим Ñимболичку везу: %1 -> %2" + +#: fileaccess.cpp:843 +msgid "Renaming file: %1 -> %2" +msgstr "Уклањам фајл: %1 -> %2" + +#: fileaccess.cpp:879 +msgid "Copying file: %1 -> %2" +msgstr "Копирам фајл: %1 -> %2" + +#: fileaccess.cpp:893 +#, c-format +msgid "" +"Error during file copy operation: Opening file for reading failed. Filename: %1" +msgstr "" +"Грешка током операције копирања фајлова: Отварање фајла за читање није уÑпело. " +"Име фајла: %1" + +#: fileaccess.cpp:899 +#, c-format +msgid "" +"Error during file copy operation: Opening file for writing failed. Filename: %1" +msgstr "" +"Грешка током операције копирања фајлова: Отварање фајла за пиÑање није уÑпело. " +"Име фајла: %1" + +#: fileaccess.cpp:914 +#, c-format +msgid "Error during file copy operation: Reading failed. Filename: %1" +msgstr "" +"Грешка током операције копирања фајлова: Читање није уÑпело. Име фајла: %1" + +#: fileaccess.cpp:923 +#, c-format +msgid "Error during file copy operation: Writing failed. Filename: %1" +msgstr "" +"Грешка током операције копирања фајлова: ПиÑање није уÑпело. Име фајла: %1" + +#: fileaccess.cpp:1219 +msgid "Reading directory: " +msgstr "Читам директоријум: " + +#: fileaccess.cpp:1348 +#, c-format +msgid "Listing directory: %1" +msgstr "ЛиÑтам директоријум: %1" + +#: kdiff3.cpp:142 +#, fuzzy +msgid "Current Configuration:" +msgstr "Операција Ñинх. текуће Ñтавке" + +#: kdiff3.cpp:147 +#, fuzzy +msgid "Config Option Error:" +msgstr "Грешка при отварању фајла" + +#: kdiff3.cpp:187 +msgid "Option --auto used, but no output file specified." +msgstr "Опција --auto је употребљена, али није наведен излазни фајл." + +#: kdiff3.cpp:323 +msgid "Option --auto ignored for directory comparison." +msgstr "Опција --auto Ñе игнорише за поређење директоријума." + +#: kdiff3.cpp:359 +msgid "Saving failed." +msgstr "Снимање није уÑпело." + +#: kdiff3.cpp:386 pdiff.cpp:1041 pdiff.cpp:1112 +msgid "Opening of these files failed:" +msgstr "Отварање ових фајлова није уÑпело:" + +#: kdiff3.cpp:395 +msgid "File Open Error" +msgstr "Грешка при отварању фајла" + +#: kdiff3.cpp:418 +msgid "Opens documents for comparison..." +msgstr "Отвара документе за поређење..." + +#: kdiff3.cpp:423 +msgid "Saves the merge result. All conflicts must be solved!" +msgstr "Снима резултат Ñтапања. Сви Ñукоби морају бити разрешени!" + +#: kdiff3.cpp:425 +msgid "Saves the current document as..." +msgstr "Снима текуће документе као..." + +#: kdiff3.cpp:427 +msgid "Print the differences" +msgstr "" + +#: kdiff3.cpp:429 +msgid "Quits the application" +msgstr "Излази из програма" + +#: kdiff3.cpp:431 +msgid "Cuts the selected section and puts it to the clipboard" +msgstr "ИÑеца изабрану Ñекцију и Ñтавља је у клипборд" + +#: kdiff3.cpp:433 +msgid "Copies the selected section to the clipboard" +msgstr "Копира изабрану Ñекцију у клипборд" + +#: kdiff3.cpp:435 +msgid "Pastes the clipboard contents to actual position" +msgstr "ПреноÑи Ñадржај клипборда на текућу позицију" + +#: kdiff3.cpp:437 +msgid "Select everything in current window" +msgstr "" + +#: kdiff3.cpp:439 +msgid "Search for a string" +msgstr "Потражи знаковни низ" + +#: kdiff3.cpp:441 +msgid "Search again for the string" +msgstr "Поново потражи знаковни низ" + +#: kdiff3.cpp:443 +msgid "Enables/disables the toolbar" +msgstr "Укључује/иÑкључује траку Ñа алатима" + +#: kdiff3.cpp:445 +msgid "Enables/disables the statusbar" +msgstr "Укључује/иÑкључује ÑтатуÑну траку" + +#: kdiff3.cpp:449 +msgid "Configure KDiff3..." +msgstr "ПодеÑи KDiff3..." + +#: kdiff3.cpp:470 +msgid "Go to Current Delta" +msgstr "Иди на текућу делту" + +#: kdiff3.cpp:471 +msgid "Go to First Delta" +msgstr "Иди на прву делту" + +#: kdiff3.cpp:472 +msgid "Go to Last Delta" +msgstr "Иди на поÑледњу делту" + +#: kdiff3.cpp:473 +msgid "(Skips white space differences when \"Show White Space\" is disabled.)" +msgstr "" +"(преÑкаче разлике у белим размацима када је „Прикажи беле размаке“ иÑкључено.)" + +#: kdiff3.cpp:474 +msgid "" +"(Does not skip white space differences even when \"Show White Space\" is " +"disabled.)" +msgstr "" +"(не преÑкаче разлике у белим размацима чак и када је „Прикажи беле размаке“ " +"иÑкључено.)" + +#: kdiff3.cpp:475 +msgid "Go to Previous Delta" +msgstr "Иди на претходну делту" + +#: kdiff3.cpp:477 +msgid "Go to Next Delta" +msgstr "Иди на Ñледећу делту" + +#: kdiff3.cpp:479 +msgid "Go to Previous Conflict" +msgstr "Иди на претходни Ñукоб" + +#: kdiff3.cpp:481 +msgid "Go to Next Conflict" +msgstr "Иди на Ñледећи Ñукоб" + +#: kdiff3.cpp:483 +msgid "Go to Previous Unsolved Conflict" +msgstr "Иди на претходни нерешени Ñукоб" + +#: kdiff3.cpp:485 +msgid "Go to Next Unsolved Conflict" +msgstr "Иди на Ñледећи нерешени Ñукоб" + +#: kdiff3.cpp:487 +msgid "Select Line(s) From A" +msgstr "Изаберите линије из Ð" + +#: kdiff3.cpp:488 +msgid "Select Line(s) From B" +msgstr "Изаберите линије из Б" + +#: kdiff3.cpp:489 +msgid "Select Line(s) From C" +msgstr "Изаберите линије из Ц" + +#: kdiff3.cpp:490 +msgid "Automatically Go to Next Unsolved Conflict After Source Selection" +msgstr "ÐутоматÑки иди на Ñледећи нерешени Ñукоб поÑле избора извора" + +#: kdiff3.cpp:492 +msgid "Show Space && Tabulator Characters for Differences" +msgstr "Прикажи знакове размака и табулатора за разлике" + +#: kdiff3.cpp:493 +msgid "Show White Space" +msgstr "Прикажи беле размаке" + +#: kdiff3.cpp:495 +msgid "Show Line Numbers" +msgstr "Прикажи бројеве линија" + +#: kdiff3.cpp:496 +msgid "Choose A Everywhere" +msgstr "Свуда изабери Ð" + +#: kdiff3.cpp:497 +msgid "Choose B Everywhere" +msgstr "Свуда изабери Б" + +#: kdiff3.cpp:498 +msgid "Choose C Everywhere" +msgstr "Свуда изабери Ц" + +#: kdiff3.cpp:499 +msgid "Choose A for All Unsolved Conflicts" +msgstr "Изабери Рза Ñве нерешене Ñукобе" + +#: kdiff3.cpp:500 +msgid "Choose B for All Unsolved Conflicts" +msgstr "Изабери Б за Ñве нерешене Ñукобе" + +#: kdiff3.cpp:501 +msgid "Choose C for All Unsolved Conflicts" +msgstr "Изабери Ц за Ñве нерешене Ñукобе" + +#: kdiff3.cpp:502 +msgid "Choose A for All Unsolved Whitespace Conflicts" +msgstr "Изабери Рза Ñве нерешене Ñукобе белих размака" + +#: kdiff3.cpp:503 +msgid "Choose B for All Unsolved Whitespace Conflicts" +msgstr "Изабери Б за Ñве нерешене Ñукобе белих размака" + +#: kdiff3.cpp:504 +msgid "Choose C for All Unsolved Whitespace Conflicts" +msgstr "Изабери Ц за Ñве нерешене Ñукобе белих размака" + +#: kdiff3.cpp:505 +msgid "Automatically Solve Simple Conflicts" +msgstr "ÐутоматÑки реши једноÑтавне Ñукобе" + +#: kdiff3.cpp:506 +msgid "Set Deltas to Conflicts" +msgstr "ПоÑтави делте на Ñукобе" + +#: kdiff3.cpp:507 +msgid "Run Regular Expression Auto Merge" +msgstr "" + +#: kdiff3.cpp:508 +#, fuzzy +msgid "Automatically Solve History Conflicts" +msgstr "ÐутоматÑки реши једноÑтавне Ñукобе" + +#: kdiff3.cpp:509 +msgid "Split Diff At Selection" +msgstr "" + +#: kdiff3.cpp:510 +#, fuzzy +msgid "Join Selected Diffs" +msgstr "Упореди изабрани фајл" + +#: kdiff3.cpp:512 +msgid "Show Window A" +msgstr "Прикажи прозор Ð" + +#: kdiff3.cpp:513 +msgid "Show Window B" +msgstr "Прикажи прозор Б" + +#: kdiff3.cpp:514 +msgid "Show Window C" +msgstr "Прикажи прозор Ц" + +#: kdiff3.cpp:515 kdiff3.cpp:526 +msgid "Focus Next Window" +msgstr "ФокуÑирај Ñледећи прозор" + +#: kdiff3.cpp:517 +msgid "Normal Overview" +msgstr "Ðормалан преглед" + +#: kdiff3.cpp:518 +msgid "A vs. B Overview" +msgstr "Преглед Рпрема Б" + +#: kdiff3.cpp:519 +msgid "A vs. C Overview" +msgstr "Преглед Рпрема Ц" + +#: kdiff3.cpp:520 +msgid "B vs. C Overview" +msgstr "Преглед Б према Ц" + +#: kdiff3.cpp:521 +msgid "Word Wrap Diff Windows" +msgstr "Diff прозори прелома речи" + +#: kdiff3.cpp:522 +msgid "Add Manual Diff Alignment" +msgstr "" + +#: kdiff3.cpp:523 +msgid "Clear All Manual Diff Alignments" +msgstr "" + +#: kdiff3.cpp:528 +msgid "Focus Prev Window" +msgstr "ФокуÑирај претходни прозор" + +#: kdiff3.cpp:529 +msgid "Toggle Split Orientation" +msgstr "Промени оријентацију раздвајања" + +#: kdiff3.cpp:531 +msgid "Dir && Text Split Screen View" +msgstr "Подељени приказ екрана за дир. и текÑÑ‚" + +#: kdiff3.cpp:533 +msgid "Toggle Between Dir && Text View" +msgstr "Промени између дир. и текÑÑ‚. приказа" + +#: kdiff3.cpp:582 pdiff.cpp:1712 +msgid "The merge result hasn't been saved." +msgstr "Резултат Ñтапања није Ñнимљен." + +#: kdiff3.cpp:583 +msgid "Save && Quit" +msgstr "Сними и изађи" + +#: kdiff3.cpp:583 +msgid "Quit Without Saving" +msgstr "Изађи без Ñнимања" + +#: kdiff3.cpp:591 pdiff.cpp:1721 +msgid "Saving the merge result failed." +msgstr "Снимање резултата Ñтапања није уÑпело." + +#: kdiff3.cpp:602 pdiff.cpp:978 +msgid "" +"You are currently doing a directory merge. Are you sure, you want to abort?" +msgstr "Тренутно Ñтапате директоријуме. Желите ли заиÑта да прекинете?" + +#: kdiff3.cpp:625 +msgid "Saving file..." +msgstr "Снимам фајл..." + +#: kdiff3.cpp:642 +msgid "Saving file with a new filename..." +msgstr "Снимам фајл под новим именом..." + +#: kdiff3.cpp:732 +#, fuzzy +msgid "Printing..." +msgstr "Излазим..." + +#: kdiff3.cpp:738 kdiff3.cpp:900 +msgid "Printing aborted." +msgstr "" + +#: kdiff3.cpp:870 +msgid "Selection" +msgstr "" + +#: kdiff3.cpp:896 +#, fuzzy +msgid "Printing completed." +msgstr "Операција Ñтапања је завршена." + +#: kdiff3.cpp:906 +msgid "Exiting..." +msgstr "Излазим..." + +#: kdiff3.cpp:918 +msgid "Toggling toolbar..." +msgstr "Укључујем/иÑкључујем траку Ñа алатом..." + +#: kdiff3.cpp:939 +msgid "Toggle the statusbar..." +msgstr "Укључи/иÑкључи ÑтатуÑну траку..." + +#: kdiff3_part.cpp:155 kdiff3_part.cpp:224 +msgid "Couldn't find files for comparison." +msgstr "ÐиÑам могао да нађем фајлове за поређење." + +#: kdiff3_part.cpp:291 +msgid "KDiff3Part" +msgstr "KDiff3Part" + +#: kdiff3_shell.cpp:78 +msgid "" +"Could not find our part!\n" +"This usually happens due to an installation problem. Please read the " +"README-file in the source package for details." +msgstr "" +"ÐиÑам могао да нађем наш део!\n" +"Ово Ñе обично дешава због инÑталационог проблема. Прочитајте фајл README у " +"изворном пакету за детаље." + +#: main.cpp:35 +msgid "Tool for Comparison and Merge of Files and Directories" +msgstr "Ðлат за упоређивање и Ñтапање фајлова и директоријума" + +#: main.cpp:40 +msgid "Merge the input." +msgstr "Стопи улаз." + +#: main.cpp:42 +msgid "Explicit base file. For compatibility with certain tools." +msgstr "ЕкÑплицитан базни фајл. За компатибилноÑÑ‚ Ñа одређеним алатима." + +#: main.cpp:44 +msgid "Output file. Implies -m. E.g.: -o newfile.txt" +msgstr "Излазни фајл. Имплицира -m. Ðпр.: -o newfile.txt" + +#: main.cpp:45 +msgid "Output file, again. (For compatibility with certain tools.)" +msgstr "Излазни фајл, поново. (За компатибилноÑÑ‚ Ñа одређеним алатима.)" + +#: main.cpp:46 +msgid "No GUI if all conflicts are auto-solvable. (Needs -o file)" +msgstr "Без GUI-ја ако Ñу Ñви Ñукоби аутоматÑки решиви. (Захтева -o file)" + +#: main.cpp:47 +msgid "Don't solve conflicts automatically. (For compatibility...)" +msgstr "Ðе решавај Ñукобе аутоматÑки. (За компатибилноÑÑ‚...)" + +#: main.cpp:48 +msgid "Visible name replacement for input file 1 (base)." +msgstr "Видљива замена имена за улазни фајл 1 (базни)." + +#: main.cpp:49 +msgid "Visible name replacement for input file 2." +msgstr "Видљива замена имена за улазни фајл 2." + +#: main.cpp:50 +msgid "Visible name replacement for input file 3." +msgstr "Видљива замена имена за улазни фајл 3." + +#: main.cpp:52 +msgid "Alternative visible name replacement. Supply this once for every input." +msgstr "Ðлтернатива видљивој замени имена. Задајте ово једном за Ñваки улаз." + +#: main.cpp:53 +msgid "" +"Override a config setting. Use once for every setting. E.g.: --cs " +"\"AutoAdvance=1\"" +msgstr "" + +#: main.cpp:54 +msgid "Show list of config settings and current values." +msgstr "" + +#: main.cpp:55 +#, fuzzy +msgid "Use a different config file." +msgstr "Број различитих фајлова:" + +#: main.cpp:59 +msgid "file1 to open (base, if not specified via --base)" +msgstr "фајл1 за отварање (базни, ако није наведен преко --base)" + +#: main.cpp:60 +msgid "file2 to open" +msgstr "фајл2 за отворање" + +#: main.cpp:61 +msgid "file3 to open" +msgstr "фајл3 за отворање" + +#: main.cpp:93 +msgid "Ignored. (User defined.)" +msgstr "" + +#. i18n: file kdiff3_part.rc line 16 +#: main.cpp:173 rc.cpp:9 +#, no-c-format +msgid "KDiff3" +msgstr "KDiff3" + +#: main.cpp:186 +msgid "+ Many thanks to those who reported bugs and contributed ideas!" +msgstr "" +"+ Много хвала онима који Ñу пријављивали грешке и допринели Ñвојим идејама!" + +#: mergeresultwindow.cpp:136 mergeresultwindow.cpp:939 +#: mergeresultwindow.cpp:953 mergeresultwindow.cpp:965 +#: mergeresultwindow.cpp:977 +msgid "Number of remaining unsolved conflicts: %1 (of which %2 are whitespace)" +msgstr "Број преоÑталих нерешених Ñукоба: %1 (од којих Ñу %2 бели размаци)" + +#: mergeresultwindow.cpp:285 +msgid "" +"The output has been modified.\n" +"If you continue your changes will be lost." +msgstr "" +"Излаз је измењен.\n" +"Ðко наÑтавите, ваше измене ће бити изгубљене." + +#: mergeresultwindow.cpp:797 pdiff.cpp:511 +msgid "All input files are binary equal." +msgstr "Сви улазни фајлови Ñу бинарно једнаки." + +#: mergeresultwindow.cpp:799 +msgid "All input files contain the same text." +msgstr "Сви улазни фајлови Ñадрже иÑти текÑÑ‚." + +#: mergeresultwindow.cpp:801 +msgid "" +"Files A and B are binary equal.\n" +msgstr "" +"Фајлови Ри Б Ñу бинарно једнаки.\n" + +#: mergeresultwindow.cpp:802 +msgid "" +"Files A and B have equal text. \n" +msgstr "" +"Фајлови Ри Б имају једнак текÑÑ‚.\n" + +#: mergeresultwindow.cpp:803 +msgid "" +"Files A and C are binary equal.\n" +msgstr "" +"Фајлови Ри Ц Ñу бинарно једнаки.\n" + +#: mergeresultwindow.cpp:804 +msgid "" +"Files A and C have equal text. \n" +msgstr "" +"Фајлови Ри Ц имају једнак текÑÑ‚.\n" + +#: mergeresultwindow.cpp:805 +msgid "" +"Files B and C are binary equal.\n" +msgstr "" +"Фајлови Б и Ц Ñу бинарно једнаки.\n" + +#: mergeresultwindow.cpp:806 +msgid "" +"Files B and C have equal text. \n" +msgstr "" +"Фајлови Б и Ц имају једнак текÑÑ‚.\n" + +#: mergeresultwindow.cpp:812 +msgid "Total number of conflicts: " +msgstr "Укупан број Ñукоба: " + +#: mergeresultwindow.cpp:813 +msgid "" +"\n" +"Nr of automatically solved conflicts: " +msgstr "" +"\n" +"Број аутоматÑки решених Ñукоба: " + +#: mergeresultwindow.cpp:814 +msgid "" +"\n" +"Nr of unsolved conflicts: " +msgstr "" +"\n" +"Број нерешених Ñукоба: " + +#: mergeresultwindow.cpp:816 +msgid "Conflicts" +msgstr "Сукоби" + +#: mergeresultwindow.cpp:1652 +msgid "" +msgstr "<Ðема изв. линије>" + +#: mergeresultwindow.cpp:1660 +msgid "" +msgstr "<Сукоб у Ñтапању (Ñамо бели размаци)>" + +#: mergeresultwindow.cpp:1662 mergeresultwindow.cpp:2427 +msgid "" +msgstr "<Сукоб у Ñтапању>" + +#: mergeresultwindow.cpp:2635 +msgid "" +"Not all conflicts are solved yet.\n" +"File not saved.\n" +msgstr "" +"Још увек ниÑу решени Ñви Ñукоби.\n" +"Фајл није Ñнимљен.\n" + +#: mergeresultwindow.cpp:2637 +msgid "Conflicts Left" +msgstr "ПреоÑтали Ñукоби" + +#: mergeresultwindow.cpp:2649 +msgid "" +"\n" +"\n" +"Creating backup failed. File not saved." +msgstr "" +"\n" +"\n" +"Прављење резерве није уÑпело. Фајл није Ñнимљен." + +#: mergeresultwindow.cpp:2649 mergeresultwindow.cpp:2689 +msgid "File Save Error" +msgstr "Грешка у Ñнимању фајла" + +#: mergeresultwindow.cpp:2689 +msgid "Error while writing." +msgstr "Грешка приликом пиÑања." + +#: mergeresultwindow.cpp:3020 +msgid "Output" +msgstr "Излаз" + +#: mergeresultwindow.cpp:3032 mergeresultwindow.cpp:3139 +msgid "[Modified]" +msgstr "[Измењен]" + +#: mergeresultwindow.cpp:3039 +#, fuzzy +msgid "Encoding for saving" +msgstr "Кодирање фајла за Ц:" + +#: mergeresultwindow.cpp:3075 mergeresultwindow.cpp:3081 +#: mergeresultwindow.cpp:3087 +msgid "Codec from" +msgstr "" + +#: optiondialog.cpp:362 +msgid "Unicode, 8 bit" +msgstr "Unicode, 8-битно" + +#: optiondialog.cpp:363 +msgid "Unicode" +msgstr "Unicode" + +#: optiondialog.cpp:364 +msgid "Latin1" +msgstr "Latin1" + +#: optiondialog.cpp:383 +msgid "Change this if non-ASCII characters are not displayed correctly." +msgstr "Измените ово аке Ñе знакови који ниÑу ASCII не приказују иÑправно." + +#: optiondialog.cpp:510 +msgid "Editor & Diff Output Font" +msgstr "Фонт уређивача и раз. излаза" + +#: optiondialog.cpp:531 +msgid "Italic font for deltas" +msgstr "Курзивни фонт за делте" + +#: optiondialog.cpp:534 +msgid "" +"Selects the italic version of the font for differences.\n" +"If the font doesn't support italic characters, then this does nothing." +msgstr "" +"Бира курзивну верзију фонта за разлике.\n" +"Ðко фонт не подржава курзивне знакове, онда ово не ради ништа." + +#: optiondialog.cpp:542 +msgid "Color" +msgstr "Боја" + +#: optiondialog.cpp:542 +#, fuzzy +msgid "Colors Settings" +msgstr "Регионална подешавања" + +#: optiondialog.cpp:556 +msgid "Editor and Diff Views:" +msgstr "" + +#: optiondialog.cpp:564 +msgid "Foreground color:" +msgstr "Боја иÑцртавања:" + +#: optiondialog.cpp:570 +msgid "Background color:" +msgstr "Боја позадине:" + +#: optiondialog.cpp:578 +msgid "Diff background color:" +msgstr "Боја позадине разлика:" + +#: optiondialog.cpp:585 +msgid "Color A:" +msgstr "Боја Ð:" + +#: optiondialog.cpp:592 +msgid "Color B:" +msgstr "Боја Б:" + +#: optiondialog.cpp:599 +msgid "Color C:" +msgstr "Боја Ц:" + +#: optiondialog.cpp:605 +msgid "Conflict color:" +msgstr "Боја Ñукоба:" + +#: optiondialog.cpp:612 +msgid "Current range background color:" +msgstr "ПозадинÑка боја текућег опÑега:" + +#: optiondialog.cpp:619 +msgid "Current range diff background color:" +msgstr "ПозадинÑка боја текућег опÑега разлика:" + +#: optiondialog.cpp:625 +msgid "Color for manually aligned difference ranges:" +msgstr "" + +#: optiondialog.cpp:630 +#, fuzzy +msgid "Directory Comparison View:" +msgstr "Ð¡Ñ‚Ð°Ñ‚ÑƒÑ Ð¿Ð¾Ñ€ÐµÑ’ÐµÑšÐ° директоријума" + +#: optiondialog.cpp:636 +msgid "Newest file color:" +msgstr "" + +#: optiondialog.cpp:639 +msgid "" +"Changing this color will only be effective when starting the next directory " +"comparison." +msgstr "" + +#: optiondialog.cpp:644 +msgid "Oldest file color:" +msgstr "" + +#: optiondialog.cpp:651 +msgid "Middle age file color:" +msgstr "" + +#: optiondialog.cpp:658 +msgid "Color for missing files:" +msgstr "" + +#: optiondialog.cpp:670 +msgid "Editor" +msgstr "Уређивач" + +#: optiondialog.cpp:670 +msgid "Editor Behavior" +msgstr "Понашање уређивача" + +#: optiondialog.cpp:680 +msgid "Tab inserts spaces" +msgstr "Таб убацује размаке" + +#: optiondialog.cpp:683 +msgid "" +"On: Pressing tab generates the appropriate number of spaces.\n" +"Off: A Tab-character will be inserted." +msgstr "" +"Укључено: ПритиÑком на таб генерише Ñе одговарајући број размака.\n" +"ИÑкључено: Знак табулатора ће бити убачен." + +#: optiondialog.cpp:689 +msgid "Tab size:" +msgstr "Величина таба:" + +#: optiondialog.cpp:694 +msgid "Auto indentation" +msgstr "ÐутоматÑко увлачење" + +#: optiondialog.cpp:697 +msgid "" +"On: The indentation of the previous line is used for a new line.\n" +msgstr "" +"Укључено: Увлачење претходне линије кориÑти Ñе за нову линију.\n" + +#: optiondialog.cpp:701 +msgid "Auto copy selection" +msgstr "ÐутоматÑко копирање избора" + +#: optiondialog.cpp:704 +msgid "" +"On: Any selection is immediately written to the clipboard.\n" +"Off: You must explicitely copy e.g. via Ctrl-C." +msgstr "" +"Укључено: Сваки избор Ñе одмах упиÑује у клипборд.\n" +"ИÑкључено: Морате екÑплицитно копирати, нрп. помоћу Ctrl+C." + +#: optiondialog.cpp:709 +msgid "Line end style:" +msgstr "Стил завршетка линије:" + +#: optiondialog.cpp:721 +msgid "" +"Sets the line endings for when an edited file is saved.\n" +"DOS/Windows: CR+LF; UNIX: LF; with CR=0D, LF=0A" +msgstr "" +"ПоÑтавља завршетке линија када Ñе измењени фајл Ñнима.\n" +"DOS/Windows: CR+LF; Unix: LF; Ñа CR=0D, LF=0A" + +#: optiondialog.cpp:732 +#, fuzzy +msgid "Diff" +msgstr "KDiff3" + +#: optiondialog.cpp:732 +#, fuzzy +msgid "Diff Settings" +msgstr "ПоÑтавке разлике и Ñтапања" + +#: optiondialog.cpp:743 +msgid "Preserve carriage return" +msgstr "Очувај CR" + +#: optiondialog.cpp:746 +msgid "" +"Show carriage return characters '\\r' if they exist.\n" +"Helps to compare files that were modified under different operating systems." +msgstr "" +"Прикажи CR знакове „\\r“ ако поÑтоје.\n" +"Помаже да Ñе упореде фајлови који Ñу мењани под различитим оперативним " +"ÑиÑтемима." + +#: optiondialog.cpp:751 +msgid "Ignore numbers" +msgstr "Игнориши бројеве" + +#: optiondialog.cpp:754 +msgid "" +"Ignore number characters during line matching phase. (Similar to Ignore white " +"space.)\n" +"Might help to compare files with numeric data." +msgstr "" +"Игнориши бројевне знакове током фазе поклапања линија. (Слично игнориÑању белих " +"размака.)\n" +"Може вам помоћи при упоређивању фајлова Ñа нумеричким подацима." + +#: optiondialog.cpp:759 +msgid "Ignore C/C++ comments" +msgstr "Игнориши C/C++ коментаре" + +#: optiondialog.cpp:761 +msgid "Treat C/C++ comments like white space." +msgstr "Третирај C/C++ коментаре као беле размаке." + +#: optiondialog.cpp:765 +msgid "Ignore case" +msgstr "Занемари величину Ñлова" + +#: optiondialog.cpp:768 +msgid "Treat case differences like white space changes. ('a'<=>'A')" +msgstr "Третира разлику у величини као промене белог проÑтора. („a“<=>„A“)" + +#: optiondialog.cpp:772 +msgid "Preprocessor command:" +msgstr "Предобрадна наредба:" + +#: optiondialog.cpp:776 +msgid "User defined pre-processing. (See the docs for details.)" +msgstr "" +"КориÑнички дефиниÑана предобрада. (Погледајте документацију за детаље.)" + +#: optiondialog.cpp:779 +msgid "Line-matching preprocessor command:" +msgstr "Предобрадна наредба за поклапање линија:" + +#: optiondialog.cpp:783 +msgid "" +"This pre-processor is only used during line matching.\n" +"(See the docs for details.)" +msgstr "" +"Предобрада Ñе кориÑти Ñамо током поклапања линија.\n" +"(Погледајте документацију за детаље.)" + +#: optiondialog.cpp:786 +msgid "Try hard (slower)" +msgstr "Потруди Ñе (Ñпорије)" + +#: optiondialog.cpp:789 +msgid "" +"Enables the --minimal option for the external diff.\n" +"The analysis of big files will be much slower." +msgstr "" +"Укључује опцију --minimal за Ñпољашње разликовање.\n" +"Ðнализа великих фајлова ће бити много Ñпорија." + +#: optiondialog.cpp:794 +msgid "Auto advance delay (ms):" +msgstr "ЗаÑтој аутоматÑког напредовања (ms):" + +#: optiondialog.cpp:799 +msgid "" +"When in Auto-Advance mode the result of the current selection is shown \n" +"for the specified time, before jumping to the next conflict. Range: 0-2000 ms" +msgstr "" +"У режиму аутоматÑког напредовања резултат текућег избора приказује Ñе \n" +"наведено време, пре Ñкока на Ñледећи Ñукоб. ОпÑег: 0-2000 ms" + +#: optiondialog.cpp:809 +#, fuzzy +msgid "Merge Settings" +msgstr "ПоÑтавке разлике и Ñтапања" + +#: optiondialog.cpp:822 +msgid "White space 2-file merge default:" +msgstr "Подразумевано Ñтапање белих размака два фајла:" + +#: optiondialog.cpp:826 optiondialog.cpp:839 +msgid "Manual Choice" +msgstr "Ручни избор" + +#: optiondialog.cpp:830 optiondialog.cpp:844 +msgid "" +"Allow the merge algorithm to automatically select an input for white-space-only " +"changes." +msgstr "" +"Дозвољава алгоритму Ñтапања да аутоматÑки изабере улаз за измене Ñамо у белим " +"размацима." + +#: optiondialog.cpp:835 +msgid "White space 3-file merge default:" +msgstr "Подразумевано Ñтапање белих размака три фајла:" + +#: optiondialog.cpp:849 +msgid "Automatic Merge Regular Expression" +msgstr "" + +#: optiondialog.cpp:858 smalldialogs.cpp:397 +msgid "Auto merge regular expression:" +msgstr "" + +#: optiondialog.cpp:862 +msgid "" +"Regular expression for lines where KDiff3 should automatically choose one " +"source.\n" +"When a line with a conflict matches the regular expression then\n" +"- if available - C, otherwise B will be chosen." +msgstr "" + +#: optiondialog.cpp:868 +msgid "Run regular expression auto merge on merge start" +msgstr "" + +#: optiondialog.cpp:870 +msgid "" +"Run the merge for auto merge regular expressions\n" +"immediately when a merge starts.\n" +msgstr "" + +#: optiondialog.cpp:875 +msgid "Version Control History Merging" +msgstr "" + +#: optiondialog.cpp:884 smalldialogs.cpp:424 +msgid "History start regular expression:" +msgstr "" + +#: optiondialog.cpp:888 +msgid "" +"Regular expression for the start of the version control history entry.\n" +"Usually this line contains the \"$Log$\"-keyword.\n" +"Default value: \".*\\$Log.*\\$.*\"" +msgstr "" + +#: optiondialog.cpp:894 smalldialogs.cpp:453 +msgid "History entry start regular expression:" +msgstr "" + +#: optiondialog.cpp:906 +msgid "" +"A version control history entry consists of several lines.\n" +"Specify the regular expression to detect the first line (without the leading " +"comment).\n" +"Use parentheses to group the keys you want to use for sorting.\n" +"If left empty, then KDiff3 assumes that empty lines separate history entries.\n" +"See the documentation for details." +msgstr "" + +#: optiondialog.cpp:914 +msgid "History merge sorting" +msgstr "" + +#: optiondialog.cpp:916 +msgid "Sort version control history by a key." +msgstr "" + +#: optiondialog.cpp:926 +msgid "History entry start sort key order:" +msgstr "" + +#: optiondialog.cpp:930 +msgid "" +"Each parentheses used in the regular expression for the history start entry\n" +"groups a key that can be used for sorting.\n" +"Specify the list of keys (that are numbered in order of occurrence\n" +"starting with 1) using ',' as separator (e.g. \"4,5,6,1,2,3,7\").\n" +"If left empty, then no sorting will be done.\n" +"See the documentation for details." +msgstr "" + +#: optiondialog.cpp:941 +msgid "Merge version control history on merge start" +msgstr "" + +#: optiondialog.cpp:943 +msgid "Run version control history automerge on merge start." +msgstr "" + +#: optiondialog.cpp:947 +msgid "Test your regular expressions" +msgstr "" + +#: optiondialog.cpp:952 +msgid "Irrelevant merge command:" +msgstr "" + +#: optiondialog.cpp:956 +msgid "" +"If specified this script is run after automerge\n" +"when no other relevant changes were detected.\n" +"Called with the parameters: filename1 filename2 filename3" +msgstr "" + +#: optiondialog.cpp:966 +msgid "Directory Merge" +msgstr "Стапање директоријума" + +#: optiondialog.cpp:975 +msgid "Recursive directories" +msgstr "Рекурзивни директоријуми" + +#: optiondialog.cpp:977 +msgid "Whether to analyze subdirectories or not." +msgstr "Да ли да Ñе анализирају поддиректоријуми." + +#: optiondialog.cpp:979 +msgid "File pattern(s):" +msgstr "Облици фајлова:" + +#: optiondialog.cpp:984 +msgid "" +"Pattern(s) of files to be analyzed. \n" +"Wildcards: '*' and '?'\n" +"Several Patterns can be specified by using the separator: ';'" +msgstr "" +"Облици фајлова које треба анализирати.\n" +"Ðокери: „*“ и „?“\n" +"Више облика можете навеÑти кориÑтећи раздвајач: „;“" + +#: optiondialog.cpp:990 +msgid "File-anti-pattern(s):" +msgstr "Ðнтиоблици фајлова:" + +#: optiondialog.cpp:995 +msgid "" +"Pattern(s) of files to be excluded from analysis. \n" +"Wildcards: '*' and '?'\n" +"Several Patterns can be specified by using the separator: ';'" +msgstr "" +"Облици фајлова које треба иÑкључити из анализе.\n" +"Ðокери: „*“ и „?“\n" +"Више облика можете навеÑти кориÑтећи раздвајач: „;“" + +#: optiondialog.cpp:1001 +msgid "Dir-anti-pattern(s):" +msgstr "Ðнтиоблици директоријума:" + +#: optiondialog.cpp:1006 +msgid "" +"Pattern(s) of directories to be excluded from analysis. \n" +"Wildcards: '*' and '?'\n" +"Several Patterns can be specified by using the separator: ';'" +msgstr "" +"Облици директоријума које треба иÑкључити из анализе.\n" +"Ðокери: „*“ и „?“\n" +"Више облика можете навеÑти кориÑтећи раздвајач: „;“" + +#: optiondialog.cpp:1012 +msgid "Use .cvsignore" +msgstr "КориÑти фајл .cvsignore" + +#: optiondialog.cpp:1015 +msgid "" +"Extends the antipattern to anything that would be ignored by CVS.\n" +"Via local \".cvsignore\"-files this can be directory specific." +msgstr "" +"Проширује антиоблик на Ñве што би CVS игнориÑао.\n" +"Преко локалних фајлова „.cvsignore“ ово може бити поÑебно по директоријуму." + +#: optiondialog.cpp:1020 +msgid "Find hidden files and directories" +msgstr "Пронађи Ñкривене фајлове и директоријуме" + +#: optiondialog.cpp:1023 +msgid "Finds files and directories with the hidden attribute." +msgstr "Ðалази фајлове и директоријуме Ñа атрибутом Ñкривених." + +#: optiondialog.cpp:1025 +msgid "Finds files and directories starting with '.'." +msgstr "Ðалази фајлове и директоријуме који почињу Ñа „.“" + +#: optiondialog.cpp:1029 +msgid "Follow file links" +msgstr "Прати везе фајлова" + +#: optiondialog.cpp:1032 +msgid "" +"On: Compare the file the link points to.\n" +"Off: Compare the links." +msgstr "" +"Укључено: Пореди фајлове на које показују везе.\n" +"ИÑкључено: Пореди везе." + +#: optiondialog.cpp:1037 +msgid "Follow directory links" +msgstr "Прати везе директоријума" + +#: optiondialog.cpp:1040 +msgid "" +"On: Compare the directory the link points to.\n" +"Off: Compare the links." +msgstr "" +"Укључено: Пореди директоријуме на које показују везе.\n" +"ИÑкључено: Пореди везе." + +#: optiondialog.cpp:1056 +msgid "Case sensitive filename comparison" +msgstr "" + +#: optiondialog.cpp:1059 +msgid "" +"The directory comparison will compare files or directories when their names " +"match.\n" +"Set this option if the case of the names must match. (Default for Windows is " +"off, otherwise on.)" +msgstr "" + +#: optiondialog.cpp:1063 +msgid "File Comparison Mode" +msgstr "Режим поређења фајлова" + +#: optiondialog.cpp:1067 +msgid "Binary comparison" +msgstr "Бинарно поређење" + +#: optiondialog.cpp:1068 +msgid "Binary comparison of each file. (Default)" +msgstr "Бинарно поређење за Ñваки фајл. (Подразумевано)" + +#: optiondialog.cpp:1070 +msgid "Full analysis" +msgstr "Пуна анализа" + +#: optiondialog.cpp:1071 +msgid "" +"Do a full analysis and show statistics information in extra columns.\n" +"(Slower than a binary comparison, much slower for binary files.)" +msgstr "" +"Ради пуну анализу и приказује ÑтатиÑтичке податке у додатним колонама.\n" +"(Спорије него бинарно поређење, много Ñпорије за бинарне фајлове.)" + +#: optiondialog.cpp:1074 +msgid "Trust the modification date (unsafe)" +msgstr "Веруј датуму измене (није безбедно)" + +#: optiondialog.cpp:1075 +msgid "" +"Assume that files are equal if the modification date and file length are " +"equal.\n" +"Useful for big directories or slow networks." +msgstr "" +"ПретпоÑтави да Ñу фајлови једнаки ако Ñу датум измене и дужина фајла једнаки.\n" +"КориÑно за велике директоријуме или Ñпоре мреже." + +#: optiondialog.cpp:1078 +msgid "Trust the size (unsafe)" +msgstr "Веруј величини (није безбедно)" + +#: optiondialog.cpp:1079 +msgid "" +"Assume that files are equal if their file lengths are equal.\n" +"Useful for big directories or slow networks when the date is modified during " +"download." +msgstr "" +"ПретпоÑтави да Ñу фајлови једнаки ако Ñу њихове дужине једнаке.\n" +"КориÑно за велике директоријуме или Ñпоре мреже када Ñе датум измене у току " +"преузимања." + +#: optiondialog.cpp:1083 +msgid "Synchronize directories" +msgstr "Синхронизуј директоријуме" + +#: optiondialog.cpp:1086 +msgid "" +"Offers to store files in both directories so that\n" +"both directories are the same afterwards.\n" +"Works only when comparing two directories without specifying a destination." +msgstr "" +"Ðуди да Ñкладишти фајлове у оба директоријума тако\n" +"да Ñу оба директоријума поÑле тога иÑта.\n" +"Ради Ñамо када Ñе пореде два директоријума без навођења одредишта." + +#: optiondialog.cpp:1092 +msgid "White space differences considered equal" +msgstr "Разлике у белим размацима Ñматрају Ñе једнаким" + +#: optiondialog.cpp:1095 +msgid "" +"If files differ only by white space consider them equal.\n" +"This is only active when full analysis is chosen." +msgstr "" +"Ðко Ñе фајлови разликују Ñамо у белим размацима, Ñматрају Ñе једнаким.\n" +"Ово је активно Ñамо када Ñе изабере пуна анализа." + +#: optiondialog.cpp:1101 +msgid "Copy newer instead of merging (unsafe)" +msgstr "Копирај новији умеÑто Ñтапања (није безбедно)" + +#: optiondialog.cpp:1104 +msgid "" +"Don't look inside, just take the newer file.\n" +"(Use this only if you know what you are doing!)\n" +"Only effective when comparing two directories." +msgstr "" +"Ðе гледај унутра, Ñамо узми новији фајл.\n" +"(КориÑтите ово Ñамо ако знате шта радите!)\n" +"Има ефекта Ñамо када Ñе пореде два директоријума." + +#: optiondialog.cpp:1109 +msgid "Backup files (.orig)" +msgstr "Резервиши фајлове (.orig)" + +#: optiondialog.cpp:1112 +msgid "" +"When a file would be saved over an old file, then the old file\n" +"will be renamed with a '.orig'-extension instead of being deleted." +msgstr "" +"Када треба Ñнимити фајл преко Ñтарог фајла, Ñтари фајл ће бити\n" +"преименован Ñа наÑтавком „.orig“ умеÑто да буде обриÑан." + +#: optiondialog.cpp:1176 +msgid "Regional Settings" +msgstr "Регионална подешавања" + +#: optiondialog.cpp:1272 +msgid "Language (restart required)" +msgstr "Језик (потребно поновно покретање)" + +#: optiondialog.cpp:1304 +msgid "" +"Choose the language of the GUI-strings or \"Auto\".\n" +"For a change of language to take place, quit and restart KDiff3." +msgstr "" +"Изаберите језик за иÑпиÑе у програму или „Auto“.\n" +"Да би измена језика била примењена, затворите и поново покрените KDiff3." + +#: optiondialog.cpp:1322 +msgid "Use the same encoding for everything:" +msgstr "КориÑти иÑто кодирање за Ñве:" + +#: optiondialog.cpp:1325 +msgid "" +"Enable this allows to change all encodings by changing the first only.\n" +"Disable this if different individual settings are needed." +msgstr "" +"Укључивањем овог можете променити Ñва кодирања променом Ñамо првог.\n" +"ИÑкључите ово ако Ñу потребна различита поједина подешавања." + +#: optiondialog.cpp:1330 +msgid "Note: Local Encoding is " +msgstr "Ðапомна: Локално кодирање је " + +#: optiondialog.cpp:1334 +msgid "File Encoding for A:" +msgstr "Кодирање фајла за Ð:" + +#: optiondialog.cpp:1340 +msgid "" +"If enabled then Unicode (UTF-16 or UTF-8) encoding will be detected.\n" +"If the file encoding is not detected then the selected encoding will be used as " +"fallback.\n" +"(Unicode detection depends on the first bytes of a file - the byte order mark " +"\"BOM\".)" +msgstr "" + +#: optiondialog.cpp:1344 optiondialog.cpp:1353 optiondialog.cpp:1362 +msgid "Auto Detect Unicode" +msgstr "" + +#: optiondialog.cpp:1349 +msgid "File Encoding for B:" +msgstr "Кодирање фајла за Б:" + +#: optiondialog.cpp:1358 +msgid "File Encoding for C:" +msgstr "Кодирање фајла за Ц:" + +#: optiondialog.cpp:1367 +msgid "File Encoding for Merge Output and Saving:" +msgstr "Кодирање фајла за Ñтопљени излаз и Ñнимање:" + +#: optiondialog.cpp:1371 +#, fuzzy +msgid "Auto Select" +msgstr "ÐутоматÑко копирање избора" + +#: optiondialog.cpp:1374 +msgid "" +"If enabled then the encoding from the input files is used.\n" +"In ambiguous cases a dialog will ask the user to choose the encoding for " +"saving." +msgstr "" + +#: optiondialog.cpp:1378 +msgid "File Encoding for Preprocessor Files:" +msgstr "Кодирање фајла за препроцеÑорке фајлове:" + +#: optiondialog.cpp:1389 +msgid "Right To Left Language" +msgstr "Језици Ñ Ð´ÐµÑна у лево" + +#: optiondialog.cpp:1392 +msgid "" +"Some languages are read from right to left.\n" +"This setting will change the viewer and editor accordingly." +msgstr "" +"Ðеки језици Ñе читају Ñ Ð´ÐµÑна у лево.\n" +"Ово подешавање ће прилагодити томе приказивач и уређивач." + +#: optiondialog.cpp:1402 +#, fuzzy +msgid "Integration" +msgstr "Операција" + +#: optiondialog.cpp:1402 +#, fuzzy +msgid "Integration Settings" +msgstr "Регионална подешавања" + +#: optiondialog.cpp:1412 +msgid "Command line options to ignore:" +msgstr "" + +#: optiondialog.cpp:1417 +msgid "" +"List of command line options that should be ignored when KDiff3 is used by " +"other tools.\n" +"Several values can be specified if separated via ';'\n" +"This will suppress the \"Unknown option\"-error." +msgstr "" + +#: optiondialog.cpp:1480 +msgid "" +"You selected a variable width font.\n" +"\n" +"Because this program doesn't handle variable width fonts\n" +"correctly, you might experience problems while editing.\n" +"\n" +"Do you want to continue or do you want to select another font." +msgstr "" +"Изабрали Ñте фонт променљиве ширине.\n" +"\n" +"Пошто што овај програм не рукује иÑправно фонтовима променљиве\n" +"ширине, можете иÑкуÑити проблеме у току уређивања.\n" +"\n" +"Желите ли да наÑтавите или ћете изабрати други фонт?" + +#: optiondialog.cpp:1484 +msgid "Incompatible Font" +msgstr "Ðекомпатибилан фонт" + +#: optiondialog.cpp:1485 +msgid "Continue at Own Risk" +msgstr "ÐаÑтавите на ÑопÑтвени ризик" + +#: optiondialog.cpp:1485 +msgid "Select Another Font" +msgstr "Изаберите други фонт" + +#: optiondialog.cpp:1521 +msgid "This resets all options. Not only those of the current topic." +msgstr "Ово реÑетује Ñве опције. Ðе Ñамо оне у текућој теми." + +#: pdiff.cpp:258 +msgid "PreprocessorCmd: " +msgstr "ПрепроцеÑорка наредба: " + +#: pdiff.cpp:263 +msgid "" +"The following option(s) you selected might change data:\n" +msgstr "" +"Следеће опције које Ñте изабрали могу изменити податке:\n" + +#: pdiff.cpp:264 +msgid "" +"\n" +"Most likely this is not wanted during a merge.\n" +"Do you want to disable these settings or continue with these settings active?" +msgstr "" +"\n" +"Врло је вероватно да ово не желите приликом Ñтапања.\n" +"Желите ли да иÑкључите ова подешавања или да наÑтавите даље Ñа њима?" + +#: pdiff.cpp:266 +msgid "Option Unsafe for Merging" +msgstr "Опција није Ñигурна за Ñтапање" + +#: pdiff.cpp:267 +msgid "Use These Options During Merge" +msgstr "КориÑти ове опције при Ñтапању" + +#: pdiff.cpp:267 +msgid "Disable Unsafe Options" +msgstr "ИÑкључи неÑигурне опције" + +#: pdiff.cpp:297 +msgid "Loading A" +msgstr "Учитавам Ð" + +#: pdiff.cpp:301 +msgid "Loading B" +msgstr "Учитавам Б" + +#: pdiff.cpp:318 pdiff.cpp:344 +msgid "Diff: A <-> B" +msgstr "Раз.: Ð <-> Б" + +#: pdiff.cpp:324 pdiff.cpp:366 +msgid "Linediff: A <-> B" +msgstr "Раз.лин.: Ð <-> Б" + +#: pdiff.cpp:335 +msgid "Loading C" +msgstr "Учитавам Ц" + +#: pdiff.cpp:347 +msgid "Diff: B <-> C" +msgstr "Раз.: Б <-> Ц" + +#: pdiff.cpp:350 +msgid "Diff: A <-> C" +msgstr "Раз.: Ð <-> Ц" + +#: pdiff.cpp:369 +msgid "Linediff: B <-> C" +msgstr "Раз.лин.: Б <-> Ц" + +#: pdiff.cpp:372 +msgid "Linediff: A <-> C" +msgstr "Раз.лин.: Ð <-> Ц" + +#: pdiff.cpp:513 +#, fuzzy +msgid "All input files contain the same text, but are not binary equal." +msgstr "Сви улазни фајлови Ñадрже иÑти текÑÑ‚." + +#: pdiff.cpp:515 pdiff.cpp:517 pdiff.cpp:519 +#, fuzzy +msgid "" +"Files %1 and %2 are binary equal.\n" +msgstr "" +"Фајлови Б и Ц Ñу бинарно једнаки.\n" + +#: pdiff.cpp:516 pdiff.cpp:518 pdiff.cpp:520 +#, fuzzy +msgid "" +"Files %1 and %2 have equal text, but are not binary equal. \n" +msgstr "" +"Фајлови Ри Б Ñу бинарно једнаки.\n" + +#: pdiff.cpp:530 +msgid "" +"Some inputfiles don't seem to be pure textfiles.\n" +"Note that the KDiff3-merge was not meant for binary data.\n" +"Continue at your own risk." +msgstr "" +"Изгледа да неки улазни фајлови ниÑу чиÑто текÑтуални.\n" +"Имајте на уму да KDiff3 Ñтапање није намењено бинарним подацима.\n" +"ÐаÑтавите на ÑопÑтвени ризик." + +#: pdiff.cpp:979 +msgid "Abort" +msgstr "Прекини" + +#: pdiff.cpp:985 pdiff.cpp:1073 +msgid "Opening files..." +msgstr "Отварам фајлове..." + +#: pdiff.cpp:1050 pdiff.cpp:1121 +msgid "File open error" +msgstr "Грешка при отварању фајла" + +#: pdiff.cpp:1153 +msgid "Cutting selection..." +msgstr "ИÑецам изабрано..." + +#: pdiff.cpp:1174 +msgid "Copying selection to clipboard..." +msgstr "Копирам изабрано у клипборд..." + +#: pdiff.cpp:1190 +msgid "Inserting clipboard contents..." +msgstr "Убацујем Ñадржај клипборда..." + +#: pdiff.cpp:1713 +msgid "Save && Continue" +msgstr "Сними и наÑтави" + +#: pdiff.cpp:1713 +msgid "Continue Without Saving" +msgstr "ÐаÑтави без Ñнимања" + +#: pdiff.cpp:1920 +msgid "Search complete." +msgstr "Претрага је завршена." + +#: pdiff.cpp:1920 +msgid "Search Complete" +msgstr "Претрага је готова" + +#: pdiff.cpp:2144 +msgid "Nothing is selected in either diff input window." +msgstr "" + +#: pdiff.cpp:2144 +#, fuzzy +msgid "Error while adding manual diff range" +msgstr "Грешка у току прављења директоријума." + +#. i18n: file kdiff3_part.rc line 4 +#: rc.cpp:3 +#, no-c-format +msgid "&KDiff3" +msgstr "&KDiff3" + +#. i18n: file kdiff3_part.rc line 13 +#: rc.cpp:6 +#, no-c-format +msgid "Configure KDiff3" +msgstr "ПодеÑи KDiff3" + +#. i18n: file kdiff3_shell.rc line 7 +#: rc.cpp:15 +#, no-c-format +msgid "&Directory" +msgstr "&Директоријум" + +#. i18n: file kdiff3_shell.rc line 30 +#: rc.cpp:18 +#, no-c-format +msgid "Current Item Merge Operation" +msgstr "Операција Ñтапања текуће Ñтавке" + +#. i18n: file kdiff3_shell.rc line 38 +#: rc.cpp:21 +#, no-c-format +msgid "Current Item Sync Operation" +msgstr "Операција Ñинх. текуће Ñтавке" + +#. i18n: file kdiff3_shell.rc line 50 +#: rc.cpp:24 +#, no-c-format +msgid "&Movement" +msgstr "&Кретање" + +#. i18n: file kdiff3_shell.rc line 61 +#: rc.cpp:27 +#, no-c-format +msgid "D&iffview" +msgstr "D&iff приказ" + +#. i18n: file kdiff3_shell.rc line 73 +#: rc.cpp:30 +#, no-c-format +msgid "&Merge" +msgstr "&Стопи" + +#. i18n: file kdiff3_shell.rc line 95 +#: rc.cpp:33 +#, no-c-format +msgid "&Window" +msgstr "П&розор" + +#: smalldialogs.cpp:53 +msgid "A (Base):" +msgstr "Ð (база):" + +#: smalldialogs.cpp:59 smalldialogs.cpp:75 smalldialogs.cpp:91 +#: smalldialogs.cpp:134 +msgid "File..." +msgstr "Фајл..." + +#: smalldialogs.cpp:61 smalldialogs.cpp:77 smalldialogs.cpp:93 +#: smalldialogs.cpp:136 +msgid "Dir..." +msgstr "Дир..." + +#: smalldialogs.cpp:86 +msgid "C (Optional):" +msgstr "Ц (опционо):" + +#: smalldialogs.cpp:108 +msgid "Swap/Copy Names ..." +msgstr "" + +#: smalldialogs.cpp:114 smalldialogs.cpp:115 smalldialogs.cpp:116 +msgid "Swap %1<->%2" +msgstr "" + +#: smalldialogs.cpp:117 smalldialogs.cpp:118 smalldialogs.cpp:119 +msgid "Copy %1->Output" +msgstr "" + +#: smalldialogs.cpp:120 smalldialogs.cpp:121 smalldialogs.cpp:122 +msgid "Swap %1<->Output" +msgstr "" + +#: smalldialogs.cpp:129 +msgid "Output (optional):" +msgstr "Излаз (опционо):" + +#: smalldialogs.cpp:158 +msgid "Configure..." +msgstr "ПодеÑи..." + +#: smalldialogs.cpp:347 +msgid "Search text:" +msgstr "ТекÑÑ‚ за претрагу:" + +#: smalldialogs.cpp:354 +msgid "Case sensitive" +msgstr "Разликује мала и велика Ñлова" + +#: smalldialogs.cpp:357 +msgid "Search A" +msgstr "Претражи Ð" + +#: smalldialogs.cpp:362 +msgid "Search B" +msgstr "Претражи Б" + +#: smalldialogs.cpp:367 +msgid "Search C" +msgstr "Претражи Ц" + +#: smalldialogs.cpp:372 +msgid "Search output" +msgstr "Излаз претраге" + +#: smalldialogs.cpp:377 +msgid "&Search" +msgstr "&Тражи" + +#: smalldialogs.cpp:394 +msgid "Regular Expression Tester" +msgstr "" + +#: smalldialogs.cpp:405 +msgid "Example auto merge line:" +msgstr "" + +#: smalldialogs.cpp:407 +msgid "For auto merge test copy a line as used in your files." +msgstr "" + +#: smalldialogs.cpp:413 smalldialogs.cpp:442 smalldialogs.cpp:479 +msgid "Match result:" +msgstr "" + +#: smalldialogs.cpp:432 +msgid "Example history start line (with leading comment):" +msgstr "" + +#: smalldialogs.cpp:435 +msgid "" +"Copy a history start line as used in your files,\n" +"including the leading comment." +msgstr "" + +#: smalldialogs.cpp:461 +msgid "History sort key order:" +msgstr "" + +#: smalldialogs.cpp:469 +msgid "Example history entry start line (without leading comment):" +msgstr "" + +#: smalldialogs.cpp:471 +msgid "" +"Copy a history entry start line as used in your files,\n" +"but omit the leading comment." +msgstr "" + +#: smalldialogs.cpp:486 +msgid "Sort key result:" +msgstr "" + +#: smalldialogs.cpp:537 smalldialogs.cpp:547 smalldialogs.cpp:568 +msgid "Match success." +msgstr "" + +#: smalldialogs.cpp:541 smalldialogs.cpp:551 smalldialogs.cpp:574 +#, fuzzy +msgid "Match failed." +msgstr "Снимање није уÑпело." + +#: smalldialogs.cpp:559 +msgid "Opening and closing parentheses don't match in regular expression." +msgstr "" + +#, fuzzy +#~ msgid "Diff and Merge" +#~ msgstr "Разлика и Ñтапање" + +#, fuzzy +#~ msgid "Save Directory Merge State ..." +#~ msgstr "Стапање директоријума" + +#, fuzzy +#~ msgid "Load Directory Merge State ..." +#~ msgstr "Стапање директоријума" + +#, fuzzy +#~ msgid "Synchronize Directories" +#~ msgstr "Синхронизуј директоријуме" + +#, fuzzy +#~ msgid "Copy Newer Files Instead of Merging" +#~ msgstr "Копирај новији умеÑто Ñтапања (није безбедно)" + +#~ msgid "List only deltas" +#~ msgstr "ИзлиÑтај Ñамо делте" + +#~ msgid "Files and directories without change will not appear in the list." +#~ msgstr "Фајлови и директоријуми без измена неће Ñе појављивати у лиÑти." + +#, fuzzy +#~ msgid "no selection" +#~ msgstr "ÐутоматÑко копирање избора" + +#, fuzzy +#~ msgid "Manually match lines" +#~ msgstr "Ручни избор" + +#~ msgid "Has no effect. For compatibility with certain tools." +#~ msgstr "Ðема ефекта. За компатибилноÑÑ‚ Ñа одређеним алатима." + +#~ msgid "For compatibility with certain tools." +#~ msgstr "За компатибилноÑÑ‚ Ñа одређеним алатима." + +#~ msgid "Colors in Editor & Diff Output" +#~ msgstr "Боје у уређивачу и раз. излазу" + +#~ msgid "Text Diff and Merge Tool" +#~ msgstr "Ðлат за разликовање и Ñтапање текÑта" + +#~ msgid "" +#~ "\n" +#~ "\n" +#~ "File not saved." +#~ msgstr "" +#~ "\n" +#~ "\n" +#~ "Фајл није Ñнимљен." + +#~ msgid "Out of memory while preparing to save." +#~ msgstr "ÐеÑтало је меморије у току припреме Ñнимања." + +#~ msgid "Delete (If Exists)" +#~ msgstr "Обриши (ако поÑтоји)" + +#~ msgid "Delete A and B" +#~ msgstr "Обриши Ри Б" + +#~ msgid "Merge to A and B" +#~ msgstr "Стопи Ри Б" + +#, fuzzy +#~ msgid "Error writing temporary file: %1" +#~ msgstr "Пишем фајл: %1" + +#~ msgid "Convert to upper case" +#~ msgstr "Претвори у велика Ñлова" + +#~ msgid "Turn all lower case characters to upper case on reading. (e.g.: 'a'->'A')" +#~ msgstr "Претвори Ñве знакове малих Ñлова у велика при читању. (нпр.: „а“->„Г)" + +#, fuzzy +#~ msgid "Convert to upper case\n" +#~ msgstr "Претвори у велика Ñлова" + +#~ msgid "" +#~ "Running the external diff failed.\n" +#~ "Check if the diff works, if the program can write in the temp folder or if the disk is full.\n" +#~ "The external diff option will be disabled now and the internal diff will be used." +#~ msgstr "" +#~ "Покретање Ñпољашњег разликовања није уÑпело.\n" +#~ "Проверите да ли то разликовање ради, да ли програм може да пише у привремени директоријум и да ли има проÑтора на диÑку.\n" +#~ "Опција Ñпољашњег разликовања ће Ñада бити иÑкључена и кориÑтиће Ñе унутрашње." diff --git a/po/sr@Latn.po b/po/sr@Latn.po new file mode 100644 index 0000000..18a7807 --- /dev/null +++ b/po/sr@Latn.po @@ -0,0 +1,2587 @@ +# translation of kdiff3.po to Serbian +# Copyright (C) 2003, 2005 Free Software Foundation, Inc. +# Chusslove Illich , 2003. +# Chusslove Illich , 2005. +# +msgid "" +msgstr "" +"Project-Id-Version: kdiff3\n" +"POT-Creation-Date: 2006-11-05 08:45+0100\n" +"PO-Revision-Date: 2005-02-26 19:41+0100\n" +"Last-Translator: Chusslove Illich \n" +"Language-Team: Serbian\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: KBabel 1.9.1\n" + +#: _translatorinfo.cpp:1 +msgid "" +"_: NAME OF TRANSLATORS\n" +"Your names" +msgstr "ÄŒaslav Ilić, Slobodan Simić" + +#: _translatorinfo.cpp:3 +msgid "" +"_: EMAIL OF TRANSLATORS\n" +"Your emails" +msgstr "caslav.ilic@gmx.net,simicsl@verat.net" + +#: diff.cpp:246 +msgid "Writing clipboard data to temp file failed." +msgstr "Upisivanje podataka iz klipborda u privremeni fajl nije uspelo." + +#: diff.cpp:250 +msgid "From Clipboard" +msgstr "Iz klipborda" + +#: diff.cpp:491 +msgid "" +"Preprocessing possibly failed. Check this command:\n" +"\n" +" %1\n" +"\n" +"The preprocessing command will be disabled now." +msgstr "" +"Predobrada je verovatno neuspeÅ¡na. Proverite ovu naredbu:\n" +"\n" +" %1\n" +"\n" +"Naredba predobrade će sada biti iskljuÄena." + +#: diff.cpp:526 +msgid "" +"The line-matching-preprocessing possibly failed. Check this command:\n" +"\n" +" %1\n" +"\n" +"The line-matching-preprocessing command will be disabled now." +msgstr "" +"Predobrada poklapanja linija je neuspeÅ¡na. Proverite ovu naredbu:\n" +"\n" +" %1\n" +"\n" +"Predobrada poklapanja linija će sada biti iskljuÄena." + +#: diff.cpp:1631 diff.cpp:1645 +msgid "" +"Data loss error:\n" +"If it is reproducable please contact the author.\n" +msgstr "" +"GreÅ¡ka, gubitak podataka:\n" +"Ako je možete ponoviti, kontaktirajte autora.\n" + +#: diff.cpp:1633 diff.cpp:1647 +msgid "Severe Internal Error" +msgstr "Ozbiljna unutraÅ¡nja greÅ¡ka" + +#: difftextwindow.cpp:1643 kdiff3.cpp:753 +#, fuzzy +msgid "Top line" +msgstr "NajviÅ¡a linija %1" + +#: difftextwindow.cpp:1653 +msgid "End" +msgstr "Kraj" + +#: directorymergewindow.cpp:142 +msgid "Mix of links and normal files." +msgstr "MeÅ¡avina veza i normalnih fajlova." + +#: directorymergewindow.cpp:149 +msgid "Link: " +msgstr "Veza: " + +#: directorymergewindow.cpp:157 +msgid "Size. " +msgstr "VeliÄina: " + +#: directorymergewindow.cpp:170 +msgid "Date & Size: " +msgstr "Datum i veliÄina: " + +#: directorymergewindow.cpp:179 directorymergewindow.cpp:185 +msgid "Creating temp copy of %1 failed." +msgstr "Pravljenje privremene kopije fajla %1 nije uspelo." + +#: directorymergewindow.cpp:196 directorymergewindow.cpp:204 +msgid "Opening %1 failed." +msgstr "Otvaranje fajla %1 nije uspelo." + +#: directorymergewindow.cpp:208 +msgid "Comparing file..." +msgstr "UporeÄ‘ujem fajl..." + +#: directorymergewindow.cpp:218 directorymergewindow.cpp:224 +#, c-format +msgid "Error reading from %1" +msgstr "GreÅ¡ka pri Äitanju iz %1" + +#: directorymergewindow.cpp:282 +msgid "Name" +msgstr "Ime" + +#: directorymergewindow.cpp:286 +msgid "Operation" +msgstr "Operacija" + +#: directorymergewindow.cpp:287 +msgid "Status" +msgstr "Status" + +#: directorymergewindow.cpp:288 +msgid "Unsolved" +msgstr "NereÅ¡en" + +#: directorymergewindow.cpp:289 +msgid "Solved" +msgstr "ReÅ¡en" + +#: directorymergewindow.cpp:290 +msgid "Nonwhite" +msgstr "Ne-belo" + +#: directorymergewindow.cpp:291 +msgid "White" +msgstr "Belo" + +#: directorymergewindow.cpp:319 +msgid "" +"You are currently doing a directory merge. Are you sure, you want to abort the " +"merge and rescan the directory?" +msgstr "" +"Trenutno stapate direktorijume. Želite li zaista da prekinete stapanje i ponovo " +"skenirate direktorijum?" + +#: directorymergewindow.cpp:320 directorymergewindow.cpp:2868 +msgid "Rescan" +msgstr "Ponovo skeniraj" + +#: directorymergewindow.cpp:320 kdiff3.cpp:603 pdiff.cpp:979 +msgid "Continue Merging" +msgstr "Nastavi stapanje" + +#: directorymergewindow.cpp:462 +msgid "Opening of directories failed:" +msgstr "Otvaranje direktorijuma nije uspelo:" + +#: directorymergewindow.cpp:465 +msgid "" +"Dir A \"%1\" does not exist or is not a directory.\n" +msgstr "" +"Dir. A „%1“ ne postoji ili nije direktorijum.\n" + +#: directorymergewindow.cpp:468 +msgid "" +"Dir B \"%1\" does not exist or is not a directory.\n" +msgstr "" +"Dir. B „%1“ ne postoji ili nije direktorijum.\n" + +#: directorymergewindow.cpp:471 +msgid "" +"Dir C \"%1\" does not exist or is not a directory.\n" +msgstr "" +"Dir. C „%1“ ne postoji ili nije direktorijum.\n" + +#: directorymergewindow.cpp:473 +msgid "Directory Open Error" +msgstr "GreÅ¡ka pri otvaranju direktorijuma" + +#: directorymergewindow.cpp:481 +msgid "" +"The destination directory must not be the same as A or B when three directories " +"are merged.\n" +"Check again before continuing." +msgstr "" +"OdrediÅ¡ni direktorijum ne sme biti isti kao A ili B kada se stapaju tri " +"direktorijuma.\n" +"Proverite ponovo pre nego nastavite." + +#: directorymergewindow.cpp:483 +msgid "Parameter Warning" +msgstr "Upozorenje o parametrima" + +#: directorymergewindow.cpp:488 +msgid "Scanning directories..." +msgstr "Pregledam direktorijume..." + +#: directorymergewindow.cpp:537 +msgid "Reading Directory A" +msgstr "ÄŒitam direktorijum A" + +#: directorymergewindow.cpp:559 +msgid "Reading Directory B" +msgstr "ÄŒitam direktorijum B" + +#: directorymergewindow.cpp:581 +msgid "Reading Directory C" +msgstr "ÄŒitam direktorijum C" + +#: directorymergewindow.cpp:607 +msgid "Some subdirectories were not readable in" +msgstr "Neki poddirektorijumi nisu bili Äitljivi u" + +#: directorymergewindow.cpp:612 +msgid "Check the permissions of the subdirectories." +msgstr "Proverite dozvole poddirektorijuma." + +#: directorymergewindow.cpp:646 kdiff3.cpp:552 kdiff3.cpp:636 kdiff3.cpp:661 +#: kdiff3.cpp:934 kdiff3.cpp:955 pdiff.cpp:1059 pdiff.cpp:1131 pdiff.cpp:1169 +#: pdiff.cpp:1185 pdiff.cpp:1215 pdiff.cpp:1226 +msgid "Ready." +msgstr "Spreman." + +#: directorymergewindow.cpp:660 +msgid "Directory Comparison Status" +msgstr "Status poreÄ‘enja direktorijuma" + +#: directorymergewindow.cpp:661 +msgid "Number of subdirectories:" +msgstr "Broj poddirektorijuma:" + +#: directorymergewindow.cpp:662 +msgid "Number of equal files:" +msgstr "Broj jednakih fajlova:" + +#: directorymergewindow.cpp:663 +msgid "Number of different files:" +msgstr "Broj razliÄitih fajlova:" + +#: directorymergewindow.cpp:666 +msgid "Number of manual merges:" +msgstr "Broj ruÄnih stapanja:" + +#: directorymergewindow.cpp:802 +msgid "This affects all merge operations." +msgstr "Ovo utiÄe na sve operacije stapanja." + +#: directorymergewindow.cpp:803 +msgid "Changing All Merge Operations" +msgstr "Menjam sve operacije stapanja" + +#: directorymergewindow.cpp:803 mergeresultwindow.cpp:287 +msgid "C&ontinue" +msgstr "&Nastavi" + +#: directorymergewindow.cpp:1169 +msgid "Processing " +msgstr "ObraÄ‘ujem " + +#: directorymergewindow.cpp:1647 directorymergewindow.cpp:1653 +msgid "To do." +msgstr "Uraditi." + +#: directorymergewindow.cpp:1756 directorymergewindow.cpp:2899 +msgid "Copy A to B" +msgstr "Kopiraj A u B" + +#: directorymergewindow.cpp:1757 directorymergewindow.cpp:2900 +msgid "Copy B to A" +msgstr "Kopiraj B u A" + +#: directorymergewindow.cpp:1758 directorymergewindow.cpp:2901 +msgid "Delete A" +msgstr "ObriÅ¡i A" + +#: directorymergewindow.cpp:1759 directorymergewindow.cpp:2902 +msgid "Delete B" +msgstr "ObriÅ¡i B" + +#: directorymergewindow.cpp:1760 +msgid "Delete A & B" +msgstr "ObriÅ¡i A i B" + +#: directorymergewindow.cpp:1761 directorymergewindow.cpp:2904 +msgid "Merge to A" +msgstr "Stopi u A" + +#: directorymergewindow.cpp:1762 directorymergewindow.cpp:2905 +msgid "Merge to B" +msgstr "Stopi u B" + +#: directorymergewindow.cpp:1763 +msgid "Merge to A & B" +msgstr "Stopi A i B" + +#: directorymergewindow.cpp:1767 directorymergewindow.cpp:2896 +msgid "Delete (if exists)" +msgstr "ObriÅ¡i (ako postoji)" + +#: directorymergewindow.cpp:1768 directorymergewindow.cpp:1769 +#: directorymergewindow.cpp:2895 optiondialog.cpp:809 smalldialogs.cpp:102 +msgid "Merge" +msgstr "Stopi" + +#: directorymergewindow.cpp:1768 directorymergewindow.cpp:1769 +msgid "Merge (manual)" +msgstr "Stopi (ruÄno)" + +#: directorymergewindow.cpp:1770 +msgid "Error: Conflicting File Types" +msgstr "GreÅ¡ka: Sukobljeni tipovi fajlova" + +#: directorymergewindow.cpp:1771 +msgid "Error: Dates are equal but files are not." +msgstr "GreÅ¡ka: Datumi su jednaki ali fajlovi nisu." + +#: directorymergewindow.cpp:1795 directorymergewindow.cpp:1824 +#: directorymergewindow.cpp:1849 +msgid "This operation is currently not possible." +msgstr "Ova operacija trenutno nije moguća." + +#: directorymergewindow.cpp:1795 directorymergewindow.cpp:1824 +#: directorymergewindow.cpp:1849 directorymergewindow.cpp:2106 +msgid "Operation Not Possible" +msgstr "Operacija nije moguća" + +#: directorymergewindow.cpp:1888 +msgid "" +"This should never happen: \n" +"\n" +"mergeResultSaved: m_pMFI=0\n" +"\n" +"If you know how to reproduce this, please contact the program author." +msgstr "" +"Ovo nikada ne bi trebalo da se desi: \n" +"\n" +"Ako znate kako ovo da ponovite, kontaktirajte autora programa." + +#: directorymergewindow.cpp:1888 +msgid "Program Error" +msgstr "Programska greÅ¡ka" + +#: directorymergewindow.cpp:1899 +msgid "" +"An error occurred while copying.\n" +msgstr "" +"DoÅ¡lo je do greÅ¡ke u toku kopiranja.\n" + +#: directorymergewindow.cpp:1900 directorymergewindow.cpp:2306 +msgid "Merge Error" +msgstr "GreÅ¡ka stapanja" + +#: directorymergewindow.cpp:1905 directorymergewindow.cpp:2311 +msgid "Error." +msgstr "GreÅ¡ka." + +#: directorymergewindow.cpp:1910 directorymergewindow.cpp:2202 +#: directorymergewindow.cpp:2242 +msgid "Done." +msgstr "Gotovo." + +#: directorymergewindow.cpp:1933 +msgid "Not saved." +msgstr "Nije snimljeno." + +#: directorymergewindow.cpp:1968 +msgid "Unknown merge operation. (This must never happen!)" +msgstr "Nepoznata operacija stapanja. (Ovo nikad ne sme da se desi!)" + +#: directorymergewindow.cpp:2000 +msgid "Unknown merge operation." +msgstr "Nepoznata operacija stapanja." + +#: directorymergewindow.cpp:2015 +msgid "" +"The merge is about to begin.\n" +"\n" +"Choose \"Do it\" if you have read the instructions and know what you are " +"doing.\n" +"Choosing \"Simulate it\" will tell you what would happen.\n" +"\n" +"Be aware that this program still has beta status and there is NO WARRANTY " +"whatsoever! Make backups of your vital data!" +msgstr "" +"Stapanje će upravo poÄeti.\n" +"\n" +"Izaberite „Uradi“ ako ste proÄitali instrukcije i znate Å¡ta radite.\n" +"Izaberite „Simuliraj“ ako želite da vidite Å¡ta bi se desilo.\n" +"\n" +"Pazite da program joÅ¡ uvek ima beta status i nema NIKAKVIH GARANCIJA uopÅ¡te! " +"Napravite rezervu svojih najvažnijih podataka!" + +#: directorymergewindow.cpp:2020 +msgid "Starting Merge" +msgstr "PoÄinjem stapanje" + +#: directorymergewindow.cpp:2020 +msgid "Do It" +msgstr "Uradi" + +#: directorymergewindow.cpp:2020 +msgid "Simulate It" +msgstr "Simuliraj" + +#: directorymergewindow.cpp:2046 +msgid "" +"The highlighted item has a different type in the different directories. Select " +"what to do." +msgstr "" +"Istaknuta stavka ima razliÄit tip u razliÄitim direktorijumima. Izaberite Å¡ta " +"je Äiniti." + +#: directorymergewindow.cpp:2055 +msgid "" +"The modification dates of the file are equal but the files are not. Select what " +"to do." +msgstr "" +"Datumi izmene fajla su jednaki ali fajlovi nisu. Izaberite Å¡ta je Äiniti." + +#: directorymergewindow.cpp:2106 +msgid "" +"This operation is currently not possible because directory merge is currently " +"running." +msgstr "" +"Ova operacija trenutno nije moguća zato Å¡to je stapanje direktorijuma u toku." + +#: directorymergewindow.cpp:2166 +msgid "" +"There was an error in the last step.\n" +"Do you want to continue with the item that caused the error or do you want to " +"skip this item?" +msgstr "" +"DoÅ¡lo je do greÅ¡ke u poslednjem koraku.\n" +"Želite li da nastavite sa stavkom koja je izazvala greÅ¡ku ili želite da je " +"preskoÄite?" + +#: directorymergewindow.cpp:2168 +msgid "Continue merge after an error" +msgstr "Nastavi stapanje posle greÅ¡ke" + +#: directorymergewindow.cpp:2168 +msgid "Continue With Last Item" +msgstr "Nastavi sa poslednjom stavkom" + +#: directorymergewindow.cpp:2168 +msgid "Skip Item" +msgstr "PreskoÄi stavku" + +#: directorymergewindow.cpp:2202 +msgid "Skipped." +msgstr "PreskoÄeno." + +#: directorymergewindow.cpp:2209 directorymergewindow.cpp:2435 +msgid "In progress..." +msgstr "U toku..." + +#: directorymergewindow.cpp:2257 +msgid "Merge operation complete." +msgstr "Operacija stapanja je zavrÅ¡ena." + +#: directorymergewindow.cpp:2257 directorymergewindow.cpp:2260 +msgid "Merge Complete" +msgstr "Stapanje je zavrÅ¡eno" + +#: directorymergewindow.cpp:2269 +msgid "" +"Simulated merge complete: Check if you agree with the proposed operations." +msgstr "" +"Simulirano stapanje je zavrÅ¡eno: Proverite da li se slažete sa predloženim " +"operacijama." + +#: directorymergewindow.cpp:2305 +msgid "" +"An error occurred. Press OK to see detailed information.\n" +msgstr "" +"DoÅ¡lo je do greÅ¡ke. Pritisnite „U redu“ da biste videli detaljne informacije.\n" + +#: directorymergewindow.cpp:2348 +msgid "Error: While deleting %1: Creating backup failed." +msgstr "GreÅ¡ka: U toku brisanja %1: Pravljenje rezerve nije uspelo." + +#: directorymergewindow.cpp:2355 +msgid "delete directory recursively( %1 )" +msgstr "obriÅ¡i direktorijum rekurzivno( %1 )" + +#: directorymergewindow.cpp:2357 +msgid "delete( %1 )" +msgstr "obriÅ¡i( %1 )" + +#: directorymergewindow.cpp:2372 +msgid "Error: delete dir operation failed while trying to read the directory." +msgstr "" +"GreÅ¡ka: Operacija brisanja direktorijuma nije uspela u toku pokuÅ¡aja da se " +"direktorijum proÄita." + +#: directorymergewindow.cpp:2391 +msgid "Error: rmdir( %1 ) operation failed." +msgstr "GreÅ¡ka: Operacija rmdir( %1 ) nije uspela." + +#: directorymergewindow.cpp:2401 +msgid "Error: delete operation failed." +msgstr "GreÅ¡ka: Operacija brisanja nije uspela." + +#: directorymergewindow.cpp:2427 +msgid "manual merge( %1, %2, %3 -> %4)" +msgstr "ruÄno stapanje( %1, %2, %3 -> %4)" + +#: directorymergewindow.cpp:2430 +msgid "" +" Note: After a manual merge the user should continue by pressing F7." +msgstr "" +" Napomena: Posle ruÄnog stapanja korisnik bi trebalo da nastavi pomoću F7." + +#: directorymergewindow.cpp:2453 +msgid "Error: copy( %1 -> %2 ) failed.Deleting existing destination failed." +msgstr "" +"GreÅ¡ka: Kopiranje( %1 -> %2 ) nije uspelo. Brisanje postojećeg odrediÅ¡ta nije " +"uspelo." + +#: directorymergewindow.cpp:2463 +msgid "copyLink( %1 -> %2 )" +msgstr "kopiranje veze( %1 -> %2 )" + +#: directorymergewindow.cpp:2474 +msgid "Error: copyLink failed: Remote links are not yet supported." +msgstr "" +"GreÅ¡ka: Kopiranje veze nije uspelo: Udaljene veze joÅ¡ uvek nisu podržane." + +#: directorymergewindow.cpp:2480 +msgid "Error: copyLink failed." +msgstr "GreÅ¡ka: Kopiranje veze nije uspelo." + +#: directorymergewindow.cpp:2500 +msgid "copy( %1 -> %2 )" +msgstr "kopiraj( %1 -> %2 )" + +#: directorymergewindow.cpp:2526 +msgid "Error during rename( %1 -> %2 ): Cannot delete existing destination." +msgstr "" +"GreÅ¡ka u toku preimenovanja( %1 -> %2 ): Ne mogu da obriÅ¡em postojeće " +"odrediÅ¡te." + +#: directorymergewindow.cpp:2532 +msgid "rename( %1 -> %2 )" +msgstr "preimenuj( %1 -> %2 )" + +#: directorymergewindow.cpp:2541 +msgid "Error: Rename failed." +msgstr "GreÅ¡ka: Preimenovanje nije uspelo." + +#: directorymergewindow.cpp:2559 +msgid "Error during makeDir of %1. Cannot delete existing file." +msgstr "" +"GreÅ¡ka u toku pravljenja direktorijuma %1. Ne mogu da obriÅ¡em postojeći fajl." + +#: directorymergewindow.cpp:2575 +msgid "makeDir( %1 )" +msgstr "napravi direktorijum( %1 )" + +#: directorymergewindow.cpp:2585 +msgid "Error while creating directory." +msgstr "GreÅ¡ka u toku pravljenja direktorijuma." + +#: directorymergewindow.cpp:2608 directorymergewindow.cpp:2725 +msgid "Dest" +msgstr "Odr." + +#: directorymergewindow.cpp:2612 directorymergewindow.cpp:2650 +msgid "Dir" +msgstr "Dir." + +#: directorymergewindow.cpp:2613 +msgid "Type" +msgstr "Tip" + +#: directorymergewindow.cpp:2614 +msgid "Size" +msgstr "Vel." + +#: directorymergewindow.cpp:2615 +msgid "Attr" +msgstr "Atr." + +#: directorymergewindow.cpp:2616 +msgid "Last Modification" +msgstr "Poslednja izmena" + +#: directorymergewindow.cpp:2617 +msgid "Link-Destination" +msgstr "Veza-odrediÅ¡te" + +#: directorymergewindow.cpp:2667 +msgid "not available" +msgstr "nije dostupno" + +#: directorymergewindow.cpp:2687 +msgid "A (Dest): " +msgstr "A (odr.): " + +#: directorymergewindow.cpp:2690 +msgid "A (Base): " +msgstr "A (baza): " + +#: directorymergewindow.cpp:2696 +msgid "B (Dest): " +msgstr "B (odr.): " + +#: directorymergewindow.cpp:2704 +msgid "C (Dest): " +msgstr "C (odr.): " + +#: directorymergewindow.cpp:2710 +msgid "Dest: " +msgstr "Odr.: " + +#: directorymergewindow.cpp:2775 +#, fuzzy +msgid "Save Directory Merge State As..." +msgstr "Stapanje direktorijuma" + +#: directorymergewindow.cpp:2862 +msgid "Start/Continue Directory Merge" +msgstr "Pokreni/nastavi stapanje direktorijuma" + +#: directorymergewindow.cpp:2863 +msgid "Run Operation for Current Item" +msgstr "Pokreni operaciju za tekuću stavku" + +#: directorymergewindow.cpp:2864 +msgid "Compare Selected File" +msgstr "Uporedi izabrani fajl" + +#: directorymergewindow.cpp:2865 +msgid "Merge Current File" +msgstr "Stopi tekući fajl" + +#: directorymergewindow.cpp:2866 +msgid "Fold All Subdirs" +msgstr "Sažmi sve poddirektorijume" + +#: directorymergewindow.cpp:2867 +msgid "Unfold All Subdirs" +msgstr "RaÅ¡iri sve poddirektorijume" + +#: directorymergewindow.cpp:2871 +msgid "Choose A for All Items" +msgstr "Izaberi A za sve stavke" + +#: directorymergewindow.cpp:2872 +msgid "Choose B for All Items" +msgstr "Izaberi B za sve stavke" + +#: directorymergewindow.cpp:2873 +msgid "Choose C for All Items" +msgstr "Izaberi C za sve stavke" + +#: directorymergewindow.cpp:2874 +msgid "Auto-Choose Operation for All Items" +msgstr "Automatski izaberi operaciju za sve stavke" + +#: directorymergewindow.cpp:2875 +msgid "No Operation for All Items" +msgstr "Nema operacije za sve stavke" + +#: directorymergewindow.cpp:2880 +msgid "Show Identical Files" +msgstr "" + +#: directorymergewindow.cpp:2881 +#, fuzzy +msgid "Show Different Files" +msgstr "Broj razliÄitih fajlova:" + +#: directorymergewindow.cpp:2882 +msgid "Show Files only in A" +msgstr "" + +#: directorymergewindow.cpp:2883 +msgid "Show Files only in B" +msgstr "" + +#: directorymergewindow.cpp:2884 +msgid "Show Files only in C" +msgstr "" + +#: directorymergewindow.cpp:2888 +#, fuzzy +msgid "Compare Explicitly Selected Files" +msgstr "Uporedi izabrani fajl" + +#: directorymergewindow.cpp:2889 +#, fuzzy +msgid "Merge Explicitly Selected Files" +msgstr "Uporedi izabrani fajl" + +#: directorymergewindow.cpp:2891 directorymergewindow.cpp:2898 +msgid "Do Nothing" +msgstr "Ne radi niÅ¡ta" + +#: directorymergewindow.cpp:2892 +msgid "A" +msgstr "A" + +#: directorymergewindow.cpp:2893 +msgid "B" +msgstr "B" + +#: directorymergewindow.cpp:2894 +msgid "C" +msgstr "C" + +#: directorymergewindow.cpp:2903 +msgid "Delete A && B" +msgstr "ObriÅ¡i A i B" + +#: directorymergewindow.cpp:2906 +msgid "Merge to A && B" +msgstr "Stopi u A i B" + +#: fileaccess.cpp:595 +msgid "" +"While trying to make a backup, deleting an older backup failed. \n" +"Filename: " +msgstr "" +"U toku pokuÅ¡aja da se napravi rezerva, brisanje starije rezerve nije uspelo.\n" +"Ime fajla: " + +#: fileaccess.cpp:602 +msgid "" +"While trying to make a backup, renaming failed. \n" +"Filenames: " +msgstr "" +"U toku pokuÅ¡aja da se napravi rezerva, preimenovanje nije uspelo.\n" +"Imena fajlova: " + +#: fileaccess.cpp:624 +#, c-format +msgid "Getting file status: %1" +msgstr "Dobavljam status fajla: %1" + +#: fileaccess.cpp:667 +#, c-format +msgid "Reading file: %1" +msgstr "ÄŒitam fajl: %1" + +#: fileaccess.cpp:703 +#, c-format +msgid "Writing file: %1" +msgstr "PiÅ¡em fajl: %1" + +#: fileaccess.cpp:731 +msgid "Out of memory" +msgstr "Nema memorije" + +#: fileaccess.cpp:766 +#, c-format +msgid "Making directory: %1" +msgstr "Pravim direktorijum: %1" + +#: fileaccess.cpp:786 +#, c-format +msgid "Removing directory: %1" +msgstr "Uklanjam direktorijum: %1" + +#: fileaccess.cpp:801 +#, c-format +msgid "Removing file: %1" +msgstr "Uklanjam fajl: %1" + +#: fileaccess.cpp:817 +msgid "Creating symbolic link: %1 -> %2" +msgstr "Pravim simboliÄku vezu: %1 -> %2" + +#: fileaccess.cpp:843 +msgid "Renaming file: %1 -> %2" +msgstr "Uklanjam fajl: %1 -> %2" + +#: fileaccess.cpp:879 +msgid "Copying file: %1 -> %2" +msgstr "Kopiram fajl: %1 -> %2" + +#: fileaccess.cpp:893 +#, c-format +msgid "" +"Error during file copy operation: Opening file for reading failed. Filename: %1" +msgstr "" +"GreÅ¡ka tokom operacije kopiranja fajlova: Otvaranje fajla za Äitanje nije " +"uspelo. Ime fajla: %1" + +#: fileaccess.cpp:899 +#, c-format +msgid "" +"Error during file copy operation: Opening file for writing failed. Filename: %1" +msgstr "" +"GreÅ¡ka tokom operacije kopiranja fajlova: Otvaranje fajla za pisanje nije " +"uspelo. Ime fajla: %1" + +#: fileaccess.cpp:914 +#, c-format +msgid "Error during file copy operation: Reading failed. Filename: %1" +msgstr "" +"GreÅ¡ka tokom operacije kopiranja fajlova: ÄŒitanje nije uspelo. Ime fajla: %1" + +#: fileaccess.cpp:923 +#, c-format +msgid "Error during file copy operation: Writing failed. Filename: %1" +msgstr "" +"GreÅ¡ka tokom operacije kopiranja fajlova: Pisanje nije uspelo. Ime fajla: %1" + +#: fileaccess.cpp:1219 +msgid "Reading directory: " +msgstr "ÄŒitam direktorijum: " + +#: fileaccess.cpp:1348 +#, c-format +msgid "Listing directory: %1" +msgstr "Listam direktorijum: %1" + +#: kdiff3.cpp:142 +#, fuzzy +msgid "Current Configuration:" +msgstr "Operacija sinh. tekuće stavke" + +#: kdiff3.cpp:147 +#, fuzzy +msgid "Config Option Error:" +msgstr "GreÅ¡ka pri otvaranju fajla" + +#: kdiff3.cpp:187 +msgid "Option --auto used, but no output file specified." +msgstr "Opcija --auto je upotrebljena, ali nije naveden izlazni fajl." + +#: kdiff3.cpp:323 +msgid "Option --auto ignored for directory comparison." +msgstr "Opcija --auto se ignoriÅ¡e za poreÄ‘enje direktorijuma." + +#: kdiff3.cpp:359 +msgid "Saving failed." +msgstr "Snimanje nije uspelo." + +#: kdiff3.cpp:386 pdiff.cpp:1041 pdiff.cpp:1112 +msgid "Opening of these files failed:" +msgstr "Otvaranje ovih fajlova nije uspelo:" + +#: kdiff3.cpp:395 +msgid "File Open Error" +msgstr "GreÅ¡ka pri otvaranju fajla" + +#: kdiff3.cpp:418 +msgid "Opens documents for comparison..." +msgstr "Otvara dokumente za poreÄ‘enje..." + +#: kdiff3.cpp:423 +msgid "Saves the merge result. All conflicts must be solved!" +msgstr "Snima rezultat stapanja. Svi sukobi moraju biti razreÅ¡eni!" + +#: kdiff3.cpp:425 +msgid "Saves the current document as..." +msgstr "Snima tekuće dokumente kao..." + +#: kdiff3.cpp:427 +msgid "Print the differences" +msgstr "" + +#: kdiff3.cpp:429 +msgid "Quits the application" +msgstr "Izlazi iz programa" + +#: kdiff3.cpp:431 +msgid "Cuts the selected section and puts it to the clipboard" +msgstr "Iseca izabranu sekciju i stavlja je u klipbord" + +#: kdiff3.cpp:433 +msgid "Copies the selected section to the clipboard" +msgstr "Kopira izabranu sekciju u klipbord" + +#: kdiff3.cpp:435 +msgid "Pastes the clipboard contents to actual position" +msgstr "Prenosi sadržaj klipborda na tekuću poziciju" + +#: kdiff3.cpp:437 +msgid "Select everything in current window" +msgstr "" + +#: kdiff3.cpp:439 +msgid "Search for a string" +msgstr "Potraži znakovni niz" + +#: kdiff3.cpp:441 +msgid "Search again for the string" +msgstr "Ponovo potraži znakovni niz" + +#: kdiff3.cpp:443 +msgid "Enables/disables the toolbar" +msgstr "UkljuÄuje/iskljuÄuje traku sa alatima" + +#: kdiff3.cpp:445 +msgid "Enables/disables the statusbar" +msgstr "UkljuÄuje/iskljuÄuje statusnu traku" + +#: kdiff3.cpp:449 +msgid "Configure KDiff3..." +msgstr "Podesi KDiff3..." + +#: kdiff3.cpp:470 +msgid "Go to Current Delta" +msgstr "Idi na tekuću deltu" + +#: kdiff3.cpp:471 +msgid "Go to First Delta" +msgstr "Idi na prvu deltu" + +#: kdiff3.cpp:472 +msgid "Go to Last Delta" +msgstr "Idi na poslednju deltu" + +#: kdiff3.cpp:473 +msgid "(Skips white space differences when \"Show White Space\" is disabled.)" +msgstr "" +"(preskaÄe razlike u belim razmacima kada je „Prikaži bele razmake“ iskljuÄeno.)" + +#: kdiff3.cpp:474 +msgid "" +"(Does not skip white space differences even when \"Show White Space\" is " +"disabled.)" +msgstr "" +"(ne preskaÄe razlike u belim razmacima Äak i kada je „Prikaži bele razmake“ " +"iskljuÄeno.)" + +#: kdiff3.cpp:475 +msgid "Go to Previous Delta" +msgstr "Idi na prethodnu deltu" + +#: kdiff3.cpp:477 +msgid "Go to Next Delta" +msgstr "Idi na sledeću deltu" + +#: kdiff3.cpp:479 +msgid "Go to Previous Conflict" +msgstr "Idi na prethodni sukob" + +#: kdiff3.cpp:481 +msgid "Go to Next Conflict" +msgstr "Idi na sledeći sukob" + +#: kdiff3.cpp:483 +msgid "Go to Previous Unsolved Conflict" +msgstr "Idi na prethodni nereÅ¡eni sukob" + +#: kdiff3.cpp:485 +msgid "Go to Next Unsolved Conflict" +msgstr "Idi na sledeći nereÅ¡eni sukob" + +#: kdiff3.cpp:487 +msgid "Select Line(s) From A" +msgstr "Izaberite linije iz A" + +#: kdiff3.cpp:488 +msgid "Select Line(s) From B" +msgstr "Izaberite linije iz B" + +#: kdiff3.cpp:489 +msgid "Select Line(s) From C" +msgstr "Izaberite linije iz C" + +#: kdiff3.cpp:490 +msgid "Automatically Go to Next Unsolved Conflict After Source Selection" +msgstr "Automatski idi na sledeći nereÅ¡eni sukob posle izbora izvora" + +#: kdiff3.cpp:492 +msgid "Show Space && Tabulator Characters for Differences" +msgstr "Prikaži znakove razmaka i tabulatora za razlike" + +#: kdiff3.cpp:493 +msgid "Show White Space" +msgstr "Prikaži bele razmake" + +#: kdiff3.cpp:495 +msgid "Show Line Numbers" +msgstr "Prikaži brojeve linija" + +#: kdiff3.cpp:496 +msgid "Choose A Everywhere" +msgstr "Svuda izaberi A" + +#: kdiff3.cpp:497 +msgid "Choose B Everywhere" +msgstr "Svuda izaberi B" + +#: kdiff3.cpp:498 +msgid "Choose C Everywhere" +msgstr "Svuda izaberi C" + +#: kdiff3.cpp:499 +msgid "Choose A for All Unsolved Conflicts" +msgstr "Izaberi A za sve nereÅ¡ene sukobe" + +#: kdiff3.cpp:500 +msgid "Choose B for All Unsolved Conflicts" +msgstr "Izaberi B za sve nereÅ¡ene sukobe" + +#: kdiff3.cpp:501 +msgid "Choose C for All Unsolved Conflicts" +msgstr "Izaberi C za sve nereÅ¡ene sukobe" + +#: kdiff3.cpp:502 +msgid "Choose A for All Unsolved Whitespace Conflicts" +msgstr "Izaberi A za sve nereÅ¡ene sukobe belih razmaka" + +#: kdiff3.cpp:503 +msgid "Choose B for All Unsolved Whitespace Conflicts" +msgstr "Izaberi B za sve nereÅ¡ene sukobe belih razmaka" + +#: kdiff3.cpp:504 +msgid "Choose C for All Unsolved Whitespace Conflicts" +msgstr "Izaberi C za sve nereÅ¡ene sukobe belih razmaka" + +#: kdiff3.cpp:505 +msgid "Automatically Solve Simple Conflicts" +msgstr "Automatski reÅ¡i jednostavne sukobe" + +#: kdiff3.cpp:506 +msgid "Set Deltas to Conflicts" +msgstr "Postavi delte na sukobe" + +#: kdiff3.cpp:507 +msgid "Run Regular Expression Auto Merge" +msgstr "" + +#: kdiff3.cpp:508 +#, fuzzy +msgid "Automatically Solve History Conflicts" +msgstr "Automatski reÅ¡i jednostavne sukobe" + +#: kdiff3.cpp:509 +msgid "Split Diff At Selection" +msgstr "" + +#: kdiff3.cpp:510 +#, fuzzy +msgid "Join Selected Diffs" +msgstr "Uporedi izabrani fajl" + +#: kdiff3.cpp:512 +msgid "Show Window A" +msgstr "Prikaži prozor A" + +#: kdiff3.cpp:513 +msgid "Show Window B" +msgstr "Prikaži prozor B" + +#: kdiff3.cpp:514 +msgid "Show Window C" +msgstr "Prikaži prozor C" + +#: kdiff3.cpp:515 kdiff3.cpp:526 +msgid "Focus Next Window" +msgstr "Fokusiraj sledeći prozor" + +#: kdiff3.cpp:517 +msgid "Normal Overview" +msgstr "Normalan pregled" + +#: kdiff3.cpp:518 +msgid "A vs. B Overview" +msgstr "Pregled A prema B" + +#: kdiff3.cpp:519 +msgid "A vs. C Overview" +msgstr "Pregled A prema C" + +#: kdiff3.cpp:520 +msgid "B vs. C Overview" +msgstr "Pregled B prema C" + +#: kdiff3.cpp:521 +msgid "Word Wrap Diff Windows" +msgstr "Diff prozori preloma reÄi" + +#: kdiff3.cpp:522 +msgid "Add Manual Diff Alignment" +msgstr "" + +#: kdiff3.cpp:523 +msgid "Clear All Manual Diff Alignments" +msgstr "" + +#: kdiff3.cpp:528 +msgid "Focus Prev Window" +msgstr "Fokusiraj prethodni prozor" + +#: kdiff3.cpp:529 +msgid "Toggle Split Orientation" +msgstr "Promeni orijentaciju razdvajanja" + +#: kdiff3.cpp:531 +msgid "Dir && Text Split Screen View" +msgstr "Podeljeni prikaz ekrana za dir. i tekst" + +#: kdiff3.cpp:533 +msgid "Toggle Between Dir && Text View" +msgstr "Promeni izmeÄ‘u dir. i tekst. prikaza" + +#: kdiff3.cpp:582 pdiff.cpp:1712 +msgid "The merge result hasn't been saved." +msgstr "Rezultat stapanja nije snimljen." + +#: kdiff3.cpp:583 +msgid "Save && Quit" +msgstr "Snimi i izaÄ‘i" + +#: kdiff3.cpp:583 +msgid "Quit Without Saving" +msgstr "IzaÄ‘i bez snimanja" + +#: kdiff3.cpp:591 pdiff.cpp:1721 +msgid "Saving the merge result failed." +msgstr "Snimanje rezultata stapanja nije uspelo." + +#: kdiff3.cpp:602 pdiff.cpp:978 +msgid "" +"You are currently doing a directory merge. Are you sure, you want to abort?" +msgstr "Trenutno stapate direktorijume. Želite li zaista da prekinete?" + +#: kdiff3.cpp:625 +msgid "Saving file..." +msgstr "Snimam fajl..." + +#: kdiff3.cpp:642 +msgid "Saving file with a new filename..." +msgstr "Snimam fajl pod novim imenom..." + +#: kdiff3.cpp:732 +#, fuzzy +msgid "Printing..." +msgstr "Izlazim..." + +#: kdiff3.cpp:738 kdiff3.cpp:900 +msgid "Printing aborted." +msgstr "" + +#: kdiff3.cpp:870 +msgid "Selection" +msgstr "" + +#: kdiff3.cpp:896 +#, fuzzy +msgid "Printing completed." +msgstr "Operacija stapanja je zavrÅ¡ena." + +#: kdiff3.cpp:906 +msgid "Exiting..." +msgstr "Izlazim..." + +#: kdiff3.cpp:918 +msgid "Toggling toolbar..." +msgstr "UkljuÄujem/iskljuÄujem traku sa alatom..." + +#: kdiff3.cpp:939 +msgid "Toggle the statusbar..." +msgstr "UkljuÄi/iskljuÄi statusnu traku..." + +#: kdiff3_part.cpp:155 kdiff3_part.cpp:224 +msgid "Couldn't find files for comparison." +msgstr "Nisam mogao da naÄ‘em fajlove za poreÄ‘enje." + +#: kdiff3_part.cpp:291 +msgid "KDiff3Part" +msgstr "KDiff3Part" + +#: kdiff3_shell.cpp:78 +msgid "" +"Could not find our part!\n" +"This usually happens due to an installation problem. Please read the " +"README-file in the source package for details." +msgstr "" +"Nisam mogao da naÄ‘em naÅ¡ deo!\n" +"Ovo se obiÄno deÅ¡ava zbog instalacionog problema. ProÄitajte fajl README u " +"izvornom paketu za detalje." + +#: main.cpp:35 +msgid "Tool for Comparison and Merge of Files and Directories" +msgstr "Alat za uporeÄ‘ivanje i stapanje fajlova i direktorijuma" + +#: main.cpp:40 +msgid "Merge the input." +msgstr "Stopi ulaz." + +#: main.cpp:42 +msgid "Explicit base file. For compatibility with certain tools." +msgstr "Eksplicitan bazni fajl. Za kompatibilnost sa odreÄ‘enim alatima." + +#: main.cpp:44 +msgid "Output file. Implies -m. E.g.: -o newfile.txt" +msgstr "Izlazni fajl. Implicira -m. Npr.: -o newfile.txt" + +#: main.cpp:45 +msgid "Output file, again. (For compatibility with certain tools.)" +msgstr "Izlazni fajl, ponovo. (Za kompatibilnost sa odreÄ‘enim alatima.)" + +#: main.cpp:46 +msgid "No GUI if all conflicts are auto-solvable. (Needs -o file)" +msgstr "Bez GUI-ja ako su svi sukobi automatski reÅ¡ivi. (Zahteva -o file)" + +#: main.cpp:47 +msgid "Don't solve conflicts automatically. (For compatibility...)" +msgstr "Ne reÅ¡avaj sukobe automatski. (Za kompatibilnost...)" + +#: main.cpp:48 +msgid "Visible name replacement for input file 1 (base)." +msgstr "Vidljiva zamena imena za ulazni fajl 1 (bazni)." + +#: main.cpp:49 +msgid "Visible name replacement for input file 2." +msgstr "Vidljiva zamena imena za ulazni fajl 2." + +#: main.cpp:50 +msgid "Visible name replacement for input file 3." +msgstr "Vidljiva zamena imena za ulazni fajl 3." + +#: main.cpp:52 +msgid "Alternative visible name replacement. Supply this once for every input." +msgstr "Alternativa vidljivoj zameni imena. Zadajte ovo jednom za svaki ulaz." + +#: main.cpp:53 +msgid "" +"Override a config setting. Use once for every setting. E.g.: --cs " +"\"AutoAdvance=1\"" +msgstr "" + +#: main.cpp:54 +msgid "Show list of config settings and current values." +msgstr "" + +#: main.cpp:55 +#, fuzzy +msgid "Use a different config file." +msgstr "Broj razliÄitih fajlova:" + +#: main.cpp:59 +msgid "file1 to open (base, if not specified via --base)" +msgstr "fajl1 za otvaranje (bazni, ako nije naveden preko --base)" + +#: main.cpp:60 +msgid "file2 to open" +msgstr "fajl2 za otvoranje" + +#: main.cpp:61 +msgid "file3 to open" +msgstr "fajl3 za otvoranje" + +#: main.cpp:93 +msgid "Ignored. (User defined.)" +msgstr "" + +#. i18n: file kdiff3_part.rc line 16 +#: main.cpp:173 rc.cpp:9 +#, no-c-format +msgid "KDiff3" +msgstr "KDiff3" + +#: main.cpp:186 +msgid "+ Many thanks to those who reported bugs and contributed ideas!" +msgstr "" +"+ Mnogo hvala onima koji su prijavljivali greÅ¡ke i doprineli svojim idejama!" + +#: mergeresultwindow.cpp:136 mergeresultwindow.cpp:939 +#: mergeresultwindow.cpp:953 mergeresultwindow.cpp:965 +#: mergeresultwindow.cpp:977 +msgid "Number of remaining unsolved conflicts: %1 (of which %2 are whitespace)" +msgstr "Broj preostalih nereÅ¡enih sukoba: %1 (od kojih su %2 beli razmaci)" + +#: mergeresultwindow.cpp:285 +msgid "" +"The output has been modified.\n" +"If you continue your changes will be lost." +msgstr "" +"Izlaz je izmenjen.\n" +"Ako nastavite, vaÅ¡e izmene će biti izgubljene." + +#: mergeresultwindow.cpp:797 pdiff.cpp:511 +msgid "All input files are binary equal." +msgstr "Svi ulazni fajlovi su binarno jednaki." + +#: mergeresultwindow.cpp:799 +msgid "All input files contain the same text." +msgstr "Svi ulazni fajlovi sadrže isti tekst." + +#: mergeresultwindow.cpp:801 +msgid "" +"Files A and B are binary equal.\n" +msgstr "" +"Fajlovi A i B su binarno jednaki.\n" + +#: mergeresultwindow.cpp:802 +msgid "" +"Files A and B have equal text. \n" +msgstr "" +"Fajlovi A i B imaju jednak tekst.\n" + +#: mergeresultwindow.cpp:803 +msgid "" +"Files A and C are binary equal.\n" +msgstr "" +"Fajlovi A i C su binarno jednaki.\n" + +#: mergeresultwindow.cpp:804 +msgid "" +"Files A and C have equal text. \n" +msgstr "" +"Fajlovi A i C imaju jednak tekst.\n" + +#: mergeresultwindow.cpp:805 +msgid "" +"Files B and C are binary equal.\n" +msgstr "" +"Fajlovi B i C su binarno jednaki.\n" + +#: mergeresultwindow.cpp:806 +msgid "" +"Files B and C have equal text. \n" +msgstr "" +"Fajlovi B i C imaju jednak tekst.\n" + +#: mergeresultwindow.cpp:812 +msgid "Total number of conflicts: " +msgstr "Ukupan broj sukoba: " + +#: mergeresultwindow.cpp:813 +msgid "" +"\n" +"Nr of automatically solved conflicts: " +msgstr "" +"\n" +"Broj automatski reÅ¡enih sukoba: " + +#: mergeresultwindow.cpp:814 +msgid "" +"\n" +"Nr of unsolved conflicts: " +msgstr "" +"\n" +"Broj nereÅ¡enih sukoba: " + +#: mergeresultwindow.cpp:816 +msgid "Conflicts" +msgstr "Sukobi" + +#: mergeresultwindow.cpp:1652 +msgid "" +msgstr "" + +#: mergeresultwindow.cpp:1660 +msgid "" +msgstr "" + +#: mergeresultwindow.cpp:1662 mergeresultwindow.cpp:2427 +msgid "" +msgstr "" + +#: mergeresultwindow.cpp:2635 +msgid "" +"Not all conflicts are solved yet.\n" +"File not saved.\n" +msgstr "" +"JoÅ¡ uvek nisu reÅ¡eni svi sukobi.\n" +"Fajl nije snimljen.\n" + +#: mergeresultwindow.cpp:2637 +msgid "Conflicts Left" +msgstr "Preostali sukobi" + +#: mergeresultwindow.cpp:2649 +msgid "" +"\n" +"\n" +"Creating backup failed. File not saved." +msgstr "" +"\n" +"\n" +"Pravljenje rezerve nije uspelo. Fajl nije snimljen." + +#: mergeresultwindow.cpp:2649 mergeresultwindow.cpp:2689 +msgid "File Save Error" +msgstr "GreÅ¡ka u snimanju fajla" + +#: mergeresultwindow.cpp:2689 +msgid "Error while writing." +msgstr "GreÅ¡ka prilikom pisanja." + +#: mergeresultwindow.cpp:3020 +msgid "Output" +msgstr "Izlaz" + +#: mergeresultwindow.cpp:3032 mergeresultwindow.cpp:3139 +msgid "[Modified]" +msgstr "[Izmenjen]" + +#: mergeresultwindow.cpp:3039 +#, fuzzy +msgid "Encoding for saving" +msgstr "Kodiranje fajla za C:" + +#: mergeresultwindow.cpp:3075 mergeresultwindow.cpp:3081 +#: mergeresultwindow.cpp:3087 +msgid "Codec from" +msgstr "" + +#: optiondialog.cpp:362 +msgid "Unicode, 8 bit" +msgstr "Unicode, 8-bitno" + +#: optiondialog.cpp:363 +msgid "Unicode" +msgstr "Unicode" + +#: optiondialog.cpp:364 +msgid "Latin1" +msgstr "Latin1" + +#: optiondialog.cpp:383 +msgid "Change this if non-ASCII characters are not displayed correctly." +msgstr "Izmenite ovo ake se znakovi koji nisu ASCII ne prikazuju ispravno." + +#: optiondialog.cpp:510 +msgid "Editor & Diff Output Font" +msgstr "Font ureÄ‘ivaÄa i raz. izlaza" + +#: optiondialog.cpp:531 +msgid "Italic font for deltas" +msgstr "Kurzivni font za delte" + +#: optiondialog.cpp:534 +msgid "" +"Selects the italic version of the font for differences.\n" +"If the font doesn't support italic characters, then this does nothing." +msgstr "" +"Bira kurzivnu verziju fonta za razlike.\n" +"Ako font ne podržava kurzivne znakove, onda ovo ne radi niÅ¡ta." + +#: optiondialog.cpp:542 +msgid "Color" +msgstr "Boja" + +#: optiondialog.cpp:542 +#, fuzzy +msgid "Colors Settings" +msgstr "Regionalna podeÅ¡avanja" + +#: optiondialog.cpp:556 +msgid "Editor and Diff Views:" +msgstr "" + +#: optiondialog.cpp:564 +msgid "Foreground color:" +msgstr "Boja iscrtavanja:" + +#: optiondialog.cpp:570 +msgid "Background color:" +msgstr "Boja pozadine:" + +#: optiondialog.cpp:578 +msgid "Diff background color:" +msgstr "Boja pozadine razlika:" + +#: optiondialog.cpp:585 +msgid "Color A:" +msgstr "Boja A:" + +#: optiondialog.cpp:592 +msgid "Color B:" +msgstr "Boja B:" + +#: optiondialog.cpp:599 +msgid "Color C:" +msgstr "Boja C:" + +#: optiondialog.cpp:605 +msgid "Conflict color:" +msgstr "Boja sukoba:" + +#: optiondialog.cpp:612 +msgid "Current range background color:" +msgstr "Pozadinska boja tekućeg opsega:" + +#: optiondialog.cpp:619 +msgid "Current range diff background color:" +msgstr "Pozadinska boja tekućeg opsega razlika:" + +#: optiondialog.cpp:625 +msgid "Color for manually aligned difference ranges:" +msgstr "" + +#: optiondialog.cpp:630 +#, fuzzy +msgid "Directory Comparison View:" +msgstr "Status poreÄ‘enja direktorijuma" + +#: optiondialog.cpp:636 +msgid "Newest file color:" +msgstr "" + +#: optiondialog.cpp:639 +msgid "" +"Changing this color will only be effective when starting the next directory " +"comparison." +msgstr "" + +#: optiondialog.cpp:644 +msgid "Oldest file color:" +msgstr "" + +#: optiondialog.cpp:651 +msgid "Middle age file color:" +msgstr "" + +#: optiondialog.cpp:658 +msgid "Color for missing files:" +msgstr "" + +#: optiondialog.cpp:670 +msgid "Editor" +msgstr "UreÄ‘ivaÄ" + +#: optiondialog.cpp:670 +msgid "Editor Behavior" +msgstr "PonaÅ¡anje ureÄ‘ivaÄa" + +#: optiondialog.cpp:680 +msgid "Tab inserts spaces" +msgstr "Tab ubacuje razmake" + +#: optiondialog.cpp:683 +msgid "" +"On: Pressing tab generates the appropriate number of spaces.\n" +"Off: A Tab-character will be inserted." +msgstr "" +"UkljuÄeno: Pritiskom na tab generiÅ¡e se odgovarajući broj razmaka.\n" +"IskljuÄeno: Znak tabulatora će biti ubaÄen." + +#: optiondialog.cpp:689 +msgid "Tab size:" +msgstr "VeliÄina taba:" + +#: optiondialog.cpp:694 +msgid "Auto indentation" +msgstr "Automatsko uvlaÄenje" + +#: optiondialog.cpp:697 +msgid "" +"On: The indentation of the previous line is used for a new line.\n" +msgstr "" +"UkljuÄeno: UvlaÄenje prethodne linije koristi se za novu liniju.\n" + +#: optiondialog.cpp:701 +msgid "Auto copy selection" +msgstr "Automatsko kopiranje izbora" + +#: optiondialog.cpp:704 +msgid "" +"On: Any selection is immediately written to the clipboard.\n" +"Off: You must explicitely copy e.g. via Ctrl-C." +msgstr "" +"UkljuÄeno: Svaki izbor se odmah upisuje u klipbord.\n" +"IskljuÄeno: Morate eksplicitno kopirati, nrp. pomoću Ctrl+C." + +#: optiondialog.cpp:709 +msgid "Line end style:" +msgstr "Stil zavrÅ¡etka linije:" + +#: optiondialog.cpp:721 +msgid "" +"Sets the line endings for when an edited file is saved.\n" +"DOS/Windows: CR+LF; UNIX: LF; with CR=0D, LF=0A" +msgstr "" +"Postavlja zavrÅ¡etke linija kada se izmenjeni fajl snima.\n" +"DOS/Windows: CR+LF; Unix: LF; sa CR=0D, LF=0A" + +#: optiondialog.cpp:732 +#, fuzzy +msgid "Diff" +msgstr "KDiff3" + +#: optiondialog.cpp:732 +#, fuzzy +msgid "Diff Settings" +msgstr "Postavke razlike i stapanja" + +#: optiondialog.cpp:743 +msgid "Preserve carriage return" +msgstr "OÄuvaj CR" + +#: optiondialog.cpp:746 +msgid "" +"Show carriage return characters '\\r' if they exist.\n" +"Helps to compare files that were modified under different operating systems." +msgstr "" +"Prikaži CR znakove „\\r“ ako postoje.\n" +"Pomaže da se uporede fajlovi koji su menjani pod razliÄitim operativnim " +"sistemima." + +#: optiondialog.cpp:751 +msgid "Ignore numbers" +msgstr "IgnoriÅ¡i brojeve" + +#: optiondialog.cpp:754 +msgid "" +"Ignore number characters during line matching phase. (Similar to Ignore white " +"space.)\n" +"Might help to compare files with numeric data." +msgstr "" +"IgnoriÅ¡i brojevne znakove tokom faze poklapanja linija. (SliÄno ignorisanju " +"belih razmaka.)\n" +"Može vam pomoći pri uporeÄ‘ivanju fajlova sa numeriÄkim podacima." + +#: optiondialog.cpp:759 +msgid "Ignore C/C++ comments" +msgstr "IgnoriÅ¡i C/C++ komentare" + +#: optiondialog.cpp:761 +msgid "Treat C/C++ comments like white space." +msgstr "Tretiraj C/C++ komentare kao bele razmake." + +#: optiondialog.cpp:765 +msgid "Ignore case" +msgstr "Zanemari veliÄinu slova" + +#: optiondialog.cpp:768 +msgid "Treat case differences like white space changes. ('a'<=>'A')" +msgstr "Tretira razliku u veliÄini kao promene belog prostora. („a“<=>„A“)" + +#: optiondialog.cpp:772 +msgid "Preprocessor command:" +msgstr "Predobradna naredba:" + +#: optiondialog.cpp:776 +msgid "User defined pre-processing. (See the docs for details.)" +msgstr "" +"KorisniÄki definisana predobrada. (Pogledajte dokumentaciju za detalje.)" + +#: optiondialog.cpp:779 +msgid "Line-matching preprocessor command:" +msgstr "Predobradna naredba za poklapanje linija:" + +#: optiondialog.cpp:783 +msgid "" +"This pre-processor is only used during line matching.\n" +"(See the docs for details.)" +msgstr "" +"Predobrada se koristi samo tokom poklapanja linija.\n" +"(Pogledajte dokumentaciju za detalje.)" + +#: optiondialog.cpp:786 +msgid "Try hard (slower)" +msgstr "Potrudi se (sporije)" + +#: optiondialog.cpp:789 +msgid "" +"Enables the --minimal option for the external diff.\n" +"The analysis of big files will be much slower." +msgstr "" +"UkljuÄuje opciju --minimal za spoljaÅ¡nje razlikovanje.\n" +"Analiza velikih fajlova će biti mnogo sporija." + +#: optiondialog.cpp:794 +msgid "Auto advance delay (ms):" +msgstr "Zastoj automatskog napredovanja (ms):" + +#: optiondialog.cpp:799 +msgid "" +"When in Auto-Advance mode the result of the current selection is shown \n" +"for the specified time, before jumping to the next conflict. Range: 0-2000 ms" +msgstr "" +"U režimu automatskog napredovanja rezultat tekućeg izbora prikazuje se \n" +"navedeno vreme, pre skoka na sledeći sukob. Opseg: 0-2000 ms" + +#: optiondialog.cpp:809 +#, fuzzy +msgid "Merge Settings" +msgstr "Postavke razlike i stapanja" + +#: optiondialog.cpp:822 +msgid "White space 2-file merge default:" +msgstr "Podrazumevano stapanje belih razmaka dva fajla:" + +#: optiondialog.cpp:826 optiondialog.cpp:839 +msgid "Manual Choice" +msgstr "RuÄni izbor" + +#: optiondialog.cpp:830 optiondialog.cpp:844 +msgid "" +"Allow the merge algorithm to automatically select an input for white-space-only " +"changes." +msgstr "" +"Dozvoljava algoritmu stapanja da automatski izabere ulaz za izmene samo u belim " +"razmacima." + +#: optiondialog.cpp:835 +msgid "White space 3-file merge default:" +msgstr "Podrazumevano stapanje belih razmaka tri fajla:" + +#: optiondialog.cpp:849 +msgid "Automatic Merge Regular Expression" +msgstr "" + +#: optiondialog.cpp:858 smalldialogs.cpp:397 +msgid "Auto merge regular expression:" +msgstr "" + +#: optiondialog.cpp:862 +msgid "" +"Regular expression for lines where KDiff3 should automatically choose one " +"source.\n" +"When a line with a conflict matches the regular expression then\n" +"- if available - C, otherwise B will be chosen." +msgstr "" + +#: optiondialog.cpp:868 +msgid "Run regular expression auto merge on merge start" +msgstr "" + +#: optiondialog.cpp:870 +msgid "" +"Run the merge for auto merge regular expressions\n" +"immediately when a merge starts.\n" +msgstr "" + +#: optiondialog.cpp:875 +msgid "Version Control History Merging" +msgstr "" + +#: optiondialog.cpp:884 smalldialogs.cpp:424 +msgid "History start regular expression:" +msgstr "" + +#: optiondialog.cpp:888 +msgid "" +"Regular expression for the start of the version control history entry.\n" +"Usually this line contains the \"$Log$\"-keyword.\n" +"Default value: \".*\\$Log.*\\$.*\"" +msgstr "" + +#: optiondialog.cpp:894 smalldialogs.cpp:453 +msgid "History entry start regular expression:" +msgstr "" + +#: optiondialog.cpp:906 +msgid "" +"A version control history entry consists of several lines.\n" +"Specify the regular expression to detect the first line (without the leading " +"comment).\n" +"Use parentheses to group the keys you want to use for sorting.\n" +"If left empty, then KDiff3 assumes that empty lines separate history entries.\n" +"See the documentation for details." +msgstr "" + +#: optiondialog.cpp:914 +msgid "History merge sorting" +msgstr "" + +#: optiondialog.cpp:916 +msgid "Sort version control history by a key." +msgstr "" + +#: optiondialog.cpp:926 +msgid "History entry start sort key order:" +msgstr "" + +#: optiondialog.cpp:930 +msgid "" +"Each parentheses used in the regular expression for the history start entry\n" +"groups a key that can be used for sorting.\n" +"Specify the list of keys (that are numbered in order of occurrence\n" +"starting with 1) using ',' as separator (e.g. \"4,5,6,1,2,3,7\").\n" +"If left empty, then no sorting will be done.\n" +"See the documentation for details." +msgstr "" + +#: optiondialog.cpp:941 +msgid "Merge version control history on merge start" +msgstr "" + +#: optiondialog.cpp:943 +msgid "Run version control history automerge on merge start." +msgstr "" + +#: optiondialog.cpp:947 +msgid "Test your regular expressions" +msgstr "" + +#: optiondialog.cpp:952 +msgid "Irrelevant merge command:" +msgstr "" + +#: optiondialog.cpp:956 +msgid "" +"If specified this script is run after automerge\n" +"when no other relevant changes were detected.\n" +"Called with the parameters: filename1 filename2 filename3" +msgstr "" + +#: optiondialog.cpp:966 +msgid "Directory Merge" +msgstr "Stapanje direktorijuma" + +#: optiondialog.cpp:975 +msgid "Recursive directories" +msgstr "Rekurzivni direktorijumi" + +#: optiondialog.cpp:977 +msgid "Whether to analyze subdirectories or not." +msgstr "Da li da se analiziraju poddirektorijumi." + +#: optiondialog.cpp:979 +msgid "File pattern(s):" +msgstr "Oblici fajlova:" + +#: optiondialog.cpp:984 +msgid "" +"Pattern(s) of files to be analyzed. \n" +"Wildcards: '*' and '?'\n" +"Several Patterns can be specified by using the separator: ';'" +msgstr "" +"Oblici fajlova koje treba analizirati.\n" +"Džokeri: „*“ i „?“\n" +"ViÅ¡e oblika možete navesti koristeći razdvajaÄ: „;“" + +#: optiondialog.cpp:990 +msgid "File-anti-pattern(s):" +msgstr "Antioblici fajlova:" + +#: optiondialog.cpp:995 +msgid "" +"Pattern(s) of files to be excluded from analysis. \n" +"Wildcards: '*' and '?'\n" +"Several Patterns can be specified by using the separator: ';'" +msgstr "" +"Oblici fajlova koje treba iskljuÄiti iz analize.\n" +"Džokeri: „*“ i „?“\n" +"ViÅ¡e oblika možete navesti koristeći razdvajaÄ: „;“" + +#: optiondialog.cpp:1001 +msgid "Dir-anti-pattern(s):" +msgstr "Antioblici direktorijuma:" + +#: optiondialog.cpp:1006 +msgid "" +"Pattern(s) of directories to be excluded from analysis. \n" +"Wildcards: '*' and '?'\n" +"Several Patterns can be specified by using the separator: ';'" +msgstr "" +"Oblici direktorijuma koje treba iskljuÄiti iz analize.\n" +"Džokeri: „*“ i „?“\n" +"ViÅ¡e oblika možete navesti koristeći razdvajaÄ: „;“" + +#: optiondialog.cpp:1012 +msgid "Use .cvsignore" +msgstr "Koristi fajl .cvsignore" + +#: optiondialog.cpp:1015 +msgid "" +"Extends the antipattern to anything that would be ignored by CVS.\n" +"Via local \".cvsignore\"-files this can be directory specific." +msgstr "" +"ProÅ¡iruje antioblik na sve Å¡to bi CVS ignorisao.\n" +"Preko lokalnih fajlova „.cvsignore“ ovo može biti posebno po direktorijumu." + +#: optiondialog.cpp:1020 +msgid "Find hidden files and directories" +msgstr "PronaÄ‘i skrivene fajlove i direktorijume" + +#: optiondialog.cpp:1023 +msgid "Finds files and directories with the hidden attribute." +msgstr "Nalazi fajlove i direktorijume sa atributom skrivenih." + +#: optiondialog.cpp:1025 +msgid "Finds files and directories starting with '.'." +msgstr "Nalazi fajlove i direktorijume koji poÄinju sa „.“" + +#: optiondialog.cpp:1029 +msgid "Follow file links" +msgstr "Prati veze fajlova" + +#: optiondialog.cpp:1032 +msgid "" +"On: Compare the file the link points to.\n" +"Off: Compare the links." +msgstr "" +"UkljuÄeno: Poredi fajlove na koje pokazuju veze.\n" +"IskljuÄeno: Poredi veze." + +#: optiondialog.cpp:1037 +msgid "Follow directory links" +msgstr "Prati veze direktorijuma" + +#: optiondialog.cpp:1040 +msgid "" +"On: Compare the directory the link points to.\n" +"Off: Compare the links." +msgstr "" +"UkljuÄeno: Poredi direktorijume na koje pokazuju veze.\n" +"IskljuÄeno: Poredi veze." + +#: optiondialog.cpp:1056 +msgid "Case sensitive filename comparison" +msgstr "" + +#: optiondialog.cpp:1059 +msgid "" +"The directory comparison will compare files or directories when their names " +"match.\n" +"Set this option if the case of the names must match. (Default for Windows is " +"off, otherwise on.)" +msgstr "" + +#: optiondialog.cpp:1063 +msgid "File Comparison Mode" +msgstr "Režim poreÄ‘enja fajlova" + +#: optiondialog.cpp:1067 +msgid "Binary comparison" +msgstr "Binarno poreÄ‘enje" + +#: optiondialog.cpp:1068 +msgid "Binary comparison of each file. (Default)" +msgstr "Binarno poreÄ‘enje za svaki fajl. (Podrazumevano)" + +#: optiondialog.cpp:1070 +msgid "Full analysis" +msgstr "Puna analiza" + +#: optiondialog.cpp:1071 +msgid "" +"Do a full analysis and show statistics information in extra columns.\n" +"(Slower than a binary comparison, much slower for binary files.)" +msgstr "" +"Radi punu analizu i prikazuje statistiÄke podatke u dodatnim kolonama.\n" +"(Sporije nego binarno poreÄ‘enje, mnogo sporije za binarne fajlove.)" + +#: optiondialog.cpp:1074 +msgid "Trust the modification date (unsafe)" +msgstr "Veruj datumu izmene (nije bezbedno)" + +#: optiondialog.cpp:1075 +msgid "" +"Assume that files are equal if the modification date and file length are " +"equal.\n" +"Useful for big directories or slow networks." +msgstr "" +"Pretpostavi da su fajlovi jednaki ako su datum izmene i dužina fajla jednaki.\n" +"Korisno za velike direktorijume ili spore mreže." + +#: optiondialog.cpp:1078 +msgid "Trust the size (unsafe)" +msgstr "Veruj veliÄini (nije bezbedno)" + +#: optiondialog.cpp:1079 +msgid "" +"Assume that files are equal if their file lengths are equal.\n" +"Useful for big directories or slow networks when the date is modified during " +"download." +msgstr "" +"Pretpostavi da su fajlovi jednaki ako su njihove dužine jednake.\n" +"Korisno za velike direktorijume ili spore mreže kada se datum izmene u toku " +"preuzimanja." + +#: optiondialog.cpp:1083 +msgid "Synchronize directories" +msgstr "Sinhronizuj direktorijume" + +#: optiondialog.cpp:1086 +msgid "" +"Offers to store files in both directories so that\n" +"both directories are the same afterwards.\n" +"Works only when comparing two directories without specifying a destination." +msgstr "" +"Nudi da skladiÅ¡ti fajlove u oba direktorijuma tako\n" +"da su oba direktorijuma posle toga ista.\n" +"Radi samo kada se porede dva direktorijuma bez navoÄ‘enja odrediÅ¡ta." + +#: optiondialog.cpp:1092 +msgid "White space differences considered equal" +msgstr "Razlike u belim razmacima smatraju se jednakim" + +#: optiondialog.cpp:1095 +msgid "" +"If files differ only by white space consider them equal.\n" +"This is only active when full analysis is chosen." +msgstr "" +"Ako se fajlovi razlikuju samo u belim razmacima, smatraju se jednakim.\n" +"Ovo je aktivno samo kada se izabere puna analiza." + +#: optiondialog.cpp:1101 +msgid "Copy newer instead of merging (unsafe)" +msgstr "Kopiraj noviji umesto stapanja (nije bezbedno)" + +#: optiondialog.cpp:1104 +msgid "" +"Don't look inside, just take the newer file.\n" +"(Use this only if you know what you are doing!)\n" +"Only effective when comparing two directories." +msgstr "" +"Ne gledaj unutra, samo uzmi noviji fajl.\n" +"(Koristite ovo samo ako znate Å¡ta radite!)\n" +"Ima efekta samo kada se porede dva direktorijuma." + +#: optiondialog.cpp:1109 +msgid "Backup files (.orig)" +msgstr "RezerviÅ¡i fajlove (.orig)" + +#: optiondialog.cpp:1112 +msgid "" +"When a file would be saved over an old file, then the old file\n" +"will be renamed with a '.orig'-extension instead of being deleted." +msgstr "" +"Kada treba snimiti fajl preko starog fajla, stari fajl će biti\n" +"preimenovan sa nastavkom „.orig“ umesto da bude obrisan." + +#: optiondialog.cpp:1176 +msgid "Regional Settings" +msgstr "Regionalna podeÅ¡avanja" + +#: optiondialog.cpp:1272 +msgid "Language (restart required)" +msgstr "Jezik (potrebno ponovno pokretanje)" + +#: optiondialog.cpp:1304 +msgid "" +"Choose the language of the GUI-strings or \"Auto\".\n" +"For a change of language to take place, quit and restart KDiff3." +msgstr "" +"Izaberite jezik za ispise u programu ili „Auto“.\n" +"Da bi izmena jezika bila primenjena, zatvorite i ponovo pokrenite KDiff3." + +#: optiondialog.cpp:1322 +msgid "Use the same encoding for everything:" +msgstr "Koristi isto kodiranje za sve:" + +#: optiondialog.cpp:1325 +msgid "" +"Enable this allows to change all encodings by changing the first only.\n" +"Disable this if different individual settings are needed." +msgstr "" +"UkljuÄivanjem ovog možete promeniti sva kodiranja promenom samo prvog.\n" +"IskljuÄite ovo ako su potrebna razliÄita pojedina podeÅ¡avanja." + +#: optiondialog.cpp:1330 +msgid "Note: Local Encoding is " +msgstr "Napomna: Lokalno kodiranje je " + +#: optiondialog.cpp:1334 +msgid "File Encoding for A:" +msgstr "Kodiranje fajla za A:" + +#: optiondialog.cpp:1340 +msgid "" +"If enabled then Unicode (UTF-16 or UTF-8) encoding will be detected.\n" +"If the file encoding is not detected then the selected encoding will be used as " +"fallback.\n" +"(Unicode detection depends on the first bytes of a file - the byte order mark " +"\"BOM\".)" +msgstr "" + +#: optiondialog.cpp:1344 optiondialog.cpp:1353 optiondialog.cpp:1362 +msgid "Auto Detect Unicode" +msgstr "" + +#: optiondialog.cpp:1349 +msgid "File Encoding for B:" +msgstr "Kodiranje fajla za B:" + +#: optiondialog.cpp:1358 +msgid "File Encoding for C:" +msgstr "Kodiranje fajla za C:" + +#: optiondialog.cpp:1367 +msgid "File Encoding for Merge Output and Saving:" +msgstr "Kodiranje fajla za stopljeni izlaz i snimanje:" + +#: optiondialog.cpp:1371 +#, fuzzy +msgid "Auto Select" +msgstr "Automatsko kopiranje izbora" + +#: optiondialog.cpp:1374 +msgid "" +"If enabled then the encoding from the input files is used.\n" +"In ambiguous cases a dialog will ask the user to choose the encoding for " +"saving." +msgstr "" + +#: optiondialog.cpp:1378 +msgid "File Encoding for Preprocessor Files:" +msgstr "Kodiranje fajla za preprocesorke fajlove:" + +#: optiondialog.cpp:1389 +msgid "Right To Left Language" +msgstr "Jezici s desna u levo" + +#: optiondialog.cpp:1392 +msgid "" +"Some languages are read from right to left.\n" +"This setting will change the viewer and editor accordingly." +msgstr "" +"Neki jezici se Äitaju s desna u levo.\n" +"Ovo podeÅ¡avanje će prilagoditi tome prikazivaÄ i ureÄ‘ivaÄ." + +#: optiondialog.cpp:1402 +#, fuzzy +msgid "Integration" +msgstr "Operacija" + +#: optiondialog.cpp:1402 +#, fuzzy +msgid "Integration Settings" +msgstr "Regionalna podeÅ¡avanja" + +#: optiondialog.cpp:1412 +msgid "Command line options to ignore:" +msgstr "" + +#: optiondialog.cpp:1417 +msgid "" +"List of command line options that should be ignored when KDiff3 is used by " +"other tools.\n" +"Several values can be specified if separated via ';'\n" +"This will suppress the \"Unknown option\"-error." +msgstr "" + +#: optiondialog.cpp:1480 +msgid "" +"You selected a variable width font.\n" +"\n" +"Because this program doesn't handle variable width fonts\n" +"correctly, you might experience problems while editing.\n" +"\n" +"Do you want to continue or do you want to select another font." +msgstr "" +"Izabrali ste font promenljive Å¡irine.\n" +"\n" +"PoÅ¡to Å¡to ovaj program ne rukuje ispravno fontovima promenljive\n" +"Å¡irine, možete iskusiti probleme u toku ureÄ‘ivanja.\n" +"\n" +"Želite li da nastavite ili ćete izabrati drugi font?" + +#: optiondialog.cpp:1484 +msgid "Incompatible Font" +msgstr "Nekompatibilan font" + +#: optiondialog.cpp:1485 +msgid "Continue at Own Risk" +msgstr "Nastavite na sopstveni rizik" + +#: optiondialog.cpp:1485 +msgid "Select Another Font" +msgstr "Izaberite drugi font" + +#: optiondialog.cpp:1521 +msgid "This resets all options. Not only those of the current topic." +msgstr "Ovo resetuje sve opcije. Ne samo one u tekućoj temi." + +#: pdiff.cpp:258 +msgid "PreprocessorCmd: " +msgstr "Preprocesorka naredba: " + +#: pdiff.cpp:263 +msgid "" +"The following option(s) you selected might change data:\n" +msgstr "" +"Sledeće opcije koje ste izabrali mogu izmeniti podatke:\n" + +#: pdiff.cpp:264 +msgid "" +"\n" +"Most likely this is not wanted during a merge.\n" +"Do you want to disable these settings or continue with these settings active?" +msgstr "" +"\n" +"Vrlo je verovatno da ovo ne želite prilikom stapanja.\n" +"Želite li da iskljuÄite ova podeÅ¡avanja ili da nastavite dalje sa njima?" + +#: pdiff.cpp:266 +msgid "Option Unsafe for Merging" +msgstr "Opcija nije sigurna za stapanje" + +#: pdiff.cpp:267 +msgid "Use These Options During Merge" +msgstr "Koristi ove opcije pri stapanju" + +#: pdiff.cpp:267 +msgid "Disable Unsafe Options" +msgstr "IskljuÄi nesigurne opcije" + +#: pdiff.cpp:297 +msgid "Loading A" +msgstr "UÄitavam A" + +#: pdiff.cpp:301 +msgid "Loading B" +msgstr "UÄitavam B" + +#: pdiff.cpp:318 pdiff.cpp:344 +msgid "Diff: A <-> B" +msgstr "Raz.: A <-> B" + +#: pdiff.cpp:324 pdiff.cpp:366 +msgid "Linediff: A <-> B" +msgstr "Raz.lin.: A <-> B" + +#: pdiff.cpp:335 +msgid "Loading C" +msgstr "UÄitavam C" + +#: pdiff.cpp:347 +msgid "Diff: B <-> C" +msgstr "Raz.: B <-> C" + +#: pdiff.cpp:350 +msgid "Diff: A <-> C" +msgstr "Raz.: A <-> C" + +#: pdiff.cpp:369 +msgid "Linediff: B <-> C" +msgstr "Raz.lin.: B <-> C" + +#: pdiff.cpp:372 +msgid "Linediff: A <-> C" +msgstr "Raz.lin.: A <-> C" + +#: pdiff.cpp:513 +#, fuzzy +msgid "All input files contain the same text, but are not binary equal." +msgstr "Svi ulazni fajlovi sadrže isti tekst." + +#: pdiff.cpp:515 pdiff.cpp:517 pdiff.cpp:519 +#, fuzzy +msgid "" +"Files %1 and %2 are binary equal.\n" +msgstr "" +"Fajlovi B i C su binarno jednaki.\n" + +#: pdiff.cpp:516 pdiff.cpp:518 pdiff.cpp:520 +#, fuzzy +msgid "" +"Files %1 and %2 have equal text, but are not binary equal. \n" +msgstr "" +"Fajlovi A i B su binarno jednaki.\n" + +#: pdiff.cpp:530 +msgid "" +"Some inputfiles don't seem to be pure textfiles.\n" +"Note that the KDiff3-merge was not meant for binary data.\n" +"Continue at your own risk." +msgstr "" +"Izgleda da neki ulazni fajlovi nisu Äisto tekstualni.\n" +"Imajte na umu da KDiff3 stapanje nije namenjeno binarnim podacima.\n" +"Nastavite na sopstveni rizik." + +#: pdiff.cpp:979 +msgid "Abort" +msgstr "Prekini" + +#: pdiff.cpp:985 pdiff.cpp:1073 +msgid "Opening files..." +msgstr "Otvaram fajlove..." + +#: pdiff.cpp:1050 pdiff.cpp:1121 +msgid "File open error" +msgstr "GreÅ¡ka pri otvaranju fajla" + +#: pdiff.cpp:1153 +msgid "Cutting selection..." +msgstr "Isecam izabrano..." + +#: pdiff.cpp:1174 +msgid "Copying selection to clipboard..." +msgstr "Kopiram izabrano u klipbord..." + +#: pdiff.cpp:1190 +msgid "Inserting clipboard contents..." +msgstr "Ubacujem sadržaj klipborda..." + +#: pdiff.cpp:1713 +msgid "Save && Continue" +msgstr "Snimi i nastavi" + +#: pdiff.cpp:1713 +msgid "Continue Without Saving" +msgstr "Nastavi bez snimanja" + +#: pdiff.cpp:1920 +msgid "Search complete." +msgstr "Pretraga je zavrÅ¡ena." + +#: pdiff.cpp:1920 +msgid "Search Complete" +msgstr "Pretraga je gotova" + +#: pdiff.cpp:2144 +msgid "Nothing is selected in either diff input window." +msgstr "" + +#: pdiff.cpp:2144 +#, fuzzy +msgid "Error while adding manual diff range" +msgstr "GreÅ¡ka u toku pravljenja direktorijuma." + +#. i18n: file kdiff3_part.rc line 4 +#: rc.cpp:3 +#, no-c-format +msgid "&KDiff3" +msgstr "&KDiff3" + +#. i18n: file kdiff3_part.rc line 13 +#: rc.cpp:6 +#, no-c-format +msgid "Configure KDiff3" +msgstr "Podesi KDiff3" + +#. i18n: file kdiff3_shell.rc line 7 +#: rc.cpp:15 +#, no-c-format +msgid "&Directory" +msgstr "&Direktorijum" + +#. i18n: file kdiff3_shell.rc line 30 +#: rc.cpp:18 +#, no-c-format +msgid "Current Item Merge Operation" +msgstr "Operacija stapanja tekuće stavke" + +#. i18n: file kdiff3_shell.rc line 38 +#: rc.cpp:21 +#, no-c-format +msgid "Current Item Sync Operation" +msgstr "Operacija sinh. tekuće stavke" + +#. i18n: file kdiff3_shell.rc line 50 +#: rc.cpp:24 +#, no-c-format +msgid "&Movement" +msgstr "&Kretanje" + +#. i18n: file kdiff3_shell.rc line 61 +#: rc.cpp:27 +#, no-c-format +msgid "D&iffview" +msgstr "D&iff prikaz" + +#. i18n: file kdiff3_shell.rc line 73 +#: rc.cpp:30 +#, no-c-format +msgid "&Merge" +msgstr "&Stopi" + +#. i18n: file kdiff3_shell.rc line 95 +#: rc.cpp:33 +#, no-c-format +msgid "&Window" +msgstr "P&rozor" + +#: smalldialogs.cpp:53 +msgid "A (Base):" +msgstr "A (baza):" + +#: smalldialogs.cpp:59 smalldialogs.cpp:75 smalldialogs.cpp:91 +#: smalldialogs.cpp:134 +msgid "File..." +msgstr "Fajl..." + +#: smalldialogs.cpp:61 smalldialogs.cpp:77 smalldialogs.cpp:93 +#: smalldialogs.cpp:136 +msgid "Dir..." +msgstr "Dir..." + +#: smalldialogs.cpp:86 +msgid "C (Optional):" +msgstr "C (opciono):" + +#: smalldialogs.cpp:108 +msgid "Swap/Copy Names ..." +msgstr "" + +#: smalldialogs.cpp:114 smalldialogs.cpp:115 smalldialogs.cpp:116 +msgid "Swap %1<->%2" +msgstr "" + +#: smalldialogs.cpp:117 smalldialogs.cpp:118 smalldialogs.cpp:119 +msgid "Copy %1->Output" +msgstr "" + +#: smalldialogs.cpp:120 smalldialogs.cpp:121 smalldialogs.cpp:122 +msgid "Swap %1<->Output" +msgstr "" + +#: smalldialogs.cpp:129 +msgid "Output (optional):" +msgstr "Izlaz (opciono):" + +#: smalldialogs.cpp:158 +msgid "Configure..." +msgstr "Podesi..." + +#: smalldialogs.cpp:347 +msgid "Search text:" +msgstr "Tekst za pretragu:" + +#: smalldialogs.cpp:354 +msgid "Case sensitive" +msgstr "Razlikuje mala i velika slova" + +#: smalldialogs.cpp:357 +msgid "Search A" +msgstr "Pretraži A" + +#: smalldialogs.cpp:362 +msgid "Search B" +msgstr "Pretraži B" + +#: smalldialogs.cpp:367 +msgid "Search C" +msgstr "Pretraži C" + +#: smalldialogs.cpp:372 +msgid "Search output" +msgstr "Izlaz pretrage" + +#: smalldialogs.cpp:377 +msgid "&Search" +msgstr "&Traži" + +#: smalldialogs.cpp:394 +msgid "Regular Expression Tester" +msgstr "" + +#: smalldialogs.cpp:405 +msgid "Example auto merge line:" +msgstr "" + +#: smalldialogs.cpp:407 +msgid "For auto merge test copy a line as used in your files." +msgstr "" + +#: smalldialogs.cpp:413 smalldialogs.cpp:442 smalldialogs.cpp:479 +msgid "Match result:" +msgstr "" + +#: smalldialogs.cpp:432 +msgid "Example history start line (with leading comment):" +msgstr "" + +#: smalldialogs.cpp:435 +msgid "" +"Copy a history start line as used in your files,\n" +"including the leading comment." +msgstr "" + +#: smalldialogs.cpp:461 +msgid "History sort key order:" +msgstr "" + +#: smalldialogs.cpp:469 +msgid "Example history entry start line (without leading comment):" +msgstr "" + +#: smalldialogs.cpp:471 +msgid "" +"Copy a history entry start line as used in your files,\n" +"but omit the leading comment." +msgstr "" + +#: smalldialogs.cpp:486 +msgid "Sort key result:" +msgstr "" + +#: smalldialogs.cpp:537 smalldialogs.cpp:547 smalldialogs.cpp:568 +msgid "Match success." +msgstr "" + +#: smalldialogs.cpp:541 smalldialogs.cpp:551 smalldialogs.cpp:574 +#, fuzzy +msgid "Match failed." +msgstr "Snimanje nije uspelo." + +#: smalldialogs.cpp:559 +msgid "Opening and closing parentheses don't match in regular expression." +msgstr "" + +#, fuzzy +#~ msgid "Diff and Merge" +#~ msgstr "Razlika i stapanje" + +#, fuzzy +#~ msgid "Save Directory Merge State ..." +#~ msgstr "Stapanje direktorijuma" + +#, fuzzy +#~ msgid "Load Directory Merge State ..." +#~ msgstr "Stapanje direktorijuma" + +#, fuzzy +#~ msgid "Synchronize Directories" +#~ msgstr "Sinhronizuj direktorijume" + +#, fuzzy +#~ msgid "Copy Newer Files Instead of Merging" +#~ msgstr "Kopiraj noviji umesto stapanja (nije bezbedno)" + +#~ msgid "List only deltas" +#~ msgstr "Izlistaj samo delte" + +#~ msgid "Files and directories without change will not appear in the list." +#~ msgstr "Fajlovi i direktorijumi bez izmena neće se pojavljivati u listi." + +#, fuzzy +#~ msgid "no selection" +#~ msgstr "Automatsko kopiranje izbora" + +#, fuzzy +#~ msgid "Manually match lines" +#~ msgstr "RuÄni izbor" + +#~ msgid "Has no effect. For compatibility with certain tools." +#~ msgstr "Nema efekta. Za kompatibilnost sa odreÄ‘enim alatima." + +#~ msgid "For compatibility with certain tools." +#~ msgstr "Za kompatibilnost sa odreÄ‘enim alatima." + +#~ msgid "Colors in Editor & Diff Output" +#~ msgstr "Boje u ureÄ‘ivaÄu i raz. izlazu" + +#~ msgid "Text Diff and Merge Tool" +#~ msgstr "Alat za razlikovanje i stapanje teksta" + +#~ msgid "" +#~ "\n" +#~ "\n" +#~ "File not saved." +#~ msgstr "" +#~ "\n" +#~ "\n" +#~ "Fajl nije snimljen." + +#~ msgid "Out of memory while preparing to save." +#~ msgstr "Nestalo je memorije u toku pripreme snimanja." + +#~ msgid "Delete (If Exists)" +#~ msgstr "ObriÅ¡i (ako postoji)" + +#~ msgid "Delete A and B" +#~ msgstr "ObriÅ¡i A i B" + +#~ msgid "Merge to A and B" +#~ msgstr "Stopi A i B" + +#, fuzzy +#~ msgid "Error writing temporary file: %1" +#~ msgstr "PiÅ¡em fajl: %1" + +#~ msgid "Convert to upper case" +#~ msgstr "Pretvori u velika slova" + +#~ msgid "Turn all lower case characters to upper case on reading. (e.g.: 'a'->'A')" +#~ msgstr "Pretvori sve znakove malih slova u velika pri Äitanju. (npr.: „a“->„A“)" + +#, fuzzy +#~ msgid "Convert to upper case\n" +#~ msgstr "Pretvori u velika slova" + +#~ msgid "" +#~ "Running the external diff failed.\n" +#~ "Check if the diff works, if the program can write in the temp folder or if the disk is full.\n" +#~ "The external diff option will be disabled now and the internal diff will be used." +#~ msgstr "" +#~ "Pokretanje spoljaÅ¡njeg razlikovanja nije uspelo.\n" +#~ "Proverite da li to razlikovanje radi, da li program može da piÅ¡e u privremeni direktorijum i da li ima prostora na disku.\n" +#~ "Opcija spoljaÅ¡njeg razlikovanja će sada biti iskljuÄena i koristiće se unutraÅ¡nje." diff --git a/po/sv.po b/po/sv.po new file mode 100644 index 0000000..5dad24e --- /dev/null +++ b/po/sv.po @@ -0,0 +1,2523 @@ +# translation of kdiff3.po to Swedish +# Copyright (C) 2003, 2004, 2005, 2006 Free Software Foundation, Inc. +# +# Stefan Asserhäll , 2004, 2005, 2006. +msgid "" +msgstr "" +"Project-Id-Version: kdiff3\n" +"POT-Creation-Date: 2006-11-05 08:45+0100\n" +"PO-Revision-Date: 2006-11-05 16:50+0100\n" +"Last-Translator: Stefan Asserhäll \n" +"Language-Team: Swedish \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: KBabel 1.11.4\n" + +#: _translatorinfo.cpp:1 +msgid "" +"_: NAME OF TRANSLATORS\n" +"Your names" +msgstr "Stefan Asserhäll" + +#: _translatorinfo.cpp:3 +msgid "" +"_: EMAIL OF TRANSLATORS\n" +"Your emails" +msgstr "stefan.asserhall@comhem.se" + +#: diff.cpp:246 +msgid "Writing clipboard data to temp file failed." +msgstr "Skrivning av klippbordsdata till tillfällig fil misslyckades." + +#: diff.cpp:250 +msgid "From Clipboard" +msgstr "FrÃ¥n klippbord" + +#: diff.cpp:491 +msgid "" +"Preprocessing possibly failed. Check this command:\n" +"\n" +" %1\n" +"\n" +"The preprocessing command will be disabled now." +msgstr "" +"Preprocessing misslyckades möjligen. Kontrollera kommandot:\n" +"\n" +" %1\n" +"\n" +"Preprocessingkommandot inaktiveras nu." + +#: diff.cpp:526 +msgid "" +"The line-matching-preprocessing possibly failed. Check this command:\n" +"\n" +" %1\n" +"\n" +"The line-matching-preprocessing command will be disabled now." +msgstr "" +"Preprocessingen för radmatchning misslyckades möjligen. Kontrollera kommandot:\n" +"\n" +" %1\n" +"\n" +"Preprocessingen för radmatchning inaktiveras nu." + +#: diff.cpp:1631 diff.cpp:1645 +msgid "" +"Data loss error:\n" +"If it is reproducable please contact the author.\n" +msgstr "" +"Dataförlustfel:\n" +"Om det gÃ¥r att upprepa, kontakta upphovsmannen.\n" + +#: diff.cpp:1633 diff.cpp:1647 +msgid "Severe Internal Error" +msgstr "Allvarligt internt fel" + +#: difftextwindow.cpp:1643 kdiff3.cpp:753 +msgid "Top line" +msgstr "Övre rad" + +#: difftextwindow.cpp:1653 +msgid "End" +msgstr "Slut" + +#: directorymergewindow.cpp:142 +msgid "Mix of links and normal files." +msgstr "Blandning av länkar och normala filer." + +#: directorymergewindow.cpp:149 +msgid "Link: " +msgstr "Länk: " + +#: directorymergewindow.cpp:157 +msgid "Size. " +msgstr "Storlek: " + +#: directorymergewindow.cpp:170 +msgid "Date & Size: " +msgstr "Datum och storlek: " + +#: directorymergewindow.cpp:179 directorymergewindow.cpp:185 +msgid "Creating temp copy of %1 failed." +msgstr "Att skapa tillfällig kopia av %1 misslyckades." + +#: directorymergewindow.cpp:196 directorymergewindow.cpp:204 +msgid "Opening %1 failed." +msgstr "Öppna %1 misslyckades." + +#: directorymergewindow.cpp:208 +msgid "Comparing file..." +msgstr "Jämför fil..." + +#: directorymergewindow.cpp:218 directorymergewindow.cpp:224 +#, c-format +msgid "Error reading from %1" +msgstr "Fel vid läsning frÃ¥n %1" + +#: directorymergewindow.cpp:282 +msgid "Name" +msgstr "Namn" + +#: directorymergewindow.cpp:286 +msgid "Operation" +msgstr "Ã…tgärd" + +#: directorymergewindow.cpp:287 +msgid "Status" +msgstr "Status" + +#: directorymergewindow.cpp:288 +msgid "Unsolved" +msgstr "Olöst" + +#: directorymergewindow.cpp:289 +msgid "Solved" +msgstr "Löst" + +#: directorymergewindow.cpp:290 +msgid "Nonwhite" +msgstr "Inte blank" + +#: directorymergewindow.cpp:291 +msgid "White" +msgstr "Blank" + +#: directorymergewindow.cpp:319 +msgid "" +"You are currently doing a directory merge. Are you sure, you want to abort the " +"merge and rescan the directory?" +msgstr "" +"Du hÃ¥ller för närvarande pÃ¥ med att sammanfoga kataloger. Är du säker pÃ¥ att du " +"vill avbryta den och avsöka katalogen igen?" + +#: directorymergewindow.cpp:320 directorymergewindow.cpp:2868 +msgid "Rescan" +msgstr "Avsök igen" + +#: directorymergewindow.cpp:320 kdiff3.cpp:603 pdiff.cpp:979 +msgid "Continue Merging" +msgstr "Fortsätt sammanfoga" + +#: directorymergewindow.cpp:462 +msgid "Opening of directories failed:" +msgstr "Öppna katalogerna misslyckades:" + +#: directorymergewindow.cpp:465 +msgid "" +"Dir A \"%1\" does not exist or is not a directory.\n" +msgstr "" +"Katalog A \"%1\" finns inte eller är inte en katalog.\n" + +#: directorymergewindow.cpp:468 +msgid "" +"Dir B \"%1\" does not exist or is not a directory.\n" +msgstr "" +"Katalog B \"%1\" finns inte eller är inte en katalog.\n" + +#: directorymergewindow.cpp:471 +msgid "" +"Dir C \"%1\" does not exist or is not a directory.\n" +msgstr "" +"Katalog C \"%1\" finns inte eller är inte en katalog.\n" + +#: directorymergewindow.cpp:473 +msgid "Directory Open Error" +msgstr "Fel vid öppna katalog" + +#: directorymergewindow.cpp:481 +msgid "" +"The destination directory must not be the same as A or B when three directories " +"are merged.\n" +"Check again before continuing." +msgstr "" +"MÃ¥lkatalogen fÃ¥r inte vara samma som A eller B när tre kataloger sammanfogas.\n" +"Kontrollera igen innan du fortsätter." + +#: directorymergewindow.cpp:483 +msgid "Parameter Warning" +msgstr "Parametervarning" + +#: directorymergewindow.cpp:488 +msgid "Scanning directories..." +msgstr "Söker i kataloger..." + +#: directorymergewindow.cpp:537 +msgid "Reading Directory A" +msgstr "Läser katalog A" + +#: directorymergewindow.cpp:559 +msgid "Reading Directory B" +msgstr "Läser katalog B" + +#: directorymergewindow.cpp:581 +msgid "Reading Directory C" +msgstr "Läser katalog C" + +#: directorymergewindow.cpp:607 +msgid "Some subdirectories were not readable in" +msgstr "Vissa underkataloger kunde inte läsas i" + +#: directorymergewindow.cpp:612 +msgid "Check the permissions of the subdirectories." +msgstr "Kontrollera rättigheter för underkatalogerna." + +#: directorymergewindow.cpp:646 kdiff3.cpp:552 kdiff3.cpp:636 kdiff3.cpp:661 +#: kdiff3.cpp:934 kdiff3.cpp:955 pdiff.cpp:1059 pdiff.cpp:1131 pdiff.cpp:1169 +#: pdiff.cpp:1185 pdiff.cpp:1215 pdiff.cpp:1226 +msgid "Ready." +msgstr "Klar." + +#: directorymergewindow.cpp:660 +msgid "Directory Comparison Status" +msgstr "Status för katalogjämförelse" + +#: directorymergewindow.cpp:661 +msgid "Number of subdirectories:" +msgstr "Antal underkataloger:" + +#: directorymergewindow.cpp:662 +msgid "Number of equal files:" +msgstr "Antal likadana filer:" + +#: directorymergewindow.cpp:663 +msgid "Number of different files:" +msgstr "Antal olika filer:" + +#: directorymergewindow.cpp:666 +msgid "Number of manual merges:" +msgstr "Antal manuella sammanfogningar:" + +#: directorymergewindow.cpp:802 +msgid "This affects all merge operations." +msgstr "Det här pÃ¥verkar alla sammanfogningsÃ¥tgärder." + +#: directorymergewindow.cpp:803 +msgid "Changing All Merge Operations" +msgstr "Ändra alla sammanfogningsÃ¥tgärder" + +#: directorymergewindow.cpp:803 mergeresultwindow.cpp:287 +msgid "C&ontinue" +msgstr "F&ortsätt" + +#: directorymergewindow.cpp:1169 +msgid "Processing " +msgstr "Behandlar " + +#: directorymergewindow.cpp:1647 directorymergewindow.cpp:1653 +msgid "To do." +msgstr "Att göra." + +#: directorymergewindow.cpp:1756 directorymergewindow.cpp:2899 +msgid "Copy A to B" +msgstr "Kopiera A till B" + +#: directorymergewindow.cpp:1757 directorymergewindow.cpp:2900 +msgid "Copy B to A" +msgstr "Kopiera B till A" + +#: directorymergewindow.cpp:1758 directorymergewindow.cpp:2901 +msgid "Delete A" +msgstr "Ta bort A" + +#: directorymergewindow.cpp:1759 directorymergewindow.cpp:2902 +msgid "Delete B" +msgstr "Ta bort B" + +#: directorymergewindow.cpp:1760 +msgid "Delete A & B" +msgstr "Ta bort A och B" + +#: directorymergewindow.cpp:1761 directorymergewindow.cpp:2904 +msgid "Merge to A" +msgstr "Sammanfoga till A" + +#: directorymergewindow.cpp:1762 directorymergewindow.cpp:2905 +msgid "Merge to B" +msgstr "Sammanfoga till B" + +#: directorymergewindow.cpp:1763 +msgid "Merge to A & B" +msgstr "Sammanfoga till A och B" + +#: directorymergewindow.cpp:1767 directorymergewindow.cpp:2896 +msgid "Delete (if exists)" +msgstr "Ta bort (om den finns)" + +#: directorymergewindow.cpp:1768 directorymergewindow.cpp:1769 +#: directorymergewindow.cpp:2895 optiondialog.cpp:809 smalldialogs.cpp:102 +msgid "Merge" +msgstr "Sammanfoga" + +#: directorymergewindow.cpp:1768 directorymergewindow.cpp:1769 +msgid "Merge (manual)" +msgstr "Sammanfoga (manuellt)" + +#: directorymergewindow.cpp:1770 +msgid "Error: Conflicting File Types" +msgstr "Fel: Konflikt i filtyper" + +#: directorymergewindow.cpp:1771 +msgid "Error: Dates are equal but files are not." +msgstr "Fel: Datum är lika men filerna är det inte." + +#: directorymergewindow.cpp:1795 directorymergewindow.cpp:1824 +#: directorymergewindow.cpp:1849 +msgid "This operation is currently not possible." +msgstr "Den här Ã¥tgärden är för närvarande inte möjlig att utföra." + +#: directorymergewindow.cpp:1795 directorymergewindow.cpp:1824 +#: directorymergewindow.cpp:1849 directorymergewindow.cpp:2106 +msgid "Operation Not Possible" +msgstr "Ã…tgärd inte möjlig" + +#: directorymergewindow.cpp:1888 +msgid "" +"This should never happen: \n" +"\n" +"mergeResultSaved: m_pMFI=0\n" +"\n" +"If you know how to reproduce this, please contact the program author." +msgstr "" +"Det här ska aldrig inträffa:\n" +"\n" +"mergeResultSaved: m_pMFI=0\n" +"\n" +"Om du vet hur du kan upprepa detta, kontakta programmets upphovsman." + +#: directorymergewindow.cpp:1888 +msgid "Program Error" +msgstr "Programfel" + +#: directorymergewindow.cpp:1899 +msgid "" +"An error occurred while copying.\n" +msgstr "" +"Ett fel uppstod vid kopiering.\n" + +#: directorymergewindow.cpp:1900 directorymergewindow.cpp:2306 +msgid "Merge Error" +msgstr "Sammanfogningsfel" + +#: directorymergewindow.cpp:1905 directorymergewindow.cpp:2311 +msgid "Error." +msgstr "Fel." + +#: directorymergewindow.cpp:1910 directorymergewindow.cpp:2202 +#: directorymergewindow.cpp:2242 +msgid "Done." +msgstr "Klar." + +#: directorymergewindow.cpp:1933 +msgid "Not saved." +msgstr "Inte sparad." + +#: directorymergewindow.cpp:1968 +msgid "Unknown merge operation. (This must never happen!)" +msgstr "Okänd sammanfogningsÃ¥tgärd. (Det här fÃ¥r aldrig inträffa!)" + +#: directorymergewindow.cpp:2000 +msgid "Unknown merge operation." +msgstr "Okänd sammanfogningsÃ¥tgärd." + +#: directorymergewindow.cpp:2015 +msgid "" +"The merge is about to begin.\n" +"\n" +"Choose \"Do it\" if you have read the instructions and know what you are " +"doing.\n" +"Choosing \"Simulate it\" will tell you what would happen.\n" +"\n" +"Be aware that this program still has beta status and there is NO WARRANTY " +"whatsoever! Make backups of your vital data!" +msgstr "" +"Sammanfogning ska nu börja.\n" +"\n" +"Välj \"Gör det\" om du har läst instruktionerna och vet vad du gör.\n" +"Genom att välja \"Simulera det\" fÃ¥r du reda pÃ¥ vad som skulle hända.\n" +"\n" +"Var medveten om att det här programmet fortfarande har beta-status, och det " +"finns INGA GARANTIER överhuvudtaget! Gör säkerhetskopior av viktig information!" + +#: directorymergewindow.cpp:2020 +msgid "Starting Merge" +msgstr "Startar sammanfogning" + +#: directorymergewindow.cpp:2020 +msgid "Do It" +msgstr "Gör det" + +#: directorymergewindow.cpp:2020 +msgid "Simulate It" +msgstr "Simulera det" + +#: directorymergewindow.cpp:2046 +msgid "" +"The highlighted item has a different type in the different directories. Select " +"what to do." +msgstr "" +"Det markerade objektet har olika typ i de olika katalogerna. Välj vad du vill " +"göra." + +#: directorymergewindow.cpp:2055 +msgid "" +"The modification dates of the file are equal but the files are not. Select what " +"to do." +msgstr "" +"Ändringsdatum för filerna är samma, men filerna är det inte. Välj vad du vill " +"göra." + +#: directorymergewindow.cpp:2106 +msgid "" +"This operation is currently not possible because directory merge is currently " +"running." +msgstr "" +"Den här Ã¥tgärden är för närvarande inte möjlig eftersom katalogsammanfogning " +"för närvarande kör." + +#: directorymergewindow.cpp:2166 +msgid "" +"There was an error in the last step.\n" +"Do you want to continue with the item that caused the error or do you want to " +"skip this item?" +msgstr "" +"Ett fel uppstod under föregÃ¥ende steg.\n" +"Vill du fortsätta med objektet som orsakade felet, eller vill du hoppa över " +"objektet?" + +#: directorymergewindow.cpp:2168 +msgid "Continue merge after an error" +msgstr "Fortsätt sammanfoga efter ett fel" + +#: directorymergewindow.cpp:2168 +msgid "Continue With Last Item" +msgstr "Fortsätt med sista objekt" + +#: directorymergewindow.cpp:2168 +msgid "Skip Item" +msgstr "Hoppa över objekt" + +#: directorymergewindow.cpp:2202 +msgid "Skipped." +msgstr "Överhoppad." + +#: directorymergewindow.cpp:2209 directorymergewindow.cpp:2435 +msgid "In progress..." +msgstr "PÃ¥gÃ¥r..." + +#: directorymergewindow.cpp:2257 +msgid "Merge operation complete." +msgstr "SammanfogningsÃ¥tgärd färdig." + +#: directorymergewindow.cpp:2257 directorymergewindow.cpp:2260 +msgid "Merge Complete" +msgstr "Sammanfogning färdig" + +#: directorymergewindow.cpp:2269 +msgid "" +"Simulated merge complete: Check if you agree with the proposed operations." +msgstr "" +"Simulerad sammanfogning färdig. Kontrollera om du hÃ¥ller med om de föreslagna " +"Ã¥tgärderna." + +#: directorymergewindow.cpp:2305 +msgid "" +"An error occurred. Press OK to see detailed information.\n" +msgstr "" +"Ett fel uppstod. Tryck pÃ¥ Ok för att se detaljerad information.\n" + +#: directorymergewindow.cpp:2348 +msgid "Error: While deleting %1: Creating backup failed." +msgstr "Fel: Vid borttagning av %1: Misslyckades skapa säkerhetskopia." + +#: directorymergewindow.cpp:2355 +msgid "delete directory recursively( %1 )" +msgstr "Ta bort katalog rekursivt (%1)" + +#: directorymergewindow.cpp:2357 +msgid "delete( %1 )" +msgstr "Ta bort (%1)" + +#: directorymergewindow.cpp:2372 +msgid "Error: delete dir operation failed while trying to read the directory." +msgstr "" +"Fel: BorttagningsÃ¥tgärd för katalog misslyckades när katalogen skulle läsas." + +#: directorymergewindow.cpp:2391 +msgid "Error: rmdir( %1 ) operation failed." +msgstr "Fel: Ã…tgärden rmdir (%1) misslyckades." + +#: directorymergewindow.cpp:2401 +msgid "Error: delete operation failed." +msgstr "Fel: BorttagningsÃ¥tgärden misslyckades." + +#: directorymergewindow.cpp:2427 +msgid "manual merge( %1, %2, %3 -> %4)" +msgstr "Manuell sammanfogning (%1, %2, %3 -> %4)" + +#: directorymergewindow.cpp:2430 +msgid "" +" Note: After a manual merge the user should continue by pressing F7." +msgstr "" +" Observera: Efter en manuell sammanfogning bör användaren fortsätta genom " +"att trycka pÃ¥ F7." + +#: directorymergewindow.cpp:2453 +msgid "Error: copy( %1 -> %2 ) failed.Deleting existing destination failed." +msgstr "" +"Fel: Kopiering (%1 -> %2) misslyckades. Borttagning av befintlig fil " +"misslyckades." + +#: directorymergewindow.cpp:2463 +msgid "copyLink( %1 -> %2 )" +msgstr "Kopiera länk (%1 -> %2)" + +#: directorymergewindow.cpp:2474 +msgid "Error: copyLink failed: Remote links are not yet supported." +msgstr "Fel: Kopiera länk misslyckades: Fjärrlänkar stöds inte ännu." + +#: directorymergewindow.cpp:2480 +msgid "Error: copyLink failed." +msgstr "Fel: Kopiera länk misslyckades." + +#: directorymergewindow.cpp:2500 +msgid "copy( %1 -> %2 )" +msgstr "Kopiera (%1 -> %2)" + +#: directorymergewindow.cpp:2526 +msgid "Error during rename( %1 -> %2 ): Cannot delete existing destination." +msgstr "Fel vid namnbyte (%1 -> %2): Kan inte ta bort befintlig fil." + +#: directorymergewindow.cpp:2532 +msgid "rename( %1 -> %2 )" +msgstr "Byt namn (%1 -> %2)" + +#: directorymergewindow.cpp:2541 +msgid "Error: Rename failed." +msgstr "Fel: Namnbyte misslyckades." + +#: directorymergewindow.cpp:2559 +msgid "Error during makeDir of %1. Cannot delete existing file." +msgstr "Fel när katalogen %1 skulle skapas: Kan inte ta bort befintlig fil." + +#: directorymergewindow.cpp:2575 +msgid "makeDir( %1 )" +msgstr "Skapa katalog (%1)" + +#: directorymergewindow.cpp:2585 +msgid "Error while creating directory." +msgstr "Fel vid skapa katalog." + +#: directorymergewindow.cpp:2608 directorymergewindow.cpp:2725 +msgid "Dest" +msgstr "MÃ¥l" + +#: directorymergewindow.cpp:2612 directorymergewindow.cpp:2650 +msgid "Dir" +msgstr "Katalog" + +#: directorymergewindow.cpp:2613 +msgid "Type" +msgstr "Typ" + +#: directorymergewindow.cpp:2614 +msgid "Size" +msgstr "Storlek" + +#: directorymergewindow.cpp:2615 +msgid "Attr" +msgstr "Egenskap" + +#: directorymergewindow.cpp:2616 +msgid "Last Modification" +msgstr "Senast ändrad" + +#: directorymergewindow.cpp:2617 +msgid "Link-Destination" +msgstr "LänkmÃ¥l" + +#: directorymergewindow.cpp:2667 +msgid "not available" +msgstr "Ej tillgänglig" + +#: directorymergewindow.cpp:2687 +msgid "A (Dest): " +msgstr "A (mÃ¥l): " + +#: directorymergewindow.cpp:2690 +msgid "A (Base): " +msgstr "A (bas): " + +#: directorymergewindow.cpp:2696 +msgid "B (Dest): " +msgstr "B (mÃ¥l): " + +#: directorymergewindow.cpp:2704 +msgid "C (Dest): " +msgstr "C (mÃ¥l): " + +#: directorymergewindow.cpp:2710 +msgid "Dest: " +msgstr "MÃ¥l: " + +#: directorymergewindow.cpp:2775 +msgid "Save Directory Merge State As..." +msgstr "Spara tillstÃ¥nd för katalogsammanfogning som..." + +#: directorymergewindow.cpp:2862 +msgid "Start/Continue Directory Merge" +msgstr "Starta eller fortsätt katalogsammanfogning" + +#: directorymergewindow.cpp:2863 +msgid "Run Operation for Current Item" +msgstr "Utför Ã¥tgärd för aktuellt objekt" + +#: directorymergewindow.cpp:2864 +msgid "Compare Selected File" +msgstr "Jämför markerade filer" + +#: directorymergewindow.cpp:2865 +msgid "Merge Current File" +msgstr "Sammanfoga markerade filer" + +#: directorymergewindow.cpp:2866 +msgid "Fold All Subdirs" +msgstr "Dra ihop alla underkataloger" + +#: directorymergewindow.cpp:2867 +msgid "Unfold All Subdirs" +msgstr "Expandera alla underkataloger" + +#: directorymergewindow.cpp:2871 +msgid "Choose A for All Items" +msgstr "Välj A för alla objekt" + +#: directorymergewindow.cpp:2872 +msgid "Choose B for All Items" +msgstr "Välj B för alla objekt" + +#: directorymergewindow.cpp:2873 +msgid "Choose C for All Items" +msgstr "Välj C för alla objekt" + +#: directorymergewindow.cpp:2874 +msgid "Auto-Choose Operation for All Items" +msgstr "Välj automatiskt Ã¥tgärd för alla objekt" + +#: directorymergewindow.cpp:2875 +msgid "No Operation for All Items" +msgstr "Ingen Ã¥tgärd för nÃ¥got objekt" + +#: directorymergewindow.cpp:2880 +msgid "Show Identical Files" +msgstr "Visa identiska filer" + +#: directorymergewindow.cpp:2881 +msgid "Show Different Files" +msgstr "Visa olika filer" + +#: directorymergewindow.cpp:2882 +msgid "Show Files only in A" +msgstr "Visa bara filer i A" + +#: directorymergewindow.cpp:2883 +msgid "Show Files only in B" +msgstr "Visa bara filer i B" + +#: directorymergewindow.cpp:2884 +msgid "Show Files only in C" +msgstr "Visa bara filer i C" + +#: directorymergewindow.cpp:2888 +msgid "Compare Explicitly Selected Files" +msgstr "Jämför explicit markerade filer" + +#: directorymergewindow.cpp:2889 +msgid "Merge Explicitly Selected Files" +msgstr "Sammanfoga explicit markerade filer" + +#: directorymergewindow.cpp:2891 directorymergewindow.cpp:2898 +msgid "Do Nothing" +msgstr "Gör ingenting" + +#: directorymergewindow.cpp:2892 +msgid "A" +msgstr "A" + +#: directorymergewindow.cpp:2893 +msgid "B" +msgstr "B" + +#: directorymergewindow.cpp:2894 +msgid "C" +msgstr "C" + +#: directorymergewindow.cpp:2903 +msgid "Delete A && B" +msgstr "Ta bort A och B" + +#: directorymergewindow.cpp:2906 +msgid "Merge to A && B" +msgstr "Sammanfoga till A och B" + +#: fileaccess.cpp:595 +msgid "" +"While trying to make a backup, deleting an older backup failed. \n" +"Filename: " +msgstr "" +"Vid försök att skapa en säkerhetskopia, misslyckades borttagning av äldre " +"säkerhetskopia.\n" +"Filnamn: " + +#: fileaccess.cpp:602 +msgid "" +"While trying to make a backup, renaming failed. \n" +"Filenames: " +msgstr "" +"Vid försök att skapa en säkerhetskopia, misslyckades namnbyte.\n" +"Filnamn: " + +#: fileaccess.cpp:624 +#, c-format +msgid "Getting file status: %1" +msgstr "Hämtar filstatus: %1" + +#: fileaccess.cpp:667 +#, c-format +msgid "Reading file: %1" +msgstr "Läser fil: %1" + +#: fileaccess.cpp:703 +#, c-format +msgid "Writing file: %1" +msgstr "Skriver fil: %1" + +#: fileaccess.cpp:731 +msgid "Out of memory" +msgstr "Slut pÃ¥ minne" + +#: fileaccess.cpp:766 +#, c-format +msgid "Making directory: %1" +msgstr "Skapar katalog: %1" + +#: fileaccess.cpp:786 +#, c-format +msgid "Removing directory: %1" +msgstr "Tar bort katalog: %1" + +#: fileaccess.cpp:801 +#, c-format +msgid "Removing file: %1" +msgstr "Tar bort fil: %1" + +#: fileaccess.cpp:817 +msgid "Creating symbolic link: %1 -> %2" +msgstr "Skapar symbolisk länk: %1 -> %2" + +#: fileaccess.cpp:843 +msgid "Renaming file: %1 -> %2" +msgstr "Byter namn pÃ¥ fil: %1 -> %2" + +#: fileaccess.cpp:879 +msgid "Copying file: %1 -> %2" +msgstr "Kopierar fil: %1 -> %2" + +#: fileaccess.cpp:893 +#, c-format +msgid "" +"Error during file copy operation: Opening file for reading failed. Filename: %1" +msgstr "" +"Fel under filkopieringsÃ¥tgärd: Öppna fil för läsning misslyckades. Filnamn: %1" + +#: fileaccess.cpp:899 +#, c-format +msgid "" +"Error during file copy operation: Opening file for writing failed. Filename: %1" +msgstr "" +"Fel under filkopieringsÃ¥tgärd: Öppna fil för skrivning misslyckades. Filnamn: " +"%1" + +#: fileaccess.cpp:914 +#, c-format +msgid "Error during file copy operation: Reading failed. Filename: %1" +msgstr "Fel under filkopieringsÃ¥tgärd: Läsning misslyckades. Filnamn: %1" + +#: fileaccess.cpp:923 +#, c-format +msgid "Error during file copy operation: Writing failed. Filename: %1" +msgstr "Fel under filkopieringsÃ¥tgärd: Skrivning misslyckades. Filnamn: %1" + +#: fileaccess.cpp:1219 +msgid "Reading directory: " +msgstr "Läser katalog: " + +#: fileaccess.cpp:1348 +#, c-format +msgid "Listing directory: %1" +msgstr "Listar katalog: %1" + +#: kdiff3.cpp:142 +msgid "Current Configuration:" +msgstr "Aktuell inställning:" + +#: kdiff3.cpp:147 +msgid "Config Option Error:" +msgstr "Fel i inställningsalternativ:" + +#: kdiff3.cpp:187 +msgid "Option --auto used, but no output file specified." +msgstr "Väljaren --auto användes, men ingen utdatafil angavs." + +#: kdiff3.cpp:323 +msgid "Option --auto ignored for directory comparison." +msgstr "Väljaren --auto ignoreras för katalogjämförelse." + +#: kdiff3.cpp:359 +msgid "Saving failed." +msgstr "Misslyckades spara." + +#: kdiff3.cpp:386 pdiff.cpp:1041 pdiff.cpp:1112 +msgid "Opening of these files failed:" +msgstr "Misslyckades öppna följande filer:" + +#: kdiff3.cpp:395 +msgid "File Open Error" +msgstr "Fel vid öppna fil" + +#: kdiff3.cpp:418 +msgid "Opens documents for comparison..." +msgstr "Öppnar dokument för jämförelse..." + +#: kdiff3.cpp:423 +msgid "Saves the merge result. All conflicts must be solved!" +msgstr "Sparar sammanfogningsresultat. Alla konflikter mÃ¥ste vara lösta." + +#: kdiff3.cpp:425 +msgid "Saves the current document as..." +msgstr "Sparar aktuellt dokument som..." + +#: kdiff3.cpp:427 +msgid "Print the differences" +msgstr "Skriv ut skillnaderna" + +#: kdiff3.cpp:429 +msgid "Quits the application" +msgstr "Avslutar programmet" + +#: kdiff3.cpp:431 +msgid "Cuts the selected section and puts it to the clipboard" +msgstr "Klipper ut markerad del och flyttar den till klippbordet" + +#: kdiff3.cpp:433 +msgid "Copies the selected section to the clipboard" +msgstr "Kopierar markerad del till klippbordet" + +#: kdiff3.cpp:435 +msgid "Pastes the clipboard contents to actual position" +msgstr "Klistrar in klippbordets innehÃ¥ll pÃ¥ aktuell position" + +#: kdiff3.cpp:437 +msgid "Select everything in current window" +msgstr "Markera allting i nuvarande fönster" + +#: kdiff3.cpp:439 +msgid "Search for a string" +msgstr "Sök efter en sträng" + +#: kdiff3.cpp:441 +msgid "Search again for the string" +msgstr "Sök efter strängen igen" + +#: kdiff3.cpp:443 +msgid "Enables/disables the toolbar" +msgstr "Aktiverar/inaktiverar verktygsraden" + +#: kdiff3.cpp:445 +msgid "Enables/disables the statusbar" +msgstr "Aktiverar/inaktiverar statusraden" + +#: kdiff3.cpp:449 +msgid "Configure KDiff3..." +msgstr "Anpassa Kdiff3..." + +#: kdiff3.cpp:470 +msgid "Go to Current Delta" +msgstr "GÃ¥ till aktuell skillnad" + +#: kdiff3.cpp:471 +msgid "Go to First Delta" +msgstr "GÃ¥ till första skillnad" + +#: kdiff3.cpp:472 +msgid "Go to Last Delta" +msgstr "GÃ¥ till sista skillnad" + +#: kdiff3.cpp:473 +msgid "(Skips white space differences when \"Show White Space\" is disabled.)" +msgstr "" +"(Hoppar över skillnader i blanktecken när \"Visa blanktecken\" är inaktiverat.)" + +#: kdiff3.cpp:474 +msgid "" +"(Does not skip white space differences even when \"Show White Space\" is " +"disabled.)" +msgstr "" +"(Hoppar inte över skillnader i blanktecken även när \"Visa blanktecken\" är " +"inaktiverat.)" + +#: kdiff3.cpp:475 +msgid "Go to Previous Delta" +msgstr "GÃ¥ till föregÃ¥ende skillnad" + +#: kdiff3.cpp:477 +msgid "Go to Next Delta" +msgstr "GÃ¥ till nästa skillnad" + +#: kdiff3.cpp:479 +msgid "Go to Previous Conflict" +msgstr "GÃ¥ till föregÃ¥ende konflikt" + +#: kdiff3.cpp:481 +msgid "Go to Next Conflict" +msgstr "GÃ¥ till nästa konflikt" + +#: kdiff3.cpp:483 +msgid "Go to Previous Unsolved Conflict" +msgstr "GÃ¥ till föregÃ¥ende olösta konflikt" + +#: kdiff3.cpp:485 +msgid "Go to Next Unsolved Conflict" +msgstr "GÃ¥ till nästa olösta konflikt" + +#: kdiff3.cpp:487 +msgid "Select Line(s) From A" +msgstr "Välj rad(er) frÃ¥n A" + +#: kdiff3.cpp:488 +msgid "Select Line(s) From B" +msgstr "Välj rad(er) frÃ¥n B" + +#: kdiff3.cpp:489 +msgid "Select Line(s) From C" +msgstr "Välj rad(er) frÃ¥n C" + +#: kdiff3.cpp:490 +msgid "Automatically Go to Next Unsolved Conflict After Source Selection" +msgstr "GÃ¥ automatiskt till nästa olösta konflikt efter val av källa" + +#: kdiff3.cpp:492 +msgid "Show Space && Tabulator Characters for Differences" +msgstr "Visa mellanslag och tabulatortecken i jämförelse" + +#: kdiff3.cpp:493 +msgid "Show White Space" +msgstr "Visa blanktecken" + +#: kdiff3.cpp:495 +msgid "Show Line Numbers" +msgstr "Visa radnummer" + +#: kdiff3.cpp:496 +msgid "Choose A Everywhere" +msgstr "Välj A överallt" + +#: kdiff3.cpp:497 +msgid "Choose B Everywhere" +msgstr "Välj B överallt" + +#: kdiff3.cpp:498 +msgid "Choose C Everywhere" +msgstr "Välj C överallt" + +#: kdiff3.cpp:499 +msgid "Choose A for All Unsolved Conflicts" +msgstr "Välj A för alla olösta konflikter" + +#: kdiff3.cpp:500 +msgid "Choose B for All Unsolved Conflicts" +msgstr "Välj B för alla olösta konflikter" + +#: kdiff3.cpp:501 +msgid "Choose C for All Unsolved Conflicts" +msgstr "Välj C för alla olösta konflikter" + +#: kdiff3.cpp:502 +msgid "Choose A for All Unsolved Whitespace Conflicts" +msgstr "Välj A för olösta konflikter med blanktecken" + +#: kdiff3.cpp:503 +msgid "Choose B for All Unsolved Whitespace Conflicts" +msgstr "Välj B för olösta konflikter med blanktecken" + +#: kdiff3.cpp:504 +msgid "Choose C for All Unsolved Whitespace Conflicts" +msgstr "Välj C för olösta konflikter med blanktecken" + +#: kdiff3.cpp:505 +msgid "Automatically Solve Simple Conflicts" +msgstr "Lös automatiskt enkla konflikter" + +#: kdiff3.cpp:506 +msgid "Set Deltas to Conflicts" +msgstr "Ändra skillnader till konflikter" + +#: kdiff3.cpp:507 +msgid "Run Regular Expression Auto Merge" +msgstr "Kör automatisk sammanfogning med reguljärt uttryck" + +#: kdiff3.cpp:508 +msgid "Automatically Solve History Conflicts" +msgstr "Lös automatiskt historikkonflikter" + +#: kdiff3.cpp:509 +msgid "Split Diff At Selection" +msgstr "Dela jämförelse vid markering" + +#: kdiff3.cpp:510 +msgid "Join Selected Diffs" +msgstr "Foga ihop markerade jämförelser" + +#: kdiff3.cpp:512 +msgid "Show Window A" +msgstr "Visa fönster A" + +#: kdiff3.cpp:513 +msgid "Show Window B" +msgstr "Visa fönster B" + +#: kdiff3.cpp:514 +msgid "Show Window C" +msgstr "Visa fönster C" + +#: kdiff3.cpp:515 kdiff3.cpp:526 +msgid "Focus Next Window" +msgstr "Fokus till nästa fönster" + +#: kdiff3.cpp:517 +msgid "Normal Overview" +msgstr "Normal översikt" + +#: kdiff3.cpp:518 +msgid "A vs. B Overview" +msgstr "A mot B-översikt" + +#: kdiff3.cpp:519 +msgid "A vs. C Overview" +msgstr "A mot C-översikt" + +#: kdiff3.cpp:520 +msgid "B vs. C Overview" +msgstr "B mot C-översikt" + +#: kdiff3.cpp:521 +msgid "Word Wrap Diff Windows" +msgstr "Radbryt skillnadsfönster" + +#: kdiff3.cpp:522 +msgid "Add Manual Diff Alignment" +msgstr "Lägg till manuell justering av jämförelse" + +#: kdiff3.cpp:523 +msgid "Clear All Manual Diff Alignments" +msgstr "Rensa alla manuella justeringar av jämförelse" + +#: kdiff3.cpp:528 +msgid "Focus Prev Window" +msgstr "Fokus till föregÃ¥ende fönster" + +#: kdiff3.cpp:529 +msgid "Toggle Split Orientation" +msgstr "Byt delningsorientering" + +#: kdiff3.cpp:531 +msgid "Dir && Text Split Screen View" +msgstr "Delad skärmvy för kataloger och text" + +#: kdiff3.cpp:533 +msgid "Toggle Between Dir && Text View" +msgstr "Byt mellan katalog och textvy" + +#: kdiff3.cpp:582 pdiff.cpp:1712 +msgid "The merge result hasn't been saved." +msgstr "Sammanfogningsresultatet har inte sparats." + +#: kdiff3.cpp:583 +msgid "Save && Quit" +msgstr "Spara och avsluta" + +#: kdiff3.cpp:583 +msgid "Quit Without Saving" +msgstr "Avsluta utan att spara" + +#: kdiff3.cpp:591 pdiff.cpp:1721 +msgid "Saving the merge result failed." +msgstr "Misslyckades spara sammanfogningsresultatet." + +#: kdiff3.cpp:602 pdiff.cpp:978 +msgid "" +"You are currently doing a directory merge. Are you sure, you want to abort?" +msgstr "" +"Du hÃ¥ller för närvarande pÃ¥ med en katalogsammanfogning. Är du säker pÃ¥ att du " +"vill avbryta?" + +#: kdiff3.cpp:625 +msgid "Saving file..." +msgstr "Sparar fil..." + +#: kdiff3.cpp:642 +msgid "Saving file with a new filename..." +msgstr "Sparar fil med ett nytt namn..." + +#: kdiff3.cpp:732 +msgid "Printing..." +msgstr "Skriver ut..." + +#: kdiff3.cpp:738 kdiff3.cpp:900 +msgid "Printing aborted." +msgstr "Utskrift avbruten." + +#: kdiff3.cpp:870 +msgid "Selection" +msgstr "Markering" + +#: kdiff3.cpp:896 +msgid "Printing completed." +msgstr "Utskrift färdig." + +#: kdiff3.cpp:906 +msgid "Exiting..." +msgstr "Avslutar..." + +#: kdiff3.cpp:918 +msgid "Toggling toolbar..." +msgstr "Växlar verktygsrad..." + +#: kdiff3.cpp:939 +msgid "Toggle the statusbar..." +msgstr "Växla statusraden..." + +#: kdiff3_part.cpp:155 kdiff3_part.cpp:224 +msgid "Couldn't find files for comparison." +msgstr "Kunde inte hitta filer för jämförelse." + +#: kdiff3_part.cpp:291 +msgid "KDiff3Part" +msgstr "Kdiff3-del" + +#: kdiff3_shell.cpp:78 +msgid "" +"Could not find our part!\n" +"This usually happens due to an installation problem. Please read the " +"README-file in the source package for details." +msgstr "" +"Kunde inte hitta insticksprogram.\n" +"Detta hänter oftast beroende pÃ¥ ett installationsproblem. Läs filen README i " +"källkodspaketet för detaljinformation." + +#: main.cpp:35 +msgid "Tool for Comparison and Merge of Files and Directories" +msgstr "Verktyg för jämförelse och sammanfogning av filer och kataloger" + +#: main.cpp:40 +msgid "Merge the input." +msgstr "Sammanfoga indata." + +#: main.cpp:42 +msgid "Explicit base file. For compatibility with certain tools." +msgstr "Explicit basfil. För att fungera tillsammans med vissa verktyg." + +#: main.cpp:44 +msgid "Output file. Implies -m. E.g.: -o newfile.txt" +msgstr "Utdatafil. Betyder underförstÃ¥tt -m. T.ex.: -o ny_fil.txt" + +#: main.cpp:45 +msgid "Output file, again. (For compatibility with certain tools.)" +msgstr "Utdatafil, igen. (för att fungera med vissa verktyg.)" + +#: main.cpp:46 +msgid "No GUI if all conflicts are auto-solvable. (Needs -o file)" +msgstr "" +"Inget grafiskt gränssnitt om alla konflikter kan lösas automatiskt (kräver -o " +"fil)" + +#: main.cpp:47 +msgid "Don't solve conflicts automatically. (For compatibility...)" +msgstr "" +"Lös inte konflikter automatiskt. (För att fungera med andra verktyg...)" + +#: main.cpp:48 +msgid "Visible name replacement for input file 1 (base)." +msgstr "Synlig ersättning av namn för indatafil 1 (bas)." + +#: main.cpp:49 +msgid "Visible name replacement for input file 2." +msgstr "Synlig ersättning av namn för indatafil 2." + +#: main.cpp:50 +msgid "Visible name replacement for input file 3." +msgstr "Synlig ersättning av namn för indatafil 3." + +#: main.cpp:52 +msgid "Alternative visible name replacement. Supply this once for every input." +msgstr "" +"Alternativ synlig ersättning av namn. Ange detta en gÃ¥ng för all indata." + +#: main.cpp:53 +msgid "" +"Override a config setting. Use once for every setting. E.g.: --cs " +"\"AutoAdvance=1\"" +msgstr "" +"Överskrid en inställning. Använd en gÃ¥ng för varje inställning, t.ex. --cs " +"\"AutoAdvance=1\"" + +#: main.cpp:54 +msgid "Show list of config settings and current values." +msgstr "Visa lista med inställningar och nuvarande värden." + +#: main.cpp:55 +msgid "Use a different config file." +msgstr "Använd en annan inställningsfil." + +#: main.cpp:59 +msgid "file1 to open (base, if not specified via --base)" +msgstr "Fil 1 att öppna (basfil, om den inte anges med --base)" + +#: main.cpp:60 +msgid "file2 to open" +msgstr "Fil 2 att öppna" + +#: main.cpp:61 +msgid "file3 to open" +msgstr "Fil 3 att öppna" + +#: main.cpp:93 +msgid "Ignored. (User defined.)" +msgstr "Ignoreras. (användardefinierad)" + +#. i18n: file kdiff3_part.rc line 16 +#: main.cpp:173 rc.cpp:9 +#, no-c-format +msgid "KDiff3" +msgstr "Kdiff3" + +#: main.cpp:186 +msgid "+ Many thanks to those who reported bugs and contributed ideas!" +msgstr "Samt stort tack till de som rapporterade fel och bidrog med idéer!" + +#: mergeresultwindow.cpp:136 mergeresultwindow.cpp:939 +#: mergeresultwindow.cpp:953 mergeresultwindow.cpp:965 +#: mergeresultwindow.cpp:977 +msgid "Number of remaining unsolved conflicts: %1 (of which %2 are whitespace)" +msgstr "Antal Ã¥terstÃ¥ende olösta konflikter: %1 (av vilka %2 är blanktecken)" + +#: mergeresultwindow.cpp:285 +msgid "" +"The output has been modified.\n" +"If you continue your changes will be lost." +msgstr "" +"Utdata har ändrats.\n" +"Om du fortsätter kommer dina ändringar att gÃ¥ förlorade." + +#: mergeresultwindow.cpp:797 pdiff.cpp:511 +msgid "All input files are binary equal." +msgstr "Alla indatafiler är binärt lika." + +#: mergeresultwindow.cpp:799 +msgid "All input files contain the same text." +msgstr "Alla indatafiler innehÃ¥ller samma text." + +#: mergeresultwindow.cpp:801 +msgid "" +"Files A and B are binary equal.\n" +msgstr "" +"Filerna A och B är binärt lika.\n" + +#: mergeresultwindow.cpp:802 +msgid "" +"Files A and B have equal text. \n" +msgstr "" +"Filerna A och B innehÃ¥ller samma text.\n" + +#: mergeresultwindow.cpp:803 +msgid "" +"Files A and C are binary equal.\n" +msgstr "" +"Filerna A och C är binärt lika.\n" + +#: mergeresultwindow.cpp:804 +msgid "" +"Files A and C have equal text. \n" +msgstr "" +"Filerna A och C innehÃ¥ller samma text.\n" + +#: mergeresultwindow.cpp:805 +msgid "" +"Files B and C are binary equal.\n" +msgstr "" +"Filerna B och C är binärt lika.\n" + +#: mergeresultwindow.cpp:806 +msgid "" +"Files B and C have equal text. \n" +msgstr "" +"Filerna B och C innehÃ¥ller samma text.\n" + +#: mergeresultwindow.cpp:812 +msgid "Total number of conflicts: " +msgstr "Totalt antal konflikter: " + +#: mergeresultwindow.cpp:813 +msgid "" +"\n" +"Nr of automatically solved conflicts: " +msgstr "" +"\n" +"Antal automatiskt lösta konflikter: " + +#: mergeresultwindow.cpp:814 +msgid "" +"\n" +"Nr of unsolved conflicts: " +msgstr "" +"\n" +"Antal olösta konflikter: " + +#: mergeresultwindow.cpp:816 +msgid "Conflicts" +msgstr "Konflikter" + +#: mergeresultwindow.cpp:1652 +msgid "" +msgstr "" + +#: mergeresultwindow.cpp:1660 +msgid "" +msgstr "" + +#: mergeresultwindow.cpp:1662 mergeresultwindow.cpp:2427 +msgid "" +msgstr "" + +#: mergeresultwindow.cpp:2635 +msgid "" +"Not all conflicts are solved yet.\n" +"File not saved.\n" +msgstr "" +"Alla konflikter har inte lösts ännu.\n" +"Filen sparas inte.\n" + +#: mergeresultwindow.cpp:2637 +msgid "Conflicts Left" +msgstr "Konflikter kvar" + +#: mergeresultwindow.cpp:2649 +msgid "" +"\n" +"\n" +"Creating backup failed. File not saved." +msgstr "" +"\n" +"\n" +"Misslyckades skapa säkerhetskopia. Filen sparades inte." + +#: mergeresultwindow.cpp:2649 mergeresultwindow.cpp:2689 +msgid "File Save Error" +msgstr "Fel vid spara fil" + +#: mergeresultwindow.cpp:2689 +msgid "Error while writing." +msgstr "Fel vid skrivning." + +#: mergeresultwindow.cpp:3020 +msgid "Output" +msgstr "Utmatning" + +#: mergeresultwindow.cpp:3032 mergeresultwindow.cpp:3139 +msgid "[Modified]" +msgstr "[Ändrad]" + +#: mergeresultwindow.cpp:3039 +msgid "Encoding for saving" +msgstr "Kodning för att spara" + +#: mergeresultwindow.cpp:3075 mergeresultwindow.cpp:3081 +#: mergeresultwindow.cpp:3087 +msgid "Codec from" +msgstr "Kodare frÃ¥n" + +#: optiondialog.cpp:362 +msgid "Unicode, 8 bit" +msgstr "Unicode, 8 bitar" + +#: optiondialog.cpp:363 +msgid "Unicode" +msgstr "Unicode" + +#: optiondialog.cpp:364 +msgid "Latin1" +msgstr "Latin1" + +#: optiondialog.cpp:383 +msgid "Change this if non-ASCII characters are not displayed correctly." +msgstr "Ändra det här om tecken som inte är ASCII inte visas riktigt." + +#: optiondialog.cpp:510 +msgid "Editor & Diff Output Font" +msgstr "Teckensnitt för editor och jämförelser" + +#: optiondialog.cpp:531 +msgid "Italic font for deltas" +msgstr "Kursiv stil för skillnader" + +#: optiondialog.cpp:534 +msgid "" +"Selects the italic version of the font for differences.\n" +"If the font doesn't support italic characters, then this does nothing." +msgstr "" +"Väljer den kursiva versionen av teckensnittet för skillnader.\n" +"Om teckensnittet inte stöder kursiva tecken, gör detta ingenting." + +#: optiondialog.cpp:542 +msgid "Color" +msgstr "Färg" + +#: optiondialog.cpp:542 +msgid "Colors Settings" +msgstr "Färginställningar" + +#: optiondialog.cpp:556 +msgid "Editor and Diff Views:" +msgstr "Editor- och skillnadsvyer:" + +#: optiondialog.cpp:564 +msgid "Foreground color:" +msgstr "Förgrundsfärg:" + +#: optiondialog.cpp:570 +msgid "Background color:" +msgstr "Bakgrundsfärg:" + +#: optiondialog.cpp:578 +msgid "Diff background color:" +msgstr "Bakgrundsfärg för jämförelse:" + +#: optiondialog.cpp:585 +msgid "Color A:" +msgstr "Färg A:" + +#: optiondialog.cpp:592 +msgid "Color B:" +msgstr "Färg B:" + +#: optiondialog.cpp:599 +msgid "Color C:" +msgstr "Färg C:" + +#: optiondialog.cpp:605 +msgid "Conflict color:" +msgstr "Konfliktfärg:" + +#: optiondialog.cpp:612 +msgid "Current range background color:" +msgstr "Bakgrundsfärg för aktuellt intervall:" + +#: optiondialog.cpp:619 +msgid "Current range diff background color:" +msgstr "Bakgrundsfärg för aktuellt jämförelseintervall:" + +#: optiondialog.cpp:625 +msgid "Color for manually aligned difference ranges:" +msgstr "Färg för manuellt justerade jämförelseintervall:" + +#: optiondialog.cpp:630 +msgid "Directory Comparison View:" +msgstr "Katalogjämförelsevy:" + +#: optiondialog.cpp:636 +msgid "Newest file color:" +msgstr "Färg för nyaste fil:" + +#: optiondialog.cpp:639 +msgid "" +"Changing this color will only be effective when starting the next directory " +"comparison." +msgstr "Att ändra färgen fÃ¥r bara effekt när nästa katalogjämförelse startas." + +#: optiondialog.cpp:644 +msgid "Oldest file color:" +msgstr "Färg för äldsta fil:" + +#: optiondialog.cpp:651 +msgid "Middle age file color:" +msgstr "Färg för medelgammal fil:" + +#: optiondialog.cpp:658 +msgid "Color for missing files:" +msgstr "Färg för saknade filer:" + +#: optiondialog.cpp:670 +msgid "Editor" +msgstr "Editor" + +#: optiondialog.cpp:670 +msgid "Editor Behavior" +msgstr "Editorbeteende" + +#: optiondialog.cpp:680 +msgid "Tab inserts spaces" +msgstr "Tabulator infogar mellanslag" + +#: optiondialog.cpp:683 +msgid "" +"On: Pressing tab generates the appropriate number of spaces.\n" +"Off: A Tab-character will be inserted." +msgstr "" +"PÃ¥: Genom att trycka pÃ¥ tabulator, skapas lämpligt antal mellanslag.\n" +"Av: Ett tabulatortecken infogas." + +#: optiondialog.cpp:689 +msgid "Tab size:" +msgstr "Tabulatorbredd:" + +#: optiondialog.cpp:694 +msgid "Auto indentation" +msgstr "Automatisk indentering" + +#: optiondialog.cpp:697 +msgid "" +"On: The indentation of the previous line is used for a new line.\n" +msgstr "" +"PÃ¥: Indentering av föregÃ¥ende rad används för en ny rad.\n" + +#: optiondialog.cpp:701 +msgid "Auto copy selection" +msgstr "Kopiera automatiskt markering" + +#: optiondialog.cpp:704 +msgid "" +"On: Any selection is immediately written to the clipboard.\n" +"Off: You must explicitely copy e.g. via Ctrl-C." +msgstr "" +"PÃ¥: Alla markeringar skrivs omedelbart till klippbordet.\n" +"Av: Du mÃ¥ste kopiera explicit, t.ex. via Ctrl-C." + +#: optiondialog.cpp:709 +msgid "Line end style:" +msgstr "Radslutstil:" + +#: optiondialog.cpp:721 +msgid "" +"Sets the line endings for when an edited file is saved.\n" +"DOS/Windows: CR+LF; UNIX: LF; with CR=0D, LF=0A" +msgstr "" +"Anger radsluten när en redigerad fil sparas.\n" +"DOS/Windows: CR+LF, Unix: LF, med CR=0D och LF=0A" + +#: optiondialog.cpp:732 +msgid "Diff" +msgstr "Jämför" + +#: optiondialog.cpp:732 +msgid "Diff Settings" +msgstr "Inställningar av jämför" + +#: optiondialog.cpp:743 +msgid "Preserve carriage return" +msgstr "BehÃ¥ll returtecken" + +#: optiondialog.cpp:746 +msgid "" +"Show carriage return characters '\\r' if they exist.\n" +"Helps to compare files that were modified under different operating systems." +msgstr "" +"Visa returtecken '\\r' om de finns.\n" +"Hjälper till att jämföra filer som ändrats med olika operativsystem." + +#: optiondialog.cpp:751 +msgid "Ignore numbers" +msgstr "Ignorera siffror" + +#: optiondialog.cpp:754 +msgid "" +"Ignore number characters during line matching phase. (Similar to Ignore white " +"space.)\n" +"Might help to compare files with numeric data." +msgstr "" +"Ignorera siffror när rader matchas. (Liknar ignorera blanktecken.)\n" +"Kan hjälpa till att jämföra filer med numerisk data." + +#: optiondialog.cpp:759 +msgid "Ignore C/C++ comments" +msgstr "Ignorera C/C++ kommentarer" + +#: optiondialog.cpp:761 +msgid "Treat C/C++ comments like white space." +msgstr "Behandla C/C++ kommentarer som blanktecken." + +#: optiondialog.cpp:765 +msgid "Ignore case" +msgstr "Ignorera skiftläge" + +#: optiondialog.cpp:768 +msgid "Treat case differences like white space changes. ('a'<=>'A')" +msgstr "Behandla skiftlägesskillnader som blankteckenskillnader. ('a' <=> 'A')" + +#: optiondialog.cpp:772 +msgid "Preprocessor command:" +msgstr "Preprocessorkommando:" + +#: optiondialog.cpp:776 +msgid "User defined pre-processing. (See the docs for details.)" +msgstr "" +"Användardefinierad förbehandling (Se dokumentationen för detaljinformation.)" + +#: optiondialog.cpp:779 +msgid "Line-matching preprocessor command:" +msgstr "Preprocessorkommando för radmatchning:" + +#: optiondialog.cpp:783 +msgid "" +"This pre-processor is only used during line matching.\n" +"(See the docs for details.)" +msgstr "" +"Den här preprocessorn används bara under radmatchning.\n" +"(Se dokumentationen för detaljinformation.)" + +#: optiondialog.cpp:786 +msgid "Try hard (slower)" +msgstr "Var noggrann (lÃ¥ngsammare)" + +#: optiondialog.cpp:789 +msgid "" +"Enables the --minimal option for the external diff.\n" +"The analysis of big files will be much slower." +msgstr "" +"Aktiverar väljaren --minimal för det externa verktyget diff.\n" +"Analys av stora filer blir mycket lÃ¥ngsammare." + +#: optiondialog.cpp:794 +msgid "Auto advance delay (ms):" +msgstr "Fördröjning vid automatisk fortsättning (ms):" + +#: optiondialog.cpp:799 +msgid "" +"When in Auto-Advance mode the result of the current selection is shown \n" +"for the specified time, before jumping to the next conflict. Range: 0-2000 ms" +msgstr "" +"Vid läget automatisk fortsättning, visas resultatet av aktuell markering\n" +"under den angivna tiden, innan det gÃ¥r vidare till nästa konflikt. Intervall: " +"0-2000 ms." + +#: optiondialog.cpp:809 +msgid "Merge Settings" +msgstr "Inställningar av sammanfoga" + +#: optiondialog.cpp:822 +msgid "White space 2-file merge default:" +msgstr "Standardvärde för sammanfogning av blanktecken med tvÃ¥ filer:" + +#: optiondialog.cpp:826 optiondialog.cpp:839 +msgid "Manual Choice" +msgstr "Manuellt val" + +#: optiondialog.cpp:830 optiondialog.cpp:844 +msgid "" +"Allow the merge algorithm to automatically select an input for white-space-only " +"changes." +msgstr "" +"TillÃ¥t att sammanfogningsalgoritmen automatiskt väljer indata för ändringar av " +"bara blanktecken." + +#: optiondialog.cpp:835 +msgid "White space 3-file merge default:" +msgstr "Standardvärde för sammanfogning av blanktecken med tre filer:" + +#: optiondialog.cpp:849 +msgid "Automatic Merge Regular Expression" +msgstr "Automatisk sammanfogning med reguljärt uttryck" + +#: optiondialog.cpp:858 smalldialogs.cpp:397 +msgid "Auto merge regular expression:" +msgstr "Reguljärt uttryck för automatisk sammanfogning:" + +#: optiondialog.cpp:862 +msgid "" +"Regular expression for lines where KDiff3 should automatically choose one " +"source.\n" +"When a line with a conflict matches the regular expression then\n" +"- if available - C, otherwise B will be chosen." +msgstr "" +"Reguljärt uttryck för rader där Kdiff3 automatiskt ska välja en källa.\n" +"När en rad med en konflikt matchar det reguljära uttrycket väljes -C\n" +"om tillgängligt, annars väljes B." + +#: optiondialog.cpp:868 +msgid "Run regular expression auto merge on merge start" +msgstr "" +"Kör automatisk sammanfogning med reguljärt uttryck när sammanfogning startar" + +#: optiondialog.cpp:870 +msgid "" +"Run the merge for auto merge regular expressions\n" +"immediately when a merge starts.\n" +msgstr "" +"Kör automatisk sammanfogning med reguljärt\n" +"uttryck omedelbart när en sammanfogning startar.\n" + +#: optiondialog.cpp:875 +msgid "Version Control History Merging" +msgstr "Sammanfogning enligt versionshanteringshistorik" + +#: optiondialog.cpp:884 smalldialogs.cpp:424 +msgid "History start regular expression:" +msgstr "Reguljärt uttryck för historikens början:" + +#: optiondialog.cpp:888 +msgid "" +"Regular expression for the start of the version control history entry.\n" +"Usually this line contains the \"$Log$\"-keyword.\n" +"Default value: \".*\\$Log.*\\$.*\"" +msgstr "" +"Reguljärt uttryck för början av versionshanteringens historikpost.\n" +"Oftast innehÃ¥ller raden nyckelordet \"$Log$\".\n" +"Standardvärde: \".*\\$Log.*\\$.*\"" + +#: optiondialog.cpp:894 smalldialogs.cpp:453 +msgid "History entry start regular expression:" +msgstr "Reguljärt uttryck för historikpostens början:" + +#: optiondialog.cpp:906 +msgid "" +"A version control history entry consists of several lines.\n" +"Specify the regular expression to detect the first line (without the leading " +"comment).\n" +"Use parentheses to group the keys you want to use for sorting.\n" +"If left empty, then KDiff3 assumes that empty lines separate history entries.\n" +"See the documentation for details." +msgstr "" +"En av versionshanteringens historikposter bestÃ¥r av flera rader.\n" +"Ange det reguljära uttrycket för att detektera första raden (utan den inledande " +"kommentaren).\n" +"Använd parenteser för att gruppera nycklarna du vill använda för sortering.\n" +"Om det lämnas tomt, antar Kdiff3 att tomma rader skiljer historikposterna Ã¥t.\n" +"Se dokumentationen för detaljinformation." + +#: optiondialog.cpp:914 +msgid "History merge sorting" +msgstr "Sortering av historiksammanfogning" + +#: optiondialog.cpp:916 +msgid "Sort version control history by a key." +msgstr "Sortera versionshanteringshistoriken med en nyckel." + +#: optiondialog.cpp:926 +msgid "History entry start sort key order:" +msgstr "Sorteringsnycklarnas ordning frÃ¥n historikpostens början:" + +#: optiondialog.cpp:930 +msgid "" +"Each parentheses used in the regular expression for the history start entry\n" +"groups a key that can be used for sorting.\n" +"Specify the list of keys (that are numbered in order of occurrence\n" +"starting with 1) using ',' as separator (e.g. \"4,5,6,1,2,3,7\").\n" +"If left empty, then no sorting will be done.\n" +"See the documentation for details." +msgstr "" +"Varje parentes som används i det reguljära uttrycket för historikpostens " +"början\n" +"grupperar en nyckel som kan användas för sortering.\n" +"Ange listan med nycklar (som numreras i den ordning de förekommer med\n" +"början pÃ¥ 1), med användning av ',' som skiljetecken (t.ex. " +"\"4,5,6,1,2,3,7\").\n" +"Om det lämnas tomt, görs ingen sortering.\n" +"Se dokumentationen för detaljinformation." + +#: optiondialog.cpp:941 +msgid "Merge version control history on merge start" +msgstr "" +"Sammanfogning enligt versionshanteringshistorik när sammanfogning startar" + +#: optiondialog.cpp:943 +msgid "Run version control history automerge on merge start." +msgstr "" +"Kör automatisk sammanfogning enligt versionshanteringshistorik när " +"sammanfogning startar." + +#: optiondialog.cpp:947 +msgid "Test your regular expressions" +msgstr "Prova dina reguljära uttryck" + +#: optiondialog.cpp:952 +msgid "Irrelevant merge command:" +msgstr "Ej relevant sammanfogningskommando:" + +#: optiondialog.cpp:956 +msgid "" +"If specified this script is run after automerge\n" +"when no other relevant changes were detected.\n" +"Called with the parameters: filename1 filename2 filename3" +msgstr "" +"Om angivet körs det här skriptet efter automatisk sammanfogning\n" +"när inga andra relevanta ändringar detekterades.\n" +"Anropas med parametrarna: filnamn1 filnamn2 filnamn3" + +#: optiondialog.cpp:966 +msgid "Directory Merge" +msgstr "Katalogsammanfogning" + +#: optiondialog.cpp:975 +msgid "Recursive directories" +msgstr "Rekursiva kataloger" + +#: optiondialog.cpp:977 +msgid "Whether to analyze subdirectories or not." +msgstr "Om underkataloger ska analyseras eller inte." + +#: optiondialog.cpp:979 +msgid "File pattern(s):" +msgstr "Mönster för filer:" + +#: optiondialog.cpp:984 +msgid "" +"Pattern(s) of files to be analyzed. \n" +"Wildcards: '*' and '?'\n" +"Several Patterns can be specified by using the separator: ';'" +msgstr "" +"Mönster för filer som ska analyseras.\n" +"Jokertecken: '*' och '?'\n" +"Flera mönster kan anges genom att använda skiljetecknet ';'" + +#: optiondialog.cpp:990 +msgid "File-anti-pattern(s):" +msgstr "Undantagsmönster för filer:" + +#: optiondialog.cpp:995 +msgid "" +"Pattern(s) of files to be excluded from analysis. \n" +"Wildcards: '*' and '?'\n" +"Several Patterns can be specified by using the separator: ';'" +msgstr "" +"Mönster för filer som ska undantas frÃ¥n analys.\n" +"Jokertecken: '*' och '?'\n" +"Flera mönster kan anges genom att använda skiljetecknet ';'" + +#: optiondialog.cpp:1001 +msgid "Dir-anti-pattern(s):" +msgstr "Undantagsmönster för kataloger:" + +#: optiondialog.cpp:1006 +msgid "" +"Pattern(s) of directories to be excluded from analysis. \n" +"Wildcards: '*' and '?'\n" +"Several Patterns can be specified by using the separator: ';'" +msgstr "" +"Mönster för kataloger som ska undantas frÃ¥n analys.\n" +"Jokertecken: '*' och '?'\n" +"Flera mönster kan anges genom att använda skiljetecknet ';'" + +#: optiondialog.cpp:1012 +msgid "Use .cvsignore" +msgstr "Använd .cvsignore" + +#: optiondialog.cpp:1015 +msgid "" +"Extends the antipattern to anything that would be ignored by CVS.\n" +"Via local \".cvsignore\"-files this can be directory specific." +msgstr "" +"Utökar undantagsmönster med allt som skulle ignoreras av CVS.\n" +"Med lokala \".cvsignore\" filer, kan det här vara katalogspecifikt." + +#: optiondialog.cpp:1020 +msgid "Find hidden files and directories" +msgstr "Sök efter gömda filer och kataloger" + +#: optiondialog.cpp:1023 +msgid "Finds files and directories with the hidden attribute." +msgstr "Söker efter filer och kataloger med egenskapen gömd." + +#: optiondialog.cpp:1025 +msgid "Finds files and directories starting with '.'." +msgstr "Söker efter filer och kataloger som börjar med '.'." + +#: optiondialog.cpp:1029 +msgid "Follow file links" +msgstr "Följ fillänkar" + +#: optiondialog.cpp:1032 +msgid "" +"On: Compare the file the link points to.\n" +"Off: Compare the links." +msgstr "" +"PÃ¥: Jämför filen som länken pekar pÃ¥.\n" +"Av: Jämför länkarna." + +#: optiondialog.cpp:1037 +msgid "Follow directory links" +msgstr "Följ kataloglänkar" + +#: optiondialog.cpp:1040 +msgid "" +"On: Compare the directory the link points to.\n" +"Off: Compare the links." +msgstr "" +"PÃ¥: Jämför katalogen som länken pekar pÃ¥.\n" +"Av: Jämför länkarna." + +#: optiondialog.cpp:1056 +msgid "Case sensitive filename comparison" +msgstr "Skiftlägeskänslig filnamnsjämförelse" + +#: optiondialog.cpp:1059 +msgid "" +"The directory comparison will compare files or directories when their names " +"match.\n" +"Set this option if the case of the names must match. (Default for Windows is " +"off, otherwise on.)" +msgstr "" +"Katalogjämförelsen jämför filer eller kataloger när deras namn matchar.\n" +"Ange alternativet om namnens skiftläge mÃ¥ste matcha. (Normalvärdet för Windows " +"är av, annars pÃ¥.)" + +#: optiondialog.cpp:1063 +msgid "File Comparison Mode" +msgstr "Filjämförelseläge" + +#: optiondialog.cpp:1067 +msgid "Binary comparison" +msgstr "Binär jämförelse" + +#: optiondialog.cpp:1068 +msgid "Binary comparison of each file. (Default)" +msgstr "Binär jämförelse av varje fil. (Standardvärde)" + +#: optiondialog.cpp:1070 +msgid "Full analysis" +msgstr "Fullständig analys" + +#: optiondialog.cpp:1071 +msgid "" +"Do a full analysis and show statistics information in extra columns.\n" +"(Slower than a binary comparison, much slower for binary files.)" +msgstr "" +"Gör en fullständig analys och visa statistisk information i extra kolumner.\n" +"(LÃ¥ngsammare än binär jämförelse, mycket lÃ¥ngsammare för binärfiler.)" + +#: optiondialog.cpp:1074 +msgid "Trust the modification date (unsafe)" +msgstr "Lita pÃ¥ ändringsdatum (inte säkert)" + +#: optiondialog.cpp:1075 +msgid "" +"Assume that files are equal if the modification date and file length are " +"equal.\n" +"Useful for big directories or slow networks." +msgstr "" +"Antar att filer är lika om ändringsdatum och fillängden är lika.\n" +"Användbar för stora kataloger eller lÃ¥ngsamma nätverk." + +#: optiondialog.cpp:1078 +msgid "Trust the size (unsafe)" +msgstr "Lita pÃ¥ storleken (inte säkert)" + +#: optiondialog.cpp:1079 +msgid "" +"Assume that files are equal if their file lengths are equal.\n" +"Useful for big directories or slow networks when the date is modified during " +"download." +msgstr "" +"Antar att filer är lika om deras fillängder är lika.\n" +"Användbar för stora kataloger eller lÃ¥ngsamma nätverk när datum ändras under " +"nerladdning." + +#: optiondialog.cpp:1083 +msgid "Synchronize directories" +msgstr "Synkronisera kataloger" + +#: optiondialog.cpp:1086 +msgid "" +"Offers to store files in both directories so that\n" +"both directories are the same afterwards.\n" +"Works only when comparing two directories without specifying a destination." +msgstr "" +"Erbjuder att lagra filer i bÃ¥da katalogerna, sÃ¥ att bÃ¥da\n" +"blir likadana efterÃ¥t. Fungerar bara när tvÃ¥ kataloger\n" +"jämförs och ingen mÃ¥lkatalog anges." + +#: optiondialog.cpp:1092 +msgid "White space differences considered equal" +msgstr "Skillnader i blanktecken anses lika" + +#: optiondialog.cpp:1095 +msgid "" +"If files differ only by white space consider them equal.\n" +"This is only active when full analysis is chosen." +msgstr "" +"Om filer bara skiljer sig med blanktecken, anse dem lika.\n" +"Det här är bara aktiverat när fullständig analys väljes." + +#: optiondialog.cpp:1101 +msgid "Copy newer instead of merging (unsafe)" +msgstr "Kopiera nyare istället för att sammanfoga (inte säkert)" + +#: optiondialog.cpp:1104 +msgid "" +"Don't look inside, just take the newer file.\n" +"(Use this only if you know what you are doing!)\n" +"Only effective when comparing two directories." +msgstr "" +"Titta inte i filen, utan använd bara den nyaste filen.\n" +"(Använd bara det här om du vet vad du gör!)\n" +"Har bara nÃ¥gon effekt när tvÃ¥ kataloger jämförs." + +#: optiondialog.cpp:1109 +msgid "Backup files (.orig)" +msgstr "Säkerhetskopior (.orig)" + +#: optiondialog.cpp:1112 +msgid "" +"When a file would be saved over an old file, then the old file\n" +"will be renamed with a '.orig'-extension instead of being deleted." +msgstr "" +"När en fil skulle sparas och en gammal fil redan finns, kommer den\n" +"gamla filen att döpas om med filändelsen '.orig' istället för att tas bort." + +#: optiondialog.cpp:1176 +msgid "Regional Settings" +msgstr "Regionsinställningar" + +#: optiondialog.cpp:1272 +msgid "Language (restart required)" +msgstr "SprÃ¥k (omstart krävs)" + +#: optiondialog.cpp:1304 +msgid "" +"Choose the language of the GUI-strings or \"Auto\".\n" +"For a change of language to take place, quit and restart KDiff3." +msgstr "" +"Välj sprÃ¥k för strängarna i det grafiska gränssnittet eller \"Automatisk\".\n" +"För att sprÃ¥kbytet ska ske, avsluta och starta om Kdiff3." + +#: optiondialog.cpp:1322 +msgid "Use the same encoding for everything:" +msgstr "Använd samma kodning för allt:" + +#: optiondialog.cpp:1325 +msgid "" +"Enable this allows to change all encodings by changing the first only.\n" +"Disable this if different individual settings are needed." +msgstr "" +"Att aktivera det här lÃ¥ter dig ändra alla kodningar genom att bara ändra den " +"första.\n" +"Inaktivera det om olika individuella inställningar behövs." + +#: optiondialog.cpp:1330 +msgid "Note: Local Encoding is " +msgstr "Observera: Lokal kodning är " + +#: optiondialog.cpp:1334 +msgid "File Encoding for A:" +msgstr "Filkodning för A:" + +#: optiondialog.cpp:1340 +msgid "" +"If enabled then Unicode (UTF-16 or UTF-8) encoding will be detected.\n" +"If the file encoding is not detected then the selected encoding will be used as " +"fallback.\n" +"(Unicode detection depends on the first bytes of a file - the byte order mark " +"\"BOM\".)" +msgstr "" +"Om aktiverad detekteras Unicode-kodning (UTF-16 eller UTF-8).\n" +"Om filens kodning inte kan detekteras, används den valda kodningen som reserv.\n" +"(Detektering av Unicode beror pÃ¥ den första byten i en fil - " +"byteordningsmarkören \"BOM\".)" + +#: optiondialog.cpp:1344 optiondialog.cpp:1353 optiondialog.cpp:1362 +msgid "Auto Detect Unicode" +msgstr "Detektera automatiskt Unicode" + +#: optiondialog.cpp:1349 +msgid "File Encoding for B:" +msgstr "Filkodning för B:" + +#: optiondialog.cpp:1358 +msgid "File Encoding for C:" +msgstr "Filkodning för C:" + +#: optiondialog.cpp:1367 +msgid "File Encoding for Merge Output and Saving:" +msgstr "Filkodning för sammanfogad utdata och vid spara:" + +#: optiondialog.cpp:1371 +msgid "Auto Select" +msgstr "Automatiskt markering" + +#: optiondialog.cpp:1374 +msgid "" +"If enabled then the encoding from the input files is used.\n" +"In ambiguous cases a dialog will ask the user to choose the encoding for " +"saving." +msgstr "" +"Om aktiverad används indatafilernas kodning.\n" +"I tvetydiga fall ombedes användaren att välja kodning för att spara med en " +"dialogruta." + +#: optiondialog.cpp:1378 +msgid "File Encoding for Preprocessor Files:" +msgstr "Filkodning för preprocessorfiler:" + +#: optiondialog.cpp:1389 +msgid "Right To Left Language" +msgstr "SprÃ¥k som läses frÃ¥n höger till vänster" + +#: optiondialog.cpp:1392 +msgid "" +"Some languages are read from right to left.\n" +"This setting will change the viewer and editor accordingly." +msgstr "" +"Vissa sprÃ¥k läses frÃ¥n höger till vänster.\n" +"Inställningen ändrar visningen och editorn pÃ¥ motsvarande sätt." + +#: optiondialog.cpp:1402 +msgid "Integration" +msgstr "Integrering" + +#: optiondialog.cpp:1402 +msgid "Integration Settings" +msgstr "Integreringsinställningar" + +#: optiondialog.cpp:1412 +msgid "Command line options to ignore:" +msgstr "Kommandoradsväljare att ignorera:" + +#: optiondialog.cpp:1417 +msgid "" +"List of command line options that should be ignored when KDiff3 is used by " +"other tools.\n" +"Several values can be specified if separated via ';'\n" +"This will suppress the \"Unknown option\"-error." +msgstr "" +"Lista med kommandoradsväljare som ska ignoreras när Kdiff3 används av andra " +"verktyg.\n" +"Flera värden kan anges om de Ã¥tskiljs av ';'\n" +"Detta undertrycker felmeddelandet \"Okänd väljare\"." + +#: optiondialog.cpp:1480 +msgid "" +"You selected a variable width font.\n" +"\n" +"Because this program doesn't handle variable width fonts\n" +"correctly, you might experience problems while editing.\n" +"\n" +"Do you want to continue or do you want to select another font." +msgstr "" +"Du valde ett teckensnitt med variabel bredd.\n" +"\n" +"Eftersom programmet inte hanterar teckensnitt med variabel bredd\n" +"pÃ¥ ett riktigt sätt, kan du rÃ¥ka ut för problem vid redigering.\n" +"\n" +"Vill du fortsätta, eller vill du välja ett annat teckensnitt?" + +#: optiondialog.cpp:1484 +msgid "Incompatible Font" +msgstr "Olämpligt teckensnitt" + +#: optiondialog.cpp:1485 +msgid "Continue at Own Risk" +msgstr "Fortsätt pÃ¥ egen risk" + +#: optiondialog.cpp:1485 +msgid "Select Another Font" +msgstr "Välj ett annat teckensnitt" + +#: optiondialog.cpp:1521 +msgid "This resets all options. Not only those of the current topic." +msgstr "Det här Ã¥terställer alla alternativ, inte bara de i nuvarande ämne." + +#: pdiff.cpp:258 +msgid "PreprocessorCmd: " +msgstr "Preprocessorkommando: " + +#: pdiff.cpp:263 +msgid "" +"The following option(s) you selected might change data:\n" +msgstr "" +"Följande alternativ du valde kan ändra data:\n" + +#: pdiff.cpp:264 +msgid "" +"\n" +"Most likely this is not wanted during a merge.\n" +"Do you want to disable these settings or continue with these settings active?" +msgstr "" +"\n" +"Troligen är det inte önskvärt under en sammanfogning.\n" +"Vill du inaktivera inställningarna eller fortsätta med inställningarna aktiva?" + +#: pdiff.cpp:266 +msgid "Option Unsafe for Merging" +msgstr "Alternativ osäkert vid sammanfogning" + +#: pdiff.cpp:267 +msgid "Use These Options During Merge" +msgstr "Använd alternativen under sammanfogningen" + +#: pdiff.cpp:267 +msgid "Disable Unsafe Options" +msgstr "Inaktivera osäkra alternativ" + +#: pdiff.cpp:297 +msgid "Loading A" +msgstr "Laddar A" + +#: pdiff.cpp:301 +msgid "Loading B" +msgstr "Laddar B" + +#: pdiff.cpp:318 pdiff.cpp:344 +msgid "Diff: A <-> B" +msgstr "Jämförelse: A <-> B" + +#: pdiff.cpp:324 pdiff.cpp:366 +msgid "Linediff: A <-> B" +msgstr "Radjämförelse: A <-> B" + +#: pdiff.cpp:335 +msgid "Loading C" +msgstr "Laddar C" + +#: pdiff.cpp:347 +msgid "Diff: B <-> C" +msgstr "Jämförelse: B <-> C" + +#: pdiff.cpp:350 +msgid "Diff: A <-> C" +msgstr "Jämförelse: A <-> C" + +#: pdiff.cpp:369 +msgid "Linediff: B <-> C" +msgstr "Radjämförelse: B <-> C" + +#: pdiff.cpp:372 +msgid "Linediff: A <-> C" +msgstr "Radjämförelse: A <-> C" + +#: pdiff.cpp:513 +msgid "All input files contain the same text, but are not binary equal." +msgstr "Alla indatafiler innehÃ¥ller samma text, men är inte binärt likadana." + +#: pdiff.cpp:515 pdiff.cpp:517 pdiff.cpp:519 +msgid "" +"Files %1 and %2 are binary equal.\n" +msgstr "" +"Filerna %1 och %2 är binärt likadana.\n" + +#: pdiff.cpp:516 pdiff.cpp:518 pdiff.cpp:520 +msgid "" +"Files %1 and %2 have equal text, but are not binary equal. \n" +msgstr "" +"Filerna %1 och %2 har samma text, men är inte binärt likadana.\n" + +#: pdiff.cpp:530 +msgid "" +"Some inputfiles don't seem to be pure textfiles.\n" +"Note that the KDiff3-merge was not meant for binary data.\n" +"Continue at your own risk." +msgstr "" +"Vissa indatafiler verkar inte vara rena textfiler.\n" +"Observera att Kdiff3:s sammanfogning inte är avsedd för binärdata.\n" +"Fortsätt pÃ¥ egen risk." + +#: pdiff.cpp:979 +msgid "Abort" +msgstr "Avbryt" + +#: pdiff.cpp:985 pdiff.cpp:1073 +msgid "Opening files..." +msgstr "Öppnar filer..." + +#: pdiff.cpp:1050 pdiff.cpp:1121 +msgid "File open error" +msgstr "Fel när filen öppnades" + +#: pdiff.cpp:1153 +msgid "Cutting selection..." +msgstr "Klipper ut markering..." + +#: pdiff.cpp:1174 +msgid "Copying selection to clipboard..." +msgstr "Kopierar markering till klippbord..." + +#: pdiff.cpp:1190 +msgid "Inserting clipboard contents..." +msgstr "Infogar klippbordets innehÃ¥ll..." + +#: pdiff.cpp:1713 +msgid "Save && Continue" +msgstr "Spara och fortsätt" + +#: pdiff.cpp:1713 +msgid "Continue Without Saving" +msgstr "Fortsätt utan att spara" + +#: pdiff.cpp:1920 +msgid "Search complete." +msgstr "Sökning färdig." + +#: pdiff.cpp:1920 +msgid "Search Complete" +msgstr "Sökning färdig" + +#: pdiff.cpp:2144 +msgid "Nothing is selected in either diff input window." +msgstr "Ingenting är markerad i nÃ¥got indatafönster med jämförelse." + +#: pdiff.cpp:2144 +msgid "Error while adding manual diff range" +msgstr "Fel vid tillägg av manuellt jämförelseintervall" + +#. i18n: file kdiff3_part.rc line 4 +#: rc.cpp:3 +#, no-c-format +msgid "&KDiff3" +msgstr "&Kdiff3" + +#. i18n: file kdiff3_part.rc line 13 +#: rc.cpp:6 +#, no-c-format +msgid "Configure KDiff3" +msgstr "Anpassa Kdiff3" + +#. i18n: file kdiff3_shell.rc line 7 +#: rc.cpp:15 +#, no-c-format +msgid "&Directory" +msgstr "&Katalog" + +#. i18n: file kdiff3_shell.rc line 30 +#: rc.cpp:18 +#, no-c-format +msgid "Current Item Merge Operation" +msgstr "SammanfogningsÃ¥tgärd för aktuellt objekt" + +#. i18n: file kdiff3_shell.rc line 38 +#: rc.cpp:21 +#, no-c-format +msgid "Current Item Sync Operation" +msgstr "SynkroniseringsÃ¥tgärd för aktuellt objekt" + +#. i18n: file kdiff3_shell.rc line 50 +#: rc.cpp:24 +#, no-c-format +msgid "&Movement" +msgstr "&Förflyttning" + +#. i18n: file kdiff3_shell.rc line 61 +#: rc.cpp:27 +#, no-c-format +msgid "D&iffview" +msgstr "&Jämförelsevy" + +#. i18n: file kdiff3_shell.rc line 73 +#: rc.cpp:30 +#, no-c-format +msgid "&Merge" +msgstr "Sa&mmanfoga" + +#. i18n: file kdiff3_shell.rc line 95 +#: rc.cpp:33 +#, no-c-format +msgid "&Window" +msgstr "Fö&nster" + +#: smalldialogs.cpp:53 +msgid "A (Base):" +msgstr "A (bas):" + +#: smalldialogs.cpp:59 smalldialogs.cpp:75 smalldialogs.cpp:91 +#: smalldialogs.cpp:134 +msgid "File..." +msgstr "Fil..." + +#: smalldialogs.cpp:61 smalldialogs.cpp:77 smalldialogs.cpp:93 +#: smalldialogs.cpp:136 +msgid "Dir..." +msgstr "Katalog..." + +#: smalldialogs.cpp:86 +msgid "C (Optional):" +msgstr "C (valfri):" + +#: smalldialogs.cpp:108 +msgid "Swap/Copy Names ..." +msgstr "Byt eller kopiera namn..." + +#: smalldialogs.cpp:114 smalldialogs.cpp:115 smalldialogs.cpp:116 +msgid "Swap %1<->%2" +msgstr "Byt ut %1 mot %2" + +#: smalldialogs.cpp:117 smalldialogs.cpp:118 smalldialogs.cpp:119 +msgid "Copy %1->Output" +msgstr "Kopiera %1 till utdata" + +#: smalldialogs.cpp:120 smalldialogs.cpp:121 smalldialogs.cpp:122 +msgid "Swap %1<->Output" +msgstr "Byt %1 mot utmatning" + +#: smalldialogs.cpp:129 +msgid "Output (optional):" +msgstr "Utmatning (valfri):" + +#: smalldialogs.cpp:158 +msgid "Configure..." +msgstr "Anpassa..." + +#: smalldialogs.cpp:347 +msgid "Search text:" +msgstr "Söktext:" + +#: smalldialogs.cpp:354 +msgid "Case sensitive" +msgstr "Skiftlägeskänslig" + +#: smalldialogs.cpp:357 +msgid "Search A" +msgstr "Sök A" + +#: smalldialogs.cpp:362 +msgid "Search B" +msgstr "Sök B" + +#: smalldialogs.cpp:367 +msgid "Search C" +msgstr "Sök C" + +#: smalldialogs.cpp:372 +msgid "Search output" +msgstr "Sökutmatning" + +#: smalldialogs.cpp:377 +msgid "&Search" +msgstr "&Sök" + +#: smalldialogs.cpp:394 +msgid "Regular Expression Tester" +msgstr "Test av reguljära uttryck" + +#: smalldialogs.cpp:405 +msgid "Example auto merge line:" +msgstr "Exempel pÃ¥ rad för automatisk sammanfogning:" + +#: smalldialogs.cpp:407 +msgid "For auto merge test copy a line as used in your files." +msgstr "" +"För att prova automatisk sammanfogning, kopiera en rad som används i dina " +"filer." + +#: smalldialogs.cpp:413 smalldialogs.cpp:442 smalldialogs.cpp:479 +msgid "Match result:" +msgstr "Matchningsresultat:" + +#: smalldialogs.cpp:432 +msgid "Example history start line (with leading comment):" +msgstr "Exempel pÃ¥ startrad för historik (med inledande kommentar):" + +#: smalldialogs.cpp:435 +msgid "" +"Copy a history start line as used in your files,\n" +"including the leading comment." +msgstr "" +"Kopiera en startrad för historik som används i dina filer,\n" +"inklusive den inledande kommentaren." + +#: smalldialogs.cpp:461 +msgid "History sort key order:" +msgstr "Sorteringsnyckelordning för historik:" + +#: smalldialogs.cpp:469 +msgid "Example history entry start line (without leading comment):" +msgstr "Exempel pÃ¥ startrad för en historikpost (utan inledande kommentar):" + +#: smalldialogs.cpp:471 +msgid "" +"Copy a history entry start line as used in your files,\n" +"but omit the leading comment." +msgstr "" +"Kopiera en startrad för en historikpost som används i dina filer,\n" +"men utelämna den inledande kommentaren." + +#: smalldialogs.cpp:486 +msgid "Sort key result:" +msgstr "Sorteringsnyckelresultat:" + +#: smalldialogs.cpp:537 smalldialogs.cpp:547 smalldialogs.cpp:568 +msgid "Match success." +msgstr "Matchning lyckades." + +#: smalldialogs.cpp:541 smalldialogs.cpp:551 smalldialogs.cpp:574 +msgid "Match failed." +msgstr "Matchning misslyckades." + +#: smalldialogs.cpp:559 +msgid "Opening and closing parentheses don't match in regular expression." +msgstr "Inledande och avslutande parenteser matchar inte i reguljärt uttryck." diff --git a/po/ta.po b/po/ta.po new file mode 100644 index 0000000..d7b23f9 --- /dev/null +++ b/po/ta.po @@ -0,0 +1,2586 @@ +# translation of kdiff3.po to +# translation of kdiff3.po to +# translation of kdiff3.po to +# translation of kdiff3.po to Tamil +# Copyright (C) 2004 Free Software Foundation, Inc. +# , 2004. +# , 2004. +# , 2004. +# , 2004. +# , 2004. +# , 2004. +# , 2004. +# , 2004. +# , 2004. +# , 2004. +# , 2004. +# , 2004. +# , 2004. +# , 2004. +# , 2004. +# Ambalam , 2004. +# root , 2004. +# +msgid "" +msgstr "" +"Project-Id-Version: kdiff3\n" +"POT-Creation-Date: 2006-11-05 08:45+0100\n" +"PO-Revision-Date: 2004-08-24 04:28+0530\n" +"Last-Translator: I. Felix \n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: _translatorinfo.cpp:1 +msgid "" +"_: NAME OF TRANSLATORS\n" +"Your names" +msgstr "prem" + +#: _translatorinfo.cpp:3 +msgid "" +"_: EMAIL OF TRANSLATORS\n" +"Your emails" +msgstr "prem4ever_1983@yahoo.com" + +#: diff.cpp:246 +msgid "Writing clipboard data to temp file failed." +msgstr "கà¯à®³à®¿à®ªà¯à®ªà¯‹à®°à¯à®Ÿà®¿à®©à¯ எழà¯à®¤à¯à®¤à®¿à®©à¯ தரதà¯à®¤à®¿à®²à¯ உளà¯à®³ டெமà¯à®ªà¯ கோபà¯à®ªà¯ தவறà¯." + +#: diff.cpp:250 +msgid "From Clipboard" +msgstr "கிளிப௠போரà¯à®Ÿà®¿à®²à®¿à®°à¯à®¨à¯à®¤à¯." + +#: diff.cpp:491 +msgid "" +"Preprocessing possibly failed. Check this command:\n" +"\n" +" %1\n" +"\n" +"The preprocessing command will be disabled now." +msgstr "" +"à®®à¯à®©à¯à®šà¯†à®¯à®²à®¿à®•à®³à¯ தவறà¯. கடà¯à®Ÿà®³à¯ˆà®¯à¯ˆ சரிபà¯à®ªà®¾à®°à¯:\n" +"\n" +" %1\n" +"\n" +"à®®à¯à®©à¯à®šà¯†à®¯à®²à®¿à®•à®³à¯ கடà¯à®Ÿà®³à¯ˆà®¯à¯ˆ இபà¯à®ªà¯Šà®´à¯à®¤à¯‡ à®®à¯à®Ÿà®•à¯à®•à¯," + +#: diff.cpp:526 +msgid "" +"The line-matching-preprocessing possibly failed. Check this command:\n" +"\n" +" %1\n" +"\n" +"The line-matching-preprocessing command will be disabled now." +msgstr "" +"à®®à¯à®©à¯à®šà¯†à®¯à®²à®¿à®•à®³à¯ தவறà¯. கடà¯à®Ÿà®³à¯ˆà®¯à¯ˆ சரிபà¯à®ªà®¾à®°à¯:\n" +"\n" +" %1\n" +"\n" +"வரிசெலà¯à®•à®³à®¿à®©à¯ கடà¯à®Ÿà®³à¯ˆà®¯à¯ˆ இபà¯à®ªà¯Šà®´à¯à®¤à¯‡ à®®à¯à®Ÿà®•à¯à®•à¯," + +#: diff.cpp:1631 diff.cpp:1645 +msgid "" +"Data loss error:\n" +"If it is reproducable please contact the author.\n" +msgstr "" +"தகவல௠தவறானதà¯.\n" +"மீணà¯à®Ÿà¯à®®à¯ உறà¯à®ªà®¤à¯à®¤à®¿à®¯à®¾à®©à®¾à®²à¯ ஆசிரியரை அணà¯à®•à®µà¯à®®à¯.\n" + +#: diff.cpp:1633 diff.cpp:1647 +msgid "Severe Internal Error" +msgstr "கடà¯à®®à¯ˆà®¯à®¾à®© உளà¯à®šà®¾à®°à¯à®¨à¯à®¤ தவறà¯." + +#: difftextwindow.cpp:1643 kdiff3.cpp:753 +#, fuzzy +msgid "Top line" +msgstr "மேல௠வரி %1." + +#: difftextwindow.cpp:1653 +msgid "End" +msgstr "à®®à¯à®Ÿà®¿à®µà¯" + +#: directorymergewindow.cpp:142 +msgid "Mix of links and normal files." +msgstr "இணைபà¯à®ªà¯à®•à®³à¯ மறà¯à®±à¯à®®à¯ கோபà¯à®ªà¯à®•à®³à¯ கலநà¯à®¤à¯ உளà¯à®³à®©." + +#: directorymergewindow.cpp:149 +msgid "Link: " +msgstr "இணைபà¯à®ªà¯." + +#: directorymergewindow.cpp:157 +msgid "Size. " +msgstr "அளவà¯." + +#: directorymergewindow.cpp:170 +msgid "Date & Size: " +msgstr "தேதி மறà¯à®±à¯à®®à¯ அளவà¯." + +#: directorymergewindow.cpp:179 directorymergewindow.cpp:185 +msgid "Creating temp copy of %1 failed." +msgstr "வாரà¯à®ªà¯à®ªà¯à®°à¯ படியெட௠உரà¯à®µà®¾à®•à¯à®•à¯à®µà®¤à¯ %1 இயலவிலà¯à®²à¯ˆ." + +#: directorymergewindow.cpp:196 directorymergewindow.cpp:204 +msgid "Opening %1 failed." +msgstr "திறபà¯à®ªà®¤à®±à¯à®•à¯ %1 இயலவிலà¯à®²à¯ˆ." + +#: directorymergewindow.cpp:208 +#, fuzzy +msgid "Comparing file..." +msgstr "கோபà¯à®ªà®¿à®©à¯ˆ ஒபà¯à®ªà®¿à®Ÿà¯à®•à®¿à®±à®¤à¯...." + +#: directorymergewindow.cpp:218 directorymergewindow.cpp:224 +#, c-format +msgid "Error reading from %1" +msgstr "%1னிலிரà¯à®¨à¯à®¤à¯ படிகà¯à®•à¯à®®à¯ பிழை" + +#: directorymergewindow.cpp:282 +msgid "Name" +msgstr "பெயரà¯." + +#: directorymergewindow.cpp:286 +msgid "Operation" +msgstr "இயகà¯à®•à®®à¯." + +#: directorymergewindow.cpp:287 +msgid "Status" +msgstr "நிலை." + +#: directorymergewindow.cpp:288 +msgid "Unsolved" +msgstr "Unsolved" + +#: directorymergewindow.cpp:289 +msgid "Solved" +msgstr "Solved" + +#: directorymergewindow.cpp:290 +msgid "Nonwhite" +msgstr "Nonwhite" + +#: directorymergewindow.cpp:291 +msgid "White" +msgstr "White" + +#: directorymergewindow.cpp:319 +msgid "" +"You are currently doing a directory merge. Are you sure, you want to abort the " +"merge and rescan the directory?" +msgstr "" +"நீஙà¯à®•à®³à¯ தறà¯à®ªà¯Šà®´à¯à®¤à¯ ஒனà¯à®±à®¾à®• சேரà¯à®•à¯à®•à®ªà¯à®ªà®Ÿà¯à®Ÿ அடைவை பயனà¯à®ªà®Ÿà¯à®¤à¯à®¤à®¿à®•à¯ கொணà¯à®Ÿà®¿à®°à¯à®•à¯à®•à®¿à®±à¯€à®°à¯à®•à®³à¯. " +"நீஙà¯à®•à®³à¯ நிசà¯à®šà®¯à®®à®¾à®• ஒனà¯à®±à¯ சேரà¯à®ªà¯à®ªà®¤à¯ˆ நிறà¯à®¤à¯à®¤à®¿à®µà®¿à®Ÿà¯à®Ÿà¯ அடைவை மறà¯à®µà®°à¯à®Ÿà®²à¯ˆ " +"விரà¯à®®à¯à®ªà¯à®•à®¿à®±à¯€à®°à¯à®•à®³à®¾?" + +#: directorymergewindow.cpp:320 directorymergewindow.cpp:2868 +msgid "Rescan" +msgstr "மறà¯à®µà®°à¯à®Ÿà®²à¯" + +#: directorymergewindow.cpp:320 kdiff3.cpp:603 pdiff.cpp:979 +msgid "Continue Merging" +msgstr "தொடரà¯à®¨à¯à®¤à¯ ஒனà¯à®±à®¾à®• சேரà¯." + +#: directorymergewindow.cpp:462 +msgid "Opening of directories failed:" +msgstr "அடைவ௠திறகà¯à®• இயலவிலà¯à®²à¯ˆ:" + +#: directorymergewindow.cpp:465 +msgid "" +"Dir A \"%1\" does not exist or is not a directory.\n" +msgstr "" +"அடைவ௠எ \"%1\" இலà¯à®²à¯ˆ அலà¯à®²à®¤à¯ அத௠ஒர௠அடைவ௠இலà¯à®²à¯ˆ.\n" + +#: directorymergewindow.cpp:468 +msgid "" +"Dir B \"%1\" does not exist or is not a directory.\n" +msgstr "" +"அடைவ௠B \"%1\" உபயோகதà¯à®¤à®¿à®²à¯ இலà¯à®²à¯ˆ (à®…) அத௠ஒர௠அடைவே அலà¯à®².\n" + +#: directorymergewindow.cpp:471 +msgid "" +"Dir C \"%1\" does not exist or is not a directory.\n" +msgstr "" +"அடைவ௠C \"%1\" உபயோகதà¯à®¤à®¿à®²à¯ இலà¯à®²à¯ˆ (à®…) அத௠ஒர௠அடைவே அலà¯à®².\n" + +#: directorymergewindow.cpp:473 +msgid "Directory Open Error" +msgstr "திறநà¯à®¤ தகவல௠தளம௠தவறà¯." + +#: directorymergewindow.cpp:481 +msgid "" +"The destination directory must not be the same as A or B when three directories " +"are merged.\n" +"Check again before continuing." +msgstr "" +"மூனà¯à®±à¯ அடைவà¯à®•à®³à¯ ஒனà¯à®±à¯ சேரà¯à®®à¯ பொழà¯à®¤à¯, சேரà¯à®®à¯ அடைவ௠A (à®…) B போனà¯à®±à¯ இரà¯à®•à¯à®•à®•à¯ " +"கூடாதà¯.\n" +"தொடரà¯à®µà®¤à®±à¯à®•à¯ à®®à¯à®©à¯ மீணà¯à®Ÿà¯à®®à¯ சரிபாரà¯à®•à¯à®•à®µà¯à®®à¯." + +#: directorymergewindow.cpp:483 +msgid "Parameter Warning" +msgstr "அளவà¯à®°à¯à®•à¯à®•à®³à¯ எசà¯à®šà®¿à®°à®¿à®•à¯ˆ." + +#: directorymergewindow.cpp:488 +#, fuzzy +msgid "Scanning directories..." +msgstr "Scanning directories ..." + +#: directorymergewindow.cpp:537 +msgid "Reading Directory A" +msgstr "தகவல௠தளம௠'à®'வை படிகà¯à®•à®µà¯à®®à¯." + +#: directorymergewindow.cpp:559 +msgid "Reading Directory B" +msgstr "தகவல௠தளம௠'பி'஠படிகà¯à®•à®µà¯à®®à¯." + +#: directorymergewindow.cpp:581 +msgid "Reading Directory C" +msgstr "தகவல௠தளம௠'சி'஠படிகà¯à®•à®µà¯à®®à¯." + +#: directorymergewindow.cpp:607 +msgid "Some subdirectories were not readable in" +msgstr "சில தà¯à®£à¯ˆ அடைவà¯à®•à®³à¯ˆ படிகà¯à®• இயலவிலà¯à®²à¯ˆ" + +#: directorymergewindow.cpp:612 +msgid "Check the permissions of the subdirectories." +msgstr "தà¯à®£à¯ˆ அடைவà¯à®•à®³à®¿à®©à¯ அனà¯à®®à®¤à®¿à®•à®³à¯ˆ சரிபாரà¯à®•à¯à®•à®µà¯à®®à¯." + +#: directorymergewindow.cpp:646 kdiff3.cpp:552 kdiff3.cpp:636 kdiff3.cpp:661 +#: kdiff3.cpp:934 kdiff3.cpp:955 pdiff.cpp:1059 pdiff.cpp:1131 pdiff.cpp:1169 +#: pdiff.cpp:1185 pdiff.cpp:1215 pdiff.cpp:1226 +msgid "Ready." +msgstr "தயாரà¯." + +#: directorymergewindow.cpp:660 +msgid "Directory Comparison Status" +msgstr "அடைவ௠ஒபà¯à®ªà®¿à®Ÿà¯à®®à¯ நிலை" + +#: directorymergewindow.cpp:661 +msgid "Number of subdirectories:" +msgstr "உப அடைவà¯à®•à®³à®¿à®©à¯ எணà¯à®£à®¿à®•à¯à®•à¯ˆ:" + +#: directorymergewindow.cpp:662 +msgid "Number of equal files:" +msgstr "சம கோபà¯à®ªà¯à®•à®³à®¿à®©à¯ எணà¯à®£à®¿à®•à¯à®•à¯ˆ:" + +#: directorymergewindow.cpp:663 +msgid "Number of different files:" +msgstr "வேற௠விதமான கோபà¯à®ªà¯à®•à®³à®¿à®©à¯ எணà¯à®£à®¿à®•à¯à®•à¯ˆ:" + +#: directorymergewindow.cpp:666 +msgid "Number of manual merges:" +msgstr "கைமà¯à®±à¯ˆ ஒனà¯à®±à¯ சேரà¯à®•à¯à®•à¯ˆà®¯à®¿à®©à¯ எணà¯à®£à®¿à®•à¯à®•à¯ˆ:" + +#: directorymergewindow.cpp:802 +msgid "This affects all merge operations." +msgstr "இத௠அனைதà¯à®¤à¯ ஒனà¯à®±à¯à®šà¯‡à®°à¯ இயகà¯à®•à®™à¯à®•à®³à¯ˆ பாதிகà¯à®•à®¿à®±à®¤à¯." + +#: directorymergewindow.cpp:803 +msgid "Changing All Merge Operations" +msgstr "அனைதà¯à®¤à¯ ஒனà¯à®±à¯à®šà¯‡à®°à¯ இயகà¯à®•à®™à¯à®•à®³à¯ˆ மாறà¯à®±à®¿à®•à¯à®•à¯Šà®£à¯à®Ÿà®¿à®°à¯à®•à¯à®•à®¿à®±à®¤à¯" + +#: directorymergewindow.cpp:803 mergeresultwindow.cpp:287 +msgid "C&ontinue" +msgstr "தொடரà¯à®¤à®²à¯" + +#: directorymergewindow.cpp:1169 +msgid "Processing " +msgstr "செயலாகà¯à®•à¯à®¤à®²à¯" + +#: directorymergewindow.cpp:1647 directorymergewindow.cpp:1653 +msgid "To do." +msgstr "அதை செயà¯." + +#: directorymergewindow.cpp:1756 directorymergewindow.cpp:2899 +msgid "Copy A to B" +msgstr " A to B படியெடà¯" + +#: directorymergewindow.cpp:1757 directorymergewindow.cpp:2900 +msgid "Copy B to A" +msgstr "படியெட௠B to A" + +#: directorymergewindow.cpp:1758 directorymergewindow.cpp:2901 +msgid "Delete A" +msgstr " A ஠நீகà¯à®•à¯" + +#: directorymergewindow.cpp:1759 directorymergewindow.cpp:2902 +msgid "Delete B" +msgstr "B ஠நீகà¯à®•à¯" + +#: directorymergewindow.cpp:1760 +msgid "Delete A & B" +msgstr "A & B஠நீகà¯à®•à¯ " + +#: directorymergewindow.cpp:1761 directorymergewindow.cpp:2904 +msgid "Merge to A" +msgstr " A ஠ஒனà¯à®±à®¾à®•à®šà¯ சேரà¯." + +#: directorymergewindow.cpp:1762 directorymergewindow.cpp:2905 +msgid "Merge to B" +msgstr " 'பி' ஠ஒனà¯à®±à®¾à®•à®šà¯ சேரà¯." + +#: directorymergewindow.cpp:1763 +msgid "Merge to A & B" +msgstr "A & B ஠ஒனà¯à®±à®¾à®•à®šà¯ சேரà¯." + +#: directorymergewindow.cpp:1767 directorymergewindow.cpp:2896 +msgid "Delete (if exists)" +msgstr "நீகà¯à®•à¯." + +#: directorymergewindow.cpp:1768 directorymergewindow.cpp:1769 +#: directorymergewindow.cpp:2895 optiondialog.cpp:809 smalldialogs.cpp:102 +msgid "Merge" +msgstr "ஒனà¯à®±à®¾à®•à®šà¯ சேரà¯." + +#: directorymergewindow.cpp:1768 directorymergewindow.cpp:1769 +msgid "Merge (manual)" +msgstr "ஒனà¯à®±à®¾à®•à®šà¯ சேரà¯." + +#: directorymergewindow.cpp:1770 +msgid "Error: Conflicting File Types" +msgstr "பிழை: கà¯à®´à®ªà¯à®ª கோபà¯à®ªà¯ வகைகளà¯" + +#: directorymergewindow.cpp:1771 +msgid "Error: Dates are equal but files are not." +msgstr "பிழை: தேதிகள௠சமம௠ஆனால௠கோபà¯à®ªà¯à®•à®³à¯ இலà¯à®²à¯ˆ." + +#: directorymergewindow.cpp:1795 directorymergewindow.cpp:1824 +#: directorymergewindow.cpp:1849 +msgid "This operation is currently not possible." +msgstr "இநà¯à®¤ இயகà¯à®•à®®à¯ தறà¯à®ªà¯‹à®¤à¯ சாதà¯à®¤à®¿à®¯à®®à®¿à®²à¯à®²à¯ˆ." + +#: directorymergewindow.cpp:1795 directorymergewindow.cpp:1824 +#: directorymergewindow.cpp:1849 directorymergewindow.cpp:2106 +msgid "Operation Not Possible" +msgstr "இயகà¯à®•à®®à¯ சாதியமிலà¯à®²à¯ˆ" + +#: directorymergewindow.cpp:1888 +msgid "" +"This should never happen: \n" +"\n" +"mergeResultSaved: m_pMFI=0\n" +"\n" +"If you know how to reproduce this, please contact the program author." +msgstr "" +"இத௠எபà¯à®ªà¯‹à®¤à¯à®®à¯ நிகழகà¯à®•à¯‚டாதà¯: \n" +"\n" +"ஒனà¯à®±à¯à®šà¯‡à®°à¯ விளைவ௠சேகரிகà¯à®•à®ªà¯à®ªà®Ÿà¯à®Ÿà®¤à¯: m_pMFI=0\n" +"\n" +"இதை மற௠ஆகà¯à®•à®®à¯ செயà¯à®¯ தெரிநà¯à®¤à®¾à®²à¯, நிரல௠எழà¯à®¤à®¿à®¯à®µà®°à¯ˆ அணà¯à®•à®µà¯à®®à¯." + +#: directorymergewindow.cpp:1888 +msgid "Program Error" +msgstr "நிரல௠பிழை" + +#: directorymergewindow.cpp:1899 +msgid "" +"An error occurred while copying.\n" +msgstr "" +"நகலெடà¯à®•à¯à®•à¯à®®à¯à®ªà¯‹à®¤à¯ பிழை à®à®±à¯à®ªà®Ÿà¯à®Ÿà¯à®³à¯à®³à®¤à¯.\n" + +#: directorymergewindow.cpp:1900 directorymergewindow.cpp:2306 +msgid "Merge Error" +msgstr "ஒனà¯à®±à¯à®šà¯‡à®°à¯ பிழை" + +#: directorymergewindow.cpp:1905 directorymergewindow.cpp:2311 +msgid "Error." +msgstr "பிழை." + +#: directorymergewindow.cpp:1910 directorymergewindow.cpp:2202 +#: directorymergewindow.cpp:2242 +msgid "Done." +msgstr "à®®à¯à®Ÿà®¿à®¨à¯à®¤." + +#: directorymergewindow.cpp:1933 +msgid "Not saved." +msgstr "கோபà¯à®ªà¯" + +#: directorymergewindow.cpp:1968 +msgid "Unknown merge operation. (This must never happen!)" +msgstr "தெரியாத ஒனà¯à®±à¯à®šà¯‡à®°à¯ இயகà¯à®•à®®à¯.( இத௠ஒரà¯à®ªà¯‹à®¤à¯à®®à¯ நிகழகà¯à®•à¯‚டாதà¯)" + +#: directorymergewindow.cpp:2000 +msgid "Unknown merge operation." +msgstr "தெரியாத ஒனà¯à®±à¯à®šà¯‡à®°à¯ இயகà¯à®•à®®à¯." + +#: directorymergewindow.cpp:2015 +msgid "" +"The merge is about to begin.\n" +"\n" +"Choose \"Do it\" if you have read the instructions and know what you are " +"doing.\n" +"Choosing \"Simulate it\" will tell you what would happen.\n" +"\n" +"Be aware that this program still has beta status and there is NO WARRANTY " +"whatsoever! Make backups of your vital data!" +msgstr "" +"ஒனà¯à®±à¯à®šà¯‡à®°à¯à®ªà¯à®ªà¯ தொடஙà¯à®•à®ªà¯à®ªà®Ÿ உளà¯à®³à®¤à¯.\n" +"\n" +"நீஙà¯à®•à®³à¯ நெறிமà¯à®±à¯ˆà®•à®³à¯ˆà®ªà¯ படிதà¯à®¤à¯ எனà¯à®© செயà¯à®•à®¿à®±à¯€à®°à¯à®•à®³à¯ எனà¯à®ªà®¤à¯ˆ அறிநà¯à®¤à®¾à®²à¯, \"இதை " +"செயà¯à®•\" எனà¯à®ªà®¤à¯ˆ தேரà¯à®¨à¯à®¤à¯†à®Ÿà¯à®•à¯à®•.\n" +"\"இதை போனà¯à®±à¯ நட\" எனà¯à®ªà®¤à¯ˆ தேரà¯à®µà¯ செயà¯à®¤à®¾à®²à¯ நிகழவிரà¯à®ªà¯à®ªà®¤à¯ˆ கூரà¯à®®à¯.\n" +"\n" +"இநà¯à®¤ நிரல௠இனà¯à®©à¯à®®à¯ பீடா நிலையில௠தான௠உளà¯à®³à®¤à¯ எனà¯à®ªà®¤à¯ˆ கவனதà¯à®¤à®¿à®²à¯ கொளà¯à®•; மேலà¯à®®à¯ " +"இதறà¯à®•à¯ எநà¯à®¤à®µà®¿à®¤ உதà¯à®¤à®¿à®°à®µà®¾à®¤à®®à¯à®®à¯ கிடையாதà¯! தஙà¯à®•à®³à®¤à¯ இனà¯à®±à®¿à®¯à®®à¯ˆà®¯à®¾à®¤ தகவலà¯à®•à®³à¯à®•à¯à®•à¯ பினà¯à®©à®£à®¿ " +"அமைகà¯à®•! " + +#: directorymergewindow.cpp:2020 +msgid "Starting Merge" +msgstr "ஒனà¯à®±à¯ சேரà¯à®ªà¯à®ªà¯ˆà®¤à¯ தà¯à®µà®•à¯à®•à¯à®¤à®²à¯" + +#: directorymergewindow.cpp:2020 +msgid "Do It" +msgstr "இதை செயà¯à®•" + +#: directorymergewindow.cpp:2020 +msgid "Simulate It" +msgstr "இதை போனà¯à®±à¯ நட" + +#: directorymergewindow.cpp:2046 +msgid "" +"The highlighted item has a different type in the different directories. Select " +"what to do." +msgstr "" +"பலவிதமான அடைவà¯à®•à®³à®¿à®²à¯ பலவகையாக தனிபà¯à®ªà®Ÿà¯à®¤à¯à®¤à®ªà¯à®ªà®Ÿà¯à®Ÿ விவரம௠உளà¯à®³à®¤à¯. எதை செயà¯à®µà®¤à¯†à®©à¯à®ªà®¤à¯ˆ " +"தேரà¯à®¨à¯à®¤à¯†à®Ÿà¯à®•à¯à®•." + +#: directorymergewindow.cpp:2055 +msgid "" +"The modification dates of the file are equal but the files are not. Select what " +"to do." +msgstr "" +"கோபà¯à®ªà¯à®•à®³à®¿à®©à¯ திரà¯à®¤à¯à®¤à®¿à®¯ தேதிகள௠ஒனà¯à®±à®¾à®• உளà¯à®³à®¤à¯, ஆனால௠கோபà¯à®ªà¯à®•à®³à¯ இலà¯à®²à¯ˆ. எதை " +"செயà¯à®µà®¤à¯†à®©à¯à®ªà®¤à¯ˆ தேரà¯à®¨à¯à®¤à¯†à®Ÿà¯à®•à¯à®•. " + +#: directorymergewindow.cpp:2106 +msgid "" +"This operation is currently not possible because directory merge is currently " +"running." +msgstr "" +"இநà¯à®¤ செயறà¯à®ªà®¾à®Ÿà¯ தறà¯à®ªà¯‹à®¤à¯ சாதà¯à®¤à®¿à®¯à®®à®¿à®²à¯à®²à¯ˆ à®à®©à¯†à®©à¯à®±à®¾à®²à¯ அடைவ௠ஒறà¯à®±à®¿à®©à¯ˆ தறà¯à®ªà¯‹à®¤à¯ " +"இயஙà¯à®•à®¿à®•à¯à®•à¯Šà®£à¯à®Ÿà®¿à®°à¯à®•à¯à®•à®¿à®©à¯à®±à®¤à¯" + +#: directorymergewindow.cpp:2166 +msgid "" +"There was an error in the last step.\n" +"Do you want to continue with the item that caused the error or do you want to " +"skip this item?" +msgstr "" +"கடைசி அடியில௠பிழை இரà¯à®¨à¯à®¤à®¤à¯.\n" +"இநà¯à®¤ பிழையை à®à®±à¯à®ªà®Ÿà¯à®¤à¯à®¤à®¿à®¯ விவரதà¯à®¤à¯à®Ÿà®©à¯ தொடர விரà¯à®®à¯à®ªà¯à®•à®¿à®±à¯€à®°à¯à®•à®³à®¾ அலà¯à®²à®¤à¯ அதை தவிரà¯à®•à¯à®• " +"விரà¯à®®à¯à®ªà¯à®•à®¿à®±à¯€à®°à¯à®•à®³à®¾?" + +#: directorymergewindow.cpp:2168 +msgid "Continue merge after an error" +msgstr "பிழைகà¯à®•à¯à®ªà¯ பிறக௠ஒனà¯à®±à¯ சேரà¯à®¤à¯à®¤à®²à¯ˆ தொடரà¯à®•" + +#: directorymergewindow.cpp:2168 +msgid "Continue With Last Item" +msgstr "கடைசி விவரதà¯à®¤à¯à®Ÿà®©à¯ தொடரà¯à®•" + +#: directorymergewindow.cpp:2168 +msgid "Skip Item" +msgstr "விவரதà¯à®¤à¯ˆ தவிரà¯à®•à¯à®•" + +#: directorymergewindow.cpp:2202 +msgid "Skipped." +msgstr "தவிரà¯à®¤à¯à®¤à®¤à¯." + +#: directorymergewindow.cpp:2209 directorymergewindow.cpp:2435 +msgid "In progress..." +msgstr "செயலà¯à®ªà®¾à®Ÿà¯à®Ÿà®¿à®²à¯ உளà¯à®³à®¤à¯..." + +#: directorymergewindow.cpp:2257 +msgid "Merge operation complete." +msgstr "ஒனà¯à®±à¯à®šà¯‡à®°à¯ இயகà¯à®•à®®à¯ à®®à¯à®Ÿà®¿à®¨à¯à®¤à®¤à¯" + +#: directorymergewindow.cpp:2257 directorymergewindow.cpp:2260 +msgid "Merge Complete" +msgstr "ஒனà¯à®±à¯à®šà¯‡à®°à¯à®ªà¯à®ªà¯ à®®à¯à®Ÿà®¿à®¨à¯à®¤à®¤à¯" + +#: directorymergewindow.cpp:2269 +msgid "" +"Simulated merge complete: Check if you agree with the proposed operations." +msgstr "" +"போலியான ஒனà¯à®±à¯à®šà¯‡à®°à¯à®ªà¯à®ªà¯ à®®à¯à®Ÿà®¿à®¨à¯à®¤à®¤à¯: à®®à¯à®©à¯à®®à¯Šà®´à®¿à®¨à¯à®¤ இயகà¯à®•à®™à¯à®•à®³à¯à®Ÿà®©à¯ நீஙà¯à®•à®³à¯ " +"ஒதà¯à®¤à¯à®ªà¯à®ªà¯‹à®•à®¿à®±à¯€à®°à¯à®•à®³à®¾ எனà¯à®ªà®¤à¯ˆ சரிபாரà¯à®•à¯à®•à®µà¯à®®à¯." + +#: directorymergewindow.cpp:2305 +msgid "" +"An error occurred. Press OK to see detailed information.\n" +msgstr "" +"பிழை à®à®±à¯à®ªà®Ÿà¯à®Ÿà¯à®³à¯à®³à®¤à¯. விரிவான விவரஙà¯à®•à®³à¯à®•à¯à®•à¯ சரி எனà¯à®ªà®¤à¯ˆ à®…à®´à¯à®¤à¯à®¤à¯à®•.\n" + +#: directorymergewindow.cpp:2348 +msgid "Error: While deleting %1: Creating backup failed." +msgstr "பிழை: %1 நீகà¯à®•à¯à®®à¯à®ªà¯‹à®¤à¯: பினà¯à®©à®£à®¿ உரà¯à®µà®¾à®•à¯à®•à®®à¯ தோலà¯à®µà®¿à®¯à®Ÿà¯ˆà®¨à¯à®¤à®¤à¯." + +#: directorymergewindow.cpp:2355 +msgid "delete directory recursively( %1 )" +msgstr "அடைவ௠சூழà¯à®¨à®¿à®²à¯ˆ நீகà¯à®•à¯ நீகà¯à®•à¯(%1)" + +#: directorymergewindow.cpp:2357 +msgid "delete( %1 )" +msgstr "நீகà¯à®•à¯( %1 )" + +#: directorymergewindow.cpp:2372 +msgid "Error: delete dir operation failed while trying to read the directory." +msgstr "பிழை: அடைவை படிகà¯à®•à¯à®®à¯à®ªà¯‹à®¤à¯ நீகà¯à®• இயலவிலà¯à®²à¯ˆ." + +#: directorymergewindow.cpp:2391 +msgid "Error: rmdir( %1 ) operation failed." +msgstr " rmdir( %1 } பிழை: இயகà¯à®• இயலவிலà¯à®²à¯ˆ" + +#: directorymergewindow.cpp:2401 +msgid "Error: delete operation failed." +msgstr "பிழை: நீகà¯à®•à¯à®®à¯ இயகà¯à®•à®®à¯ தோலà¯à®µà®¿à®¯à®Ÿà¯ˆà®¨à¯à®¤à®¤à¯." + +#: directorymergewindow.cpp:2427 +msgid "manual merge( %1, %2, %3 -> %4)" +msgstr "கைமà¯à®±à¯ˆ ஒனà¯à®±à®¿à®©à¯ˆ(%1, %2,%3 -> %4)" + +#: directorymergewindow.cpp:2430 +msgid "" +" Note: After a manual merge the user should continue by pressing F7." +msgstr "" +"கà¯à®±à®¿à®ªà¯à®ªà¯: கையேட௠ஒனà¯à®±à®¿à®©à¯ˆà®¯à®¿à®©à¯ பிறக௠உபயோகிபà¯à®ªà®µà®°à¯ F7 வழியாக தொடர வேணà¯à®Ÿà¯à®®à¯." + +#: directorymergewindow.cpp:2453 +msgid "Error: copy( %1 -> %2 ) failed.Deleting existing destination failed." +msgstr "" +"பிழை:நகலà¯( %1 -> %2 ) தோலà¯à®µà®¿ அடைநà¯à®¤à®¤à¯. இரà¯à®•à¯à®•à¯à®®à¯ சேரிடம௠நீகà¯à®•à®®à¯ தோலà¯à®µà®¿ " +"அடைநà¯à®¤à®¤à¯" + +#: directorymergewindow.cpp:2463 +msgid "copyLink( %1 -> %2 )" +msgstr "நகல௠இணை( %1 -> %2 )" + +#: directorymergewindow.cpp:2474 +msgid "Error: copyLink failed: Remote links are not yet supported." +msgstr "" +"பிழை:தொடரà¯à®ªà¯à®ªà¯ படியெட௠தோலà¯à®µà®¿à®¯à®Ÿà¯ˆà®¨à¯à®¤à®¤à¯: தூரத௠தொடரà¯à®ªà¯ இனà¯à®©à¯à®®à¯ ஆதரிகà¯à®•à®ªà¯à®ªà®Ÿà®µà®¿à®²à¯à®²à¯ˆ" + +#: directorymergewindow.cpp:2480 +msgid "Error: copyLink failed." +msgstr "பிழை: நகல௠இணை தோலà¯à®µà®¿à®¯à®Ÿà¯ˆà®¨à¯à®¤à®¤à¯." + +#: directorymergewindow.cpp:2500 +msgid "copy( %1 -> %2 )" +msgstr "நகலà¯( %1 -> %2 )" + +#: directorymergewindow.cpp:2526 +msgid "Error during rename( %1 -> %2 ): Cannot delete existing destination." +msgstr "" +"மறà¯à®ªà¯†à®¯à®°à®¿à®Ÿà¯à®®à¯ போத௠பிழை( %1 -> %2 ): தறà¯à®ªà¯‹à®¤à¯à®³à¯à®³ சேரà¯à®®à®¿à®Ÿà®¤à¯à®¤à¯ˆ நீகà¯à®• இயலாதà¯." + +#: directorymergewindow.cpp:2532 +msgid "rename( %1 -> %2 )" +msgstr "மறà¯à®ªà¯†à®¯à®°à¯( %1 -> %2 )" + +#: directorymergewindow.cpp:2541 +msgid "Error: Rename failed." +msgstr "பிழை: மறà¯à®ªà¯†à®¯à®°à¯ தோலà¯à®µà®¿ அடைநà¯à®¤à®¤à¯." + +#: directorymergewindow.cpp:2559 +msgid "Error during makeDir of %1. Cannot delete existing file." +msgstr "%1அடைவை உரà¯à®µà®¾à®•à¯à®•à¯à®®à¯ போத௠பிழை: தறà¯à®ªà¯‹à®¤à¯ˆà®¯ கோபà¯à®ªà®¿à®©à¯ˆ நீகà¯à®• இயலாதà¯." + +#: directorymergewindow.cpp:2575 +msgid "makeDir( %1 )" +msgstr "( %1 )அடைவை உரà¯à®µà®¾à®•à¯à®•à¯" + +#: directorymergewindow.cpp:2585 +msgid "Error while creating directory." +msgstr "அடைவை உரà¯à®µà®¾à®•à¯à®•à¯à®®à¯ போத௠பிழை" + +#: directorymergewindow.cpp:2608 directorymergewindow.cpp:2725 +msgid "Dest" +msgstr "சேரà¯à®®à®¿à®Ÿà®®à¯" + +#: directorymergewindow.cpp:2612 directorymergewindow.cpp:2650 +msgid "Dir" +msgstr "அடைவà¯" + +#: directorymergewindow.cpp:2613 +msgid "Type" +msgstr "விதமà¯" + +#: directorymergewindow.cpp:2614 +msgid "Size" +msgstr "அளவà¯" + +#: directorymergewindow.cpp:2615 +msgid "Attr" +msgstr "தனà¯à®®à¯ˆ" + +#: directorymergewindow.cpp:2616 +msgid "Last Modification" +msgstr "கடைசி திரà¯à®¤à¯à®¤à®®à¯" + +#: directorymergewindow.cpp:2617 +msgid "Link-Destination" +msgstr "இணை-சேரà¯à®®à®¿à®Ÿà®®à¯" + +#: directorymergewindow.cpp:2667 +msgid "not available" +msgstr "கிடைகà¯à®•à®µà®¿à®²à¯à®²à¯ˆ" + +#: directorymergewindow.cpp:2687 +msgid "A (Dest): " +msgstr "A (சேரà¯à®®à®¿à®Ÿà®®à¯): " + +#: directorymergewindow.cpp:2690 +msgid "A (Base): " +msgstr "A (அடிதà¯à®¤à®³à®®à¯):" + +#: directorymergewindow.cpp:2696 +msgid "B (Dest): " +msgstr "B (சேரà¯à®®à®¿à®Ÿà®®à¯): " + +#: directorymergewindow.cpp:2704 +msgid "C (Dest): " +msgstr "C (சேரà¯à®®à®¿à®Ÿà®®à¯):" + +#: directorymergewindow.cpp:2710 +msgid "Dest: " +msgstr "சேரà¯à®®à®¿à®Ÿà®®à¯: " + +#: directorymergewindow.cpp:2775 +#, fuzzy +msgid "Save Directory Merge State As..." +msgstr "அடைவà¯à®šà¯ சேரà¯à®•à¯à®•à¯ˆ" + +#: directorymergewindow.cpp:2862 +msgid "Start/Continue Directory Merge" +msgstr "அடைவை சேரà¯à®•à¯à®•à®¤à¯ தà¯à®µà®™à¯à®•à¯" + +#: directorymergewindow.cpp:2863 +msgid "Run Operation for Current Item" +msgstr "நிகழ௠உரà¯à®ªà¯à®ªà®Ÿà®¿à®•à¯à®•à®¾à®• செயறà¯à®ªà®¾à®Ÿà¯ இயஙà¯à®•à¯" + +#: directorymergewindow.cpp:2864 +msgid "Compare Selected File" +msgstr "தேரà¯à®¨à¯à®¤à¯†à®Ÿà¯à®¤à¯à®¤ கோபà¯à®ªà®¿à®©à¯ˆ ஒபà¯à®ªà®¿à®Ÿà¯" + +#: directorymergewindow.cpp:2865 +msgid "Merge Current File" +msgstr "தறà¯à®ªà¯‹à®¤à¯ˆà®¯ கோபà¯à®ªà®¿à®©à¯ˆ ஒனà¯à®±à¯à®šà¯‡à®°à¯" + +#: directorymergewindow.cpp:2866 +msgid "Fold All Subdirs" +msgstr "அனைதà¯à®¤à¯ உபஅடைவà¯à®•à®³à¯ˆà®¯à¯à®®à¯ மடி" + +#: directorymergewindow.cpp:2867 +msgid "Unfold All Subdirs" +msgstr "அனைதà¯à®¤à¯ உபஅடைவà¯à®•à®³à¯ˆà®¯à¯à®®à¯ பிரி" + +#: directorymergewindow.cpp:2871 +msgid "Choose A for All Items" +msgstr "எலà¯à®²à®¾ விவரஙà¯à®•à®³à¯à®•à¯à®•à¯à®®à¯ Aவைத௠தேரà¯à®¨à¯à®¤à¯†à®Ÿà¯" + +#: directorymergewindow.cpp:2872 +msgid "Choose B for All Items" +msgstr "எலà¯à®²à®¾ விவரஙà¯à®•à®³à¯à®•à¯à®•à¯à®®à¯ Bவைத௠தேரà¯à®¨à¯à®¤à¯†à®Ÿà¯" + +#: directorymergewindow.cpp:2873 +msgid "Choose C for All Items" +msgstr "எலà¯à®²à®¾ விவரஙà¯à®•à®³à¯à®•à¯à®•à¯à®®à¯ Cவைத௠தேரà¯à®¨à¯à®¤à¯†à®Ÿà¯" + +#: directorymergewindow.cpp:2874 +msgid "Auto-Choose Operation for All Items" +msgstr "எலà¯à®²à®¾ விவரஙà¯à®•à®³à¯à®•à¯à®•à¯à®®à¯ தானியகà¯à®•à®¤à¯à®¤à¯‡à®°à¯à®µà¯" + +#: directorymergewindow.cpp:2875 +msgid "No Operation for All Items" +msgstr "எலà¯à®²à®¾ விவரஙà¯à®•à®³à¯à®•à¯à®•à¯à®®à¯ இயகà¯à®•à®®à®¿à®²à¯à®²à¯ˆ" + +#: directorymergewindow.cpp:2880 +msgid "Show Identical Files" +msgstr "" + +#: directorymergewindow.cpp:2881 +#, fuzzy +msgid "Show Different Files" +msgstr "வேற௠விதமான கோபà¯à®ªà¯à®•à®³à®¿à®©à¯ எணà¯à®£à®¿à®•à¯à®•à¯ˆ:" + +#: directorymergewindow.cpp:2882 +msgid "Show Files only in A" +msgstr "" + +#: directorymergewindow.cpp:2883 +msgid "Show Files only in B" +msgstr "" + +#: directorymergewindow.cpp:2884 +msgid "Show Files only in C" +msgstr "" + +#: directorymergewindow.cpp:2888 +#, fuzzy +msgid "Compare Explicitly Selected Files" +msgstr "தேரà¯à®¨à¯à®¤à¯†à®Ÿà¯à®¤à¯à®¤ கோபà¯à®ªà®¿à®©à¯ˆ ஒபà¯à®ªà®¿à®Ÿà¯" + +#: directorymergewindow.cpp:2889 +#, fuzzy +msgid "Merge Explicitly Selected Files" +msgstr "தேரà¯à®¨à¯à®¤à¯†à®Ÿà¯à®¤à¯à®¤ கோபà¯à®ªà®¿à®©à¯ˆ ஒபà¯à®ªà®¿à®Ÿà¯" + +#: directorymergewindow.cpp:2891 directorymergewindow.cpp:2898 +msgid "Do Nothing" +msgstr "ஒனà¯à®±à¯à®®à¯ செயà¯à®¯à®¾à®¤à¯‡" + +#: directorymergewindow.cpp:2892 +msgid "A" +msgstr "A" + +#: directorymergewindow.cpp:2893 +msgid "B" +msgstr "B" + +#: directorymergewindow.cpp:2894 +msgid "C" +msgstr "C" + +#: directorymergewindow.cpp:2903 +#, fuzzy +msgid "Delete A && B" +msgstr "A & B஠நீகà¯à®•à¯ " + +#: directorymergewindow.cpp:2906 +#, fuzzy +msgid "Merge to A && B" +msgstr "A & B ஠ஒனà¯à®±à®¾à®•à®šà¯ சேரà¯." + +#: fileaccess.cpp:595 +msgid "" +"While trying to make a backup, deleting an older backup failed. \n" +"Filename: " +msgstr "" +"ஒர௠பினà¯à®•à¯‹à®ªà¯à®ªà®¿à®©à¯ˆ உரà¯à®µà®¾à®•à¯à®• à®®à¯à®¯à®±à¯à®šà®¿à®•à¯à®•à¯à®®à¯à®ªà¯‹à®¤à¯, பழைய பினà¯à®•à¯‹à®ªà¯à®ªà®¿à®©à¯ˆ நீகà¯à®• " +"à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ.\n" +"கோபà¯à®ªà¯à®ªà¯ பெயரà¯à®•à®³à¯:" + +#: fileaccess.cpp:602 +msgid "" +"While trying to make a backup, renaming failed. \n" +"Filenames: " +msgstr "" +"ஒர௠பினà¯à®•à¯‹à®ªà¯à®ªà®¿à®©à¯ˆ உரà¯à®µà®¾à®•à¯à®• à®®à¯à®¯à®±à¯à®šà®¿à®•à¯à®•à¯à®®à¯ போதà¯, பெயர௠மாறà¯à®±à®®à¯ செயà¯à®¯à®ªà¯à®ªà®Ÿà®µà®¿à®²à¯à®²à¯ˆ.\n" +"கோபà¯à®ªà¯à®ªà¯ பெயரà¯à®•à®³à¯:" + +#: fileaccess.cpp:624 +#, c-format +msgid "Getting file status: %1" +msgstr "கோபà¯à®ªà¯ நிலைமை வாஙà¯à®•à¯: %1" + +#: fileaccess.cpp:667 +#, c-format +msgid "Reading file: %1" +msgstr "கோபà¯à®ªà¯à®•à®³à¯ˆ படிதà¯à®¤à®²à¯: %1" + +#: fileaccess.cpp:703 +#, c-format +msgid "Writing file: %1" +msgstr "எழà¯à®¤à¯à®®à¯ கோபà¯à®ªà¯: %1" + +#: fileaccess.cpp:731 +msgid "Out of memory" +msgstr "நினைவில௠இலà¯à®²à¯ˆ" + +#: fileaccess.cpp:766 +#, c-format +msgid "Making directory: %1" +msgstr "அடைவ௠அமை: %1" + +#: fileaccess.cpp:786 +#, c-format +msgid "Removing directory: %1" +msgstr "அடைவ௠அகறà¯à®±à¯: %1" + +#: fileaccess.cpp:801 +#, c-format +msgid "Removing file: %1" +msgstr "அழிதà¯à®¤à®²à¯ கோபà¯à®ªà¯:%1" + +#: fileaccess.cpp:817 +msgid "Creating symbolic link: %1 -> %2" +msgstr "கà¯à®±à®¿à®¯à¯€à®Ÿà¯à®Ÿà¯ இணைபà¯à®ªà¯ உரà¯à®µà®¾à®•à¯à®•à¯à®¤à®²à¯: %1 -> %2" + +#: fileaccess.cpp:843 +msgid "Renaming file: %1 -> %2" +msgstr "மறà¯à®ªà¯†à®¯à®°à¯:( %1 -> %2 )" + +#: fileaccess.cpp:879 +msgid "Copying file: %1 -> %2" +msgstr "கோபà¯à®ªà¯ நகலெடà¯à®¤à¯à®¤à®²à¯: %1 -> %2 " + +#: fileaccess.cpp:893 +#, c-format +msgid "" +"Error during file copy operation: Opening file for reading failed. Filename: %1" +msgstr "" +"கோபà¯à®ªà¯à®ªà¯ படிவின௠போத௠பிழை à®à®±à¯à®ªà®Ÿà¯à®Ÿà¯à®³à¯à®³à®¤à¯. படிபà¯à®ªà®¤à®±à¯à®•à®¾à®© கோபà¯à®ªà¯à®¤à¯ " +"திறகà¯à®•à®ªà¯à®ªà®Ÿà®µà®¿à®²à¯à®²à¯ˆ.கோபà¯à®ªà®¿à®©à¯ பெயரà¯:%1" + +#: fileaccess.cpp:899 +#, c-format +msgid "" +"Error during file copy operation: Opening file for writing failed. Filename: %1" +msgstr "" +"கோபà¯à®ªà¯à®ªà¯ படிவின௠போத௠பிழை à®à®±à¯à®ªà®Ÿà¯à®Ÿà¯à®³à¯à®³à®¤à¯. எழà¯à®¤à¯à®µà®¤à®±à¯à®•à®¾à®© கோபà¯à®ªà¯à®¤à¯ " +"திறகà¯à®•à®ªà¯à®ªà®Ÿà®µà®¿à®²à¯à®²à¯ˆ. கோபà¯à®ªà®¿à®©à¯ பெயரà¯:%1" + +#: fileaccess.cpp:914 +#, c-format +msgid "Error during file copy operation: Reading failed. Filename: %1" +msgstr "" +"கோபà¯à®ªà¯à®ªà¯ படிவின௠போத௠பிழை à®à®±à¯à®ªà®Ÿà¯à®Ÿà¯à®³à¯à®³à®¤à¯ கோபà¯à®ªà®¿à®©à¯ˆ படிகà¯à®• இயலவிலà¯à®²à¯ˆ.கோபà¯à®ªà®¿à®©à¯ " +"பெயரà¯:%1" + +#: fileaccess.cpp:923 +#, c-format +msgid "Error during file copy operation: Writing failed. Filename: %1" +msgstr "" +"கோபà¯à®ªà¯à®ªà¯ படிவினà¯à®ªà¯‹à®¤à¯ பிழை à®à®±à¯à®ªà®Ÿà¯à®Ÿà¯à®³à¯à®³à®¤à¯. கோபà¯à®ªà®¿à®²à¯ எழà¯à®¤ இயலவிலà¯à®²à¯ˆ.கோபà¯à®ªà®¿à®©à¯ " +"பெயரà¯:%1" + +#: fileaccess.cpp:1219 +msgid "Reading directory: " +msgstr "அடைவை படிதà¯à®¤à®²à¯:" + +#: fileaccess.cpp:1348 +#, c-format +msgid "Listing directory: %1" +msgstr "அடைவை படà¯à®Ÿà®¿à®¯à®²à®¿à®Ÿà®²à¯: %1" + +#: kdiff3.cpp:142 +#, fuzzy +msgid "Current Configuration:" +msgstr "நடபà¯à®ªà¯ உரà¯à®ªà¯à®ªà®Ÿà®¿ இசைவ௠செயறà¯à®ªà®¾à®Ÿà¯" + +#: kdiff3.cpp:147 +#, fuzzy +msgid "Config Option Error:" +msgstr "கோபà¯à®ªà¯ திறபà¯à®ªà®¿à®²à¯ பிழை" + +#: kdiff3.cpp:187 +msgid "Option --auto used, but no output file specified." +msgstr "" +"தேரà¯à®µà¯ தானே உபயோகிகà¯à®•à®ªà¯à®ªà®Ÿà¯à®Ÿà¯à®³à¯à®³à®¤à¯ ஆனால௠வெளியீடà¯à®Ÿà¯à®•à¯ கோபà¯à®ªà¯ கà¯à®±à®¿à®ªà¯à®ªà®¿à®Ÿà®ªà¯à®ªà®Ÿà®µà®¿à®²à¯à®²à¯ˆ" + +#: kdiff3.cpp:323 +msgid "Option --auto ignored for directory comparison." +msgstr "அடைவ௠ஒபà¯à®ªà¯€à®Ÿà¯à®Ÿà¯à®•à¯à®•à®¾à®• தேரà¯à®µà¯ தானே மறà¯à®•à¯à®•à®ªà¯à®ªà®Ÿà¯à®Ÿà¯à®³à¯à®³à®¤à¯" + +#: kdiff3.cpp:359 +msgid "Saving failed." +msgstr "சேகரிபà¯à®ªà¯ தோலà¯à®µà®¿à®¯à®Ÿà¯ˆà®¨à¯à®¤à®¤à¯." + +#: kdiff3.cpp:386 pdiff.cpp:1041 pdiff.cpp:1112 +msgid "Opening of these files failed:" +msgstr "இநà¯à®¤ கோபà¯à®ªà¯à®•à®³à®¿à®©à¯ திறபà¯à®ªà¯ தோலà¯à®µà®¿à®¯à®Ÿà¯ˆà®¨à¯à®¤à®¤à¯:" + +#: kdiff3.cpp:395 +msgid "File Open Error" +msgstr "கோபà¯à®ªà¯ திறபà¯à®ªà®¿à®²à¯ பிழை" + +#: kdiff3.cpp:418 +msgid "Opens documents for comparison..." +msgstr "ஒபà¯à®ªà®¿à®Ÿà¯à®¤à®²à¯à®•à¯à®•à¯ ஆவணஙà¯à®•à®³à¯ˆà®¤à¯ திறகà¯à®•..." + +#: kdiff3.cpp:423 +msgid "Saves the merge result. All conflicts must be solved!" +msgstr "ஒனà¯à®±à¯à®šà¯‡à®°à¯ à®®à¯à®Ÿà®¿à®µà¯ˆ சேகரி. அனைதà¯à®¤à¯ கà¯à®´à®ªà¯à®ªà®™à¯à®•à®³à¯à®®à¯ தீர வேணà¯à®Ÿà¯à®®à¯." + +#: kdiff3.cpp:425 +msgid "Saves the current document as..." +msgstr "தறà¯à®ªà¯‹à®¤à¯ˆà®¯ ஆவணதà¯à®¤à¯ˆ ....வாக சேமி " + +#: kdiff3.cpp:427 +msgid "Print the differences" +msgstr "" + +#: kdiff3.cpp:429 +msgid "Quits the application" +msgstr "பயனà¯à®ªà®¾à®Ÿà¯à®Ÿà¯ˆ à®®à¯à®±à®¿à®•à¯à®•" + +#: kdiff3.cpp:431 +msgid "Cuts the selected section and puts it to the clipboard" +msgstr "தேரà¯à®µà¯ செயà¯à®¤ பகà¯à®¤à®¿à®¯à¯ˆ எடà¯à®¤à¯à®¤à¯ கிளிபà¯à®ªà¯‹à®°à¯à®Ÿà®¿à®²à¯ செலà¯à®¤à¯à®¤à¯à®•à®¿à®±à®¤à¯" + +#: kdiff3.cpp:433 +msgid "Copies the selected section to the clipboard" +msgstr "தேரà¯à®µà¯ செயà¯à®¤ பகà¯à®¤à®¿à®¯à¯ˆ கிளிப௠போரà¯à®Ÿà¯ˆ படி செயà¯à®•à®¿à®±à®¤à¯." + +#: kdiff3.cpp:435 +msgid "Pastes the clipboard contents to actual position" +msgstr "கிளிபà¯à®ªà¯‹à®°à¯à®Ÿà®¿à®©à¯ உளà¯à®³à®Ÿà®•à¯à®•à®™à¯à®•à®³à¯ˆ உரிய இடதà¯à®¤à®¿à®²à¯ சேரà¯à®•à¯à®•à®¿à®±à®¤à¯" + +#: kdiff3.cpp:437 +msgid "Select everything in current window" +msgstr "" + +#: kdiff3.cpp:439 +msgid "Search for a string" +msgstr "தொடரà¯à®šà¯à®šà®¿à®•à®³à¯ˆ தேடà¯" + +#: kdiff3.cpp:441 +msgid "Search again for the string" +msgstr "சரதà¯à®¤à¯ˆ மீணà¯à®Ÿà¯à®®à¯ தேடà¯" + +#: kdiff3.cpp:443 +msgid "Enables/disables the toolbar" +msgstr "கரà¯à®µà®¿à®ªà¯à®ªà®Ÿà¯à®Ÿà®¿à®¯à¯ˆ செயலà¯à®ªà®Ÿà¯à®¤à¯à®¤à¯/நீகà¯à®•à¯" + +#: kdiff3.cpp:445 +msgid "Enables/disables the statusbar" +msgstr "நிலைபà¯à®ªà®Ÿà¯à®Ÿà®¿à®¯à¯ˆ செயலà¯à®ªà®Ÿà¯à®¤à¯à®¤à¯/நீகà¯à®•à¯ " + +#: kdiff3.cpp:449 +msgid "Configure KDiff3..." +msgstr "KDiff3யை அமை" + +#: kdiff3.cpp:470 +msgid "Go to Current Delta" +msgstr "தறà¯à®ªà¯‹à®¤à¯ˆà®¯ டெலà¯à®Ÿà®¾à®µà®¿à®±à¯à®•à¯à®šà¯ செலà¯à®•" + +#: kdiff3.cpp:471 +msgid "Go to First Delta" +msgstr "à®®à¯à®¤à®²à¯ டெலà¯à®Ÿà®¾à®µà®¿à®±à¯à®•à¯à®šà¯ செலà¯à®•" + +#: kdiff3.cpp:472 +msgid "Go to Last Delta" +msgstr "கடைசி டெலà¯à®Ÿà®¾à®µà®¿à®±à¯à®•à¯à®šà¯ செலà¯à®•" + +#: kdiff3.cpp:473 +msgid "(Skips white space differences when \"Show White Space\" is disabled.)" +msgstr "" + +#: kdiff3.cpp:474 +msgid "" +"(Does not skip white space differences even when \"Show White Space\" is " +"disabled.)" +msgstr "" + +#: kdiff3.cpp:475 +msgid "Go to Previous Delta" +msgstr "à®®à¯à®¨à¯à®¤à¯ˆà®¯ டெலà¯à®Ÿà®¾à®µà®¿à®±à¯à®•à¯à®šà¯ செலà¯à®•" + +#: kdiff3.cpp:477 +msgid "Go to Next Delta" +msgstr "அடà¯à®¤à¯à®¤ டெலà¯à®Ÿà®¾à®µà®¿à®±à¯à®•à¯à®šà¯ செலà¯à®•" + +#: kdiff3.cpp:479 +msgid "Go to Previous Conflict" +msgstr "à®®à¯à®¨à¯à®¤à¯ˆà®¯ கà¯à®´à®ªà¯à®ªà®¤à¯à®¤à®¿à®±à¯à®•à¯à®šà¯ செலà¯à®•" + +#: kdiff3.cpp:481 +msgid "Go to Next Conflict" +msgstr "அடà¯à®¤à¯à®¤ கà¯à®´à®ªà¯à®ªà®¤à¯à®¤à®¿à®±à¯à®•à¯à®šà¯ செலà¯à®•" + +#: kdiff3.cpp:483 +msgid "Go to Previous Unsolved Conflict" +msgstr "à®®à¯à®¨à¯à®¤à¯ˆà®¯ தீரà¯à®•à¯à®•à®¾à®¤ கà¯à®´à®ªà¯à®ªà®¤à¯à®¤à®¿à®±à¯à®•à¯à®šà¯ செலà¯à®•" + +#: kdiff3.cpp:485 +msgid "Go to Next Unsolved Conflict" +msgstr "அடà¯à®¤à¯à®¤ தீரà¯à®•à¯à®•à®¾à®¤ கà¯à®´à®ªà¯à®ªà®¤à¯à®¤à®¿à®±à¯à®•à¯à®šà¯ செலà¯à®•" + +#: kdiff3.cpp:487 +msgid "Select Line(s) From A" +msgstr "Aவிலிரà¯à®¨à¯à®¤à¯ வரி(களை) தேரà¯à®¨à¯à®¤à¯†à®Ÿà¯" + +#: kdiff3.cpp:488 +msgid "Select Line(s) From B" +msgstr "Bவிலிரà¯à®¨à¯à®¤à¯ வரி(களை) தேரà¯à®¨à¯à®¤à¯†à®Ÿà¯" + +#: kdiff3.cpp:489 +msgid "Select Line(s) From C" +msgstr "Cவிலிரà¯à®¨à¯à®¤à¯ வரி(களை) தேரà¯à®¨à¯à®¤à¯†à®Ÿà¯" + +#: kdiff3.cpp:490 +msgid "Automatically Go to Next Unsolved Conflict After Source Selection" +msgstr "" +"மூலதà¯à®¤à¯ˆ தேரà¯à®µà¯ செயà¯à®¤ பிறக௠தானாகவே அடà¯à®¤à¯à®¤ தீரà¯à®•à¯à®•à®ªà¯à®ªà®Ÿà®¾à®¤ கà¯à®´à®ªà¯à®ªà®¤à®±à¯à®•à¯ செல௠" + +#: kdiff3.cpp:492 +msgid "Show Space && Tabulator Characters for Differences" +msgstr "இடைவெளியை காடà¯à®Ÿà®¿ மறà¯à®±à¯à®®à¯ வேறà¯à®ªà®¾à®Ÿà¯à®Ÿà®¿à®±à¯à®•à®¾à®• படà¯à®Ÿà®¿à®¯à®²à®¿à®Ÿà¯à®µà®¾à®©à¯ எழà¯à®¤à¯à®¤à¯à®•à¯à®•à®³à¯" + +#: kdiff3.cpp:493 +msgid "Show White Space" +msgstr "வெளà¯à®³à¯ˆ இடதà¯à®¤à¯ˆ காடà¯à®Ÿà¯à®®à¯" + +#: kdiff3.cpp:495 +msgid "Show Line Numbers" +msgstr "வரி எணà¯à®•à®³à¯ˆ காடà¯à®Ÿà¯" + +#: kdiff3.cpp:496 +msgid "Choose A Everywhere" +msgstr "எலà¯à®²à®¾ இடதà¯à®¤à®¿à®²à¯à®®à¯ Aவைத௠தேரà¯à®¨à¯à®¤à¯†à®Ÿà¯" + +#: kdiff3.cpp:497 +msgid "Choose B Everywhere" +msgstr "எலà¯à®²à®¾ இடதà¯à®¤à®¿à®²à¯à®®à¯ Bவைத௠தேரà¯à®¨à¯à®¤à¯†à®Ÿà¯" + +#: kdiff3.cpp:498 +msgid "Choose C Everywhere" +msgstr "எலà¯à®²à®¾ இடதà¯à®¤à®¿à®²à¯à®®à¯ Cவைத௠தேரà¯à®¨à¯à®¤à¯†à®Ÿà¯" + +#: kdiff3.cpp:499 +#, fuzzy +msgid "Choose A for All Unsolved Conflicts" +msgstr "அனைதà¯à®¤à¯ தீரà¯à®µà®±à¯à®± à®®à¯à®°à®£à®¿à®±à¯à®•à¯ A-வை தேரà¯à®¨à¯à®¤à¯†à®Ÿà¯à®•à¯à®•à®µà¯à®®à¯" + +#: kdiff3.cpp:500 +#, fuzzy +msgid "Choose B for All Unsolved Conflicts" +msgstr "அனைதà¯à®¤à¯ தீரà¯à®µà®±à¯à®± à®®à¯à®°à®£à®¿à®±à¯à®•à¯ B-யை தேரà¯à®¨à¯à®¤à¯†à®Ÿà¯à®•à¯à®•à®µà¯à®®à¯" + +#: kdiff3.cpp:501 +#, fuzzy +msgid "Choose C for All Unsolved Conflicts" +msgstr "அனைதà¯à®¤à¯ தீரà¯à®µà®±à¯à®± à®®à¯à®°à®£à®¿à®±à¯à®•à¯ C-யை தேரà¯à®¨à¯à®¤à¯†à®Ÿà¯à®•à¯à®•à®µà¯à®®à¯" + +#: kdiff3.cpp:502 +#, fuzzy +msgid "Choose A for All Unsolved Whitespace Conflicts" +msgstr "அனைதà¯à®¤à¯ தீரà¯à®µà®±à¯à®± வெளà¯à®³à¯ˆ இடம௠மà¯à®°à®£à®¿à®±à¯à®•à¯ A-வை தேரà¯à®¨à¯à®¤à¯†à®Ÿà¯à®•à¯à®•à®µà¯à®®à¯" + +#: kdiff3.cpp:503 +#, fuzzy +msgid "Choose B for All Unsolved Whitespace Conflicts" +msgstr "அனைதà¯à®¤à¯ தீரà¯à®µà®±à¯à®± வெளà¯à®³à¯ˆ இடம௠மà¯à®°à®£à®¿à®±à¯à®•à¯ B-யை தேரà¯à®¨à¯à®¤à¯†à®Ÿà¯à®•à¯à®•à®µà¯à®®à¯" + +#: kdiff3.cpp:504 +#, fuzzy +msgid "Choose C for All Unsolved Whitespace Conflicts" +msgstr "அனைதà¯à®¤à¯ தீரà¯à®µà®±à¯à®± வெளà¯à®³à¯ˆ இடம௠மà¯à®°à®£à®¿à®±à¯à®•à¯ C-யை தேரà¯à®¨à¯à®¤à¯†à®Ÿà¯à®•à¯à®•à®µà¯à®®à¯" + +#: kdiff3.cpp:505 +msgid "Automatically Solve Simple Conflicts" +msgstr "தானாகவே எளிய கà¯à®´à®ªà¯à®ªà®™à¯à®•à®³à¯ˆ தீரà¯à®•à¯à®•." + +#: kdiff3.cpp:506 +msgid "Set Deltas to Conflicts" +msgstr " Delta வை கà¯à®´à®ªà¯à®ªà®¤à¯à®¤à®¿à®±à¯à®•à¯ அமை" + +#: kdiff3.cpp:507 +msgid "Run Regular Expression Auto Merge" +msgstr "" + +#: kdiff3.cpp:508 +#, fuzzy +msgid "Automatically Solve History Conflicts" +msgstr "தானாகவே எளிய கà¯à®´à®ªà¯à®ªà®™à¯à®•à®³à¯ˆ தீரà¯à®•à¯à®•." + +#: kdiff3.cpp:509 +msgid "Split Diff At Selection" +msgstr "" + +#: kdiff3.cpp:510 +#, fuzzy +msgid "Join Selected Diffs" +msgstr "தேரà¯à®¨à¯à®¤à¯†à®Ÿà¯à®¤à¯à®¤ கோபà¯à®ªà®¿à®©à¯ˆ ஒபà¯à®ªà®¿à®Ÿà¯" + +#: kdiff3.cpp:512 +msgid "Show Window A" +msgstr "A சாளரதà¯à®¤à¯ˆà®•à¯ காடà¯à®Ÿà¯" + +#: kdiff3.cpp:513 +msgid "Show Window B" +msgstr "B சாளரதà¯à®¤à¯ˆà®•à¯ காடà¯à®Ÿà¯" + +#: kdiff3.cpp:514 +msgid "Show Window C" +msgstr "C சாளரதà¯à®¤à¯ˆà®•à¯ காடà¯à®Ÿà¯" + +#: kdiff3.cpp:515 kdiff3.cpp:526 +msgid "Focus Next Window" +msgstr "அடà¯à®¤à¯à®¤ சாளரதà¯à®¤à¯ˆ நோகà¯à®•à¯" + +#: kdiff3.cpp:517 +msgid "Normal Overview" +msgstr "Normal Overview" + +#: kdiff3.cpp:518 +msgid "A vs. B Overview" +msgstr "A vs. B Overview" + +#: kdiff3.cpp:519 +msgid "A vs. C Overview" +msgstr "A vs. C Overview" + +#: kdiff3.cpp:520 +msgid "B vs. C Overview" +msgstr "B vs. C Overview" + +#: kdiff3.cpp:521 +msgid "Word Wrap Diff Windows" +msgstr "Word Wrap Diff Windows" + +#: kdiff3.cpp:522 +msgid "Add Manual Diff Alignment" +msgstr "" + +#: kdiff3.cpp:523 +msgid "Clear All Manual Diff Alignments" +msgstr "" + +#: kdiff3.cpp:528 +msgid "Focus Prev Window" +msgstr "à®®à¯à®¨à¯à®¤à¯ˆà®¯ சாளரதà¯à®¤à¯ˆ நோகà¯à®•à¯" + +#: kdiff3.cpp:529 +msgid "Toggle Split Orientation" +msgstr "பிரிபà¯à®ªà¯ திசையை மாறà¯à®±à¯" + +#: kdiff3.cpp:531 +msgid "Dir && Text Split Screen View" +msgstr "அடைவ௠மறà¯à®±à¯à®®à¯ உரையின௠பிளவின௠திரைபà¯à®ªà®¾à®°à¯à®µà¯ˆ" + +#: kdiff3.cpp:533 +msgid "Toggle Between Dir && Text View" +msgstr "அடைவà¯à®•à¯à®•à¯à®®à¯ உரை பாரà¯à®µà¯ˆà®•à¯à®•à¯à®®à¯ இடையே மாறà¯à®±à¯à®•" + +#: kdiff3.cpp:582 pdiff.cpp:1712 +msgid "The merge result hasn't been saved." +msgstr "ஒனà¯à®±à¯ சேர௠மà¯à®Ÿà®¿à®µà¯ சேகரிகà¯à®•à®ªà¯à®ªà®Ÿà®µà®¿à®²à¯à®²à¯ˆ." + +#: kdiff3.cpp:583 +msgid "Save && Quit" +msgstr "சேகரிதà¯à®¤à¯ à®®à¯à®Ÿà®¿" + +#: kdiff3.cpp:583 +msgid "Quit Without Saving" +msgstr "சேகரிகà¯à®•à®¾à®®à®²à¯ மூடà¯" + +#: kdiff3.cpp:591 pdiff.cpp:1721 +msgid "Saving the merge result failed." +msgstr "ஒனà¯à®±à¯à®šà¯‡à®°à¯ à®®à¯à®Ÿà®¿à®µà¯ˆ சேகரிதà¯à®¤à®²à¯ தோலà¯à®µà®¿à®¯à®Ÿà¯ˆà®¨à¯à®¤à®¤à¯." + +#: kdiff3.cpp:602 pdiff.cpp:978 +msgid "" +"You are currently doing a directory merge. Are you sure, you want to abort?" +msgstr "" +"நீஙà¯à®•à®³à¯ தறà¯à®ªà¯‹à®¤à¯ அடைவà¯à®•à®³à¯ˆ சேரà¯à®¤à¯à®¤à¯à®•à¯ கொணà¯à®Ÿà®¿à®°à¯à®•à¯à®•à®¿à®±à¯€à®°à¯à®•à®³à¯. நிறà¯à®¤à¯à®¤ " +"விரà¯à®®à¯à®ªà¯à®•à®¿à®±à¯€à®°à¯à®•à®³à®¾?" + +#: kdiff3.cpp:625 +msgid "Saving file..." +msgstr "கோபà¯à®ªà¯ சேகரிதà¯à®¤à®²à¯..." + +#: kdiff3.cpp:642 +msgid "Saving file with a new filename..." +msgstr "பà¯à®¤à®¿à®¯ கோபà¯à®ªà¯à®ªà¯à®ªà¯†à®¯à®°à¯à®Ÿà®©à¯ கோபà¯à®ªà®¿à®©à¯ˆ சேகரிதà¯à®¤à®²à¯..." + +#: kdiff3.cpp:732 +#, fuzzy +msgid "Printing..." +msgstr "வெளியேறà¯à®¤à®²à¯..." + +#: kdiff3.cpp:738 kdiff3.cpp:900 +msgid "Printing aborted." +msgstr "" + +#: kdiff3.cpp:870 +msgid "Selection" +msgstr "" + +#: kdiff3.cpp:896 +#, fuzzy +msgid "Printing completed." +msgstr "ஒனà¯à®±à¯à®šà¯‡à®°à¯ இயகà¯à®•à®®à¯ à®®à¯à®Ÿà®¿à®¨à¯à®¤à®¤à¯" + +#: kdiff3.cpp:906 +msgid "Exiting..." +msgstr "வெளியேறà¯à®¤à®²à¯..." + +#: kdiff3.cpp:918 +msgid "Toggling toolbar..." +msgstr "கரà¯à®µà®¿à®ªà¯à®ªà®Ÿà¯à®Ÿà®¿ மாறà¯à®±à®ªà¯à®ªà®Ÿà¯à®•à®±à®¤à¯" + +#: kdiff3.cpp:939 +msgid "Toggle the statusbar..." +msgstr "நிலைபà¯à®ªà®Ÿà¯à®Ÿà®¿à®¯à¯ˆ மாறà¯à®±à¯" + +#: kdiff3_part.cpp:155 kdiff3_part.cpp:224 +msgid "Couldn't find files for comparison." +msgstr "ஒபà¯à®ªà®¿à®Ÿà¯à®¤à®²à¯à®•à¯à®•à¯ கோபà¯à®ªà¯à®•à®³à¯ கிடைகà¯à®•à®µà®¿à®²à¯à®²à¯ˆ." + +#: kdiff3_part.cpp:291 +msgid "KDiff3Part" +msgstr "KDiff3Part" + +#: kdiff3_shell.cpp:78 +msgid "" +"Could not find our part!\n" +"This usually happens due to an installation problem. Please read the " +"README-file in the source package for details." +msgstr "" +"உஙà¯à®•à®³à¯ பகà¯à®¤à®¿à®¯à¯ˆ காணவிலà¯à®²à¯ˆ.\n" +"நிறà¯à®µà¯à®®à¯ போத௠இபà¯à®ªà®Ÿà®¿à®ªà¯à®ªà®Ÿà¯à®Ÿ பிரசà¯à®šà®©à¯ˆ à®à®±à¯à®ªà®Ÿà¯à®®à¯ விவரஙà¯à®•à®³à¯à®•à¯à®•à¯ README தொகà¯à®ªà¯à®ªà¯ˆà®ªà¯ " +"படிகà¯à®•à®µà¯à®®à¯" + +#: main.cpp:35 +msgid "Tool for Comparison and Merge of Files and Directories" +msgstr "" + +#: main.cpp:40 +msgid "Merge the input." +msgstr "உளà¯à®³à¯€à®Ÿà¯à®Ÿà¯ˆ ஒனà¯à®±à¯ சேரà¯." + +#: main.cpp:42 +msgid "Explicit base file. For compatibility with certain tools." +msgstr "தெளிவான அடிதà¯à®¤à®³à®•à¯ கோபà¯à®ªà®¿à®©à¯ˆ சில கரà¯à®µà®¿à®•à®³à¯à®Ÿà®©à¯ பொரà¯à®¤à¯à®¤à¯à®µà®¤à®±à¯à®•à¯" + +#: main.cpp:44 +msgid "Output file. Implies -m. E.g.: -o newfile.txt" +msgstr "வெளியீட௠கோபà¯à®ªà¯" + +#: main.cpp:45 +msgid "Output file, again. (For compatibility with certain tools.)" +msgstr "மறà¯à®ªà®Ÿà®¿à®¯à¯à®®à¯ கோபà¯à®ªà®¿à®©à¯ˆ வெளியீடà¯(சில கரà¯à®µà®¿à®•à®³à¯à®Ÿà®©à¯ பொரà¯à®¤à¯à®¤à¯à®µà®¤à®±à¯à®•à¯)" + +#: main.cpp:46 +msgid "No GUI if all conflicts are auto-solvable. (Needs -o file)" +msgstr "எலà¯à®²à®¾ கà¯à®´à®ªà¯à®ªà®™à¯à®•à®³à¯ˆà®¯à¯à®®à¯ தானாகவே நீஙà¯à®•à¯à®®à®¾à®©à®¾à®²à¯ GUI தேவையிலà¯à®²à¯ˆ" + +#: main.cpp:47 +msgid "Don't solve conflicts automatically. (For compatibility...)" +msgstr "தாமாகவே தீராத கà¯à®´à®ªà¯à®ªà®™à¯à®•à®³à¯ (For compatibility...)" + +#: main.cpp:48 +msgid "Visible name replacement for input file 1 (base)." +msgstr "Visible name replacement for input file 1 (base)." + +#: main.cpp:49 +msgid "Visible name replacement for input file 2." +msgstr "Visible name replacement for input file 2." + +#: main.cpp:50 +msgid "Visible name replacement for input file 3." +msgstr "Visible name replacement for input file 3." + +#: main.cpp:52 +msgid "Alternative visible name replacement. Supply this once for every input." +msgstr "" +"Alternative visible name replacement. Supply this once for every input." + +#: main.cpp:53 +msgid "" +"Override a config setting. Use once for every setting. E.g.: --cs " +"\"AutoAdvance=1\"" +msgstr "" + +#: main.cpp:54 +msgid "Show list of config settings and current values." +msgstr "" + +#: main.cpp:55 +#, fuzzy +msgid "Use a different config file." +msgstr "வேற௠விதமான கோபà¯à®ªà¯à®•à®³à®¿à®©à¯ எணà¯à®£à®¿à®•à¯à®•à¯ˆ:" + +#: main.cpp:59 +msgid "file1 to open (base, if not specified via --base)" +msgstr "கோபà¯à®ªà¯1 யை திற(அடிதà¯à®¤à®³à®®à¯ அலà¯à®²à®¤à¯ via அடிதà¯à®¤à®³à®®à¯)" + +#: main.cpp:60 +msgid "file2 to open" +msgstr "கோபà¯à®ªà¯2 திற" + +#: main.cpp:61 +msgid "file3 to open" +msgstr "கோபà¯à®ªà¯ 3னà¯à®±à¯ˆ திற" + +#: main.cpp:93 +msgid "Ignored. (User defined.)" +msgstr "" + +#. i18n: file kdiff3_part.rc line 16 +#: main.cpp:173 rc.cpp:9 +#, no-c-format +msgid "KDiff3" +msgstr "KDiff3" + +#: main.cpp:186 +msgid "+ Many thanks to those who reported bugs and contributed ideas!" +msgstr "+ Many thanks to those who reported bugs and contributed ideas!" + +#: mergeresultwindow.cpp:136 mergeresultwindow.cpp:939 +#: mergeresultwindow.cpp:953 mergeresultwindow.cpp:965 +#: mergeresultwindow.cpp:977 +#, fuzzy +msgid "Number of remaining unsolved conflicts: %1 (of which %2 are whitespace)" +msgstr "இனà¯à®©à¯à®®à¯ தீரà¯à®•à¯à®•à®ªà¯à®ªà®Ÿà®¾à®¤ கà¯à®´à®ªà¯à®ªà®™à¯à®•à®³à®¿à®©à¯ எணà¯à®£à®¿à®•à¯ˆ: %1" + +#: mergeresultwindow.cpp:285 +msgid "" +"The output has been modified.\n" +"If you continue your changes will be lost." +msgstr "" +"வெளீயிட௠மாறà¯à®±à®ªà¯à®ªà®Ÿà¯à®Ÿà¯à®³à¯à®³à®¤à¯. நீஙà¯à®•à®³à¯ தொடரà¯à®¨à¯à®¤à®¾à®²à¯ மாறà¯à®±à®™à¯à®•à®³à¯ˆ இழநà¯à®¤à¯ விடà¯à®µà¯€à®°à¯à®•à®³à¯" + +#: mergeresultwindow.cpp:797 pdiff.cpp:511 +msgid "All input files are binary equal." +msgstr "அனைதà¯à®¤à¯ உளà¯à®³à®¿à®Ÿà¯ கோபà¯à®ªà¯à®•à®³à¯à®®à¯ இரà¯à®¨à®¿à®²à¯ˆ சமமà¯" + +#: mergeresultwindow.cpp:799 +msgid "All input files contain the same text." +msgstr "அனைதà¯à®¤à¯ உளà¯à®³à¯€à®Ÿà¯à®Ÿà¯à®•à¯ கோபà¯à®ªà¯à®•à®³à¯à®®à¯ ஒரே உரையைக௠கொணà¯à®Ÿà®©." + +#: mergeresultwindow.cpp:801 +msgid "" +"Files A and B are binary equal.\n" +msgstr "" +"கோபà¯à®ªà¯à®•à®³à¯ A மறà¯à®±à¯à®®à¯ B இரà¯à®¨à®¿à®²à¯ˆ சமம௠உடையன.\n" + +#: mergeresultwindow.cpp:802 +msgid "" +"Files A and B have equal text. \n" +msgstr "" +"கோபà¯à®ªà¯à®•à®³à¯ A மறà¯à®±à¯à®®à¯ B சம உரை உடையன.\n" + +#: mergeresultwindow.cpp:803 +msgid "" +"Files A and C are binary equal.\n" +msgstr "" +"கோபà¯à®ªà¯à®•à®³à¯ A மறà¯à®±à¯à®®à¯ C இரà¯à®¨à®¿à®²à¯ˆ சமம௠உடையன.\n" + +#: mergeresultwindow.cpp:804 +msgid "" +"Files A and C have equal text. \n" +msgstr "" +"கோபà¯à®ªà¯à®•à®³à¯ A மறà¯à®±à¯à®®à¯ C சம உரை உடையன.\n" + +#: mergeresultwindow.cpp:805 +msgid "" +"Files B and C are binary equal.\n" +msgstr "" +"கோபà¯à®ªà¯à®•à®³à¯ B மறà¯à®±à¯à®®à¯ C இரà¯à®¨à®¿à®²à¯ˆ சமம௠உடையன.\n" + +#: mergeresultwindow.cpp:806 +msgid "" +"Files B and C have equal text. \n" +msgstr "" +"கோபà¯à®ªà¯à®•à®³à¯ B மறà¯à®±à¯à®®à¯ C சம உரை உடையன.\n" + +#: mergeresultwindow.cpp:812 +msgid "Total number of conflicts: " +msgstr "மொதà¯à®¤ கà¯à®´à®ªà¯à®ªà®™à¯à®•à®³à®¿à®©à¯ எணà¯à®£à®¿à®•à¯à®•à¯ˆ:" + +#: mergeresultwindow.cpp:813 +msgid "" +"\n" +"Nr of automatically solved conflicts: " +msgstr "" +"\n" +"தாமாகவே தீரà¯à®¨à¯à®¤ கà¯à®´à®ªà¯à®ªà®™à¯à®•à®³à®¿à®©à¯ எணà¯à®£à®¿à®•à¯à®•à¯ˆ" + +#: mergeresultwindow.cpp:814 +msgid "" +"\n" +"Nr of unsolved conflicts: " +msgstr "" +"\n" +"தீரà¯à®•à¯à®•à®ªà¯à®ªà®Ÿà®¾à®¤ கà¯à®´à®ªà¯à®ªà®™à¯à®•à®³à®¿à®©à¯ எணà¯à®£à®¿à®•à¯à®•à¯ˆ" + +#: mergeresultwindow.cpp:816 +msgid "Conflicts" +msgstr "கà¯à®´à®ªà¯à®ªà®™à¯à®•à®³à¯" + +#: mergeresultwindow.cpp:1652 +msgid "" +msgstr "" + +#: mergeresultwindow.cpp:1660 +#, fuzzy +msgid "" +msgstr "<ஒனà¯à®±à¯à®šà¯‡à®°à¯ கà¯à®´à®ªà¯à®ªà®®à¯>" + +#: mergeresultwindow.cpp:1662 mergeresultwindow.cpp:2427 +msgid "" +msgstr "<ஒனà¯à®±à¯à®šà¯‡à®°à¯ கà¯à®´à®ªà¯à®ªà®®à¯>" + +#: mergeresultwindow.cpp:2635 +msgid "" +"Not all conflicts are solved yet.\n" +"File not saved.\n" +msgstr "" +"அனைதà¯à®¤à¯ கà¯à®´à®ªà¯à®ªà®™à¯à®•à®³à¯à®®à¯ இனà¯à®©à¯à®®à¯ தீரவிலà¯à®²à¯ˆ.\n" +"கோபà¯à®ªà®¿à®©à¯ˆ சேமிகà¯à®•à®µà®¿à®²à¯à®²à¯ˆ \n" + +#: mergeresultwindow.cpp:2637 +msgid "Conflicts Left" +msgstr "கà¯à®´à®ªà¯à®ªà®®à®¾à®© இடதà¯" + +#: mergeresultwindow.cpp:2649 +msgid "" +"\n" +"\n" +"Creating backup failed. File not saved." +msgstr "" + +#: mergeresultwindow.cpp:2649 mergeresultwindow.cpp:2689 +msgid "File Save Error" +msgstr "கோபà¯à®ªà®¿à®© சேமிபà¯à®ªà¯ பிழை" + +#: mergeresultwindow.cpp:2689 +msgid "Error while writing." +msgstr "எழà¯à®¤à¯à®®à¯ பொழà¯à®¤à¯ பிழை" + +#: mergeresultwindow.cpp:3020 +msgid "Output" +msgstr " வெளியீடà¯" + +#: mergeresultwindow.cpp:3032 mergeresultwindow.cpp:3139 +msgid "[Modified]" +msgstr "[திரà¯à®¤à¯à®¤à®ªà¯à®ªà®Ÿà¯à®Ÿà®¤à¯]" + +#: mergeresultwindow.cpp:3039 +msgid "Encoding for saving" +msgstr "" + +#: mergeresultwindow.cpp:3075 mergeresultwindow.cpp:3081 +#: mergeresultwindow.cpp:3087 +msgid "Codec from" +msgstr "" + +#: optiondialog.cpp:362 +msgid "Unicode, 8 bit" +msgstr "" + +#: optiondialog.cpp:363 +msgid "Unicode" +msgstr "" + +#: optiondialog.cpp:364 +msgid "Latin1" +msgstr "" + +#: optiondialog.cpp:383 +msgid "Change this if non-ASCII characters are not displayed correctly." +msgstr "இலà¯à®²à®¾-ஆஸà¯à®•à®¿-எழà¯à®¤à¯à®¤à¯à®•à¯à®•à®³à¯ சரியாக வெளிகாடà¯à®Ÿà®µà®¿à®²à¯à®²à¯ˆ எனà¯à®±à®¾à®²à¯ இதை மாறà¯à®±à¯à®•" + +#: optiondialog.cpp:510 +msgid "Editor & Diff Output Font" +msgstr "திரà¯à®¤à¯à®¤à¯à®ªà®µà®°à¯à®®à¯ விதà¯à®¤à®¿à®¯à®¾à®šà®®à®¾à®© வெளியீடà¯à®Ÿà¯ எழà¯à®¤à¯à®¤à¯à®•à¯à®•à®³à¯à®®à¯" + +#: optiondialog.cpp:531 +msgid "Italic font for deltas" +msgstr "deltaவிறà¯à®•à®¾à®© இதà¯à®¤à®¾à®²à®¿à®¯ எழà¯à®¤à¯à®¤à¯à®°à¯" + +#: optiondialog.cpp:534 +msgid "" +"Selects the italic version of the font for differences.\n" +"If the font doesn't support italic characters, then this does nothing." +msgstr "" +"விதà¯à®¤à®¿à®¯à®¾à®šà®™à¯à®•à®³à¯à®•à¯à®•à®¾à®• இதà¯à®¤à®¾à®²à®¿à®¯ பதிவை தேரà¯à®¨à¯à®¤à¯†à®Ÿà¯à®•à¯à®•à®µà¯à®®à¯.\n" +"If the font doesn't support italic characters, then this does nothing." + +#: optiondialog.cpp:542 +msgid "Color" +msgstr "வரà¯à®£à®®à¯" + +#: optiondialog.cpp:542 +#, fuzzy +msgid "Colors Settings" +msgstr "இதர அமைபà¯à®ªà¯à®•à®³à¯ˆ உளà¯à®³à®Ÿà®•à¯à®•à®¿à®¯à®¤à¯" + +#: optiondialog.cpp:556 +msgid "Editor and Diff Views:" +msgstr "" + +#: optiondialog.cpp:564 +msgid "Foreground color:" +msgstr "à®®à¯à®©à¯à®©à®£à®¿ நிறமà¯" + +#: optiondialog.cpp:570 +msgid "Background color:" +msgstr "பினà¯à®©à®£à®¿ நிறமà¯" + +#: optiondialog.cpp:578 +msgid "Diff background color:" +msgstr "வேறà¯à®ªà®Ÿà¯à®Ÿ பினà¯à®©à®£à®¿ நிறமà¯" + +#: optiondialog.cpp:585 +msgid "Color A:" +msgstr "வரà¯à®£à®®à¯ A:" + +#: optiondialog.cpp:592 +msgid "Color B:" +msgstr "வரà¯à®£à®®à¯ B:" + +#: optiondialog.cpp:599 +msgid "Color C:" +msgstr "வரà¯à®£à®®à¯ C:" + +#: optiondialog.cpp:605 +msgid "Conflict color:" +msgstr "கà¯à®´à®ªà¯à®ªà®®à®¾à®© நிறமà¯" + +#: optiondialog.cpp:612 +msgid "Current range background color:" +msgstr "பினà¯à®©à®£à®¿ நிறதà¯à®¤à®¿à®©à¯ தறà¯à®ªà¯‹à®¤à¯ˆà®¯ வரமà¯à®ªà¯ " + +#: optiondialog.cpp:619 +msgid "Current range diff background color:" +msgstr "பினà¯à®©à®£à®¿ நிறதà¯à®¤à®¿à®©à¯ வேறà¯à®ªà®Ÿà¯à®Ÿ தறà¯à®ªà¯‹à®¤à¯ˆà®¯ வரமà¯à®ªà¯ " + +#: optiondialog.cpp:625 +msgid "Color for manually aligned difference ranges:" +msgstr "" + +#: optiondialog.cpp:630 +#, fuzzy +msgid "Directory Comparison View:" +msgstr "அடைவ௠ஒபà¯à®ªà®¿à®Ÿà¯à®®à¯ நிலை" + +#: optiondialog.cpp:636 +msgid "Newest file color:" +msgstr "" + +#: optiondialog.cpp:639 +msgid "" +"Changing this color will only be effective when starting the next directory " +"comparison." +msgstr "" + +#: optiondialog.cpp:644 +msgid "Oldest file color:" +msgstr "" + +#: optiondialog.cpp:651 +msgid "Middle age file color:" +msgstr "" + +#: optiondialog.cpp:658 +msgid "Color for missing files:" +msgstr "" + +#: optiondialog.cpp:670 +msgid "Editor" +msgstr "திரà¯à®¤à¯à®¤à®¿à®¯à®µà®°à¯" + +#: optiondialog.cpp:670 +#, fuzzy +msgid "Editor Behavior" +msgstr "திரà¯à®¤à¯à®¤à¯à®ªà®µà®°à®¿à®©à¯ செயலà¯à®ªà®¾à®Ÿà¯" + +#: optiondialog.cpp:680 +msgid "Tab inserts spaces" +msgstr "ததà¯à®¤à®²à¯ இடைவெளியை சொரà¯à®•à¯à®®à¯" + +#: optiondialog.cpp:683 +msgid "" +"On: Pressing tab generates the appropriate number of spaces.\n" +"Off: A Tab-character will be inserted." +msgstr "" +"On:ததà¯à®¤à®²à¯ˆ à®…à®´à¯à®¤à¯à®¤à¯à®®à¯ போத௠தேவையான இடைவெளி உரà¯à®µà®¾à®•à®¿à®±à®¤à¯, \n" +"Off:ஒர௠ததà¯à®¤à®²à¯ எழà¯à®¤à¯à®¤à¯ சொரà¯à®•à®ªà¯à®ªà®Ÿà¯à®®à¯" + +#: optiondialog.cpp:689 +msgid "Tab size:" +msgstr "Tab அளவà¯" + +#: optiondialog.cpp:694 +msgid "Auto indentation" +msgstr "தானியகà¯à®• உளà¯à®³à®Ÿà®•à¯à®•à®®à¯" + +#: optiondialog.cpp:697 +msgid "" +"On: The indentation of the previous line is used for a new line.\n" +msgstr "" +"à®®à¯à®¨à¯à®¤à¯ˆà®¯ வரியில௠பயனà¯à®ªà®Ÿà¯à®¤à¯à®¤à®ªà¯à®ªà®Ÿà¯à®Ÿ நகரà¯à®ªà¯à®ªà¯ பà¯à®¤à®¿à®¯ வரியிலà¯à®®à¯ பயனà¯à®ªà®Ÿà¯à®¤à¯à®¤à®ªà¯à®ªà®Ÿà¯à®•à®¿à®±à®¤à¯\n" + +#: optiondialog.cpp:701 +msgid "Auto copy selection" +msgstr "தானாகவே தேரà¯à®¨à¯à®¤à¯†à®Ÿà¯à®•à¯à®•à®ªà¯à®ªà®Ÿà¯à®Ÿ படிவà¯" + +#: optiondialog.cpp:704 +msgid "" +"On: Any selection is immediately written to the clipboard.\n" +"Off: You must explicitely copy e.g. via Ctrl-C." +msgstr "" +"எநà¯à®¤ ஒர௠தேரà¯à®µà¯ˆà®¯à¯à®®à¯ உடனடியாக கிளிப௠போரà¯à®Ÿà¯à®•à¯à®•à¯ எழà¯à®¤à®µà¯à®®à¯.\n" +"நீஙà¯à®•à®³à¯ வெளிபà¯à®ªà®Ÿà¯ˆà®¯à®¾à®• படிவ௠செயà¯" + +#: optiondialog.cpp:709 +#, fuzzy +msgid "Line end style:" +msgstr "வரிகளின௠பாணி தாளà¯" + +#: optiondialog.cpp:721 +#, fuzzy +msgid "" +"Sets the line endings for when an edited file is saved.\n" +"DOS/Windows: CR+LF; UNIX: LF; with CR=0D, LF=0A" +msgstr "" +"கோடà¯à®Ÿà®¿à®©à¯ à®®à¯à®Ÿà®¿à®µà¯ˆ அமைதà¯à®¤à¯ தொகà¯à®ªà¯à®ªà¯à®•à¯à®•à¯‹à®ªà¯à®ªà®¿à®²à¯ சேமிDOS/விணà¯à®Ÿà¯‹à®¸à¯: " +"CR+LF;யà¯à®©à®¿à®•à¯à®¸à¯:மறà¯à®±à¯à®®à¯ CR=0D, LF=0A" + +#: optiondialog.cpp:732 +#, fuzzy +msgid "Diff" +msgstr "KDiff3" + +#: optiondialog.cpp:732 +#, fuzzy +msgid "Diff Settings" +msgstr "வேறà¯à®ªà®¾à®Ÿà¯ & சேரà¯à®¤à¯à®¤à®¿à®Ÿà¯ அமைபà¯à®ªà¯à®•à®³à¯" + +#: optiondialog.cpp:743 +msgid "Preserve carriage return" +msgstr " carriage return யை பராமரி" + +#: optiondialog.cpp:746 +msgid "" +"Show carriage return characters '\\r' if they exist.\n" +"Helps to compare files that were modified under different operating systems." +msgstr "carriage return எழà¯à®¤à¯à®¤à¯à®•à¯à®•à®³à¯ˆ காடà¯à®Ÿà¯" + +#: optiondialog.cpp:751 +msgid "Ignore numbers" +msgstr "சொறà¯à®•à®³à¯ˆ தவிரà¯" + +#: optiondialog.cpp:754 +msgid "" +"Ignore number characters during line matching phase. (Similar to Ignore white " +"space.)\n" +"Might help to compare files with numeric data." +msgstr "வரி பொரà¯à®¤à¯à®¤à¯à®¤à®²à®¿à®©à¯ போத௠எண௠எழà¯à®¤à¯à®¤à¯à®•à¯à®•à®³à¯ˆ நிராகரி." + +#: optiondialog.cpp:759 +#, fuzzy +msgid "Ignore C/C++ comments" +msgstr "C/C++ கà¯à®±à®¿à®ªà¯à®ªà¯à®°à¯ˆà®•à®³à¯ˆ பà¯à®±à®•à¯à®•à®£à®¿" + +#: optiondialog.cpp:761 +msgid "Treat C/C++ comments like white space." +msgstr "C/C++ கà¯à®±à®¿à®ªà¯à®ªà¯à®°à¯ˆà®•à®³à¯ˆ வெளà¯à®³à¯ˆ இடம௠போல உபசரி." + +#: optiondialog.cpp:765 +msgid "Ignore case" +msgstr "Ignore case" + +#: optiondialog.cpp:768 +msgid "Treat case differences like white space changes. ('a'<=>'A')" +msgstr "Treat case differences like white space changes. ('a'<=>'A')" + +#: optiondialog.cpp:772 +msgid "Preprocessor command:" +msgstr "à®®à¯à®©à¯ செயலாகà¯à®• கடà¯à®Ÿà®³à¯ˆ" + +#: optiondialog.cpp:776 +msgid "User defined pre-processing. (See the docs for details.)" +msgstr "உபயோகிபà¯à®ªà®¾à®³à®°à®¾à®²à¯ à®…à®±à¯à®¤à®¿à®¯à®¿à®Ÿà®ªà¯à®ªà®Ÿà¯à®Ÿ à®®à¯à®©à¯-செயலாகà¯à®•à®¿" + +#: optiondialog.cpp:779 +msgid "Line-matching preprocessor command:" +msgstr "வரி-பொரà¯à®¤à¯à®¤à¯ à®®à¯à®©à¯-செயலாகà¯à®•à®¿ கடà¯à®Ÿà®³à¯ˆ" + +#: optiondialog.cpp:783 +msgid "" +"This pre-processor is only used during line matching.\n" +"(See the docs for details.)" +msgstr "à®®à¯à®©à¯-செயலாகà¯à®•à®¿ வரி-பொரà¯à®¤à¯à®¤à¯à®¤à®²à®¿à®©à¯ போத௠பயனà¯à®ªà¯à®ªà®Ÿà¯à®¤à¯à®¤à®ªà¯à®ªà®Ÿà¯à®•à®¿à®±à®¤à¯" + +#: optiondialog.cpp:786 +msgid "Try hard (slower)" +msgstr "கடினமாக à®®à¯à®¯à®±à¯à®šà®¿(மெதà¯à®µà®¾à®•)" + +#: optiondialog.cpp:789 +msgid "" +"Enables the --minimal option for the external diff.\n" +"The analysis of big files will be much slower." +msgstr "" +"வெளி வேறà¯à®±à¯à®®à¯ˆà®•à¯à®•à®¾à®© --கà¯à®±à¯ˆà®¨à¯à®¤ விரà¯à®ªà¯à®ªà®¤à¯à®¤à¯ˆ செயலà¯à®ªà®Ÿà¯à®¤à¯à®¤à¯à®•à®¿à®±à®¤à¯.\n" +"பெரிய கோபà¯à®ªà¯à®•à®³à®¿à®©à¯ பகà¯à®ªà¯à®ªà®¾à®¯à¯à®µà¯ மெதà¯à®µà®¾à®• இரà¯à®•à¯à®•à¯à®®à¯." + +#: optiondialog.cpp:794 +msgid "Auto advance delay (ms):" +msgstr "தானாக à®®à¯à®©à¯à®©à¯‡à®±à®¿à®¯ தாமதம௠(ms):" + +#: optiondialog.cpp:799 +msgid "" +"When in Auto-Advance mode the result of the current selection is shown \n" +"for the specified time, before jumping to the next conflict. Range: 0-2000 ms" +msgstr "" +"தறà¯à®ªà¯‹à®¤à¯ˆà®¯ தேரà¯à®¨à¯à®¤à¯†à®Ÿà¯à®ªà¯à®ªà®¿à®©à¯ à®®à¯à®Ÿà®¿à®µà¯ˆ தானாக - à®®à¯à®©à¯à®©à¯‡à®±à¯à®®à¯ அமைபà¯à®ªà®¿à®²à¯.\n" +"கà¯à®±à®¿à®ªà¯à®ªà®¿à®Ÿà¯à®Ÿ கால இடைவெளியிலà¯, அடà¯à®¤à¯à®¤ சிகà¯à®•à®²à¯à®•à¯à®•à¯ à®®à¯à®©à¯ தெரிநà¯à®¤à¯à®•à¯Šà®³à¯à®³à®²à®¾à®®à¯." + +#: optiondialog.cpp:809 +#, fuzzy +msgid "Merge Settings" +msgstr "வேறà¯à®ªà®¾à®Ÿà¯ & சேரà¯à®¤à¯à®¤à®¿à®Ÿà¯ அமைபà¯à®ªà¯à®•à®³à¯" + +#: optiondialog.cpp:822 +msgid "White space 2-file merge default:" +msgstr "வெளà¯à®³à¯ˆ இடம௠2-கோபà¯à®ªà¯ ஒனà¯à®±à®¿à®£à¯ˆ à®®à¯à®©à¯à®©à®¿à®°à¯à®ªà¯à®ªà¯:" + +#: optiondialog.cpp:826 optiondialog.cpp:839 +#, fuzzy +msgid "Manual Choice" +msgstr "கையேட௠விரà¯à®ªà¯à®ªà®®à¯" + +#: optiondialog.cpp:830 optiondialog.cpp:844 +msgid "" +"Allow the merge algorithm to automatically select an input for white-space-only " +"changes." +msgstr "" +"வெளà¯à®³à¯ˆ-இடமà¯-மாறà¯à®±à®™à¯à®•à®³à¯à®•à¯à®•à®¾à®• தானாக தேரà¯à®¨à¯à®¤à¯†à®Ÿà¯à®•à¯à®•à¯à®®à¯ உளà¯à®³à¯€à®Ÿà¯à®Ÿà®¿à®±à¯à®•à¯à®•à¯ ஒனà¯à®±à®¿à®£à¯ˆ " +"படிமà¯à®±à¯ˆà®¯à¯ˆ அனà¯à®®à®¤à®¿à®•à¯à®•à¯à®®à¯." + +#: optiondialog.cpp:835 +msgid "White space 3-file merge default:" +msgstr "வெளà¯à®³à¯ˆ இடம௠3-கோபà¯à®ªà¯ ஒனà¯à®±à®¿à®£à¯ˆ à®®à¯à®©à¯à®©à®¿à®°à¯à®ªà¯à®ªà¯:" + +#: optiondialog.cpp:849 +msgid "Automatic Merge Regular Expression" +msgstr "" + +#: optiondialog.cpp:858 smalldialogs.cpp:397 +msgid "Auto merge regular expression:" +msgstr "" + +#: optiondialog.cpp:862 +msgid "" +"Regular expression for lines where KDiff3 should automatically choose one " +"source.\n" +"When a line with a conflict matches the regular expression then\n" +"- if available - C, otherwise B will be chosen." +msgstr "" + +#: optiondialog.cpp:868 +msgid "Run regular expression auto merge on merge start" +msgstr "" + +#: optiondialog.cpp:870 +msgid "" +"Run the merge for auto merge regular expressions\n" +"immediately when a merge starts.\n" +msgstr "" + +#: optiondialog.cpp:875 +msgid "Version Control History Merging" +msgstr "" + +#: optiondialog.cpp:884 smalldialogs.cpp:424 +msgid "History start regular expression:" +msgstr "" + +#: optiondialog.cpp:888 +msgid "" +"Regular expression for the start of the version control history entry.\n" +"Usually this line contains the \"$Log$\"-keyword.\n" +"Default value: \".*\\$Log.*\\$.*\"" +msgstr "" + +#: optiondialog.cpp:894 smalldialogs.cpp:453 +msgid "History entry start regular expression:" +msgstr "" + +#: optiondialog.cpp:906 +msgid "" +"A version control history entry consists of several lines.\n" +"Specify the regular expression to detect the first line (without the leading " +"comment).\n" +"Use parentheses to group the keys you want to use for sorting.\n" +"If left empty, then KDiff3 assumes that empty lines separate history entries.\n" +"See the documentation for details." +msgstr "" + +#: optiondialog.cpp:914 +msgid "History merge sorting" +msgstr "" + +#: optiondialog.cpp:916 +msgid "Sort version control history by a key." +msgstr "" + +#: optiondialog.cpp:926 +msgid "History entry start sort key order:" +msgstr "" + +#: optiondialog.cpp:930 +msgid "" +"Each parentheses used in the regular expression for the history start entry\n" +"groups a key that can be used for sorting.\n" +"Specify the list of keys (that are numbered in order of occurrence\n" +"starting with 1) using ',' as separator (e.g. \"4,5,6,1,2,3,7\").\n" +"If left empty, then no sorting will be done.\n" +"See the documentation for details." +msgstr "" + +#: optiondialog.cpp:941 +msgid "Merge version control history on merge start" +msgstr "" + +#: optiondialog.cpp:943 +msgid "Run version control history automerge on merge start." +msgstr "" + +#: optiondialog.cpp:947 +msgid "Test your regular expressions" +msgstr "" + +#: optiondialog.cpp:952 +msgid "Irrelevant merge command:" +msgstr "" + +#: optiondialog.cpp:956 +msgid "" +"If specified this script is run after automerge\n" +"when no other relevant changes were detected.\n" +"Called with the parameters: filename1 filename2 filename3" +msgstr "" + +#: optiondialog.cpp:966 +msgid "Directory Merge" +msgstr "அடைவà¯à®šà¯ சேரà¯à®•à¯à®•à¯ˆ" + +#: optiondialog.cpp:975 +msgid "Recursive directories" +msgstr "திரà¯à®®à¯à®ª நிகழà¯à®®à¯ அடைவà¯à®•à®³à¯" + +#: optiondialog.cpp:977 +msgid "Whether to analyze subdirectories or not." +msgstr "உபஅடைவà¯à®•à®³à¯ˆ பரிசோதிகà¯à®• வேணà¯à®Ÿà¯à®®à®¾?" + +#: optiondialog.cpp:979 +msgid "File pattern(s):" +msgstr "கோபà¯à®ªà¯ வடிவஙà¯à®•à®³à¯:" + +#: optiondialog.cpp:984 +msgid "" +"Pattern(s) of files to be analyzed. \n" +"Wildcards: '*' and '?'\n" +"Several Patterns can be specified by using the separator: ';'" +msgstr "" +"பரிசோதனையிலிரà¯à®¨à¯à®¤à¯ வெளியேறà¯à®±à®ªà¯à®ªà®Ÿ வேணà¯à®Ÿà®¿à®¯ கோபà¯à®ªà¯à®•à®³à®¿à®©à¯ வடிவஙà¯à®•à®³à¯.Wildcards ';' " +"உபயோகிதà¯à®¤à¯ பலà¯à®µà¯‡à®±à¯ வடிவஙà¯à®•à®³à¯ˆ கà¯à®±à®¿à®ªà¯à®ªà®¿à®Ÿà®²à®¾à®®à¯" + +#: optiondialog.cpp:990 +msgid "File-anti-pattern(s):" +msgstr "வடிவறà¯à®± கோபà¯à®ªà¯" + +#: optiondialog.cpp:995 +msgid "" +"Pattern(s) of files to be excluded from analysis. \n" +"Wildcards: '*' and '?'\n" +"Several Patterns can be specified by using the separator: ';'" +msgstr "" +"பரிசோதனையிலிரà¯à®¨à¯à®¤à¯ வெளியேறà¯à®±à®ªà¯à®ªà®Ÿ வேணà¯à®Ÿà®¿à®¯ கோபà¯à®ªà¯à®•à®³à®¿à®©à¯ வடிவஙà¯à®•à®³à¯.Wildcards ';' " +"உபயோகிதà¯à®¤à¯ பலà¯à®µà¯‡à®±à¯ வடிவஙà¯à®•à®³à¯ˆ கà¯à®±à®¿à®ªà¯à®ªà®¿à®Ÿà®²à®¾à®®à¯" + +#: optiondialog.cpp:1001 +msgid "Dir-anti-pattern(s):" +msgstr "வடிவறà¯à®± அடைவà¯" + +#: optiondialog.cpp:1006 +msgid "" +"Pattern(s) of directories to be excluded from analysis. \n" +"Wildcards: '*' and '?'\n" +"Several Patterns can be specified by using the separator: ';'" +msgstr "" +"பரிசோதனையிலிரà¯à®¨à¯à®¤à¯ வெளியேறà¯à®±à®ªà¯à®ªà®Ÿ வேணà¯à®Ÿà®¿à®¯ கோபà¯à®ªà¯à®•à®³à®¿à®©à¯ வடிவஙà¯à®•à®³à¯.Wildcards ';' " +"உபயோகிதà¯à®¤à¯ பலà¯à®µà¯‡à®±à¯ வடிவஙà¯à®•à®³à¯ˆ கà¯à®±à®¿à®ªà¯à®ªà®¿à®Ÿà®²à®¾à®®à¯" + +#: optiondialog.cpp:1012 +msgid "Use .cvsignore" +msgstr ".cvsignore உபயோகி" + +#: optiondialog.cpp:1015 +msgid "" +"Extends the antipattern to anything that would be ignored by CVS.\n" +"Via local \".cvsignore\"-files this can be directory specific." +msgstr "" +"Extends the antipattern to anything that would be ignored by CVS.\n" +"Via local \".cvsignore\"-files this can be directory specific." + +#: optiondialog.cpp:1020 +msgid "Find hidden files and directories" +msgstr "மறைநà¯à®¤ கோபà¯à®ªà¯à®•à®³à¯ˆà®¯à¯à®®à¯ அடைவà¯à®•à®³à¯ˆà®¯à¯à®®à¯ தேடà¯" + +#: optiondialog.cpp:1023 +msgid "Finds files and directories with the hidden attribute." +msgstr "கோபà¯à®ªà¯à®•à®³à¯ˆà®¯à¯à®®à¯ அடைவà¯à®•à®³à¯ˆà®¯à¯à®®à¯ மறைநà¯à®¤ கà¯à®£à®™à¯à®•à®³à¯à®Ÿà®©à¯ தேரà¯à®¨à¯à®¤à¯†à®Ÿà¯ " + +#: optiondialog.cpp:1025 +msgid "Finds files and directories starting with '.'." +msgstr "'.'. தொடஙà¯à®•à¯à®®à¯ கோபà¯à®ªà¯à®•à®³à¯à®®à¯ அடைவà¯à®•à®³à¯à®®à¯ தேடà¯" + +#: optiondialog.cpp:1029 +msgid "Follow file links" +msgstr "கோபà¯à®ªà¯ இணைபà¯à®ªà¯ˆ பினà¯à®ªà®±à¯à®±à¯" + +#: optiondialog.cpp:1032 +msgid "" +"On: Compare the file the link points to.\n" +"Off: Compare the links." +msgstr "" +"கோபà¯à®ªà®¿à®©à¯ˆ இணைபà¯à®ªà¯ கà¯à®±à®¿à®¯à¯‹à®Ÿà¯ ஒபà¯à®ªà®¿à®Ÿà¯.\n" +" இணைபà¯à®ªà¯ˆ ஒபà¯à®ªà®¿à®Ÿà¯" + +#: optiondialog.cpp:1037 +msgid "Follow directory links" +msgstr "அடைவை இணைபà¯à®ªà¯ˆ பினà¯à®ªà®±à¯à®±à¯" + +#: optiondialog.cpp:1040 +msgid "" +"On: Compare the directory the link points to.\n" +"Off: Compare the links." +msgstr "On:அடைவை இணைபà¯à®ªà¯ கà¯à®±à®¿à®¯à¯‹à®Ÿà¯ ஒபà¯à®ªà®¿à®Ÿà¯Off இணைபà¯à®ªà¯ˆ ஒபà¯à®ªà®¿à®Ÿà¯" + +#: optiondialog.cpp:1056 +msgid "Case sensitive filename comparison" +msgstr "" + +#: optiondialog.cpp:1059 +msgid "" +"The directory comparison will compare files or directories when their names " +"match.\n" +"Set this option if the case of the names must match. (Default for Windows is " +"off, otherwise on.)" +msgstr "" + +#: optiondialog.cpp:1063 +msgid "File Comparison Mode" +msgstr "File Comparison Mode" + +#: optiondialog.cpp:1067 +#, fuzzy +msgid "Binary comparison" +msgstr "Binary Comparison" + +#: optiondialog.cpp:1068 +msgid "Binary comparison of each file. (Default)" +msgstr "Binary comparison of each file. (Default)" + +#: optiondialog.cpp:1070 +#, fuzzy +msgid "Full analysis" +msgstr "Full Analysis" + +#: optiondialog.cpp:1071 +msgid "" +"Do a full analysis and show statistics information in extra columns.\n" +"(Slower than a binary comparison, much slower for binary files.)" +msgstr "" +"Do a full analysis and show statistics information in extra columns.\n" +"(Slower than a binary comparison, much slower for binary files.)" + +#: optiondialog.cpp:1074 +msgid "Trust the modification date (unsafe)" +msgstr "மாறà¯à®±à®¿à®¯ தேதியை நமà¯à®ªà¯(பாதà¯à®•à®¾à®ªà¯à®ªà®¿à®²à¯à®²à¯ˆ)" + +#: optiondialog.cpp:1075 +msgid "" +"Assume that files are equal if the modification date and file length are " +"equal.\n" +"Useful for big directories or slow networks." +msgstr "" +"மாறà¯à®±à®¿à®¯ தேதியà¯à®®à¯ கோபà¯à®ªà¯ நீளமà¯à®®à¯ சமமாக இரà¯à®¨à¯à®¤à®¾à®²à¯ எலà¯à®²à®¾ கோபà¯à®ªà¯à®•à®³à¯à®®à¯ சமம௠என " +"எணà¯à®£à®²à®¾à®®à¯. இத௠பெரிய அடைவà¯à®•à®³à¯à®•à¯à®•à¯ அலà¯à®²à®¤à¯ மெதà¯à®µà®¾à®© இணைபà¯à®ªà¯à®•à®³à¯à®•à¯à®•à¯ உதவà¯à®®à¯" + +#: optiondialog.cpp:1078 +msgid "Trust the size (unsafe)" +msgstr "அளவை உறà¯à®¤à®¿à®ªà®Ÿà¯à®¤à¯à®¤à¯(பாதà¯à®•à®¾à®ªà¯à®ªà®¿à®²à¯à®²à¯ˆ)" + +#: optiondialog.cpp:1079 +msgid "" +"Assume that files are equal if their file lengths are equal.\n" +"Useful for big directories or slow networks when the date is modified during " +"download." +msgstr "" +"மாறà¯à®±à®¿à®¯ தேதியà¯à®®à¯ கோபà¯à®ªà¯ நீளமà¯à®®à¯ சமமாக இரà¯à®¨à¯à®¤à®¾à®²à¯ எலà¯à®²à®¾ கோபà¯à®ªà¯à®•à®³à¯à®®à¯ சமம௠என " +"எணà¯à®£à®²à®¾à®®à¯. இத௠பெரிய அடைவà¯à®•à®³à¯à®•à¯à®•à¯ அலà¯à®²à®¤à¯ மெதà¯à®µà®¾à®© இணைபà¯à®ªà¯à®•à®³à¯à®•à¯à®•à¯ உதவà¯à®®à¯." + +#: optiondialog.cpp:1083 +msgid "Synchronize directories" +msgstr "ஒதà¯à®¤à®¿à®¯à®•à¯à®•à¯ அடைவை" + +#: optiondialog.cpp:1086 +msgid "" +"Offers to store files in both directories so that\n" +"both directories are the same afterwards.\n" +"Works only when comparing two directories without specifying a destination." +msgstr "" +"இரணà¯à®Ÿà¯ அடைவிலà¯à®®à¯ கோபà¯à®ªà¯à®•à®³à¯ˆ சேமிபà¯à®ªà®¤à®±à¯à®•à¯ அனà¯à®®à®¤à®¿à®ªà¯à®ªà®¤à®¾à®²à¯, இரணà¯à®Ÿà¯ அடைவà¯à®•à®³à¯à®®à¯ " +"பினà¯à®©à®°à¯ ஒனà¯à®±à®¾à®•à®µà¯‡ இரà¯à®•à¯à®•à¯à®®à¯ .இரணà¯à®Ÿà¯ அடைவà¯à®•à®³à¯ˆà®¯à¯à®®à¯ சேரà¯à®®à®¿à®Ÿà®®à¯ கà¯à®±à®¿à®ªà¯à®ªà®¿à®Ÿà®¾à®®à®²à¯ " +"ஒதà¯à®¤à®¿à®Ÿà¯à®®à¯ பொழà¯à®¤à¯à®¤à®¾à®©à¯ வேலை செயà¯à®¯à¯à®®à¯." + +#: optiondialog.cpp:1092 +#, fuzzy +msgid "White space differences considered equal" +msgstr "வெளà¯à®³à¯ˆ இடம௠3-கோபà¯à®ªà¯ ஒனà¯à®±à®¿à®£à¯ˆ à®®à¯à®©à¯à®©à®¿à®°à¯à®ªà¯à®ªà¯:" + +#: optiondialog.cpp:1095 +msgid "" +"If files differ only by white space consider them equal.\n" +"This is only active when full analysis is chosen." +msgstr "" + +#: optiondialog.cpp:1101 +msgid "Copy newer instead of merging (unsafe)" +msgstr "ஒனà¯à®±à®¾à®• சேரà¯à®ªà¯à®ªà®¤à®±à¯à®•à¯ பதிலாக பà¯à®¤à®¿à®¯à®µà®°à¯ˆ பதியெடà¯(பாதà¯à®•à®¾à®ªà¯à®ªà®¿à®²à¯à®²à¯ˆ)" + +#: optiondialog.cpp:1104 +msgid "" +"Don't look inside, just take the newer file.\n" +"(Use this only if you know what you are doing!)\n" +"Only effective when comparing two directories." +msgstr "" +"உளà¯à®³à¯‡ பாரà¯à®•à¯à®•à®¾à®¤à¯‡ பà¯à®¤à®¿à®¯ கோபà¯à®ªà®¿à®©à¯ˆ மடà¯à®Ÿà¯à®®à¯ எடà¯.(நீ செயà¯à®µà®¤à¯ எனà¯à®© எனà¯à®±à¯ தெரிநà¯à®¤à®¾à®²à¯ " +"மடà¯à®Ÿà¯à®®à¯‡ இதை உபயோகபà¯à®ªà®Ÿà¯à®¤à¯à®¤à¯) இரணà¯à®Ÿà¯ அடைவà¯à®•à®³à¯ˆ ஒதà¯à®¤à®¿à®Ÿà¯à®®à¯ போத௠மடà¯à®Ÿà¯à®®à¯‡ விளைவà¯à®•à®³à¯ " +"à®à®±à¯à®ªà®Ÿà¯à®®à¯" + +#: optiondialog.cpp:1109 +msgid "Backup files (.orig)" +msgstr "பினà¯à®šà¯‡à®®à®¿à®ªà¯à®ªà¯ கோபà¯à®ªà¯à®•à®³à¯(.orig)" + +#: optiondialog.cpp:1112 +msgid "" +"When a file would be saved over an old file, then the old file\n" +"will be renamed with a '.orig'-extension instead of being deleted." +msgstr "" +"பழைய கோபà¯à®ªà®¿à®²à¯ ஒர௠கோபà¯à®ªà®¿à®©à¯ˆ சேமிகà¯à®•à¯à®®à¯ பொழà¯à®¤à¯, பழைய கோபà¯à®ªà®¿à®²à¯ மூல நீடà¯à®Ÿà¯à®¤à®²à¯à®Ÿà®©à¯ " +"பெயர௠மாறà¯à®®à¯, நீகà¯à®•à®ªà®Ÿà¯à®µà®¤à®±à¯à®•à¯ பதிலாக. " + +#: optiondialog.cpp:1176 +msgid "Regional Settings" +msgstr "இதர அமைபà¯à®ªà¯à®•à®³à¯ˆ உளà¯à®³à®Ÿà®•à¯à®•à®¿à®¯à®¤à¯" + +#: optiondialog.cpp:1272 +msgid "Language (restart required)" +msgstr "மொழி " + +#: optiondialog.cpp:1304 +msgid "" +"Choose the language of the GUI-strings or \"Auto\".\n" +"For a change of language to take place, quit and restart KDiff3." +msgstr "" +"கீழà¯à®•à®£à¯à®Ÿ மொழிகளில௠GUI- எழà¯à®¤à¯à®¤à¯à®•à¯à®•à®³à¯ˆà®¤à¯ தேரà¯à®¨à¯à®¤à¯†à®Ÿà¯ மொழிகளை மாறà¯à®± KDiff3யை " +"தேரà¯à®¨à¯à®¤à¯†à®Ÿà¯" + +#: optiondialog.cpp:1322 +msgid "Use the same encoding for everything:" +msgstr "" + +#: optiondialog.cpp:1325 +msgid "" +"Enable this allows to change all encodings by changing the first only.\n" +"Disable this if different individual settings are needed." +msgstr "" + +#: optiondialog.cpp:1330 +#, fuzzy +msgid "Note: Local Encoding is " +msgstr "லொகல௠கà¯à®±à®¿à®®à¯à®±à¯ˆà®¯à®¾à®•à¯à®•à®®à¯ உபயோகி" + +#: optiondialog.cpp:1334 +msgid "File Encoding for A:" +msgstr "" + +#: optiondialog.cpp:1340 +msgid "" +"If enabled then Unicode (UTF-16 or UTF-8) encoding will be detected.\n" +"If the file encoding is not detected then the selected encoding will be used as " +"fallback.\n" +"(Unicode detection depends on the first bytes of a file - the byte order mark " +"\"BOM\".)" +msgstr "" + +#: optiondialog.cpp:1344 optiondialog.cpp:1353 optiondialog.cpp:1362 +msgid "Auto Detect Unicode" +msgstr "" + +#: optiondialog.cpp:1349 +msgid "File Encoding for B:" +msgstr "" + +#: optiondialog.cpp:1358 +msgid "File Encoding for C:" +msgstr "" + +#: optiondialog.cpp:1367 +msgid "File Encoding for Merge Output and Saving:" +msgstr "" + +#: optiondialog.cpp:1371 +#, fuzzy +msgid "Auto Select" +msgstr "தானாகவே தேரà¯à®¨à¯à®¤à¯†à®Ÿà¯à®•à¯à®•à®ªà¯à®ªà®Ÿà¯à®Ÿ படிவà¯" + +#: optiondialog.cpp:1374 +msgid "" +"If enabled then the encoding from the input files is used.\n" +"In ambiguous cases a dialog will ask the user to choose the encoding for " +"saving." +msgstr "" + +#: optiondialog.cpp:1378 +msgid "File Encoding for Preprocessor Files:" +msgstr "" + +#: optiondialog.cpp:1389 +msgid "Right To Left Language" +msgstr "" + +#: optiondialog.cpp:1392 +msgid "" +"Some languages are read from right to left.\n" +"This setting will change the viewer and editor accordingly." +msgstr "" + +#: optiondialog.cpp:1402 +#, fuzzy +msgid "Integration" +msgstr "இயகà¯à®•à®®à¯." + +#: optiondialog.cpp:1402 +#, fuzzy +msgid "Integration Settings" +msgstr "இதர அமைபà¯à®ªà¯à®•à®³à¯ˆ உளà¯à®³à®Ÿà®•à¯à®•à®¿à®¯à®¤à¯" + +#: optiondialog.cpp:1412 +msgid "Command line options to ignore:" +msgstr "" + +#: optiondialog.cpp:1417 +msgid "" +"List of command line options that should be ignored when KDiff3 is used by " +"other tools.\n" +"Several values can be specified if separated via ';'\n" +"This will suppress the \"Unknown option\"-error." +msgstr "" + +#: optiondialog.cpp:1480 +msgid "" +"You selected a variable width font.\n" +"\n" +"Because this program doesn't handle variable width fonts\n" +"correctly, you might experience problems while editing.\n" +"\n" +"Do you want to continue or do you want to select another font." +msgstr "" +"நீஙà¯à®•à®³à¯ மாறà¯à®±à®•à¯à®•à¯‚டிய அகல எழà¯à®¤à¯à®¤à¯à®°à¯à®µà¯ˆ தேரà¯à®¤à¯†à®Ÿà¯à®¤à¯à®¤à¯à®³à¯à®³à¯€à®°à¯à®•à®³à¯\n" +"இதறà¯à®•à¯ காரணம௠இநà¯à®¤ நிரல௠மாறà¯à®±à®•à¯ கூடிய அகலமான எழà¯à®¤à¯à®¤à¯à®°à¯à®µà¯ˆ கையாளாதà¯. " +"திரà¯à®¤à¯à®¤à®™à¯à®•à®³à¯ செயà¯à®¯à¯à®®à¯ பொழà¯à®¤à¯à®ªà¯ பிரசà¯à®šà®©à¯ˆà®•à®³à¯ˆ சநà¯à®¤à®¿à®¤à¯à®°à¯à®•à¯à®•à®²à®¾à®®à¯, சரியாக நீஙà¯à®•à®³à¯ " +"தொடர வேணà¯à®Ÿà¯à®®à®¾ அலà¯à®²à®¤à¯, வேற௠எழà¯à®¤à¯à®¤à¯à®°à¯à®µà¯ˆ தேரà¯à®¨à¯à®¤à¯†à®Ÿà¯à®•à¯à®•à®¿à®±à¯€à®°à¯à®•à®³à®¾." + +#: optiondialog.cpp:1484 +msgid "Incompatible Font" +msgstr "கசà¯à®šà®¿à®¤à®®à®¿à®²à¯à®²à®¾à®¤ எழà¯à®¤à¯à®¤à¯à®°à¯" + +#: optiondialog.cpp:1485 +msgid "Continue at Own Risk" +msgstr "உஙà¯à®•à®³à¯à®Ÿà¯ˆà®¯ சொநà¯à®¤ ஆபதà¯à®¤à®¿à®²à¯ தொடரவà¯à®®à¯" + +#: optiondialog.cpp:1485 +msgid "Select Another Font" +msgstr "மறà¯à®±à¯Šà®°à¯ எழà¯à®¤à¯à®¤à¯à®°à¯à®µà¯ˆ தேரà¯à®¤à¯†à®Ÿà¯" + +#: optiondialog.cpp:1521 +msgid "This resets all options. Not only those of the current topic." +msgstr "" +"இத௠அனைதà¯à®¤à¯ தேரà¯à®µà¯à®•à®³à¯ˆà®¯à¯à®®à¯ மாறà¯à®±à®¿à®¯à®®à¯ˆà®•à¯à®•à¯à®®à¯. தறà¯à®ªà¯Šà®´à¯à®¤à¯à®³à¯à®³ தலைபà¯à®ªà¯ மடà¯à®Ÿà¯à®®à®²à¯à®²" + +#: pdiff.cpp:258 +msgid "PreprocessorCmd: " +msgstr "à®®à¯à®©à¯ செயலாகà¯à®• கடà¯à®Ÿà®³à¯ˆ:" + +#: pdiff.cpp:263 +msgid "" +"The following option(s) you selected might change data:\n" +msgstr "" +"கீழà¯à®•à®£à¯à®Ÿ தேரà¯à®µà¯à®•à®³à®¿à®²à¯ தரவை தேரà¯à®µà¯à®šà¯†à®¯à¯:\n" + +#: pdiff.cpp:264 +msgid "" +"\n" +"Most likely this is not wanted during a merge.\n" +"Do you want to disable these settings or continue with these settings active?" +msgstr "" +"\n" +"தேவை இலà¯à®²à®¾à®¤ செலà¯à®•à®³à¯.\n" +"இவறà¯à®±à¯ˆ à®®à¯à®Ÿà®•à¯à®• வேணà¯à®Ÿà¯à®®à®¾?" + +#: pdiff.cpp:266 +#, fuzzy +msgid "Option Unsafe for Merging" +msgstr "காபà¯à®ªà¯ இலà¯à®²à®¾à®¤ தேரà¯à®µà¯à®•à®³à¯ செலà¯à®•à®³à¯" + +#: pdiff.cpp:267 +#, fuzzy +msgid "Use These Options During Merge" +msgstr "செலà¯à®•à®³à®¿à®²à¯ தேரà¯à®µà¯à®•à®³à¯ˆ உபயோகபà¯à®ªà®Ÿà¯à®¤à¯à®¤à¯ " + +#: pdiff.cpp:267 +#, fuzzy +msgid "Disable Unsafe Options" +msgstr "பாதà¯à®•à®¾à®ªà¯à®ªà¯ இலà¯à®²à®¾à®¤ தேரà¯à®µà¯à®•à®³à¯ˆ à®®à¯à®Ÿà®•à¯à®•à¯" + +#: pdiff.cpp:297 +msgid "Loading A" +msgstr "A à®à®±à¯à®±à¯à®¤à®²à¯" + +#: pdiff.cpp:301 +msgid "Loading B" +msgstr " B à®à®±à¯à®±à¯à®¤à®²à¯" + +#: pdiff.cpp:318 pdiff.cpp:344 +msgid "Diff: A <-> B" +msgstr "விதà¯à®¤à®¿à®¯à®¾à®šà®®à¯ A <-> B" + +#: pdiff.cpp:324 pdiff.cpp:366 +msgid "Linediff: A <-> B" +msgstr "வரி விதà¯à®¤à®¿à®¯à®¾à®šà®®à¯ : A <->B" + +#: pdiff.cpp:335 +msgid "Loading C" +msgstr " C à®à®±à¯à®±à¯à®¤à®²à¯" + +#: pdiff.cpp:347 +msgid "Diff: B <-> C" +msgstr "விதà¯à®¤à®¿à®¯à®¾à®šà®®à¯ B <-> C" + +#: pdiff.cpp:350 +msgid "Diff: A <-> C" +msgstr "விதà¯à®¤à®¿à®¯à®¾à®šà®®à¯ A <-> C" + +#: pdiff.cpp:369 +msgid "Linediff: B <-> C" +msgstr "வரி விதà¯à®¤à®¿à®¯à®¾à®šà®®à¯ B <-> C" + +#: pdiff.cpp:372 +msgid "Linediff: A <-> C" +msgstr "வரி விதà¯à®¤à®¿à®¯à®¾à®šà®®à¯ : A <-> C" + +#: pdiff.cpp:513 +#, fuzzy +msgid "All input files contain the same text, but are not binary equal." +msgstr "அனைதà¯à®¤à¯ உளà¯à®³à¯€à®Ÿà¯à®Ÿà¯à®•à¯ கோபà¯à®ªà¯à®•à®³à¯à®®à¯ ஒரே உரையைக௠கொணà¯à®Ÿà®©." + +#: pdiff.cpp:515 pdiff.cpp:517 pdiff.cpp:519 +#, fuzzy +msgid "" +"Files %1 and %2 are binary equal.\n" +msgstr "" +"கோபà¯à®ªà¯à®•à®³à¯ B மறà¯à®±à¯à®®à¯ C இரà¯à®¨à®¿à®²à¯ˆ சமம௠உடையன.\n" + +#: pdiff.cpp:516 pdiff.cpp:518 pdiff.cpp:520 +#, fuzzy +msgid "" +"Files %1 and %2 have equal text, but are not binary equal. \n" +msgstr "" +"கோபà¯à®ªà¯à®•à®³à¯ A மறà¯à®±à¯à®®à¯ B இரà¯à®¨à®¿à®²à¯ˆ சமம௠உடையன.\n" + +#: pdiff.cpp:530 +msgid "" +"Some inputfiles don't seem to be pure textfiles.\n" +"Note that the KDiff3-merge was not meant for binary data.\n" +"Continue at your own risk." +msgstr "" +"Some inputfiles don't seem to be pure textfiles.\n" +"Note that the KDiff3-merge was not meant for binary data.\n" +"Continue at your own risk." + +#: pdiff.cpp:979 +msgid "Abort" +msgstr "விடà¯à®¤à®²à¯" + +#: pdiff.cpp:985 pdiff.cpp:1073 +msgid "Opening files..." +msgstr "திறநà¯à®¤ கோபà¯à®ªà¯à®•à®³à¯" + +#: pdiff.cpp:1050 pdiff.cpp:1121 +msgid "File open error" +msgstr "கோபà¯à®ªà¯ திறபà¯à®ªà¯ பிழை" + +#: pdiff.cpp:1153 +msgid "Cutting selection..." +msgstr "வெடà¯à®Ÿà¯à®¤à®²à¯ˆ தேரà¯à®¨à¯à®¤à¯†à®Ÿà¯" + +#: pdiff.cpp:1174 +msgid "Copying selection to clipboard..." +msgstr "தேரà¯à®¨à¯à®¤à¯†à®Ÿà¯à®•à¯à®•à®ªà¯à®ªà®Ÿà¯à®Ÿà®¤à¯ˆ கிளிபà¯à®ªà¯‹à®°à¯à®Ÿà®¿à®±à¯à®•à¯ நகலெடà¯à®•à¯à®•" + +#: pdiff.cpp:1190 +msgid "Inserting clipboard contents..." +msgstr "கிளிபà¯à®ªà¯‹à®°à¯à®Ÿà¯ உளà¯à®³à®Ÿà®•à¯à®•à®¤à¯à®¤à¯ˆ சொரà¯à®•à¯" + +#: pdiff.cpp:1713 +msgid "Save && Continue" +msgstr "சேமி தொடரà¯" + +#: pdiff.cpp:1713 +msgid "Continue Without Saving" +msgstr "சேமிகà¯à®•à®¾à®®à®²à¯ தொடரà¯" + +#: pdiff.cpp:1920 +msgid "Search complete." +msgstr "தேடல௠மà¯à®Ÿà®¿à®µà®Ÿà¯ˆà®¨à¯à®¤à®¤à¯" + +#: pdiff.cpp:1920 +msgid "Search Complete" +msgstr "தேடல௠மà¯à®Ÿà®¿à®µà®Ÿà¯ˆà®¨à¯à®¤à®¤à¯" + +#: pdiff.cpp:2144 +msgid "Nothing is selected in either diff input window." +msgstr "" + +#: pdiff.cpp:2144 +#, fuzzy +msgid "Error while adding manual diff range" +msgstr "அடைவை உரà¯à®µà®¾à®•à¯à®•à¯à®®à¯ போத௠பிழை" + +#. i18n: file kdiff3_part.rc line 4 +#: rc.cpp:3 +#, no-c-format +msgid "&KDiff3" +msgstr "&KDiff3" + +#. i18n: file kdiff3_part.rc line 13 +#: rc.cpp:6 +#, no-c-format +msgid "Configure KDiff3" +msgstr "அமை KDiff3" + +#. i18n: file kdiff3_shell.rc line 7 +#: rc.cpp:15 +#, no-c-format +msgid "&Directory" +msgstr "அடைவà¯" + +#. i18n: file kdiff3_shell.rc line 30 +#: rc.cpp:18 +#, no-c-format +msgid "Current Item Merge Operation" +msgstr "நடபà¯à®ªà¯ உரà¯à®ªà¯à®ªà®Ÿà®¿ à®’à®±à¯à®±à®¿à®£à¯ˆ செயறà¯à®ªà®¾à®Ÿà¯ " + +#. i18n: file kdiff3_shell.rc line 38 +#: rc.cpp:21 +#, no-c-format +msgid "Current Item Sync Operation" +msgstr "நடபà¯à®ªà¯ உரà¯à®ªà¯à®ªà®Ÿà®¿ இசைவ௠செயறà¯à®ªà®¾à®Ÿà¯" + +#. i18n: file kdiff3_shell.rc line 50 +#: rc.cpp:24 +#, no-c-format +msgid "&Movement" +msgstr "நகரà¯à®¤à¯à®¤à¯à®µà®¤à¯ " + +#. i18n: file kdiff3_shell.rc line 61 +#: rc.cpp:27 +#, no-c-format +msgid "D&iffview" +msgstr "விதà¯à®¤à®¿à®¯à®¾à®š பாரà¯à®µà¯ˆ" + +#. i18n: file kdiff3_shell.rc line 73 +#: rc.cpp:30 +#, no-c-format +msgid "&Merge" +msgstr "ஒனà¯à®±à®¾à®•à®šà¯à®šà¯‡à®°à¯" + +#. i18n: file kdiff3_shell.rc line 95 +#: rc.cpp:33 +#, no-c-format +msgid "&Window" +msgstr "சாளரஙà¯à®•à®³à¯" + +#: smalldialogs.cpp:53 +msgid "A (Base):" +msgstr "A (அடிபà¯à®ªà®Ÿà¯ˆ)" + +#: smalldialogs.cpp:59 smalldialogs.cpp:75 smalldialogs.cpp:91 +#: smalldialogs.cpp:134 +msgid "File..." +msgstr "கோபà¯à®ªà¯" + +#: smalldialogs.cpp:61 smalldialogs.cpp:77 smalldialogs.cpp:93 +#: smalldialogs.cpp:136 +msgid "Dir..." +msgstr "அடைவà¯" + +#: smalldialogs.cpp:86 +msgid "C (Optional):" +msgstr "C (விரà¯à®ªà¯à®ªà®™à¯à®•à®³à¯)" + +#: smalldialogs.cpp:108 +msgid "Swap/Copy Names ..." +msgstr "" + +#: smalldialogs.cpp:114 smalldialogs.cpp:115 smalldialogs.cpp:116 +msgid "Swap %1<->%2" +msgstr "" + +#: smalldialogs.cpp:117 smalldialogs.cpp:118 smalldialogs.cpp:119 +msgid "Copy %1->Output" +msgstr "" + +#: smalldialogs.cpp:120 smalldialogs.cpp:121 smalldialogs.cpp:122 +msgid "Swap %1<->Output" +msgstr "" + +#: smalldialogs.cpp:129 +msgid "Output (optional):" +msgstr "வெளீயிட௠(விரà¯à®ªà¯à®ªà®™à¯à®•à®³à¯)" + +#: smalldialogs.cpp:158 +msgid "Configure..." +msgstr "அமை" + +#: smalldialogs.cpp:347 +#, fuzzy +msgid "Search text:" +msgstr "உரையைத௠தேடà¯:" + +#: smalldialogs.cpp:354 +msgid "Case sensitive" +msgstr "எழà¯à®¤à¯à®¤à¯ வகை உணரகà¯à®•à¯‚டிய" + +#: smalldialogs.cpp:357 +msgid "Search A" +msgstr "Aவைத௠தேடà¯" + +#: smalldialogs.cpp:362 +msgid "Search B" +msgstr "Bவைத௠தேடà¯" + +#: smalldialogs.cpp:367 +msgid "Search C" +msgstr "Cவைத௠தேடà¯" + +#: smalldialogs.cpp:372 +msgid "Search output" +msgstr "வெளியீடà¯à®Ÿà¯ˆà®¤à¯ தேடà¯" + +#: smalldialogs.cpp:377 +msgid "&Search" +msgstr "தேடà¯" + +#: smalldialogs.cpp:394 +msgid "Regular Expression Tester" +msgstr "" + +#: smalldialogs.cpp:405 +msgid "Example auto merge line:" +msgstr "" + +#: smalldialogs.cpp:407 +msgid "For auto merge test copy a line as used in your files." +msgstr "" + +#: smalldialogs.cpp:413 smalldialogs.cpp:442 smalldialogs.cpp:479 +msgid "Match result:" +msgstr "" + +#: smalldialogs.cpp:432 +msgid "Example history start line (with leading comment):" +msgstr "" + +#: smalldialogs.cpp:435 +msgid "" +"Copy a history start line as used in your files,\n" +"including the leading comment." +msgstr "" + +#: smalldialogs.cpp:461 +msgid "History sort key order:" +msgstr "" + +#: smalldialogs.cpp:469 +msgid "Example history entry start line (without leading comment):" +msgstr "" + +#: smalldialogs.cpp:471 +msgid "" +"Copy a history entry start line as used in your files,\n" +"but omit the leading comment." +msgstr "" + +#: smalldialogs.cpp:486 +msgid "Sort key result:" +msgstr "" + +#: smalldialogs.cpp:537 smalldialogs.cpp:547 smalldialogs.cpp:568 +msgid "Match success." +msgstr "" + +#: smalldialogs.cpp:541 smalldialogs.cpp:551 smalldialogs.cpp:574 +#, fuzzy +msgid "Match failed." +msgstr "சேகரிபà¯à®ªà¯ தோலà¯à®µà®¿à®¯à®Ÿà¯ˆà®¨à¯à®¤à®¤à¯." + +#: smalldialogs.cpp:559 +msgid "Opening and closing parentheses don't match in regular expression." +msgstr "" + +#, fuzzy +#~ msgid "Diff and Merge" +#~ msgstr "வேறà¯à®ªà®¾à®Ÿà¯ & சேரà¯à®¤à¯à®¤à®¿à®Ÿà¯" + +#, fuzzy +#~ msgid "Save Directory Merge State ..." +#~ msgstr "அடைவà¯à®šà¯ சேரà¯à®•à¯à®•à¯ˆ" + +#, fuzzy +#~ msgid "Load Directory Merge State ..." +#~ msgstr "அடைவà¯à®šà¯ சேரà¯à®•à¯à®•à¯ˆ" + +#, fuzzy +#~ msgid "Synchronize Directories" +#~ msgstr "ஒதà¯à®¤à®¿à®¯à®•à¯à®•à¯ அடைவை" + +#, fuzzy +#~ msgid "Copy Newer Files Instead of Merging" +#~ msgstr "ஒனà¯à®±à®¾à®• சேரà¯à®ªà¯à®ªà®¤à®±à¯à®•à¯ பதிலாக பà¯à®¤à®¿à®¯à®µà®°à¯ˆ பதியெடà¯(பாதà¯à®•à®¾à®ªà¯à®ªà®¿à®²à¯à®²à¯ˆ)" + +#~ msgid "List only deltas" +#~ msgstr "மாறà¯à®±à®®à¯ மடà¯à®Ÿà¯à®®à¯ படà¯à®Ÿà®¿à®¯à®²à®¿à®Ÿà¯" + +#~ msgid "Files and directories without change will not appear in the list." +#~ msgstr "கோபà¯à®ªà¯à®•à®³à¯à®®à¯ அடைவà¯à®•à®³à¯à®®à¯ மாறà¯à®±à®ªà¯à®ªà®Ÿà®¾à®®à®²à¯ படà¯à®Ÿà®¿à®¯à®²à®¿à®²à¯ இடம௠பெறாதà¯" + +#, fuzzy +#~ msgid "no selection" +#~ msgstr "தானாகவே தேரà¯à®¨à¯à®¤à¯†à®Ÿà¯à®•à¯à®•à®ªà¯à®ªà®Ÿà¯à®Ÿ படிவà¯" + +#, fuzzy +#~ msgid "Manually match lines" +#~ msgstr "கையேட௠விரà¯à®ªà¯à®ªà®®à¯" + +#~ msgid "Has no effect. For compatibility with certain tools." +#~ msgstr "Has no effect. For compatibility with certain tools." + +#~ msgid "For compatibility with certain tools." +#~ msgstr "சில கரà¯à®µà®¿à®•à®³à¯à®Ÿà®©à¯ பொரà¯à®¨à¯à®¤à¯à®¤à®²à¯" + +#~ msgid "Colors in Editor & Diff Output" +#~ msgstr "திரà¯à®¤à¯à®¤à¯à®ªà®µà®°à®¿à®©à¯ வணà¯à®£à®®à¯à®®à¯ விதà¯à®¤à®¿à®¯à®¾à®šà®®à®¾à®© வெளியீடà¯" + +#~ msgid "Text Diff and Merge Tool" +#~ msgstr "உரை வேறà¯à®ªà®¾à®Ÿà¯ மறà¯à®±à¯à®®à¯ கரà¯à®µà®¿ சேரà¯à®•à¯à®•à¯ˆ" + +#~ msgid "" +#~ "\n" +#~ "\n" +#~ "File not saved." +#~ msgstr "" +#~ "\n" +#~ "\n" +#~ "கோபà¯à®ªà®¿à®©à¯ˆ சேமிகà¯à®•à®µà®¿à®²à¯à®²à¯ˆ" + +#~ msgid "Out of memory while preparing to save." +#~ msgstr "சேமிகà¯à®•à¯à®®à¯ தறà¯à®µà®¾à®¯à®¿à®²à¯ நினைவ௠தவறியதà¯" + +#~ msgid "Delete (If Exists)" +#~ msgstr "நீகà¯à®•à¯(இரà¯à®¨à¯à®¤à®¾à®²à¯)" + +#~ msgid "Delete A and B" +#~ msgstr "A மறà¯à®±à¯à®®à¯ B நீகà¯à®•à¯ " + +#~ msgid "Merge to A and B" +#~ msgstr " A மறà¯à®±à¯à®®à¯Bகà¯à®•à®¾à®© ஒனà¯à®±à®¿à®£à¯ˆ " diff --git a/po/tg.po b/po/tg.po new file mode 100644 index 0000000..4540f3e --- /dev/null +++ b/po/tg.po @@ -0,0 +1,2450 @@ +# translation of kdiff3.po to Tajik +# Copyright (C) 2004, 2005 Free Software Foundation, Inc. +# 2004, infoDev, a World Bank organization +# 2004, Khujand Computer Technologies, Inc. +# 2004, Youth Opportunities, NGO +# Akmal Vatanshoev , 2004. +# Akbar Vatanshoev , 2004. +# Victor Ibragimov , 2004. +# Victor Ibragimov , 2005. +msgid "" +msgstr "" +"Project-Id-Version: kdiff3\n" +"POT-Creation-Date: 2006-11-05 08:45+0100\n" +"PO-Revision-Date: 2005-09-17 13:29+0500\n" +"Last-Translator: Victor Ibragimov \n" +"Language-Team: Tajik\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: KBabel 1.10\n" + +#: _translatorinfo.cpp:1 +msgid "" +"_: NAME OF TRANSLATORS\n" +"Your names" +msgstr "" +"Tajik KDE Teams: Марина Колючева, Виктор Ибрагимов, Курбанова Гулноз Ðкмал " +"Ватаншоев, Эркинҷон Пулатов, Довудӣ Гулшод" + +#: _translatorinfo.cpp:3 +msgid "" +"_: EMAIL OF TRANSLATORS\n" +"Your emails" +msgstr "youth_opportunities@tajik.net erkin_pulatov@mail.ru" + +#: diff.cpp:246 +msgid "Writing clipboard data to temp file failed." +msgstr "Дар Ñилули мухобиротӣ навиштани таърих ва Ñуръати файл." + +#: diff.cpp:250 +msgid "From Clipboard" +msgstr "Ðз буфери иваз" + +#: diff.cpp:491 +msgid "" +"Preprocessing possibly failed. Check this command:\n" +"\n" +" %1\n" +"\n" +"The preprocessing command will be disabled now." +msgstr "" +"Пеш-коркардкуни мумкин ,ки аз кор монд. Санҷед ин фармонро:\n" +"\n" +" %1\n" +"\n" +"Фармони пеш-коркардкуни ҳоло аз кор мемонад." + +#: diff.cpp:526 +msgid "" +"The line-matching-preprocessing possibly failed. Check this command:\n" +"\n" +" %1\n" +"\n" +"The line-matching-preprocessing command will be disabled now." +msgstr "" +"Хати-ҷамъ кунии- пешкоркардкуни мумкин нашуд.Санҷед ин фармонро:\n" +"\n" +" %1\n" +"\n" +"\n" +"Хати-ҷамъ кунии- пешкоркардкунии фармон ҳоло аз кор мемонад." + +#: diff.cpp:1631 diff.cpp:1645 +msgid "" +"Data loss error:\n" +"If it is reproducable please contact the author.\n" +msgstr "" +"Маълумотҳои гумкарда:\n" +"Ðгар ин зиёд карда шавад Ð¸Ð»Ñ‚Ð¸Ð¼Ð¾Ñ Ð±Ð¾ муаллиф алоқа кунед.\n" + +#: diff.cpp:1633 diff.cpp:1647 +msgid "Severe Internal Error" +msgstr "Хатогии даруни" + +#: difftextwindow.cpp:1643 kdiff3.cpp:753 +#, fuzzy +msgid "Top line" +msgstr "Сатри Ñккум%1" + +#: difftextwindow.cpp:1653 +msgid "End" +msgstr "Охир" + +#: directorymergewindow.cpp:142 +msgid "Mix of links and normal files." +msgstr "Мувофиқкунии ишораҳо бо файлҳои оддӣ." + +#: directorymergewindow.cpp:149 +msgid "Link: " +msgstr "Ðлоқа: " + +#: directorymergewindow.cpp:157 +msgid "Size. " +msgstr "Ðндоза. " + +#: directorymergewindow.cpp:170 +msgid "Date & Size: " +msgstr "Таърихи рӯз ва андоза: " + +#: directorymergewindow.cpp:179 directorymergewindow.cpp:185 +msgid "Creating temp copy of %1 failed." +msgstr "Ðаметавонам нуÑхаи Ñквақтаро Ñҷод кунам %1." + +#: directorymergewindow.cpp:196 directorymergewindow.cpp:204 +msgid "Opening %1 failed." +msgstr "Кушодан %1 нашуд." + +#: directorymergewindow.cpp:208 +#, fuzzy +msgid "Comparing file..." +msgstr "Ðигоҳ доштани файл ..." + +#: directorymergewindow.cpp:218 directorymergewindow.cpp:224 +#, c-format +msgid "Error reading from %1" +msgstr "Хатогӣ дар вақти хониш аз %1" + +#: directorymergewindow.cpp:282 +msgid "Name" +msgstr "Ðом" + +#: directorymergewindow.cpp:286 +msgid "Operation" +msgstr "Ðмал" + +#: directorymergewindow.cpp:287 +msgid "Status" +msgstr "ВазъиÑÑ‚" + +#: directorymergewindow.cpp:288 +msgid "Unsolved" +msgstr "Иҷозат дода нашуд" + +#: directorymergewindow.cpp:289 +msgid "Solved" +msgstr "Иҷозат дода шуда" + +#: directorymergewindow.cpp:290 +msgid "Nonwhite" +msgstr "Сиёҳ" + +#: directorymergewindow.cpp:291 +msgid "White" +msgstr "Сафед" + +#: directorymergewindow.cpp:319 +msgid "" +"You are currently doing a directory merge. Are you sure, you want to abort the " +"merge and rescan the directory?" +msgstr "" +"Ҳоло барнома дар тартиби Ñкҷошавии каталогҳо кор мекунад. Оё шумо дар ҳақиқат " +"мехоҳед, ки ҳамаи тағйиротҳоро неÑÑ‚ кунед ва таркиби каталогро ан нав кунед?" + +#: directorymergewindow.cpp:320 directorymergewindow.cpp:2868 +msgid "Rescan" +msgstr "Дигар кардан" + +#: directorymergewindow.cpp:320 kdiff3.cpp:603 pdiff.cpp:979 +msgid "Continue Merging" +msgstr "Давом додан" + +#: directorymergewindow.cpp:462 +msgid "Opening of directories failed:" +msgstr "Ðаметавонам каталогҳоро кушоÑм:" + +#: directorymergewindow.cpp:465 +msgid "" +"Dir A \"%1\" does not exist or is not a directory.\n" +msgstr "" +"Каталоги Ð \"%1\" вуҷуд надорад.\n" + +#: directorymergewindow.cpp:468 +msgid "" +"Dir B \"%1\" does not exist or is not a directory.\n" +msgstr "" +"Каталоги Ð’ \"%1\" вуҷуд надорад.\n" + +#: directorymergewindow.cpp:471 +msgid "" +"Dir C \"%1\" does not exist or is not a directory.\n" +msgstr "" +"Каталоги C \"%1\" вуҷуд надорад.\n" + +#: directorymergewindow.cpp:473 +msgid "Directory Open Error" +msgstr "Хатогӣ дар вақти хониши каталог" + +#: directorymergewindow.cpp:481 +msgid "" +"The destination directory must not be the same as A or B when three directories " +"are merged.\n" +"Check again before continuing." +msgstr "" +"ДиректориÑи муаёÑнкуни боÑд бошад миÑли Ð Ñ‘ Ð’ вақте,ки Ñе директориÑҳо Ñкҷо " +"шуданд.\n" +"Санҷед бори дигар пеш аз давомкуни." + +#: directorymergewindow.cpp:483 +msgid "Parameter Warning" +msgstr "Параметри нодуруÑÑ‚" + +#: directorymergewindow.cpp:488 +#, fuzzy +msgid "Scanning directories..." +msgstr "Мушоҳидакунии каталогҳо..." + +#: directorymergewindow.cpp:537 +msgid "Reading Directory A" +msgstr "Хониши каталоги Ð" + +#: directorymergewindow.cpp:559 +msgid "Reading Directory B" +msgstr "Хониши каталоги Ð’" + +#: directorymergewindow.cpp:581 +msgid "Reading Directory C" +msgstr "Хониши каталоги С" + +#: directorymergewindow.cpp:607 +msgid "Some subdirectories were not readable in" +msgstr "Ðаметавонам баъзе зеркаталогҳоро хонам дар" + +#: directorymergewindow.cpp:612 +msgid "Check the permissions of the subdirectories." +msgstr "Ҳуқуқҳои ин каталогҳоро тафтиш кунед." + +#: directorymergewindow.cpp:646 kdiff3.cpp:552 kdiff3.cpp:636 kdiff3.cpp:661 +#: kdiff3.cpp:934 kdiff3.cpp:955 pdiff.cpp:1059 pdiff.cpp:1131 pdiff.cpp:1169 +#: pdiff.cpp:1185 pdiff.cpp:1215 pdiff.cpp:1226 +msgid "Ready." +msgstr "Тайёр аÑÑ‚." + +#: directorymergewindow.cpp:660 +msgid "Directory Comparison Status" +msgstr "Ҳолати муқоиÑакунии каталогҳо" + +#: directorymergewindow.cpp:661 +msgid "Number of subdirectories:" +msgstr "Миқдори зеркаталогҳо:" + +#: directorymergewindow.cpp:662 +msgid "Number of equal files:" +msgstr "Миқдори файлҳои Ñкхела:" + +#: directorymergewindow.cpp:663 +msgid "Number of different files:" +msgstr "Миқдори файлҳои ҳархела:" + +#: directorymergewindow.cpp:666 +msgid "Number of manual merges:" +msgstr "Миқдори Ñкҷошавии даÑÑ‚Ó£:" + +#: directorymergewindow.cpp:802 +msgid "This affects all merge operations." +msgstr "Ин ба ҳамаи Ñкҷошавӣ таъÑир мераÑонад." + +#: directorymergewindow.cpp:803 +msgid "Changing All Merge Operations" +msgstr "Тағйироти ҳамаи Ñкҷошавиҳо" + +#: directorymergewindow.cpp:803 mergeresultwindow.cpp:287 +msgid "C&ontinue" +msgstr "&Давом додан" + +#: directorymergewindow.cpp:1169 +msgid "Processing " +msgstr "Коркард " + +#: directorymergewindow.cpp:1647 directorymergewindow.cpp:1653 +msgid "To do." +msgstr "Кардан." + +#: directorymergewindow.cpp:1756 directorymergewindow.cpp:2899 +msgid "Copy A to B" +msgstr "ÐуÑха кардан Рба Ð’" + +#: directorymergewindow.cpp:1757 directorymergewindow.cpp:2900 +msgid "Copy B to A" +msgstr "ÐуÑха кардан Ð’ ба Ð" + +#: directorymergewindow.cpp:1758 directorymergewindow.cpp:2901 +msgid "Delete A" +msgstr "ÐеÑÑ‚ кардани Ð" + +#: directorymergewindow.cpp:1759 directorymergewindow.cpp:2902 +msgid "Delete B" +msgstr "ÐеÑÑ‚ кардани Ð’" + +#: directorymergewindow.cpp:1760 +msgid "Delete A & B" +msgstr "ÐеÑÑ‚ кардани Рва Ð’" + +#: directorymergewindow.cpp:1761 directorymergewindow.cpp:2904 +msgid "Merge to A" +msgstr "ПайваÑÑ‚ кардан ба A" + +#: directorymergewindow.cpp:1762 directorymergewindow.cpp:2905 +msgid "Merge to B" +msgstr "ПайваÑÑ‚ кардан ба Ð’" + +#: directorymergewindow.cpp:1763 +msgid "Merge to A & B" +msgstr "ПайваÑÑ‚ кардан ба A & Ð’" + +#: directorymergewindow.cpp:1767 directorymergewindow.cpp:2896 +msgid "Delete (if exists)" +msgstr "ÐеÑÑ‚ кардан (агар вуҷуд дорад)" + +#: directorymergewindow.cpp:1768 directorymergewindow.cpp:1769 +#: directorymergewindow.cpp:2895 optiondialog.cpp:809 smalldialogs.cpp:102 +msgid "Merge" +msgstr "ПайваÑÑ‚ кардан" + +#: directorymergewindow.cpp:1768 directorymergewindow.cpp:1769 +msgid "Merge (manual)" +msgstr "ПайваÑÑ‚ кардан (даÑÑ‚Ó£)" + +#: directorymergewindow.cpp:1770 +msgid "Error: Conflicting File Types" +msgstr "Хатогӣ: ЯкҷоÑнашавандаи шакли файлҳо" + +#: directorymergewindow.cpp:1771 +msgid "Error: Dates are equal but files are not." +msgstr "Хатогӣ: Вақт мувофиқ аÑÑ‚, лекин файлҳо нет." + +#: directorymergewindow.cpp:1795 directorymergewindow.cpp:1824 +#: directorymergewindow.cpp:1849 +msgid "This operation is currently not possible." +msgstr "Ҳоло номумкин аÑÑ‚." + +#: directorymergewindow.cpp:1795 directorymergewindow.cpp:1824 +#: directorymergewindow.cpp:1849 directorymergewindow.cpp:2106 +msgid "Operation Not Possible" +msgstr "ПайваÑÑ‚ кардан" + +#: directorymergewindow.cpp:1888 +msgid "" +"This should never happen: \n" +"\n" +"mergeResultSaved: m_pMFI=0\n" +"\n" +"If you know how to reproduce this, please contact the program author." +msgstr "" +"mergeResultSaved: m_pMFI=0\n" +"Ðгар шумо Ñабабро донед, ба муаллиф муроҷиат кунед." + +#: directorymergewindow.cpp:1888 +msgid "Program Error" +msgstr "Хатогии барнома" + +#: directorymergewindow.cpp:1899 +msgid "" +"An error occurred while copying.\n" +msgstr "" +"Хатогии нуÑхакунӣ.\n" + +#: directorymergewindow.cpp:1900 directorymergewindow.cpp:2306 +msgid "Merge Error" +msgstr "Хатогии ÑкҷоÑшавӣ" + +#: directorymergewindow.cpp:1905 directorymergewindow.cpp:2311 +msgid "Error." +msgstr "Хатогӣ." + +#: directorymergewindow.cpp:1910 directorymergewindow.cpp:2202 +#: directorymergewindow.cpp:2242 +msgid "Done." +msgstr "Тайёр аÑÑ‚." + +#: directorymergewindow.cpp:1933 +msgid "Not saved." +msgstr "Захира нашуд." + +#: directorymergewindow.cpp:1968 +msgid "Unknown merge operation. (This must never happen!)" +msgstr "ПайваÑтшавии номаълум" + +#: directorymergewindow.cpp:2000 +msgid "Unknown merge operation." +msgstr "ПайваÑтшавии номаълум." + +#: directorymergewindow.cpp:2015 +msgid "" +"The merge is about to begin.\n" +"\n" +"Choose \"Do it\" if you have read the instructions and know what you are " +"doing.\n" +"Choosing \"Simulate it\" will tell you what would happen.\n" +"\n" +"Be aware that this program still has beta status and there is NO WARRANTY " +"whatsoever! Make backups of your vital data!" +msgstr "" +"Ҳоло ÑкҷоÑшавӣ Ñар мешавад.\n" +"\n" +"Баъди хондани даÑтур, \"Ҳал кардан\"-ро пахш кунед.\n" +"Барои нигоҳ кардани воқеа, \"МоделÑозӣ\"-ро пахш кунед.\n" +"\n" +"Мо малиҳат медиҳем, ки доимо пеш аз ÑкҷоÑшавӣ нуÑхаҳои захиравиро кунед!" + +#: directorymergewindow.cpp:2020 +msgid "Starting Merge" +msgstr "Оғози ÑкҷоÑшавӣ" + +#: directorymergewindow.cpp:2020 +msgid "Do It" +msgstr "Ҳал кардан" + +#: directorymergewindow.cpp:2020 +msgid "Simulate It" +msgstr "МоделÑозӣ" + +#: directorymergewindow.cpp:2046 +msgid "" +"The highlighted item has a different type in the different directories. Select " +"what to do." +msgstr "" +"Файли интихобшуда дар ҳар каталог шкли гуногун дорад. Чӣ кор карданро интихоб " +"кунед." + +#: directorymergewindow.cpp:2055 +msgid "" +"The modification dates of the file are equal but the files are not. Select what " +"to do." +msgstr "" +"Маълумотҳои охирини тағйироти файлҳо Ñкхела ҳаÑтанд, вале таркиб неÑÑ‚. Чӣ кор " +"карданро интихоб кунед." + +#: directorymergewindow.cpp:2106 +msgid "" +"This operation is currently not possible because directory merge is currently " +"running." +msgstr "Ҳоло ÑкҷоÑшавии каталогҳо ҳал карда мешавад." + +#: directorymergewindow.cpp:2166 +msgid "" +"There was an error in the last step.\n" +"Do you want to continue with the item that caused the error or do you want to " +"skip this item?" +msgstr "" +"Дар Ñтапи ҷорӣ хатогие ба амал омад.\n" +"Давом додан Ñ‘ Ñар додан?" + +#: directorymergewindow.cpp:2168 +msgid "Continue merge after an error" +msgstr "Давом додан баъди хатогӣ" + +#: directorymergewindow.cpp:2168 +msgid "Continue With Last Item" +msgstr "Давом додан" + +#: directorymergewindow.cpp:2168 +msgid "Skip Item" +msgstr "Сар додан" + +#: directorymergewindow.cpp:2202 +msgid "Skipped." +msgstr "Са дода шуд." + +#: directorymergewindow.cpp:2209 directorymergewindow.cpp:2435 +msgid "In progress..." +msgstr "Кор рафта иÑтодааÑÑ‚..." + +#: directorymergewindow.cpp:2257 +msgid "Merge operation complete." +msgstr "ЯкҷоÑшавӣ ба анҷом раÑид." + +#: directorymergewindow.cpp:2257 directorymergewindow.cpp:2260 +msgid "Merge Complete" +msgstr "ЯкҷоÑшавӣ ба анҷом раÑид" + +#: directorymergewindow.cpp:2269 +msgid "" +"Simulated merge complete: Check if you agree with the proposed operations." +msgstr "ЯкҷоÑшавӣ ба анҷом раÑид. Оё шумо бо тағйиротҳои додашуда розӣ ҳаÑтед?" + +#: directorymergewindow.cpp:2305 +msgid "" +"An error occurred. Press OK to see detailed information.\n" +msgstr "" +"Хатогӣ ба амал омад. Барои ахбороти илова OK-ро пахш кунед.\n" + +#: directorymergewindow.cpp:2348 +msgid "Error: While deleting %1: Creating backup failed." +msgstr "Хатогӣ: Ðаметавонам нуÑхаи захираро Ñҷод кунам %1." + +#: directorymergewindow.cpp:2355 +msgid "delete directory recursively( %1 )" +msgstr "неÑÑ‚ кардани каталог рекурÑивӣ( %1 )" + +#: directorymergewindow.cpp:2357 +msgid "delete( %1 )" +msgstr "неÑÑ‚ кардан( %1 )" + +#: directorymergewindow.cpp:2372 +msgid "Error: delete dir operation failed while trying to read the directory." +msgstr "Хатогӣ: наметавонам каталогро неÑÑ‚ кунам." + +#: directorymergewindow.cpp:2391 +msgid "Error: rmdir( %1 ) operation failed." +msgstr "Хатогӣ: хатогии rmdir( %1 )." + +#: directorymergewindow.cpp:2401 +msgid "Error: delete operation failed." +msgstr "Хатогӣ: наметавонам неÑÑ‚ кунам." + +#: directorymergewindow.cpp:2427 +msgid "manual merge( %1, %2, %3 -> %4)" +msgstr "ÑкҷоÑшавии даÑÑ‚Ó£( %1, %2, %3 -> %4)" + +#: directorymergewindow.cpp:2430 +msgid "" +" Note: After a manual merge the user should continue by pressing F7." +msgstr " Қайд: Баъди анҷоми ÑкҷоÑшавии даÑÑ‚Ó£ F7-ро пахш кунед." + +#: directorymergewindow.cpp:2453 +msgid "Error: copy( %1 -> %2 ) failed.Deleting existing destination failed." +msgstr "" +"Хатогӣ: наметавонам( %1 -> %2 ) нуÑха кунам. ÐеÑÑ‚ кардани муайÑни вуҷулшуда " +"муÑÑÑар карда нашуд." + +#: directorymergewindow.cpp:2463 +msgid "copyLink( %1 -> %2 )" +msgstr "бадарғаи нишонавӣ( %1 -> %2 )" + +#: directorymergewindow.cpp:2474 +msgid "Error: copyLink failed: Remote links are not yet supported." +msgstr "Хатогӣ: Бадарғаҳои неÑтшуда пуштибонӣ карда намешаванд." + +#: directorymergewindow.cpp:2480 +msgid "Error: copyLink failed." +msgstr "Хатогӣ: наметавонам бадарғаро Ñҷод кунам." + +#: directorymergewindow.cpp:2500 +msgid "copy( %1 -> %2 )" +msgstr "нуÑха кардани ( %1 -> %2 )" + +#: directorymergewindow.cpp:2526 +msgid "Error during rename( %1 -> %2 ): Cannot delete existing destination." +msgstr "" +"Хатогӣ дар вақти тағйири ном( %1 -> %2 ): Ðаметавонам муайÑни вуҷудшударо неÑÑ‚ " +"кунам." + +#: directorymergewindow.cpp:2532 +msgid "rename( %1 -> %2 )" +msgstr "тағйири ном( %1 -> %2 )" + +#: directorymergewindow.cpp:2541 +msgid "Error: Rename failed." +msgstr "Хатогӣ: Ðаметавонам тағйири номро кунам." + +#: directorymergewindow.cpp:2559 +msgid "Error during makeDir of %1. Cannot delete existing file." +msgstr "" +"Хатогӣ дар вақти Ñҷод кардани каталоги %1. Файли вуҷудшуда неÑÑ‚ карда " +"намешавад." + +#: directorymergewindow.cpp:2575 +msgid "makeDir( %1 )" +msgstr "Ñҷоди каталог( %1 )" + +#: directorymergewindow.cpp:2585 +msgid "Error while creating directory." +msgstr "Хатогӣ дар вақти Ñҷод кардани каталог." + +#: directorymergewindow.cpp:2608 directorymergewindow.cpp:2725 +msgid "Dest" +msgstr "МуайÑншуда" + +#: directorymergewindow.cpp:2612 directorymergewindow.cpp:2650 +msgid "Dir" +msgstr "Каталог" + +#: directorymergewindow.cpp:2613 +msgid "Type" +msgstr "Шакл" + +#: directorymergewindow.cpp:2614 +msgid "Size" +msgstr "Ðндоза" + +#: directorymergewindow.cpp:2615 +msgid "Attr" +msgstr "ХуÑуÑиÑтҳо" + +#: directorymergewindow.cpp:2616 +msgid "Last Modification" +msgstr "Тағйироти охирон" + +#: directorymergewindow.cpp:2617 +msgid "Link-Destination" +msgstr "Бадарғаи-объект" + +#: directorymergewindow.cpp:2667 +msgid "not available" +msgstr "даÑÑ‚Ñ€Ð°Ñ Ð½ÐµÑÑ‚" + +#: directorymergewindow.cpp:2687 +msgid "A (Dest): " +msgstr "A (муайÑншуда): " + +#: directorymergewindow.cpp:2690 +msgid "A (Base): " +msgstr "A (баромад): " + +#: directorymergewindow.cpp:2696 +msgid "B (Dest): " +msgstr "B (муайÑншуда): " + +#: directorymergewindow.cpp:2704 +msgid "C (Dest): " +msgstr "C (муайÑншуда): " + +#: directorymergewindow.cpp:2710 +msgid "Dest: " +msgstr "МуаÑйншуда: " + +#: directorymergewindow.cpp:2775 +#, fuzzy +msgid "Save Directory Merge State As..." +msgstr "Хатогӣ дар вақти хониши каталог" + +#: directorymergewindow.cpp:2862 +msgid "Start/Continue Directory Merge" +msgstr "Сар кардан/давом додани ÑкҷоÑшаии каталогҳо" + +#: directorymergewindow.cpp:2863 +msgid "Run Operation for Current Item" +msgstr "Ба кор даровардан барои нуқтаи ҷорӣ" + +#: directorymergewindow.cpp:2864 +msgid "Compare Selected File" +msgstr "МуқоиÑаи файли интихобшуда" + +#: directorymergewindow.cpp:2865 +msgid "Merge Current File" +msgstr "Ð¯ÐºÒ·Ð¾Ñ ÐºÐ°Ñ€Ð´Ð°Ð½Ð¸ файли ҷорӣ" + +#: directorymergewindow.cpp:2866 +msgid "Fold All Subdirs" +msgstr "Дохили ҳамаи зеркаталогҳо" + +#: directorymergewindow.cpp:2867 +msgid "Unfold All Subdirs" +msgstr "Дохилнашудаи ҳамаи зеркаталогҳо" + +#: directorymergewindow.cpp:2871 +msgid "Choose A for All Items" +msgstr "Интихоби A барои ҳама" + +#: directorymergewindow.cpp:2872 +msgid "Choose B for All Items" +msgstr "Интихоби B барои ҳама" + +#: directorymergewindow.cpp:2873 +msgid "Choose C for All Items" +msgstr "Интихоби C барои ҳама" + +#: directorymergewindow.cpp:2874 +msgid "Auto-Choose Operation for All Items" +msgstr "Худ-интихобкунии шакли амал барои ҳама" + +#: directorymergewindow.cpp:2875 +msgid "No Operation for All Items" +msgstr "Гирифтани амалҳо барои ҳама" + +#: directorymergewindow.cpp:2880 +msgid "Show Identical Files" +msgstr "" + +#: directorymergewindow.cpp:2881 +#, fuzzy +msgid "Show Different Files" +msgstr "Миқдори файлҳои ҳархела:" + +#: directorymergewindow.cpp:2882 +msgid "Show Files only in A" +msgstr "" + +#: directorymergewindow.cpp:2883 +msgid "Show Files only in B" +msgstr "" + +#: directorymergewindow.cpp:2884 +msgid "Show Files only in C" +msgstr "" + +#: directorymergewindow.cpp:2888 +#, fuzzy +msgid "Compare Explicitly Selected Files" +msgstr "МуқоиÑаи файли интихобшуда" + +#: directorymergewindow.cpp:2889 +#, fuzzy +msgid "Merge Explicitly Selected Files" +msgstr "МуқоиÑаи файли интихобшуда" + +#: directorymergewindow.cpp:2891 directorymergewindow.cpp:2898 +msgid "Do Nothing" +msgstr "Ягон чиз" + +#: directorymergewindow.cpp:2892 +msgid "A" +msgstr "A" + +#: directorymergewindow.cpp:2893 +msgid "B" +msgstr "B" + +#: directorymergewindow.cpp:2894 +msgid "C" +msgstr "C" + +#: directorymergewindow.cpp:2903 +#, fuzzy +msgid "Delete A && B" +msgstr "ÐеÑÑ‚ кардани Рва Ð’" + +#: directorymergewindow.cpp:2906 +#, fuzzy +msgid "Merge to A && B" +msgstr "ПайваÑÑ‚ кардан ба A & Ð’" + +#: fileaccess.cpp:595 +msgid "" +"While trying to make a backup, deleting an older backup failed. \n" +"Filename: " +msgstr "" +"Ðаметавонам нуÑхаи кӯҳнаи захираро неÑÑ‚ кунам. \n" +"Ðоми файл: " + +#: fileaccess.cpp:602 +msgid "" +"While trying to make a backup, renaming failed. \n" +"Filenames: " +msgstr "" +"Ðаметавонам номгузориро ҳал кунам. \n" +"Ðоми файлҳо: " + +#: fileaccess.cpp:624 +#, c-format +msgid "Getting file status: %1" +msgstr "Гирифтани ҳолати файл: %1" + +#: fileaccess.cpp:667 +#, c-format +msgid "Reading file: %1" +msgstr "Хониши файл: %1" + +#: fileaccess.cpp:703 +#, c-format +msgid "Writing file: %1" +msgstr "Ðавишти файл: %1" + +#: fileaccess.cpp:731 +msgid "Out of memory" +msgstr "Ðз хотира" + +#: fileaccess.cpp:766 +#, c-format +msgid "Making directory: %1" +msgstr "Эҷоди каталогҳо : %1" + +#: fileaccess.cpp:786 +#, c-format +msgid "Removing directory: %1" +msgstr "Дур кардани директориÑ: %1" + +#: fileaccess.cpp:801 +#, c-format +msgid "Removing file: %1" +msgstr "Дур кардани файл: %1" + +#: fileaccess.cpp:817 +msgid "Creating symbolic link: %1 -> %2" +msgstr "Сохтани пайваÑти рамзӣ: %1-> %2" + +#: fileaccess.cpp:843 +msgid "Renaming file: %1 -> %2" +msgstr "Ðз нав номгузории файл: %1-> %2" + +#: fileaccess.cpp:879 +msgid "Copying file: %1 -> %2" +msgstr "ÐуÑха бардошатани: %1-> %2" + +#: fileaccess.cpp:893 +#, c-format +msgid "" +"Error during file copy operation: Opening file for reading failed. Filename: %1" +msgstr "" +"Хато дар вақти амалиёти нуÑхабардории файл: Кушодани файл барои хондан " +"нашуд.Ðоми Файл: %1" + +#: fileaccess.cpp:899 +#, c-format +msgid "" +"Error during file copy operation: Opening file for writing failed. Filename: %1" +msgstr "" +"Хато дар вақти амалиёти нуÑхабардории файл: Кушодани файл барои хондан " +"нашуд.Ðоми Файл: %1" + +#: fileaccess.cpp:914 +#, c-format +msgid "Error during file copy operation: Reading failed. Filename: %1" +msgstr "" +"Хато дар вақти амалиёти нуÑхабардории файл: Хондани нашуд.Ðоми Файл: %1" + +#: fileaccess.cpp:923 +#, c-format +msgid "Error during file copy operation: Writing failed. Filename: %1" +msgstr "" +"Хато дар вақти амалиёти нуÑхабардории файл: Ðавиштан нашуд.Ðоми Файл: %1" + +#: fileaccess.cpp:1219 +msgid "Reading directory: " +msgstr "Хондани директориÑ: " + +#: fileaccess.cpp:1348 +#, c-format +msgid "Listing directory: %1" +msgstr "Ðигоҳ кардани директориÑ: %1" + +#: kdiff3.cpp:142 +#, fuzzy +msgid "Current Configuration:" +msgstr "Тағйироти ҳамаи Ñкҷошавиҳо" + +#: kdiff3.cpp:147 +#, fuzzy +msgid "Config Option Error:" +msgstr "Хатогӣ дар кушодани файл" + +#: kdiff3.cpp:187 +msgid "Option --auto used, but no output file specified." +msgstr "Интихоб --худ иÑтифода шуда, аммо Ñгон файли хуруҷ муайÑн карда нашуд." + +#: kdiff3.cpp:323 +msgid "Option --auto ignored for directory comparison." +msgstr "Интихоб --худ аҳамиÑÑ‚ надиҳи барои муқоиÑаи директориÑ." + +#: kdiff3.cpp:359 +msgid "Saving failed." +msgstr "Ðигоҳ куни нашуд." + +#: kdiff3.cpp:386 pdiff.cpp:1041 pdiff.cpp:1112 +msgid "Opening of these files failed:" +msgstr "Кушодани ин файлҳо нашуд:" + +#: kdiff3.cpp:395 +msgid "File Open Error" +msgstr "Хатогӣ дар кушодани файл" + +#: kdiff3.cpp:418 +msgid "Opens documents for comparison..." +msgstr "МекушоÑд документҳоро барои муқоиÑа..." + +#: kdiff3.cpp:423 +msgid "Saves the merge result. All conflicts must be solved!" +msgstr "" +"Ðигоҳ медорад натиҷаи Ñкҷошавиро. Ҳамаи ҷанҷолҳо боÑд ҳал карда шаванд!" + +#: kdiff3.cpp:425 +msgid "Saves the current document as..." +msgstr "Ðигоҳ медорад документи ҷориро миÑли..." + +#: kdiff3.cpp:427 +msgid "Print the differences" +msgstr "" + +#: kdiff3.cpp:429 +msgid "Quits the application" +msgstr "Маҳкам мекунад аризаро" + +#: kdiff3.cpp:431 +msgid "Cuts the selected section and puts it to the clipboard" +msgstr "Мебурад қиÑми интихоб карда шударо ва меандозад онро ба клипборд" + +#: kdiff3.cpp:433 +msgid "Copies the selected section to the clipboard" +msgstr "ÐуÑха мебардорад қиÑми интихоб карда шударо ба клипборд" + +#: kdiff3.cpp:435 +msgid "Pastes the clipboard contents to actual position" +msgstr "МечаÑпонад таркиботҳои клибордро ба ҷойгиршавии амалӣ" + +#: kdiff3.cpp:437 +msgid "Select everything in current window" +msgstr "" + +#: kdiff3.cpp:439 +msgid "Search for a string" +msgstr "Ковтукови ришта" + +#: kdiff3.cpp:441 +msgid "Search again for the string" +msgstr "Бори дигар ковтуков барои ришта" + +#: kdiff3.cpp:443 +msgid "Enables/disables the toolbar" +msgstr "Пайраҳаи аÑбоби фаъол/ғайри фаъолро Ñозед" + +#: kdiff3.cpp:445 +msgid "Enables/disables the statusbar" +msgstr "Пайраҳаи ҳолати фаъол/ғайри фаъолро Ñозед" + +#: kdiff3.cpp:449 +msgid "Configure KDiff3..." +msgstr "Танзимоти KDiff3..." + +#: kdiff3.cpp:470 +msgid "Go to Current Delta" +msgstr "Равед ба Делтаи Ҷори" + +#: kdiff3.cpp:471 +msgid "Go to First Delta" +msgstr "Равед ба Делтаи Ðввала" + +#: kdiff3.cpp:472 +msgid "Go to Last Delta" +msgstr "Равед ба Делтаи Охирон" + +#: kdiff3.cpp:473 +msgid "(Skips white space differences when \"Show White Space\" is disabled.)" +msgstr "" + +#: kdiff3.cpp:474 +msgid "" +"(Does not skip white space differences even when \"Show White Space\" is " +"disabled.)" +msgstr "" + +#: kdiff3.cpp:475 +msgid "Go to Previous Delta" +msgstr "Равед ба Делтаи Пешангӣ" + +#: kdiff3.cpp:477 +msgid "Go to Next Delta" +msgstr "Равед ба Делтаи Дар пеш интизор" + +#: kdiff3.cpp:479 +msgid "Go to Previous Conflict" +msgstr "Равед ба Ҷанҷоли Пешангӣ" + +#: kdiff3.cpp:481 +msgid "Go to Next Conflict" +msgstr "Равед ба Ҷанҷоли Дар пеш интизор " + +#: kdiff3.cpp:483 +msgid "Go to Previous Unsolved Conflict" +msgstr "Равед ба Ҷанҷоли Пешангии Ҳалнашуда" + +#: kdiff3.cpp:485 +msgid "Go to Next Unsolved Conflict" +msgstr "Равед ба Ҷанҷоли Дар пеш интизори Ҳалнашуда" + +#: kdiff3.cpp:487 +msgid "Select Line(s) From A" +msgstr "Интихоб кунед Рах(ҳо)-ро Ðз Ð" + +#: kdiff3.cpp:488 +msgid "Select Line(s) From B" +msgstr "Интихоб кунед Рах(ҳо)-ро Ðз Ð’" + +#: kdiff3.cpp:489 +msgid "Select Line(s) From C" +msgstr "Интихоб кунед Рах(ҳо)-ро Ðз С" + +#: kdiff3.cpp:490 +msgid "Automatically Go to Next Unsolved Conflict After Source Selection" +msgstr "Зуд равед ба ҷанҷоли пешангии ҳалнашуда баъди интихоби Ñарчашма" + +#: kdiff3.cpp:492 +msgid "Show Space && Tabulator Characters for Differences" +msgstr "Ðишон диҳед фоÑиларо && Феълҳои табулÑтори барои гуногуниҳо" + +#: kdiff3.cpp:493 +msgid "Show White Space" +msgstr "Ðишон диҳед фоÑиларо" + +#: kdiff3.cpp:495 +msgid "Show Line Numbers" +msgstr "Ðишон диҳед рахи рақамҳоро" + +#: kdiff3.cpp:496 +msgid "Choose A Everywhere" +msgstr "Интихоб кунед Ð-ро дар ҳамаҷой" + +#: kdiff3.cpp:497 +msgid "Choose B Everywhere" +msgstr "Интихоб кунед Ð’-ро дар ҳамаҷой" + +#: kdiff3.cpp:498 +msgid "Choose C Everywhere" +msgstr "Интихоб кунед Ð’-ро дар ҳамаҷой" + +#: kdiff3.cpp:499 +#, fuzzy +msgid "Choose A for All Unsolved Conflicts" +msgstr "Интихоб кунед Ð-ро барои ҳамаи ҷанҷолҳои ҳалнашуда" + +#: kdiff3.cpp:500 +#, fuzzy +msgid "Choose B for All Unsolved Conflicts" +msgstr "Интихоб кунед Ð’-ро барои ҳамаи ҷанҷолҳои ҳалнашуда" + +#: kdiff3.cpp:501 +#, fuzzy +msgid "Choose C for All Unsolved Conflicts" +msgstr "Интихоб кунед С-ро барои ҳамаи ҷанҷолҳои ҳалнашуда" + +#: kdiff3.cpp:502 +#, fuzzy +msgid "Choose A for All Unsolved Whitespace Conflicts" +msgstr "Интихоб кунед Ð-ро барои фоÑилаи ҳамаи ҷанҷолҳои ҳалнашуда" + +#: kdiff3.cpp:503 +#, fuzzy +msgid "Choose B for All Unsolved Whitespace Conflicts" +msgstr "Интихоб кунед Ð’-ро барои фоÑилаи ҳамаи ҷанҷолҳои ҳалнашуда" + +#: kdiff3.cpp:504 +#, fuzzy +msgid "Choose C for All Unsolved Whitespace Conflicts" +msgstr "Интихоб кунед С-ро барои фоÑилаи ҳамаи ҷанҷолҳои ҳалнашуда" + +#: kdiff3.cpp:505 +msgid "Automatically Solve Simple Conflicts" +msgstr "Зуд ҳал мекунад ҷанҷолҳои оддиро" + +#: kdiff3.cpp:506 +msgid "Set Deltas to Conflicts" +msgstr "Танзим кунед делтаҳоро ба ҷанҷолҳо" + +#: kdiff3.cpp:507 +msgid "Run Regular Expression Auto Merge" +msgstr "" + +#: kdiff3.cpp:508 +#, fuzzy +msgid "Automatically Solve History Conflicts" +msgstr "Зуд ҳал мекунад ҷанҷолҳои оддиро" + +#: kdiff3.cpp:509 +msgid "Split Diff At Selection" +msgstr "" + +#: kdiff3.cpp:510 +#, fuzzy +msgid "Join Selected Diffs" +msgstr "МуқоиÑаи файли интихобшуда" + +#: kdiff3.cpp:512 +msgid "Show Window A" +msgstr "Ðишон диҳед Тирезаи Ð-ро" + +#: kdiff3.cpp:513 +msgid "Show Window B" +msgstr "Ðишон диҳед Тирезаи Ð’-ро" + +#: kdiff3.cpp:514 +msgid "Show Window C" +msgstr "Ðишон диҳед Тирезаи С-ро" + +#: kdiff3.cpp:515 kdiff3.cpp:526 +msgid "Focus Next Window" +msgstr "ÐÐºÑ‚Ð¸Ð²Ð°Ñ†Ð¸Ñ ÐºÐ°Ñ€Ð´Ð°Ð½Ð¸ дигар тиреза" + +#: kdiff3.cpp:517 +msgid "Normal Overview" +msgstr "Оддӣ аз назар гузарондан" + +#: kdiff3.cpp:518 +msgid "A vs. B Overview" +msgstr "Ðз назар гузарондани A vs. B " + +#: kdiff3.cpp:519 +msgid "A vs. C Overview" +msgstr "Ðз назар гузарондани A vs. C" + +#: kdiff3.cpp:520 +msgid "B vs. C Overview" +msgstr "Ðз назар гузарондани B vs. C" + +#: kdiff3.cpp:521 +msgid "Word Wrap Diff Windows" +msgstr "Калимаи печидаи тирезаҳои гуногун" + +#: kdiff3.cpp:522 +msgid "Add Manual Diff Alignment" +msgstr "" + +#: kdiff3.cpp:523 +msgid "Clear All Manual Diff Alignments" +msgstr "" + +#: kdiff3.cpp:528 +msgid "Focus Prev Window" +msgstr "ÐÐºÑ‚Ð¸Ð²Ð°Ñ†Ð¸Ñ ÐºÐ°Ñ€Ð´Ð°Ð½Ð¸ тирезаи гузашта" + +#: kdiff3.cpp:529 +msgid "Toggle Split Orientation" +msgstr "Дигаркунӣ ва тақÑимкунии ҷои иÑти худ" + +#: kdiff3.cpp:531 +msgid "Dir && Text Split Screen View" +msgstr "аппп" + +#: kdiff3.cpp:533 +msgid "Toggle Between Dir && Text View" +msgstr "Дигаркунӣ байни феҳриÑтҳо && намоиши матн" + +#: kdiff3.cpp:582 pdiff.cpp:1712 +msgid "The merge result hasn't been saved." +msgstr "Ðатиҷаи Ð¸Ñ‚Ñ‚Ð¸Ò³Ð¾Ð´Ð¸Ñ Ð½Ð¸Ð³Ð¾Ò³ надоштагӣ." + +#: kdiff3.cpp:583 +msgid "Save && Quit" +msgstr "Ðигоҳ доштан && баромадан" + +#: kdiff3.cpp:583 +msgid "Quit Without Saving" +msgstr "Бе нигоҳдорӣ баромадан" + +#: kdiff3.cpp:591 pdiff.cpp:1721 +msgid "Saving the merge result failed." +msgstr "Ðатиҷаи ÑÐºÒ·Ð¾Ñ ÐºÐ°Ñ€Ð´Ð°Ð½,нигоҳ дошта нашуд." + +#: kdiff3.cpp:602 pdiff.cpp:978 +msgid "" +"You are currently doing a directory merge. Are you sure, you want to abort?" +msgstr "ЯкҷоÑшавии каталогро нигоҳ дорем.Оё,шумо дилпур мехоҳед, баровардан?" + +#: kdiff3.cpp:625 +msgid "Saving file..." +msgstr "Ðигоҳ доштани файл..." + +#: kdiff3.cpp:642 +msgid "Saving file with a new filename..." +msgstr "Бо номи нав нигоҳ доштани файл..." + +#: kdiff3.cpp:732 +#, fuzzy +msgid "Printing..." +msgstr "Баромад..." + +#: kdiff3.cpp:738 kdiff3.cpp:900 +msgid "Printing aborted." +msgstr "" + +#: kdiff3.cpp:870 +msgid "Selection" +msgstr "" + +#: kdiff3.cpp:896 +#, fuzzy +msgid "Printing completed." +msgstr "ЯкҷоÑшавӣ ба анҷом раÑид." + +#: kdiff3.cpp:906 +msgid "Exiting..." +msgstr "Баромад..." + +#: kdiff3.cpp:918 +msgid "Toggling toolbar..." +msgstr "ТаÑвир кардан/панели аÑбобҳои пинҳонӣ..." + +#: kdiff3.cpp:939 +msgid "Toggle the statusbar..." +msgstr "ТаÑвир кардан/вазъиÑти панели пинҳонӣ..." + +#: kdiff3_part.cpp:155 kdiff3_part.cpp:224 +msgid "Couldn't find files for comparison." +msgstr "Файл барои муқоиÑа Ñ‘Ñ„Ñ‚ нашуд." + +#: kdiff3_part.cpp:291 +msgid "KDiff3Part" +msgstr "KDiff3Part" + +#: kdiff3_shell.cpp:78 +msgid "" +"Could not find our part!\n" +"This usually happens due to an installation problem. Please read the " +"README-file in the source package for details." +msgstr "" +"ҚиÑми мо Ñ‘Ñ„Ñ‚ нашуд!\n" +"Ин маÑъала одатан дар вақти аниқ рӯй медиҳад.Файли README-ро хонед, ҷой ва " +"калидро ба тафÑил баён кунед." + +#: main.cpp:35 +msgid "Tool for Comparison and Merge of Files and Directories" +msgstr "" + +#: main.cpp:40 +msgid "Merge the input." +msgstr "Ð¯ÐºÒ·Ð¾Ñ Ð´Ð°Ñ€Ð¾Ð²Ð°Ñ€Ð´Ð°Ð½." + +#: main.cpp:42 +msgid "Explicit base file. For compatibility with certain tools." +msgstr "" +"Эзоҳ додани маълумоти файл.Барои мутобиқ будан бо аÑбобҳои муқаррар- шуда." + +#: main.cpp:44 +msgid "Output file. Implies -m. E.g.: -o newfile.txt" +msgstr "Баромади файл.Тахмин кардани мавҷуд ҳамчун-m. МиÑли: -o newfile.txt" + +#: main.cpp:45 +msgid "Output file, again. (For compatibility with certain tools.)" +msgstr "Барориши файл.(Барои мутобиқ бо аÑбобҳои монанд.)" + +#: main.cpp:46 +msgid "No GUI if all conflicts are auto-solvable. (Needs -o file)" +msgstr "" + +#: main.cpp:47 +msgid "Don't solve conflicts automatically. (For compatibility...)" +msgstr "" + +#: main.cpp:48 +msgid "Visible name replacement for input file 1 (base)." +msgstr "" + +#: main.cpp:49 +msgid "Visible name replacement for input file 2." +msgstr "" + +#: main.cpp:50 +msgid "Visible name replacement for input file 3." +msgstr "" + +#: main.cpp:52 +msgid "Alternative visible name replacement. Supply this once for every input." +msgstr "" + +#: main.cpp:53 +msgid "" +"Override a config setting. Use once for every setting. E.g.: --cs " +"\"AutoAdvance=1\"" +msgstr "" + +#: main.cpp:54 +msgid "Show list of config settings and current values." +msgstr "" + +#: main.cpp:55 +#, fuzzy +msgid "Use a different config file." +msgstr "Миқдори файлҳои ҳархела:" + +#: main.cpp:59 +msgid "file1 to open (base, if not specified via --base)" +msgstr "" + +#: main.cpp:60 +msgid "file2 to open" +msgstr "" + +#: main.cpp:61 +msgid "file3 to open" +msgstr "" + +#: main.cpp:93 +msgid "Ignored. (User defined.)" +msgstr "" + +#. i18n: file kdiff3_part.rc line 16 +#: main.cpp:173 rc.cpp:9 +#, fuzzy, no-c-format +msgid "KDiff3" +msgstr "KDiff3Part" + +#: main.cpp:186 +msgid "+ Many thanks to those who reported bugs and contributed ideas!" +msgstr "" + +#: mergeresultwindow.cpp:136 mergeresultwindow.cpp:939 +#: mergeresultwindow.cpp:953 mergeresultwindow.cpp:965 +#: mergeresultwindow.cpp:977 +msgid "Number of remaining unsolved conflicts: %1 (of which %2 are whitespace)" +msgstr "" + +#: mergeresultwindow.cpp:285 +msgid "" +"The output has been modified.\n" +"If you continue your changes will be lost." +msgstr "" + +#: mergeresultwindow.cpp:797 pdiff.cpp:511 +msgid "All input files are binary equal." +msgstr "" + +#: mergeresultwindow.cpp:799 +msgid "All input files contain the same text." +msgstr "" + +#: mergeresultwindow.cpp:801 +msgid "" +"Files A and B are binary equal.\n" +msgstr "" + +#: mergeresultwindow.cpp:802 +msgid "" +"Files A and B have equal text. \n" +msgstr "" + +#: mergeresultwindow.cpp:803 +msgid "" +"Files A and C are binary equal.\n" +msgstr "" + +#: mergeresultwindow.cpp:804 +msgid "" +"Files A and C have equal text. \n" +msgstr "" + +#: mergeresultwindow.cpp:805 +msgid "" +"Files B and C are binary equal.\n" +msgstr "" + +#: mergeresultwindow.cpp:806 +msgid "" +"Files B and C have equal text. \n" +msgstr "" + +#: mergeresultwindow.cpp:812 +msgid "Total number of conflicts: " +msgstr "" + +#: mergeresultwindow.cpp:813 +#, fuzzy +msgid "" +"\n" +"Nr of automatically solved conflicts: " +msgstr "Зуд ҳал мекунад ҷанҷолҳои оддиро" + +#: mergeresultwindow.cpp:814 +#, fuzzy +msgid "" +"\n" +"Nr of unsolved conflicts: " +msgstr "Равед ба Ҷанҷоли Дар пеш интизори Ҳалнашуда" + +#: mergeresultwindow.cpp:816 +msgid "Conflicts" +msgstr "" + +#: mergeresultwindow.cpp:1652 +msgid "" +msgstr "" + +#: mergeresultwindow.cpp:1660 +#, fuzzy +msgid "" +msgstr "ЯкҷоÑшавӣ ба анҷом раÑид" + +#: mergeresultwindow.cpp:1662 mergeresultwindow.cpp:2427 +#, fuzzy +msgid "" +msgstr "ЯкҷоÑшавӣ ба анҷом раÑид" + +#: mergeresultwindow.cpp:2635 +msgid "" +"Not all conflicts are solved yet.\n" +"File not saved.\n" +msgstr "" + +#: mergeresultwindow.cpp:2637 +msgid "Conflicts Left" +msgstr "" + +#: mergeresultwindow.cpp:2649 +msgid "" +"\n" +"\n" +"Creating backup failed. File not saved." +msgstr "" + +#: mergeresultwindow.cpp:2649 mergeresultwindow.cpp:2689 +#, fuzzy +msgid "File Save Error" +msgstr "Хатогӣ дар кушодани файл" + +#: mergeresultwindow.cpp:2689 +#, fuzzy +msgid "Error while writing." +msgstr "Хатогӣ дар вақти Ñҷод кардани каталог." + +#: mergeresultwindow.cpp:3020 +msgid "Output" +msgstr "" + +#: mergeresultwindow.cpp:3032 mergeresultwindow.cpp:3139 +msgid "[Modified]" +msgstr "" + +#: mergeresultwindow.cpp:3039 +msgid "Encoding for saving" +msgstr "" + +#: mergeresultwindow.cpp:3075 mergeresultwindow.cpp:3081 +#: mergeresultwindow.cpp:3087 +msgid "Codec from" +msgstr "" + +#: optiondialog.cpp:362 +msgid "Unicode, 8 bit" +msgstr "" + +#: optiondialog.cpp:363 +msgid "Unicode" +msgstr "" + +#: optiondialog.cpp:364 +msgid "Latin1" +msgstr "" + +#: optiondialog.cpp:383 +msgid "Change this if non-ASCII characters are not displayed correctly." +msgstr "" + +#: optiondialog.cpp:510 +msgid "Editor & Diff Output Font" +msgstr "" + +#: optiondialog.cpp:531 +msgid "Italic font for deltas" +msgstr "" + +#: optiondialog.cpp:534 +msgid "" +"Selects the italic version of the font for differences.\n" +"If the font doesn't support italic characters, then this does nothing." +msgstr "" + +#: optiondialog.cpp:542 +msgid "Color" +msgstr "" + +#: optiondialog.cpp:542 +msgid "Colors Settings" +msgstr "" + +#: optiondialog.cpp:556 +msgid "Editor and Diff Views:" +msgstr "" + +#: optiondialog.cpp:564 +msgid "Foreground color:" +msgstr "" + +#: optiondialog.cpp:570 +msgid "Background color:" +msgstr "" + +#: optiondialog.cpp:578 +msgid "Diff background color:" +msgstr "" + +#: optiondialog.cpp:585 +msgid "Color A:" +msgstr "" + +#: optiondialog.cpp:592 +msgid "Color B:" +msgstr "" + +#: optiondialog.cpp:599 +msgid "Color C:" +msgstr "" + +#: optiondialog.cpp:605 +msgid "Conflict color:" +msgstr "" + +#: optiondialog.cpp:612 +msgid "Current range background color:" +msgstr "" + +#: optiondialog.cpp:619 +msgid "Current range diff background color:" +msgstr "" + +#: optiondialog.cpp:625 +msgid "Color for manually aligned difference ranges:" +msgstr "" + +#: optiondialog.cpp:630 +#, fuzzy +msgid "Directory Comparison View:" +msgstr "Ҳолати муқоиÑакунии каталогҳо" + +#: optiondialog.cpp:636 +msgid "Newest file color:" +msgstr "" + +#: optiondialog.cpp:639 +msgid "" +"Changing this color will only be effective when starting the next directory " +"comparison." +msgstr "" + +#: optiondialog.cpp:644 +msgid "Oldest file color:" +msgstr "" + +#: optiondialog.cpp:651 +msgid "Middle age file color:" +msgstr "" + +#: optiondialog.cpp:658 +msgid "Color for missing files:" +msgstr "" + +#: optiondialog.cpp:670 +msgid "Editor" +msgstr "" + +#: optiondialog.cpp:670 +msgid "Editor Behavior" +msgstr "" + +#: optiondialog.cpp:680 +msgid "Tab inserts spaces" +msgstr "" + +#: optiondialog.cpp:683 +msgid "" +"On: Pressing tab generates the appropriate number of spaces.\n" +"Off: A Tab-character will be inserted." +msgstr "" + +#: optiondialog.cpp:689 +msgid "Tab size:" +msgstr "" + +#: optiondialog.cpp:694 +msgid "Auto indentation" +msgstr "" + +#: optiondialog.cpp:697 +msgid "" +"On: The indentation of the previous line is used for a new line.\n" +msgstr "" + +#: optiondialog.cpp:701 +msgid "Auto copy selection" +msgstr "" + +#: optiondialog.cpp:704 +msgid "" +"On: Any selection is immediately written to the clipboard.\n" +"Off: You must explicitely copy e.g. via Ctrl-C." +msgstr "" + +#: optiondialog.cpp:709 +msgid "Line end style:" +msgstr "" + +#: optiondialog.cpp:721 +msgid "" +"Sets the line endings for when an edited file is saved.\n" +"DOS/Windows: CR+LF; UNIX: LF; with CR=0D, LF=0A" +msgstr "" + +#: optiondialog.cpp:732 +#, fuzzy +msgid "Diff" +msgstr "KDiff3Part" + +#: optiondialog.cpp:732 +#, fuzzy +msgid "Diff Settings" +msgstr "ВоÑитаи муқоиÑа ва ÑÐºÒ·Ð¾Ñ ÐºÐ°Ñ€Ð´Ð°Ð½" + +#: optiondialog.cpp:743 +msgid "Preserve carriage return" +msgstr "" + +#: optiondialog.cpp:746 +msgid "" +"Show carriage return characters '\\r' if they exist.\n" +"Helps to compare files that were modified under different operating systems." +msgstr "" + +#: optiondialog.cpp:751 +msgid "Ignore numbers" +msgstr "" + +#: optiondialog.cpp:754 +msgid "" +"Ignore number characters during line matching phase. (Similar to Ignore white " +"space.)\n" +"Might help to compare files with numeric data." +msgstr "" + +#: optiondialog.cpp:759 +msgid "Ignore C/C++ comments" +msgstr "" + +#: optiondialog.cpp:761 +msgid "Treat C/C++ comments like white space." +msgstr "" + +#: optiondialog.cpp:765 +msgid "Ignore case" +msgstr "" + +#: optiondialog.cpp:768 +msgid "Treat case differences like white space changes. ('a'<=>'A')" +msgstr "" + +#: optiondialog.cpp:772 +msgid "Preprocessor command:" +msgstr "" + +#: optiondialog.cpp:776 +msgid "User defined pre-processing. (See the docs for details.)" +msgstr "" + +#: optiondialog.cpp:779 +msgid "Line-matching preprocessor command:" +msgstr "" + +#: optiondialog.cpp:783 +msgid "" +"This pre-processor is only used during line matching.\n" +"(See the docs for details.)" +msgstr "" + +#: optiondialog.cpp:786 +msgid "Try hard (slower)" +msgstr "" + +#: optiondialog.cpp:789 +msgid "" +"Enables the --minimal option for the external diff.\n" +"The analysis of big files will be much slower." +msgstr "" + +#: optiondialog.cpp:794 +msgid "Auto advance delay (ms):" +msgstr "" + +#: optiondialog.cpp:799 +msgid "" +"When in Auto-Advance mode the result of the current selection is shown \n" +"for the specified time, before jumping to the next conflict. Range: 0-2000 ms" +msgstr "" + +#: optiondialog.cpp:809 +#, fuzzy +msgid "Merge Settings" +msgstr "ВоÑитаи муқоиÑа ва ÑÐºÒ·Ð¾Ñ ÐºÐ°Ñ€Ð´Ð°Ð½" + +#: optiondialog.cpp:822 +msgid "White space 2-file merge default:" +msgstr "" + +#: optiondialog.cpp:826 optiondialog.cpp:839 +msgid "Manual Choice" +msgstr "" + +#: optiondialog.cpp:830 optiondialog.cpp:844 +msgid "" +"Allow the merge algorithm to automatically select an input for white-space-only " +"changes." +msgstr "" + +#: optiondialog.cpp:835 +msgid "White space 3-file merge default:" +msgstr "" + +#: optiondialog.cpp:849 +msgid "Automatic Merge Regular Expression" +msgstr "" + +#: optiondialog.cpp:858 smalldialogs.cpp:397 +msgid "Auto merge regular expression:" +msgstr "" + +#: optiondialog.cpp:862 +msgid "" +"Regular expression for lines where KDiff3 should automatically choose one " +"source.\n" +"When a line with a conflict matches the regular expression then\n" +"- if available - C, otherwise B will be chosen." +msgstr "" + +#: optiondialog.cpp:868 +msgid "Run regular expression auto merge on merge start" +msgstr "" + +#: optiondialog.cpp:870 +msgid "" +"Run the merge for auto merge regular expressions\n" +"immediately when a merge starts.\n" +msgstr "" + +#: optiondialog.cpp:875 +msgid "Version Control History Merging" +msgstr "" + +#: optiondialog.cpp:884 smalldialogs.cpp:424 +msgid "History start regular expression:" +msgstr "" + +#: optiondialog.cpp:888 +msgid "" +"Regular expression for the start of the version control history entry.\n" +"Usually this line contains the \"$Log$\"-keyword.\n" +"Default value: \".*\\$Log.*\\$.*\"" +msgstr "" + +#: optiondialog.cpp:894 smalldialogs.cpp:453 +msgid "History entry start regular expression:" +msgstr "" + +#: optiondialog.cpp:906 +msgid "" +"A version control history entry consists of several lines.\n" +"Specify the regular expression to detect the first line (without the leading " +"comment).\n" +"Use parentheses to group the keys you want to use for sorting.\n" +"If left empty, then KDiff3 assumes that empty lines separate history entries.\n" +"See the documentation for details." +msgstr "" + +#: optiondialog.cpp:914 +msgid "History merge sorting" +msgstr "" + +#: optiondialog.cpp:916 +msgid "Sort version control history by a key." +msgstr "" + +#: optiondialog.cpp:926 +msgid "History entry start sort key order:" +msgstr "" + +#: optiondialog.cpp:930 +msgid "" +"Each parentheses used in the regular expression for the history start entry\n" +"groups a key that can be used for sorting.\n" +"Specify the list of keys (that are numbered in order of occurrence\n" +"starting with 1) using ',' as separator (e.g. \"4,5,6,1,2,3,7\").\n" +"If left empty, then no sorting will be done.\n" +"See the documentation for details." +msgstr "" + +#: optiondialog.cpp:941 +msgid "Merge version control history on merge start" +msgstr "" + +#: optiondialog.cpp:943 +msgid "Run version control history automerge on merge start." +msgstr "" + +#: optiondialog.cpp:947 +msgid "Test your regular expressions" +msgstr "" + +#: optiondialog.cpp:952 +msgid "Irrelevant merge command:" +msgstr "" + +#: optiondialog.cpp:956 +msgid "" +"If specified this script is run after automerge\n" +"when no other relevant changes were detected.\n" +"Called with the parameters: filename1 filename2 filename3" +msgstr "" + +#: optiondialog.cpp:966 +#, fuzzy +msgid "Directory Merge" +msgstr "Хатогӣ дар вақти хониши каталог" + +#: optiondialog.cpp:975 +#, fuzzy +msgid "Recursive directories" +msgstr "Мушоҳидакунии каталогҳо..." + +#: optiondialog.cpp:977 +#, fuzzy +msgid "Whether to analyze subdirectories or not." +msgstr "Ҳуқуқҳои ин каталогҳоро тафтиш кунед." + +#: optiondialog.cpp:979 +msgid "File pattern(s):" +msgstr "" + +#: optiondialog.cpp:984 +msgid "" +"Pattern(s) of files to be analyzed. \n" +"Wildcards: '*' and '?'\n" +"Several Patterns can be specified by using the separator: ';'" +msgstr "" + +#: optiondialog.cpp:990 +msgid "File-anti-pattern(s):" +msgstr "" + +#: optiondialog.cpp:995 +msgid "" +"Pattern(s) of files to be excluded from analysis. \n" +"Wildcards: '*' and '?'\n" +"Several Patterns can be specified by using the separator: ';'" +msgstr "" + +#: optiondialog.cpp:1001 +msgid "Dir-anti-pattern(s):" +msgstr "" + +#: optiondialog.cpp:1006 +msgid "" +"Pattern(s) of directories to be excluded from analysis. \n" +"Wildcards: '*' and '?'\n" +"Several Patterns can be specified by using the separator: ';'" +msgstr "" + +#: optiondialog.cpp:1012 +msgid "Use .cvsignore" +msgstr "" + +#: optiondialog.cpp:1015 +msgid "" +"Extends the antipattern to anything that would be ignored by CVS.\n" +"Via local \".cvsignore\"-files this can be directory specific." +msgstr "" + +#: optiondialog.cpp:1020 +msgid "Find hidden files and directories" +msgstr "" + +#: optiondialog.cpp:1023 +msgid "Finds files and directories with the hidden attribute." +msgstr "" + +#: optiondialog.cpp:1025 +msgid "Finds files and directories starting with '.'." +msgstr "" + +#: optiondialog.cpp:1029 +msgid "Follow file links" +msgstr "" + +#: optiondialog.cpp:1032 +msgid "" +"On: Compare the file the link points to.\n" +"Off: Compare the links." +msgstr "" + +#: optiondialog.cpp:1037 +msgid "Follow directory links" +msgstr "" + +#: optiondialog.cpp:1040 +msgid "" +"On: Compare the directory the link points to.\n" +"Off: Compare the links." +msgstr "" + +#: optiondialog.cpp:1056 +msgid "Case sensitive filename comparison" +msgstr "" + +#: optiondialog.cpp:1059 +msgid "" +"The directory comparison will compare files or directories when their names " +"match.\n" +"Set this option if the case of the names must match. (Default for Windows is " +"off, otherwise on.)" +msgstr "" + +#: optiondialog.cpp:1063 +msgid "File Comparison Mode" +msgstr "" + +#: optiondialog.cpp:1067 +#, fuzzy +msgid "Binary comparison" +msgstr "Ҳолати муқоиÑакунии каталогҳо" + +#: optiondialog.cpp:1068 +msgid "Binary comparison of each file. (Default)" +msgstr "" + +#: optiondialog.cpp:1070 +msgid "Full analysis" +msgstr "" + +#: optiondialog.cpp:1071 +msgid "" +"Do a full analysis and show statistics information in extra columns.\n" +"(Slower than a binary comparison, much slower for binary files.)" +msgstr "" + +#: optiondialog.cpp:1074 +msgid "Trust the modification date (unsafe)" +msgstr "" + +#: optiondialog.cpp:1075 +msgid "" +"Assume that files are equal if the modification date and file length are " +"equal.\n" +"Useful for big directories or slow networks." +msgstr "" + +#: optiondialog.cpp:1078 +msgid "Trust the size (unsafe)" +msgstr "" + +#: optiondialog.cpp:1079 +msgid "" +"Assume that files are equal if their file lengths are equal.\n" +"Useful for big directories or slow networks when the date is modified during " +"download." +msgstr "" + +#: optiondialog.cpp:1083 +#, fuzzy +msgid "Synchronize directories" +msgstr "Мушоҳидакунии каталогҳо..." + +#: optiondialog.cpp:1086 +msgid "" +"Offers to store files in both directories so that\n" +"both directories are the same afterwards.\n" +"Works only when comparing two directories without specifying a destination." +msgstr "" + +#: optiondialog.cpp:1092 +msgid "White space differences considered equal" +msgstr "" + +#: optiondialog.cpp:1095 +msgid "" +"If files differ only by white space consider them equal.\n" +"This is only active when full analysis is chosen." +msgstr "" + +#: optiondialog.cpp:1101 +msgid "Copy newer instead of merging (unsafe)" +msgstr "" + +#: optiondialog.cpp:1104 +msgid "" +"Don't look inside, just take the newer file.\n" +"(Use this only if you know what you are doing!)\n" +"Only effective when comparing two directories." +msgstr "" + +#: optiondialog.cpp:1109 +msgid "Backup files (.orig)" +msgstr "" + +#: optiondialog.cpp:1112 +msgid "" +"When a file would be saved over an old file, then the old file\n" +"will be renamed with a '.orig'-extension instead of being deleted." +msgstr "" + +#: optiondialog.cpp:1176 +msgid "Regional Settings" +msgstr "" + +#: optiondialog.cpp:1272 +msgid "Language (restart required)" +msgstr "" + +#: optiondialog.cpp:1304 +msgid "" +"Choose the language of the GUI-strings or \"Auto\".\n" +"For a change of language to take place, quit and restart KDiff3." +msgstr "" + +#: optiondialog.cpp:1322 +msgid "Use the same encoding for everything:" +msgstr "" + +#: optiondialog.cpp:1325 +msgid "" +"Enable this allows to change all encodings by changing the first only.\n" +"Disable this if different individual settings are needed." +msgstr "" + +#: optiondialog.cpp:1330 +msgid "Note: Local Encoding is " +msgstr "" + +#: optiondialog.cpp:1334 +msgid "File Encoding for A:" +msgstr "" + +#: optiondialog.cpp:1340 +msgid "" +"If enabled then Unicode (UTF-16 or UTF-8) encoding will be detected.\n" +"If the file encoding is not detected then the selected encoding will be used as " +"fallback.\n" +"(Unicode detection depends on the first bytes of a file - the byte order mark " +"\"BOM\".)" +msgstr "" + +#: optiondialog.cpp:1344 optiondialog.cpp:1353 optiondialog.cpp:1362 +msgid "Auto Detect Unicode" +msgstr "" + +#: optiondialog.cpp:1349 +msgid "File Encoding for B:" +msgstr "" + +#: optiondialog.cpp:1358 +msgid "File Encoding for C:" +msgstr "" + +#: optiondialog.cpp:1367 +msgid "File Encoding for Merge Output and Saving:" +msgstr "" + +#: optiondialog.cpp:1371 +msgid "Auto Select" +msgstr "" + +#: optiondialog.cpp:1374 +msgid "" +"If enabled then the encoding from the input files is used.\n" +"In ambiguous cases a dialog will ask the user to choose the encoding for " +"saving." +msgstr "" + +#: optiondialog.cpp:1378 +msgid "File Encoding for Preprocessor Files:" +msgstr "" + +#: optiondialog.cpp:1389 +msgid "Right To Left Language" +msgstr "" + +#: optiondialog.cpp:1392 +msgid "" +"Some languages are read from right to left.\n" +"This setting will change the viewer and editor accordingly." +msgstr "" + +#: optiondialog.cpp:1402 +#, fuzzy +msgid "Integration" +msgstr "Ðмал" + +#: optiondialog.cpp:1402 +msgid "Integration Settings" +msgstr "" + +#: optiondialog.cpp:1412 +msgid "Command line options to ignore:" +msgstr "" + +#: optiondialog.cpp:1417 +msgid "" +"List of command line options that should be ignored when KDiff3 is used by " +"other tools.\n" +"Several values can be specified if separated via ';'\n" +"This will suppress the \"Unknown option\"-error." +msgstr "" + +#: optiondialog.cpp:1480 +msgid "" +"You selected a variable width font.\n" +"\n" +"Because this program doesn't handle variable width fonts\n" +"correctly, you might experience problems while editing.\n" +"\n" +"Do you want to continue or do you want to select another font." +msgstr "" + +#: optiondialog.cpp:1484 +msgid "Incompatible Font" +msgstr "" + +#: optiondialog.cpp:1485 +msgid "Continue at Own Risk" +msgstr "" + +#: optiondialog.cpp:1485 +#, fuzzy +msgid "Select Another Font" +msgstr "Интихоб кунед Рах(ҳо)-ро Ðз С" + +#: optiondialog.cpp:1521 +msgid "This resets all options. Not only those of the current topic." +msgstr "" + +#: pdiff.cpp:258 +msgid "PreprocessorCmd: " +msgstr "" + +#: pdiff.cpp:263 +msgid "" +"The following option(s) you selected might change data:\n" +msgstr "" + +#: pdiff.cpp:264 +msgid "" +"\n" +"Most likely this is not wanted during a merge.\n" +"Do you want to disable these settings or continue with these settings active?" +msgstr "" + +#: pdiff.cpp:266 +msgid "Option Unsafe for Merging" +msgstr "" + +#: pdiff.cpp:267 +msgid "Use These Options During Merge" +msgstr "" + +#: pdiff.cpp:267 +msgid "Disable Unsafe Options" +msgstr "" + +#: pdiff.cpp:297 +msgid "Loading A" +msgstr "" + +#: pdiff.cpp:301 +msgid "Loading B" +msgstr "" + +#: pdiff.cpp:318 pdiff.cpp:344 +msgid "Diff: A <-> B" +msgstr "" + +#: pdiff.cpp:324 pdiff.cpp:366 +msgid "Linediff: A <-> B" +msgstr "" + +#: pdiff.cpp:335 +msgid "Loading C" +msgstr "" + +#: pdiff.cpp:347 +msgid "Diff: B <-> C" +msgstr "" + +#: pdiff.cpp:350 +msgid "Diff: A <-> C" +msgstr "" + +#: pdiff.cpp:369 +msgid "Linediff: B <-> C" +msgstr "" + +#: pdiff.cpp:372 +msgid "Linediff: A <-> C" +msgstr "" + +#: pdiff.cpp:513 +msgid "All input files contain the same text, but are not binary equal." +msgstr "" + +#: pdiff.cpp:515 pdiff.cpp:517 pdiff.cpp:519 +msgid "" +"Files %1 and %2 are binary equal.\n" +msgstr "" + +#: pdiff.cpp:516 pdiff.cpp:518 pdiff.cpp:520 +msgid "" +"Files %1 and %2 have equal text, but are not binary equal. \n" +msgstr "" + +#: pdiff.cpp:530 +msgid "" +"Some inputfiles don't seem to be pure textfiles.\n" +"Note that the KDiff3-merge was not meant for binary data.\n" +"Continue at your own risk." +msgstr "" + +#: pdiff.cpp:979 +msgid "Abort" +msgstr "" + +#: pdiff.cpp:985 pdiff.cpp:1073 +#, fuzzy +msgid "Opening files..." +msgstr "Кушодан %1 нашуд." + +#: pdiff.cpp:1050 pdiff.cpp:1121 +#, fuzzy +msgid "File open error" +msgstr "Хатогӣ дар кушодани файл" + +#: pdiff.cpp:1153 +msgid "Cutting selection..." +msgstr "" + +#: pdiff.cpp:1174 +#, fuzzy +msgid "Copying selection to clipboard..." +msgstr "ÐуÑха мебардорад қиÑми интихоб карда шударо ба клипборд" + +#: pdiff.cpp:1190 +msgid "Inserting clipboard contents..." +msgstr "" + +#: pdiff.cpp:1713 +#, fuzzy +msgid "Save && Continue" +msgstr "Ðигоҳ доштан && баромадан" + +#: pdiff.cpp:1713 +#, fuzzy +msgid "Continue Without Saving" +msgstr "Бе нигоҳдорӣ баромадан" + +#: pdiff.cpp:1920 +#, fuzzy +msgid "Search complete." +msgstr "ҶуÑтуҷу дар ҷамъбаÑÑ‚" + +#: pdiff.cpp:1920 +#, fuzzy +msgid "Search Complete" +msgstr "ЯкҷоÑшавӣ ба анҷом раÑид" + +#: pdiff.cpp:2144 +msgid "Nothing is selected in either diff input window." +msgstr "" + +#: pdiff.cpp:2144 +#, fuzzy +msgid "Error while adding manual diff range" +msgstr "Хатогӣ дар вақти Ñҷод кардани каталог." + +#. i18n: file kdiff3_part.rc line 4 +#: rc.cpp:3 +#, fuzzy, no-c-format +msgid "&KDiff3" +msgstr "KDiff3Part" + +#. i18n: file kdiff3_part.rc line 13 +#: rc.cpp:6 +#, fuzzy, no-c-format +msgid "Configure KDiff3" +msgstr "Танзимоти KDiff3..." + +#. i18n: file kdiff3_shell.rc line 7 +#: rc.cpp:15 +#, fuzzy, no-c-format +msgid "&Directory" +msgstr "Хониши каталоги Ð" + +#. i18n: file kdiff3_shell.rc line 30 +#: rc.cpp:18 +#, fuzzy, no-c-format +msgid "Current Item Merge Operation" +msgstr "Тағйироти ҳамаи Ñкҷошавиҳо" + +#. i18n: file kdiff3_shell.rc line 38 +#: rc.cpp:21 +#, no-c-format +msgid "Current Item Sync Operation" +msgstr "" + +#. i18n: file kdiff3_shell.rc line 50 +#: rc.cpp:24 +#, no-c-format +msgid "&Movement" +msgstr "" + +#. i18n: file kdiff3_shell.rc line 61 +#: rc.cpp:27 +#, no-c-format +msgid "D&iffview" +msgstr "" + +#. i18n: file kdiff3_shell.rc line 73 +#: rc.cpp:30 +#, fuzzy, no-c-format +msgid "&Merge" +msgstr "ПайваÑÑ‚ кардан" + +#. i18n: file kdiff3_shell.rc line 95 +#: rc.cpp:33 +#, fuzzy, no-c-format +msgid "&Window" +msgstr "Ðишон диҳед Тирезаи С-ро" + +#: smalldialogs.cpp:53 +#, fuzzy +msgid "A (Base):" +msgstr "A (баромад): " + +#: smalldialogs.cpp:59 smalldialogs.cpp:75 smalldialogs.cpp:91 +#: smalldialogs.cpp:134 +msgid "File..." +msgstr "" + +#: smalldialogs.cpp:61 smalldialogs.cpp:77 smalldialogs.cpp:93 +#: smalldialogs.cpp:136 +#, fuzzy +msgid "Dir..." +msgstr "Каталог" + +#: smalldialogs.cpp:86 +msgid "C (Optional):" +msgstr "" + +#: smalldialogs.cpp:108 +msgid "Swap/Copy Names ..." +msgstr "" + +#: smalldialogs.cpp:114 smalldialogs.cpp:115 smalldialogs.cpp:116 +msgid "Swap %1<->%2" +msgstr "" + +#: smalldialogs.cpp:117 smalldialogs.cpp:118 smalldialogs.cpp:119 +msgid "Copy %1->Output" +msgstr "" + +#: smalldialogs.cpp:120 smalldialogs.cpp:121 smalldialogs.cpp:122 +msgid "Swap %1<->Output" +msgstr "" + +#: smalldialogs.cpp:129 +msgid "Output (optional):" +msgstr "" + +#: smalldialogs.cpp:158 +#, fuzzy +msgid "Configure..." +msgstr "Танзимоти KDiff3..." + +#: smalldialogs.cpp:347 +#, fuzzy +msgid "Search text:" +msgstr "Пайдо кардан:" + +#: smalldialogs.cpp:354 +msgid "Case sensitive" +msgstr "Ба ҳиÑоб гирифтани рӯйхат" + +#: smalldialogs.cpp:357 +msgid "Search A" +msgstr "ҶуÑтуҷуи A" + +#: smalldialogs.cpp:362 +msgid "Search B" +msgstr "ҶуÑтуҷуи B" + +#: smalldialogs.cpp:367 +msgid "Search C" +msgstr "ҶуÑтуҷуи C" + +#: smalldialogs.cpp:372 +msgid "Search output" +msgstr "ҶуÑтуҷу дар ҷамъбаÑÑ‚" + +#: smalldialogs.cpp:377 +msgid "&Search" +msgstr "&ҶуÑтуҷӯ" + +#: smalldialogs.cpp:394 +msgid "Regular Expression Tester" +msgstr "" + +#: smalldialogs.cpp:405 +msgid "Example auto merge line:" +msgstr "" + +#: smalldialogs.cpp:407 +msgid "For auto merge test copy a line as used in your files." +msgstr "" + +#: smalldialogs.cpp:413 smalldialogs.cpp:442 smalldialogs.cpp:479 +msgid "Match result:" +msgstr "" + +#: smalldialogs.cpp:432 +msgid "Example history start line (with leading comment):" +msgstr "" + +#: smalldialogs.cpp:435 +msgid "" +"Copy a history start line as used in your files,\n" +"including the leading comment." +msgstr "" + +#: smalldialogs.cpp:461 +msgid "History sort key order:" +msgstr "" + +#: smalldialogs.cpp:469 +msgid "Example history entry start line (without leading comment):" +msgstr "" + +#: smalldialogs.cpp:471 +msgid "" +"Copy a history entry start line as used in your files,\n" +"but omit the leading comment." +msgstr "" + +#: smalldialogs.cpp:486 +msgid "Sort key result:" +msgstr "" + +#: smalldialogs.cpp:537 smalldialogs.cpp:547 smalldialogs.cpp:568 +msgid "Match success." +msgstr "" + +#: smalldialogs.cpp:541 smalldialogs.cpp:551 smalldialogs.cpp:574 +#, fuzzy +msgid "Match failed." +msgstr "Ðигоҳ куни нашуд." + +#: smalldialogs.cpp:559 +msgid "Opening and closing parentheses don't match in regular expression." +msgstr "" + +#, fuzzy +#~ msgid "Diff and Merge" +#~ msgstr "ВоÑитаи муқоиÑа ва ÑÐºÒ·Ð¾Ñ ÐºÐ°Ñ€Ð´Ð°Ð½" + +#, fuzzy +#~ msgid "Save Directory Merge State ..." +#~ msgstr "Хатогӣ дар вақти хониши каталог" + +#, fuzzy +#~ msgid "Load Directory Merge State ..." +#~ msgstr "Хатогӣ дар вақти хониши каталог" + +#, fuzzy +#~ msgid "Synchronize Directories" +#~ msgstr "Мушоҳидакунии каталогҳо..." + +#, fuzzy +#~ msgid "Has no effect. For compatibility with certain tools." +#~ msgstr "Эзоҳ додани маълумоти файл.Барои мутобиқ будан бо аÑбобҳои муқаррар- шуда." + +#, fuzzy +#~ msgid "For compatibility with certain tools." +#~ msgstr "Эзоҳ додани маълумоти файл.Барои мутобиқ будан бо аÑбобҳои муқаррар- шуда." diff --git a/po/tr.po b/po/tr.po new file mode 100644 index 0000000..6584dd7 --- /dev/null +++ b/po/tr.po @@ -0,0 +1,2473 @@ +# translation of kdiff3.po to +# translation of kdiff3.po to turkish +# translation of kdiff3.po to Türkçe +# Copyright (C) 2003, 2004, 2005 Free Software Foundation, Inc. +# Görkem Çetin , 2003. +# Engin ÇAÄžATAY , 2004. +# Adem Alp YILDIZ , 2005. +# Alper Åžen , 2005. +# Alper Sen , 2005. +# +msgid "" +msgstr "" +"Project-Id-Version: kdiff3\n" +"POT-Creation-Date: 2006-11-05 08:45+0100\n" +"PO-Revision-Date: 2005-07-12 10:50+0300\n" +"Last-Translator: Alper Sen \n" +"Language-Team: Türkçe \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: KBabel 1.10\n" + +#: _translatorinfo.cpp:1 +msgid "" +"_: NAME OF TRANSLATORS\n" +"Your names" +msgstr "Görkem Çetin Engin ÇAÄžATAY Alper Åžen" + +#: _translatorinfo.cpp:3 +msgid "" +"_: EMAIL OF TRANSLATORS\n" +"Your emails" +msgstr "gorkem@kde.org engincagatay@yahoo.com aalpersen@gmail.com" + +#: diff.cpp:246 +msgid "Writing clipboard data to temp file failed." +msgstr "Geçici dosyaya pano verisi yazma baÅŸarısız." + +#: diff.cpp:250 +msgid "From Clipboard" +msgstr "Panodan" + +#: diff.cpp:491 +msgid "" +"Preprocessing possibly failed. Check this command:\n" +"\n" +" %1\n" +"\n" +"The preprocessing command will be disabled now." +msgstr "" +"ÖniÅŸleme baÅŸarısız oldu. Åžu komutu inceleyin:\n" +"\n" +" %1\n" +"\n" +"ÖniÅŸleme komutu artık devre dışı bırakılacak." + +#: diff.cpp:526 +msgid "" +"The line-matching-preprocessing possibly failed. Check this command:\n" +"\n" +" %1\n" +"\n" +"The line-matching-preprocessing command will be disabled now." +msgstr "" +"Satır-eÅŸleme-öniÅŸleme baÅŸarısız oldu. Åžu komutu inceleyin:\n" +"\n" +" %1\n" +"\n" +"Satır-eÅŸleme-öniÅŸleme komutu devre dışı bırakılacak." + +#: diff.cpp:1631 diff.cpp:1645 +msgid "" +"Data loss error:\n" +"If it is reproducable please contact the author.\n" +msgstr "" +"Veri kaybı hatası:\n" +"Bu durum tekrarlanabilir bir durumsa lütfen yazarla iletiÅŸim kurun.\n" + +#: diff.cpp:1633 diff.cpp:1647 +msgid "Severe Internal Error" +msgstr "Ciddi Dahili Hata" + +#: difftextwindow.cpp:1643 kdiff3.cpp:753 +#, fuzzy +msgid "Top line" +msgstr "Ãœst satır %1" + +#: difftextwindow.cpp:1653 +msgid "End" +msgstr "Son" + +#: directorymergewindow.cpp:142 +msgid "Mix of links and normal files." +msgstr "BaÄŸların ve normal dosyaların karışımı." + +#: directorymergewindow.cpp:149 +msgid "Link: " +msgstr "BaÄŸ: " + +#: directorymergewindow.cpp:157 +msgid "Size. " +msgstr "Boyut. " + +#: directorymergewindow.cpp:170 +msgid "Date & Size: " +msgstr "Tarih & Boyut: " + +#: directorymergewindow.cpp:179 directorymergewindow.cpp:185 +msgid "Creating temp copy of %1 failed." +msgstr "%1 dosyasının geçici kopyasının oluÅŸturulmasında hata oluÅŸtu." + +#: directorymergewindow.cpp:196 directorymergewindow.cpp:204 +msgid "Opening %1 failed." +msgstr "%1 açılamadı." + +#: directorymergewindow.cpp:208 +msgid "Comparing file..." +msgstr "Dosya karşılaÅŸtırılıyor..." + +#: directorymergewindow.cpp:218 directorymergewindow.cpp:224 +#, c-format +msgid "Error reading from %1" +msgstr "%1 konumundan okunamıyor" + +#: directorymergewindow.cpp:282 +msgid "Name" +msgstr "Ä°sim" + +#: directorymergewindow.cpp:286 +msgid "Operation" +msgstr "Ä°ÅŸlem" + +#: directorymergewindow.cpp:287 +msgid "Status" +msgstr "Durum" + +#: directorymergewindow.cpp:288 +msgid "Unsolved" +msgstr "ÇözülmemiÅŸ" + +#: directorymergewindow.cpp:289 +msgid "Solved" +msgstr "Çözülmüş" + +#: directorymergewindow.cpp:290 +msgid "Nonwhite" +msgstr "Beyaz deÄŸil" + +#: directorymergewindow.cpp:291 +msgid "White" +msgstr "Beyaz" + +#: directorymergewindow.cpp:319 +msgid "" +"You are currently doing a directory merge. Are you sure, you want to abort the " +"merge and rescan the directory?" +msgstr "" +"Åžu anda bir dizin birleÅŸtirmesi yapıyorsunuz. BirleÅŸtirmeden çıkmak ve dizini " +"yeniden taramak istediÄŸinizden emin misiniz?" + +#: directorymergewindow.cpp:320 directorymergewindow.cpp:2868 +msgid "Rescan" +msgstr "Yeniden Tara" + +#: directorymergewindow.cpp:320 kdiff3.cpp:603 pdiff.cpp:979 +msgid "Continue Merging" +msgstr "BirleÅŸtirmeye Devam Et" + +#: directorymergewindow.cpp:462 +msgid "Opening of directories failed:" +msgstr "Dizinler açılamadı:" + +#: directorymergewindow.cpp:465 +msgid "" +"Dir A \"%1\" does not exist or is not a directory.\n" +msgstr "" +"A Dizini \"%1\" mevcut deÄŸil ya da bu bir dizin deÄŸil.\n" + +#: directorymergewindow.cpp:468 +msgid "" +"Dir B \"%1\" does not exist or is not a directory.\n" +msgstr "" +"B Dizini \"%1\" mevcut deÄŸil ya da bu bir dizin deÄŸil.\n" + +#: directorymergewindow.cpp:471 +msgid "" +"Dir C \"%1\" does not exist or is not a directory.\n" +msgstr "" +"C Dizini \"%1\" mevcut deÄŸil ya da bu bir dizin deÄŸil.\n" + +#: directorymergewindow.cpp:473 +msgid "Directory Open Error" +msgstr "Dizin Açma Hatası" + +#: directorymergewindow.cpp:481 +msgid "" +"The destination directory must not be the same as A or B when three directories " +"are merged.\n" +"Check again before continuing." +msgstr "" +"3 dizin birleÅŸtirilirken hedef dizin A ya da B ile aynı olmamalıdır.\n" +"Devam etmeden önce kontrol ediniz." + +#: directorymergewindow.cpp:483 +msgid "Parameter Warning" +msgstr "Parametre Uyarısı" + +#: directorymergewindow.cpp:488 +msgid "Scanning directories..." +msgstr "Dizinler taranıyor..." + +#: directorymergewindow.cpp:537 +msgid "Reading Directory A" +msgstr "A Dizini Okunuyor" + +#: directorymergewindow.cpp:559 +msgid "Reading Directory B" +msgstr "B Dizini Okunuyor" + +#: directorymergewindow.cpp:581 +msgid "Reading Directory C" +msgstr "C Dizini Okunuyor" + +#: directorymergewindow.cpp:607 +msgid "Some subdirectories were not readable in" +msgstr "Bazı altdizinler okunabilir deÄŸildi" + +#: directorymergewindow.cpp:612 +msgid "Check the permissions of the subdirectories." +msgstr "Altdizinlerin izinlerini kontrol ediniz." + +#: directorymergewindow.cpp:646 kdiff3.cpp:552 kdiff3.cpp:636 kdiff3.cpp:661 +#: kdiff3.cpp:934 kdiff3.cpp:955 pdiff.cpp:1059 pdiff.cpp:1131 pdiff.cpp:1169 +#: pdiff.cpp:1185 pdiff.cpp:1215 pdiff.cpp:1226 +msgid "Ready." +msgstr "Hazır." + +#: directorymergewindow.cpp:660 +msgid "Directory Comparison Status" +msgstr "Dizin KarşılaÅŸtırma Durumu" + +#: directorymergewindow.cpp:661 +msgid "Number of subdirectories:" +msgstr "Altdizinlerin sayısı:" + +#: directorymergewindow.cpp:662 +msgid "Number of equal files:" +msgstr "EÅŸit dosyaların sayısı:" + +#: directorymergewindow.cpp:663 +msgid "Number of different files:" +msgstr "Farklı dosyaların sayısı:" + +#: directorymergewindow.cpp:666 +msgid "Number of manual merges:" +msgstr "El ile birleÅŸtirmelerin sayısı:" + +#: directorymergewindow.cpp:802 +msgid "This affects all merge operations." +msgstr "Bu, tüm birleÅŸtirme iÅŸlemlerini etkiler." + +#: directorymergewindow.cpp:803 +msgid "Changing All Merge Operations" +msgstr "Tüm BirleÅŸtirme Ä°ÅŸlemleri DeÄŸiÅŸtiriliyor" + +#: directorymergewindow.cpp:803 mergeresultwindow.cpp:287 +msgid "C&ontinue" +msgstr "D&evam Et" + +#: directorymergewindow.cpp:1169 +msgid "Processing " +msgstr "Ä°ÅŸleniyor" + +#: directorymergewindow.cpp:1647 directorymergewindow.cpp:1653 +msgid "To do." +msgstr "Yapılacak." + +#: directorymergewindow.cpp:1756 directorymergewindow.cpp:2899 +msgid "Copy A to B" +msgstr "A'yı B'ye kopyala" + +#: directorymergewindow.cpp:1757 directorymergewindow.cpp:2900 +msgid "Copy B to A" +msgstr "B'yi A'ya kopyala" + +#: directorymergewindow.cpp:1758 directorymergewindow.cpp:2901 +msgid "Delete A" +msgstr "A'yı Sil" + +#: directorymergewindow.cpp:1759 directorymergewindow.cpp:2902 +msgid "Delete B" +msgstr "B'yi Sil" + +#: directorymergewindow.cpp:1760 +msgid "Delete A & B" +msgstr "A ve B'yi Sil" + +#: directorymergewindow.cpp:1761 directorymergewindow.cpp:2904 +msgid "Merge to A" +msgstr "A ile BirleÅŸtir" + +#: directorymergewindow.cpp:1762 directorymergewindow.cpp:2905 +msgid "Merge to B" +msgstr "B ile BirleÅŸtir" + +#: directorymergewindow.cpp:1763 +msgid "Merge to A & B" +msgstr "A ve B ile BirleÅŸtir" + +#: directorymergewindow.cpp:1767 directorymergewindow.cpp:2896 +msgid "Delete (if exists)" +msgstr "(varsa) Sil" + +#: directorymergewindow.cpp:1768 directorymergewindow.cpp:1769 +#: directorymergewindow.cpp:2895 optiondialog.cpp:809 smalldialogs.cpp:102 +msgid "Merge" +msgstr "BirleÅŸtir" + +#: directorymergewindow.cpp:1768 directorymergewindow.cpp:1769 +msgid "Merge (manual)" +msgstr "BirleÅŸtir (el ile)" + +#: directorymergewindow.cpp:1770 +msgid "Error: Conflicting File Types" +msgstr "Hata: Çakışan Dosya Türleri" + +#: directorymergewindow.cpp:1771 +msgid "Error: Dates are equal but files are not." +msgstr "Hata: Tarihler aynı fakat dosyalar aynı deÄŸil." + +#: directorymergewindow.cpp:1795 directorymergewindow.cpp:1824 +#: directorymergewindow.cpp:1849 +msgid "This operation is currently not possible." +msgstr "Bu iÅŸlem ÅŸu anda yapılabilir deÄŸil." + +#: directorymergewindow.cpp:1795 directorymergewindow.cpp:1824 +#: directorymergewindow.cpp:1849 directorymergewindow.cpp:2106 +msgid "Operation Not Possible" +msgstr "Ä°ÅŸlem Yapılabilir DeÄŸil" + +#: directorymergewindow.cpp:1888 +msgid "" +"This should never happen: \n" +"\n" +"mergeResultSaved: m_pMFI=0\n" +"\n" +"If you know how to reproduce this, please contact the program author." +msgstr "" +"Bu, hiç oluÅŸmamalı: \n" +"\n" +"mergeResultSaved: m_pMFI=0\n" +"\n" +"Bu durumun nasıl tekrarlanacağını biliyorsanız, lütfen uygulamanın yazarıyla " +"iletiÅŸime geçin." + +#: directorymergewindow.cpp:1888 +msgid "Program Error" +msgstr "Uygulama Hatası" + +#: directorymergewindow.cpp:1899 +msgid "" +"An error occurred while copying.\n" +msgstr "" +"Koplayanırken hata oluÅŸtu.\n" + +#: directorymergewindow.cpp:1900 directorymergewindow.cpp:2306 +msgid "Merge Error" +msgstr "BirleÅŸtirme Hatası" + +#: directorymergewindow.cpp:1905 directorymergewindow.cpp:2311 +msgid "Error." +msgstr "Hata." + +#: directorymergewindow.cpp:1910 directorymergewindow.cpp:2202 +#: directorymergewindow.cpp:2242 +msgid "Done." +msgstr "Tamamlandı." + +#: directorymergewindow.cpp:1933 +msgid "Not saved." +msgstr "Kaydedilmedi." + +#: directorymergewindow.cpp:1968 +msgid "Unknown merge operation. (This must never happen!)" +msgstr "Bilinmeyen birleÅŸtirme iÅŸlemi. (Bu, hiçbir zaman oluÅŸmamalı!)" + +#: directorymergewindow.cpp:2000 +msgid "Unknown merge operation." +msgstr "Bilinmeyen birleÅŸtirme iÅŸlemi." + +#: directorymergewindow.cpp:2015 +msgid "" +"The merge is about to begin.\n" +"\n" +"Choose \"Do it\" if you have read the instructions and know what you are " +"doing.\n" +"Choosing \"Simulate it\" will tell you what would happen.\n" +"\n" +"Be aware that this program still has beta status and there is NO WARRANTY " +"whatsoever! Make backups of your vital data!" +msgstr "" +"BirleÅŸtirme baÅŸlamak üzere.\n" +"\n" +"Açıklamaları okuduysanız ve ne yaptığınızı biliyorsanız \"Yap\"ı seçin.\n" +"\"Dene\"yi seçmek size ne olabileceÄŸini gösterir.\n" +"\n" +"Bu uygulama hala beta durumundadır ve ne olursa olsun hiçbir GARANTÄ°SÄ° YOKTUR! " +"Önemli verilerinizin yedeÄŸini alın!!" + +#: directorymergewindow.cpp:2020 +msgid "Starting Merge" +msgstr "BirleÅŸtirme BaÅŸlıyor" + +#: directorymergewindow.cpp:2020 +msgid "Do It" +msgstr "Yap" + +#: directorymergewindow.cpp:2020 +msgid "Simulate It" +msgstr "Dene" + +#: directorymergewindow.cpp:2046 +msgid "" +"The highlighted item has a different type in the different directories. Select " +"what to do." +msgstr "" +"RenklendirilmiÅŸ nesne, deÄŸiÅŸik dizinlerde deÄŸiÅŸik dosya türüne sahip. Ne " +"yapılacağını seçiniz." + +#: directorymergewindow.cpp:2055 +msgid "" +"The modification dates of the file are equal but the files are not. Select what " +"to do." +msgstr "" +"Dosyaların deÄŸiÅŸtirilme tarihleri aynı fakat dosyalar aynı deÄŸil. Ne " +"yapılacağını seçiniz." + +#: directorymergewindow.cpp:2106 +#, fuzzy +msgid "" +"This operation is currently not possible because directory merge is currently " +"running." +msgstr "Bu iÅŸlem ÅŸu anda yapılamıyor, çünkü birleÅŸtirme hala devam ediyor." + +#: directorymergewindow.cpp:2166 +msgid "" +"There was an error in the last step.\n" +"Do you want to continue with the item that caused the error or do you want to " +"skip this item?" +msgstr "" +"Son adımda bir hata oluÅŸtu.\n" +"Hata oluÅŸturan nesne ile devam etmek mi yoksa bu nesneyi atlamak mı " +"istiyorsunuz?" + +#: directorymergewindow.cpp:2168 +msgid "Continue merge after an error" +msgstr "Bir hatadan sonra birleÅŸtirmeye devam et" + +#: directorymergewindow.cpp:2168 +msgid "Continue With Last Item" +msgstr "Son Nesne ile Devam Et" + +#: directorymergewindow.cpp:2168 +msgid "Skip Item" +msgstr "Nesneyi Atla" + +#: directorymergewindow.cpp:2202 +msgid "Skipped." +msgstr "Atlandı" + +#: directorymergewindow.cpp:2209 directorymergewindow.cpp:2435 +msgid "In progress..." +msgstr "Uygulanıyor..." + +#: directorymergewindow.cpp:2257 +msgid "Merge operation complete." +msgstr "BirleÅŸtirme iÅŸlemi tamamlandı." + +#: directorymergewindow.cpp:2257 directorymergewindow.cpp:2260 +msgid "Merge Complete" +msgstr "BirleÅŸtirme Tamamlandı" + +#: directorymergewindow.cpp:2269 +msgid "" +"Simulated merge complete: Check if you agree with the proposed operations." +msgstr "" + +#: directorymergewindow.cpp:2305 +msgid "" +"An error occurred. Press OK to see detailed information.\n" +msgstr "" +"Bir hata oluÅŸtu. Detaylı bilgi görmek için TAMAM'a basınız.\n" + +#: directorymergewindow.cpp:2348 +msgid "Error: While deleting %1: Creating backup failed." +msgstr "Hata: %1 silinirken oluÅŸtu: Yedek alınamadı." + +#: directorymergewindow.cpp:2355 +msgid "delete directory recursively( %1 )" +msgstr "" + +#: directorymergewindow.cpp:2357 +msgid "delete( %1 )" +msgstr "sil( %1 )" + +#: directorymergewindow.cpp:2372 +msgid "Error: delete dir operation failed while trying to read the directory." +msgstr "Hata: dizin okunmaya çalışırken dizini silme iÅŸlemi baÅŸarısız oldu." + +#: directorymergewindow.cpp:2391 +msgid "Error: rmdir( %1 ) operation failed." +msgstr "Hata: rmdir( %1 ) iÅŸlemi baÅŸarısız oldu." + +#: directorymergewindow.cpp:2401 +msgid "Error: delete operation failed." +msgstr "Hata: silme iÅŸlemi baÅŸarısız oldu." + +#: directorymergewindow.cpp:2427 +msgid "manual merge( %1, %2, %3 -> %4)" +msgstr "el ile birleÅŸtir( %1, %2, %3 -> %4)" + +#: directorymergewindow.cpp:2430 +#, fuzzy +msgid "" +" Note: After a manual merge the user should continue by pressing F7." +msgstr "" +" Not: El ile birleÅŸtirmeden sonra kullanıcı F7 ile devam etmelidir." + +#: directorymergewindow.cpp:2453 +msgid "Error: copy( %1 -> %2 ) failed.Deleting existing destination failed." +msgstr "" +"Hata: kopyala( %1 -> %2) baÅŸarısız oldu. Mevcut hedefin silinmesi baÅŸarısız " +"oldu." + +#: directorymergewindow.cpp:2463 +msgid "copyLink( %1 -> %2 )" +msgstr "BağıKopyala( %1 -> %2 )" + +#: directorymergewindow.cpp:2474 +msgid "Error: copyLink failed: Remote links are not yet supported." +msgstr "Hata: BağıKopyala baÅŸarısız oldu: Uzak baÄŸlar henüz desteklenmiyor." + +#: directorymergewindow.cpp:2480 +msgid "Error: copyLink failed." +msgstr "Hata: BağıKopyala baÅŸarısız oldu." + +#: directorymergewindow.cpp:2500 +msgid "copy( %1 -> %2 )" +msgstr "kopyala( %1 -> %2 )" + +#: directorymergewindow.cpp:2526 +msgid "Error during rename( %1 -> %2 ): Cannot delete existing destination." +msgstr "" +"Yeniden isimlendirilirken ( %1 -> %2 ) hata oluÅŸtu: Mevcut hedef silinemiyor." + +#: directorymergewindow.cpp:2532 +msgid "rename( %1 -> %2 )" +msgstr "yeniden isimlendir( %1 -> %2 )" + +#: directorymergewindow.cpp:2541 +msgid "Error: Rename failed." +msgstr "Hata: Yeniden isimlendirme baÅŸarısız oldu." + +#: directorymergewindow.cpp:2559 +msgid "Error during makeDir of %1. Cannot delete existing file." +msgstr "%1 klasörü oluÅŸturulurken hata: Mevcut dosya silinemiyor." + +#: directorymergewindow.cpp:2575 +msgid "makeDir( %1 )" +msgstr "dizin oluÅŸtur( %1 )" + +#: directorymergewindow.cpp:2585 +msgid "Error while creating directory." +msgstr "Dizin oluÅŸturulması sırasında hata oluÅŸtu." + +#: directorymergewindow.cpp:2608 directorymergewindow.cpp:2725 +msgid "Dest" +msgstr "Hedef" + +#: directorymergewindow.cpp:2612 directorymergewindow.cpp:2650 +msgid "Dir" +msgstr "Dizin" + +#: directorymergewindow.cpp:2613 +msgid "Type" +msgstr "Tür" + +#: directorymergewindow.cpp:2614 +msgid "Size" +msgstr "Boyut" + +#: directorymergewindow.cpp:2615 +msgid "Attr" +msgstr "Özellikler" + +#: directorymergewindow.cpp:2616 +msgid "Last Modification" +msgstr "Son DeÄŸiÅŸtirme" + +#: directorymergewindow.cpp:2617 +msgid "Link-Destination" +msgstr "BaÄŸ-Hedefi" + +#: directorymergewindow.cpp:2667 +msgid "not available" +msgstr "mümkün deÄŸil" + +#: directorymergewindow.cpp:2687 +msgid "A (Dest): " +msgstr "A (Hedef):" + +#: directorymergewindow.cpp:2690 +msgid "A (Base): " +msgstr "A (Temel): " + +#: directorymergewindow.cpp:2696 +msgid "B (Dest): " +msgstr "B (Hedef): " + +#: directorymergewindow.cpp:2704 +msgid "C (Dest): " +msgstr "C (Hedef): " + +#: directorymergewindow.cpp:2710 +msgid "Dest: " +msgstr "Hedef: " + +#: directorymergewindow.cpp:2775 +#, fuzzy +msgid "Save Directory Merge State As..." +msgstr "Dizin BirleÅŸtirmesi" + +#: directorymergewindow.cpp:2862 +msgid "Start/Continue Directory Merge" +msgstr "Dizin BirleÅŸtirmesini BaÅŸlat/Devam Et" + +#: directorymergewindow.cpp:2863 +msgid "Run Operation for Current Item" +msgstr "Mevcut Nesne için Ä°ÅŸlem BaÅŸlat" + +#: directorymergewindow.cpp:2864 +msgid "Compare Selected File" +msgstr "Seçili Dosyayı KarşılaÅŸtır" + +#: directorymergewindow.cpp:2865 +msgid "Merge Current File" +msgstr "Mevcut Dosyayı BirleÅŸtir" + +#: directorymergewindow.cpp:2866 +msgid "Fold All Subdirs" +msgstr "Tüm Alt Dizinleri Kapat" + +#: directorymergewindow.cpp:2867 +msgid "Unfold All Subdirs" +msgstr "Tüm Alt Dizinleri Aç" + +#: directorymergewindow.cpp:2871 +msgid "Choose A for All Items" +msgstr "Tüm Nesneler için A'yı Seç" + +#: directorymergewindow.cpp:2872 +msgid "Choose B for All Items" +msgstr "Tüm Nesneler için B'yi Seç" + +#: directorymergewindow.cpp:2873 +msgid "Choose C for All Items" +msgstr "Tüm Nesneler için C'yi Seç" + +#: directorymergewindow.cpp:2874 +msgid "Auto-Choose Operation for All Items" +msgstr "Tüm Nesneler için Atomatik-Seçim Ä°ÅŸlemi" + +#: directorymergewindow.cpp:2875 +msgid "No Operation for All Items" +msgstr "Tüm Nesneler için Hiçbir Seçim" + +#: directorymergewindow.cpp:2880 +msgid "Show Identical Files" +msgstr "" + +#: directorymergewindow.cpp:2881 +#, fuzzy +msgid "Show Different Files" +msgstr "Farklı dosyaların sayısı:" + +#: directorymergewindow.cpp:2882 +msgid "Show Files only in A" +msgstr "" + +#: directorymergewindow.cpp:2883 +msgid "Show Files only in B" +msgstr "" + +#: directorymergewindow.cpp:2884 +msgid "Show Files only in C" +msgstr "" + +#: directorymergewindow.cpp:2888 +#, fuzzy +msgid "Compare Explicitly Selected Files" +msgstr "Seçili Dosyayı KarşılaÅŸtır" + +#: directorymergewindow.cpp:2889 +#, fuzzy +msgid "Merge Explicitly Selected Files" +msgstr "Seçili Dosyayı KarşılaÅŸtır" + +#: directorymergewindow.cpp:2891 directorymergewindow.cpp:2898 +msgid "Do Nothing" +msgstr "Bir Åžey Yapma" + +#: directorymergewindow.cpp:2892 +msgid "A" +msgstr "A" + +#: directorymergewindow.cpp:2893 +msgid "B" +msgstr "B" + +#: directorymergewindow.cpp:2894 +msgid "C" +msgstr "C" + +#: directorymergewindow.cpp:2903 +msgid "Delete A && B" +msgstr "A && B'yi Sil" + +#: directorymergewindow.cpp:2906 +msgid "Merge to A && B" +msgstr "A && B ile BirleÅŸtir" + +#: fileaccess.cpp:595 +msgid "" +"While trying to make a backup, deleting an older backup failed. \n" +"Filename: " +msgstr "" +"Yedekleme yapılırken, eski bir yedeÄŸin silinmesi baÅŸarısız oldu.\n" +"Dosya adı: " + +#: fileaccess.cpp:602 +msgid "" +"While trying to make a backup, renaming failed. \n" +"Filenames: " +msgstr "" +"Yedekleme yapılırken, yeniden isimlendirme baÅŸarısız oldu.\n" +"Dosya adları: " + +#: fileaccess.cpp:624 +#, c-format +msgid "Getting file status: %1" +msgstr "Dosya durumu okunuyor: %1" + +#: fileaccess.cpp:667 +#, c-format +msgid "Reading file: %1" +msgstr "Dosya okunuyor: %1" + +#: fileaccess.cpp:703 +#, c-format +msgid "Writing file: %1" +msgstr "Dosya yazılıyor: %1" + +#: fileaccess.cpp:731 +msgid "Out of memory" +msgstr "Hafıza yetersizliÄŸi" + +#: fileaccess.cpp:766 +#, c-format +msgid "Making directory: %1" +msgstr "Dizin oluÅŸturuluyor: %1" + +#: fileaccess.cpp:786 +#, c-format +msgid "Removing directory: %1" +msgstr "Dizin siliniyor: %1" + +#: fileaccess.cpp:801 +#, c-format +msgid "Removing file: %1" +msgstr "Dosya siliniyor: %1" + +#: fileaccess.cpp:817 +msgid "Creating symbolic link: %1 -> %2" +msgstr "Sembolik baÄŸ oluÅŸturuluyor: %1 -> %2" + +#: fileaccess.cpp:843 +msgid "Renaming file: %1 -> %2" +msgstr "Dosya yeniden isimlendiriliyor: %1 -> %2" + +#: fileaccess.cpp:879 +msgid "Copying file: %1 -> %2" +msgstr "Dosya kopyalanıyor: %1 -> %2" + +#: fileaccess.cpp:893 +#, c-format +msgid "" +"Error during file copy operation: Opening file for reading failed. Filename: %1" +msgstr "" +"Dosya kopyalanırken hata oluÅŸtu: Dosya okunmak için açılamadı. Dosya adı: %1" + +#: fileaccess.cpp:899 +#, c-format +msgid "" +"Error during file copy operation: Opening file for writing failed. Filename: %1" +msgstr "" +"Dosya kopyalanırken hata oluÅŸtu: Dosya yazılmak için açılamadı. Dosya adı: %1" + +#: fileaccess.cpp:914 +#, c-format +msgid "Error during file copy operation: Reading failed. Filename: %1" +msgstr "Dosya kopyalanırken hata oluÅŸtu: Okunamadı. Dosya adı: %1" + +#: fileaccess.cpp:923 +#, c-format +msgid "Error during file copy operation: Writing failed. Filename: %1" +msgstr "Dosya kopyalanırken hata oluÅŸtu: Yazılamadı. Dosya adı: %1" + +#: fileaccess.cpp:1219 +msgid "Reading directory: " +msgstr "Okuma dizini: " + +#: fileaccess.cpp:1348 +#, c-format +msgid "Listing directory: %1" +msgstr "Listeleme dizini: %1" + +#: kdiff3.cpp:142 +msgid "Current Configuration:" +msgstr "" + +#: kdiff3.cpp:147 +#, fuzzy +msgid "Config Option Error:" +msgstr "Dosya Açma Hatası" + +#: kdiff3.cpp:187 +msgid "Option --auto used, but no output file specified." +msgstr "--auto seçeneÄŸi kullanıldı, fakat çıktı dosyası belirtilmedi." + +#: kdiff3.cpp:323 +msgid "Option --auto ignored for directory comparison." +msgstr "--auto seçeneÄŸi dizin karşılaÅŸtırmasını reddetti." + +#: kdiff3.cpp:359 +msgid "Saving failed." +msgstr "Kaydetme baÅŸarısız oldu." + +#: kdiff3.cpp:386 pdiff.cpp:1041 pdiff.cpp:1112 +msgid "Opening of these files failed:" +msgstr "Åžu dosyaların açılması baÅŸarısız oldu:" + +#: kdiff3.cpp:395 +msgid "File Open Error" +msgstr "Dosya Açma Hatası" + +#: kdiff3.cpp:418 +msgid "Opens documents for comparison..." +msgstr "KarşılaÅŸtırmak için belge açar..." + +#: kdiff3.cpp:423 +msgid "Saves the merge result. All conflicts must be solved!" +msgstr "BirleÅŸtirme sonuçlarını kaydeder. Tüm çakışmalar çözülmelidir!" + +#: kdiff3.cpp:425 +msgid "Saves the current document as..." +msgstr "Mevcut belgeyi farklı kaydeder..." + +#: kdiff3.cpp:427 +msgid "Print the differences" +msgstr "" + +#: kdiff3.cpp:429 +msgid "Quits the application" +msgstr "Uygulamadan çıkar" + +#: kdiff3.cpp:431 +msgid "Cuts the selected section and puts it to the clipboard" +msgstr "Seçili bölümü keser ve panoya koyar" + +#: kdiff3.cpp:433 +msgid "Copies the selected section to the clipboard" +msgstr "Seçili bölümü panoya kopyalar" + +#: kdiff3.cpp:435 +msgid "Pastes the clipboard contents to actual position" +msgstr "Pano içeriklerini mevcut alana yapıştırır" + +#: kdiff3.cpp:437 +msgid "Select everything in current window" +msgstr "" + +#: kdiff3.cpp:439 +msgid "Search for a string" +msgstr "Bir satırı ara" + +#: kdiff3.cpp:441 +msgid "Search again for the string" +msgstr "Satırı tekrar ara" + +#: kdiff3.cpp:443 +msgid "Enables/disables the toolbar" +msgstr "Araç çubuÄŸunu açar/kapatır" + +#: kdiff3.cpp:445 +msgid "Enables/disables the statusbar" +msgstr "Durum çubuÄŸunu açar/kapatır" + +#: kdiff3.cpp:449 +msgid "Configure KDiff3..." +msgstr "KDiff3 Uygulamasını Yapılandır..." + +#: kdiff3.cpp:470 +msgid "Go to Current Delta" +msgstr "Mevcut Delta'ya Git" + +#: kdiff3.cpp:471 +msgid "Go to First Delta" +msgstr "Ä°lk Delta'ya Git" + +#: kdiff3.cpp:472 +msgid "Go to Last Delta" +msgstr "Son Delta'ya Git" + +#: kdiff3.cpp:473 +msgid "(Skips white space differences when \"Show White Space\" is disabled.)" +msgstr "" +"(\"BoÅŸluk Karakterini Göster\" seçeneÄŸi kapalı iken boÅŸluk farklarını göz ardı " +"eder.)" + +#: kdiff3.cpp:474 +msgid "" +"(Does not skip white space differences even when \"Show White Space\" is " +"disabled.)" +msgstr "" +"(\"BoÅŸluk Karakterini Göster\" seçeneÄŸi kapalı iken boÅŸluk farklarını göz ardı " +"etmez.)" + +#: kdiff3.cpp:475 +msgid "Go to Previous Delta" +msgstr "Önceki Delta'ya Git" + +#: kdiff3.cpp:477 +msgid "Go to Next Delta" +msgstr "Sonraki Delta'ya Git" + +#: kdiff3.cpp:479 +msgid "Go to Previous Conflict" +msgstr "Bir Önceki Çakışmaya Git" + +#: kdiff3.cpp:481 +msgid "Go to Next Conflict" +msgstr "Bir Sonraki Çakışmaya Git" + +#: kdiff3.cpp:483 +msgid "Go to Previous Unsolved Conflict" +msgstr "Bir Önceki Çözülmeyen Çakışmaya Git" + +#: kdiff3.cpp:485 +msgid "Go to Next Unsolved Conflict" +msgstr "Bir Sonraki Çözülmeyen Çakışmaya Git" + +#: kdiff3.cpp:487 +msgid "Select Line(s) From A" +msgstr "A'dan Satır(lar) Seç" + +#: kdiff3.cpp:488 +msgid "Select Line(s) From B" +msgstr "B'den Satır(lar) Seç" + +#: kdiff3.cpp:489 +msgid "Select Line(s) From C" +msgstr "C'den Satır(lar) Seç" + +#: kdiff3.cpp:490 +msgid "Automatically Go to Next Unsolved Conflict After Source Selection" +msgstr "" +"Kaynak Seçiminden Sonra Otomatik Olarak Bir Sonraki Çözülmeyen Çakışmaya Git" + +#: kdiff3.cpp:492 +msgid "Show Space && Tabulator Characters for Differences" +msgstr "Farklar için BoÅŸluk && Sekme Karakterlerini Göster" + +#: kdiff3.cpp:493 +msgid "Show White Space" +msgstr "BoÅŸluÄŸu Göster" + +#: kdiff3.cpp:495 +msgid "Show Line Numbers" +msgstr "Satır Numaralarını Göster" + +#: kdiff3.cpp:496 +msgid "Choose A Everywhere" +msgstr "A'yı Heryerde Seç" + +#: kdiff3.cpp:497 +msgid "Choose B Everywhere" +msgstr "B'yi Heryerde Seç" + +#: kdiff3.cpp:498 +msgid "Choose C Everywhere" +msgstr "C'yi Heryerde Seç" + +#: kdiff3.cpp:499 +#, fuzzy +msgid "Choose A for All Unsolved Conflicts" +msgstr "A'yı Tüm ÇözülmemiÅŸ Çakışmalar için Seç" + +#: kdiff3.cpp:500 +#, fuzzy +msgid "Choose B for All Unsolved Conflicts" +msgstr "B'yi Tüm ÇözülmemiÅŸ Çakışmalar için Seç" + +#: kdiff3.cpp:501 +#, fuzzy +msgid "Choose C for All Unsolved Conflicts" +msgstr "C'yi Tüm ÇözülmemiÅŸ Çakışmalar için Seç" + +#: kdiff3.cpp:502 +#, fuzzy +msgid "Choose A for All Unsolved Whitespace Conflicts" +msgstr "A'yı Tüm ÇözülmemiÅŸ Çakışmalar için Seç" + +#: kdiff3.cpp:503 +#, fuzzy +msgid "Choose B for All Unsolved Whitespace Conflicts" +msgstr "B'yi Tüm ÇözülmemiÅŸ Çakışmalar için Seç" + +#: kdiff3.cpp:504 +#, fuzzy +msgid "Choose C for All Unsolved Whitespace Conflicts" +msgstr "C'yi Tüm ÇözülmemiÅŸ Çakışmalar için Seç" + +#: kdiff3.cpp:505 +msgid "Automatically Solve Simple Conflicts" +msgstr "Basit Çakışmaları Otomatik Olarak Çöz" + +#: kdiff3.cpp:506 +msgid "Set Deltas to Conflicts" +msgstr "" + +#: kdiff3.cpp:507 +msgid "Run Regular Expression Auto Merge" +msgstr "" + +#: kdiff3.cpp:508 +#, fuzzy +msgid "Automatically Solve History Conflicts" +msgstr "Basit Çakışmaları Otomatik Olarak Çöz" + +#: kdiff3.cpp:509 +msgid "Split Diff At Selection" +msgstr "" + +#: kdiff3.cpp:510 +#, fuzzy +msgid "Join Selected Diffs" +msgstr "Seçili Dosyayı KarşılaÅŸtır" + +#: kdiff3.cpp:512 +msgid "Show Window A" +msgstr "A Penceresini Göster" + +#: kdiff3.cpp:513 +msgid "Show Window B" +msgstr "B Penceresini Göster" + +#: kdiff3.cpp:514 +msgid "Show Window C" +msgstr "C Penceresini Göster" + +#: kdiff3.cpp:515 kdiff3.cpp:526 +msgid "Focus Next Window" +msgstr "Bir Sonraki Pencereye Odaklan" + +#: kdiff3.cpp:517 +msgid "Normal Overview" +msgstr "Normal Öngörünüm" + +#: kdiff3.cpp:518 +msgid "A vs. B Overview" +msgstr "A - B KarşılaÅŸtırılması Öngörünümü" + +#: kdiff3.cpp:519 +msgid "A vs. C Overview" +msgstr "A - C KarşılaÅŸtırılması Öngörünümü" + +#: kdiff3.cpp:520 +msgid "B vs. C Overview" +msgstr "B - C KarşılaÅŸtırılması Öngörünümü" + +#: kdiff3.cpp:521 +msgid "Word Wrap Diff Windows" +msgstr "" + +#: kdiff3.cpp:522 +msgid "Add Manual Diff Alignment" +msgstr "" + +#: kdiff3.cpp:523 +msgid "Clear All Manual Diff Alignments" +msgstr "" + +#: kdiff3.cpp:528 +msgid "Focus Prev Window" +msgstr "Bir Önceki Pencereye Odaklan" + +#: kdiff3.cpp:529 +msgid "Toggle Split Orientation" +msgstr "" + +#: kdiff3.cpp:531 +msgid "Dir && Text Split Screen View" +msgstr "" + +#: kdiff3.cpp:533 +msgid "Toggle Between Dir && Text View" +msgstr "" + +#: kdiff3.cpp:582 pdiff.cpp:1712 +msgid "The merge result hasn't been saved." +msgstr "BirleÅŸtirme sonucu kaydedilmedi." + +#: kdiff3.cpp:583 +msgid "Save && Quit" +msgstr "Kaydet ve Çık" + +#: kdiff3.cpp:583 +msgid "Quit Without Saving" +msgstr "Kaydetmeden Çık" + +#: kdiff3.cpp:591 pdiff.cpp:1721 +msgid "Saving the merge result failed." +msgstr "BirleÅŸtirme sonucunun kaydedilmesi baÅŸarısız oldu." + +#: kdiff3.cpp:602 pdiff.cpp:978 +msgid "" +"You are currently doing a directory merge. Are you sure, you want to abort?" +msgstr "" +"Åžu anda bir dizin birleÅŸtirmesi gerçekleÅŸtiriyorsunuz. Çıkmak istediÄŸinizden " +"emin misiniz?" + +#: kdiff3.cpp:625 +msgid "Saving file..." +msgstr "Dosya kaydediliyor..." + +#: kdiff3.cpp:642 +msgid "Saving file with a new filename..." +msgstr "Dosya yeni bir isimle kaydediliyor..." + +#: kdiff3.cpp:732 +#, fuzzy +msgid "Printing..." +msgstr "Çıkılıyor..." + +#: kdiff3.cpp:738 kdiff3.cpp:900 +msgid "Printing aborted." +msgstr "" + +#: kdiff3.cpp:870 +msgid "Selection" +msgstr "" + +#: kdiff3.cpp:896 +#, fuzzy +msgid "Printing completed." +msgstr "BirleÅŸtirme iÅŸlemi tamamlandı." + +#: kdiff3.cpp:906 +msgid "Exiting..." +msgstr "Çıkılıyor..." + +#: kdiff3.cpp:918 +msgid "Toggling toolbar..." +msgstr "" + +#: kdiff3.cpp:939 +msgid "Toggle the statusbar..." +msgstr "" + +#: kdiff3_part.cpp:155 kdiff3_part.cpp:224 +msgid "Couldn't find files for comparison." +msgstr "KarşılaÅŸtırılacak dosya bulunamadı." + +#: kdiff3_part.cpp:291 +msgid "KDiff3Part" +msgstr "KDiff3Part" + +#: kdiff3_shell.cpp:78 +msgid "" +"Could not find our part!\n" +"This usually happens due to an installation problem. Please read the " +"README-file in the source package for details." +msgstr "" + +#: main.cpp:35 +msgid "Tool for Comparison and Merge of Files and Directories" +msgstr "" + +#: main.cpp:40 +msgid "Merge the input." +msgstr "Girdiyi birleÅŸtir." + +#: main.cpp:42 +msgid "Explicit base file. For compatibility with certain tools." +msgstr "" + +#: main.cpp:44 +msgid "Output file. Implies -m. E.g.: -o newfile.txt" +msgstr "" + +#: main.cpp:45 +msgid "Output file, again. (For compatibility with certain tools.)" +msgstr "" + +#: main.cpp:46 +msgid "No GUI if all conflicts are auto-solvable. (Needs -o file)" +msgstr "" + +#: main.cpp:47 +msgid "Don't solve conflicts automatically. (For compatibility...)" +msgstr "Çakışmaları otomatik çözme. (Uyumluluk için...)" + +#: main.cpp:48 +msgid "Visible name replacement for input file 1 (base)." +msgstr "" + +#: main.cpp:49 +msgid "Visible name replacement for input file 2." +msgstr "" + +#: main.cpp:50 +msgid "Visible name replacement for input file 3." +msgstr "" + +#: main.cpp:52 +msgid "Alternative visible name replacement. Supply this once for every input." +msgstr "" + +#: main.cpp:53 +msgid "" +"Override a config setting. Use once for every setting. E.g.: --cs " +"\"AutoAdvance=1\"" +msgstr "" + +#: main.cpp:54 +msgid "Show list of config settings and current values." +msgstr "" + +#: main.cpp:55 +#, fuzzy +msgid "Use a different config file." +msgstr "Farklı dosyaların sayısı:" + +#: main.cpp:59 +msgid "file1 to open (base, if not specified via --base)" +msgstr "" + +#: main.cpp:60 +msgid "file2 to open" +msgstr "" + +#: main.cpp:61 +msgid "file3 to open" +msgstr "" + +#: main.cpp:93 +msgid "Ignored. (User defined.)" +msgstr "" + +#. i18n: file kdiff3_part.rc line 16 +#: main.cpp:173 rc.cpp:9 +#, no-c-format +msgid "KDiff3" +msgstr "KDiff3" + +#: main.cpp:186 +msgid "+ Many thanks to those who reported bugs and contributed ideas!" +msgstr "" + +#: mergeresultwindow.cpp:136 mergeresultwindow.cpp:939 +#: mergeresultwindow.cpp:953 mergeresultwindow.cpp:965 +#: mergeresultwindow.cpp:977 +#, fuzzy +msgid "Number of remaining unsolved conflicts: %1 (of which %2 are whitespace)" +msgstr "" +"\n" +"Çözülmeyen çakışmaların sayısı: " + +#: mergeresultwindow.cpp:285 +msgid "" +"The output has been modified.\n" +"If you continue your changes will be lost." +msgstr "" +"Çıktı üzerinde deÄŸiÅŸiklik yapıldı.\n" +"Devam ederseniz deÄŸiÅŸiklikleri kaybedeceksiniz." + +#: mergeresultwindow.cpp:797 pdiff.cpp:511 +msgid "All input files are binary equal." +msgstr "" + +#: mergeresultwindow.cpp:799 +msgid "All input files contain the same text." +msgstr "Tüm girdi dosyaları aynı metni içeriyor." + +#: mergeresultwindow.cpp:801 +msgid "" +"Files A and B are binary equal.\n" +msgstr "" + +#: mergeresultwindow.cpp:802 +msgid "" +"Files A and B have equal text. \n" +msgstr "" +"A ve B dosyaları aynı metne sahip. \n" + +#: mergeresultwindow.cpp:803 +msgid "" +"Files A and C are binary equal.\n" +msgstr "" + +#: mergeresultwindow.cpp:804 +msgid "" +"Files A and C have equal text. \n" +msgstr "" +"A ve C dosyaları aynı metne sahip. \n" + +#: mergeresultwindow.cpp:805 +msgid "" +"Files B and C are binary equal.\n" +msgstr "" + +#: mergeresultwindow.cpp:806 +msgid "" +"Files B and C have equal text. \n" +msgstr "" +"B ve C dosyaları aynı metne sahip. \n" + +#: mergeresultwindow.cpp:812 +msgid "Total number of conflicts: " +msgstr "Toplam çakışma sayısı: " + +#: mergeresultwindow.cpp:813 +msgid "" +"\n" +"Nr of automatically solved conflicts: " +msgstr "" +"\n" +"Otomatik çözülen çakışmaların sayısı: " + +#: mergeresultwindow.cpp:814 +msgid "" +"\n" +"Nr of unsolved conflicts: " +msgstr "" +"\n" +"Çözülmeyen çakışmaların sayısı: " + +#: mergeresultwindow.cpp:816 +msgid "Conflicts" +msgstr "Çakışmalar" + +#: mergeresultwindow.cpp:1652 +msgid "" +msgstr "" + +#: mergeresultwindow.cpp:1660 +#, fuzzy +msgid "" +msgstr "" + +#: mergeresultwindow.cpp:1662 mergeresultwindow.cpp:2427 +msgid "" +msgstr "" + +#: mergeresultwindow.cpp:2635 +msgid "" +"Not all conflicts are solved yet.\n" +"File not saved.\n" +msgstr "" +"Daha tüm çakışmalar çözülmedi.\n" +"Dosya kaydedilmedi.\n" + +#: mergeresultwindow.cpp:2637 +msgid "Conflicts Left" +msgstr "Çakışmalar Var" + +#: mergeresultwindow.cpp:2649 +msgid "" +"\n" +"\n" +"Creating backup failed. File not saved." +msgstr "" + +#: mergeresultwindow.cpp:2649 mergeresultwindow.cpp:2689 +msgid "File Save Error" +msgstr "Dosya Kaydetme Hatası" + +#: mergeresultwindow.cpp:2689 +msgid "Error while writing." +msgstr "Yazılırken hata oluÅŸtu." + +#: mergeresultwindow.cpp:3020 +msgid "Output" +msgstr "" + +#: mergeresultwindow.cpp:3032 mergeresultwindow.cpp:3139 +msgid "[Modified]" +msgstr "[DeÄŸiÅŸiklik Yapıldı]" + +#: mergeresultwindow.cpp:3039 +msgid "Encoding for saving" +msgstr "" + +#: mergeresultwindow.cpp:3075 mergeresultwindow.cpp:3081 +#: mergeresultwindow.cpp:3087 +msgid "Codec from" +msgstr "" + +#: optiondialog.cpp:362 +msgid "Unicode, 8 bit" +msgstr "" + +#: optiondialog.cpp:363 +msgid "Unicode" +msgstr "" + +#: optiondialog.cpp:364 +msgid "Latin1" +msgstr "" + +#: optiondialog.cpp:383 +msgid "Change this if non-ASCII characters are not displayed correctly." +msgstr "" + +#: optiondialog.cpp:510 +msgid "Editor & Diff Output Font" +msgstr "Düzenleyici ve KarşılaÅŸtırıcı Çıktısı Yazıtipi" + +#: optiondialog.cpp:531 +msgid "Italic font for deltas" +msgstr "" + +#: optiondialog.cpp:534 +msgid "" +"Selects the italic version of the font for differences.\n" +"If the font doesn't support italic characters, then this does nothing." +msgstr "" + +#: optiondialog.cpp:542 +msgid "Color" +msgstr "Renk" + +#: optiondialog.cpp:542 +msgid "Colors Settings" +msgstr "" + +#: optiondialog.cpp:556 +msgid "Editor and Diff Views:" +msgstr "" + +#: optiondialog.cpp:564 +msgid "Foreground color:" +msgstr "" + +#: optiondialog.cpp:570 +msgid "Background color:" +msgstr "Arka alan rengi:" + +#: optiondialog.cpp:578 +msgid "Diff background color:" +msgstr "KarşılaÅŸtırıcı arka alanı rengi:" + +#: optiondialog.cpp:585 +msgid "Color A:" +msgstr "A'nın rengi:" + +#: optiondialog.cpp:592 +msgid "Color B:" +msgstr "B'nin rengi:" + +#: optiondialog.cpp:599 +msgid "Color C:" +msgstr "C'nin rengi:" + +#: optiondialog.cpp:605 +msgid "Conflict color:" +msgstr "Çakışma rengi:" + +#: optiondialog.cpp:612 +msgid "Current range background color:" +msgstr "" + +#: optiondialog.cpp:619 +msgid "Current range diff background color:" +msgstr "" + +#: optiondialog.cpp:625 +msgid "Color for manually aligned difference ranges:" +msgstr "" + +#: optiondialog.cpp:630 +#, fuzzy +msgid "Directory Comparison View:" +msgstr "Dizin KarşılaÅŸtırma Durumu" + +#: optiondialog.cpp:636 +msgid "Newest file color:" +msgstr "" + +#: optiondialog.cpp:639 +msgid "" +"Changing this color will only be effective when starting the next directory " +"comparison." +msgstr "" + +#: optiondialog.cpp:644 +msgid "Oldest file color:" +msgstr "" + +#: optiondialog.cpp:651 +msgid "Middle age file color:" +msgstr "" + +#: optiondialog.cpp:658 +msgid "Color for missing files:" +msgstr "" + +#: optiondialog.cpp:670 +msgid "Editor" +msgstr "Düzenleyici" + +#: optiondialog.cpp:670 +#, fuzzy +msgid "Editor Behavior" +msgstr "Düzenleyici Davranışı" + +#: optiondialog.cpp:680 +msgid "Tab inserts spaces" +msgstr "Tab tuÅŸu boÅŸluk yerleÅŸtirir" + +#: optiondialog.cpp:683 +msgid "" +"On: Pressing tab generates the appropriate number of spaces.\n" +"Off: A Tab-character will be inserted." +msgstr "" + +#: optiondialog.cpp:689 +msgid "Tab size:" +msgstr "Tab boyutu:" + +#: optiondialog.cpp:694 +msgid "Auto indentation" +msgstr "" + +#: optiondialog.cpp:697 +msgid "" +"On: The indentation of the previous line is used for a new line.\n" +msgstr "" + +#: optiondialog.cpp:701 +msgid "Auto copy selection" +msgstr "" + +#: optiondialog.cpp:704 +msgid "" +"On: Any selection is immediately written to the clipboard.\n" +"Off: You must explicitely copy e.g. via Ctrl-C." +msgstr "" + +#: optiondialog.cpp:709 +msgid "Line end style:" +msgstr "" + +#: optiondialog.cpp:721 +msgid "" +"Sets the line endings for when an edited file is saved.\n" +"DOS/Windows: CR+LF; UNIX: LF; with CR=0D, LF=0A" +msgstr "" + +#: optiondialog.cpp:732 +#, fuzzy +msgid "Diff" +msgstr "KDiff3" + +#: optiondialog.cpp:732 +#, fuzzy +msgid "Diff Settings" +msgstr "KarşılaÅŸtırma ve BirleÅŸtirme Ayarları" + +#: optiondialog.cpp:743 +msgid "Preserve carriage return" +msgstr "" + +#: optiondialog.cpp:746 +msgid "" +"Show carriage return characters '\\r' if they exist.\n" +"Helps to compare files that were modified under different operating systems." +msgstr "" + +#: optiondialog.cpp:751 +msgid "Ignore numbers" +msgstr "" + +#: optiondialog.cpp:754 +msgid "" +"Ignore number characters during line matching phase. (Similar to Ignore white " +"space.)\n" +"Might help to compare files with numeric data." +msgstr "" + +#: optiondialog.cpp:759 +#, fuzzy +msgid "Ignore C/C++ comments" +msgstr "C/C++ Yorumlarını Yoksay" + +#: optiondialog.cpp:761 +msgid "Treat C/C++ comments like white space." +msgstr "C/C++ yorumlarına boÅŸluk olarak davran." + +#: optiondialog.cpp:765 +msgid "Ignore case" +msgstr "" + +#: optiondialog.cpp:768 +msgid "Treat case differences like white space changes. ('a'<=>'A')" +msgstr "" + +#: optiondialog.cpp:772 +msgid "Preprocessor command:" +msgstr "" + +#: optiondialog.cpp:776 +msgid "User defined pre-processing. (See the docs for details.)" +msgstr "" + +#: optiondialog.cpp:779 +msgid "Line-matching preprocessor command:" +msgstr "" + +#: optiondialog.cpp:783 +msgid "" +"This pre-processor is only used during line matching.\n" +"(See the docs for details.)" +msgstr "" + +#: optiondialog.cpp:786 +msgid "Try hard (slower)" +msgstr "" + +#: optiondialog.cpp:789 +msgid "" +"Enables the --minimal option for the external diff.\n" +"The analysis of big files will be much slower." +msgstr "" + +#: optiondialog.cpp:794 +msgid "Auto advance delay (ms):" +msgstr "" + +#: optiondialog.cpp:799 +msgid "" +"When in Auto-Advance mode the result of the current selection is shown \n" +"for the specified time, before jumping to the next conflict. Range: 0-2000 ms" +msgstr "" + +#: optiondialog.cpp:809 +#, fuzzy +msgid "Merge Settings" +msgstr "KarşılaÅŸtırma ve BirleÅŸtirme Ayarları" + +#: optiondialog.cpp:822 +msgid "White space 2-file merge default:" +msgstr "" + +#: optiondialog.cpp:826 optiondialog.cpp:839 +#, fuzzy +msgid "Manual Choice" +msgstr "El ile seçim" + +#: optiondialog.cpp:830 optiondialog.cpp:844 +msgid "" +"Allow the merge algorithm to automatically select an input for white-space-only " +"changes." +msgstr "" + +#: optiondialog.cpp:835 +msgid "White space 3-file merge default:" +msgstr "" + +#: optiondialog.cpp:849 +msgid "Automatic Merge Regular Expression" +msgstr "" + +#: optiondialog.cpp:858 smalldialogs.cpp:397 +msgid "Auto merge regular expression:" +msgstr "" + +#: optiondialog.cpp:862 +msgid "" +"Regular expression for lines where KDiff3 should automatically choose one " +"source.\n" +"When a line with a conflict matches the regular expression then\n" +"- if available - C, otherwise B will be chosen." +msgstr "" + +#: optiondialog.cpp:868 +msgid "Run regular expression auto merge on merge start" +msgstr "" + +#: optiondialog.cpp:870 +msgid "" +"Run the merge for auto merge regular expressions\n" +"immediately when a merge starts.\n" +msgstr "" + +#: optiondialog.cpp:875 +msgid "Version Control History Merging" +msgstr "" + +#: optiondialog.cpp:884 smalldialogs.cpp:424 +msgid "History start regular expression:" +msgstr "" + +#: optiondialog.cpp:888 +msgid "" +"Regular expression for the start of the version control history entry.\n" +"Usually this line contains the \"$Log$\"-keyword.\n" +"Default value: \".*\\$Log.*\\$.*\"" +msgstr "" + +#: optiondialog.cpp:894 smalldialogs.cpp:453 +msgid "History entry start regular expression:" +msgstr "" + +#: optiondialog.cpp:906 +msgid "" +"A version control history entry consists of several lines.\n" +"Specify the regular expression to detect the first line (without the leading " +"comment).\n" +"Use parentheses to group the keys you want to use for sorting.\n" +"If left empty, then KDiff3 assumes that empty lines separate history entries.\n" +"See the documentation for details." +msgstr "" + +#: optiondialog.cpp:914 +msgid "History merge sorting" +msgstr "" + +#: optiondialog.cpp:916 +msgid "Sort version control history by a key." +msgstr "" + +#: optiondialog.cpp:926 +msgid "History entry start sort key order:" +msgstr "" + +#: optiondialog.cpp:930 +msgid "" +"Each parentheses used in the regular expression for the history start entry\n" +"groups a key that can be used for sorting.\n" +"Specify the list of keys (that are numbered in order of occurrence\n" +"starting with 1) using ',' as separator (e.g. \"4,5,6,1,2,3,7\").\n" +"If left empty, then no sorting will be done.\n" +"See the documentation for details." +msgstr "" + +#: optiondialog.cpp:941 +msgid "Merge version control history on merge start" +msgstr "" + +#: optiondialog.cpp:943 +msgid "Run version control history automerge on merge start." +msgstr "" + +#: optiondialog.cpp:947 +msgid "Test your regular expressions" +msgstr "" + +#: optiondialog.cpp:952 +msgid "Irrelevant merge command:" +msgstr "" + +#: optiondialog.cpp:956 +msgid "" +"If specified this script is run after automerge\n" +"when no other relevant changes were detected.\n" +"Called with the parameters: filename1 filename2 filename3" +msgstr "" + +#: optiondialog.cpp:966 +msgid "Directory Merge" +msgstr "Dizin BirleÅŸtirmesi" + +#: optiondialog.cpp:975 +msgid "Recursive directories" +msgstr "" + +#: optiondialog.cpp:977 +msgid "Whether to analyze subdirectories or not." +msgstr "Altdizinlerin analiz edilip edilmeyeceÄŸi." + +#: optiondialog.cpp:979 +msgid "File pattern(s):" +msgstr "Dosya Türleri:" + +#: optiondialog.cpp:984 +msgid "" +"Pattern(s) of files to be analyzed. \n" +"Wildcards: '*' and '?'\n" +"Several Patterns can be specified by using the separator: ';'" +msgstr "" + +#: optiondialog.cpp:990 +msgid "File-anti-pattern(s):" +msgstr "" + +#: optiondialog.cpp:995 +msgid "" +"Pattern(s) of files to be excluded from analysis. \n" +"Wildcards: '*' and '?'\n" +"Several Patterns can be specified by using the separator: ';'" +msgstr "" + +#: optiondialog.cpp:1001 +msgid "Dir-anti-pattern(s):" +msgstr "" + +#: optiondialog.cpp:1006 +msgid "" +"Pattern(s) of directories to be excluded from analysis. \n" +"Wildcards: '*' and '?'\n" +"Several Patterns can be specified by using the separator: ';'" +msgstr "" + +#: optiondialog.cpp:1012 +msgid "Use .cvsignore" +msgstr ".cvsignore kullan" + +#: optiondialog.cpp:1015 +msgid "" +"Extends the antipattern to anything that would be ignored by CVS.\n" +"Via local \".cvsignore\"-files this can be directory specific." +msgstr "" + +#: optiondialog.cpp:1020 +msgid "Find hidden files and directories" +msgstr "Gizli dosya ve dizinleri bul" + +#: optiondialog.cpp:1023 +msgid "Finds files and directories with the hidden attribute." +msgstr "Gizli özelliÄŸine sahip tüm dosya ve dizinleri bulur." + +#: optiondialog.cpp:1025 +msgid "Finds files and directories starting with '.'." +msgstr "'.' ile baÅŸlayan dosya ve dizinleri bulur." + +#: optiondialog.cpp:1029 +msgid "Follow file links" +msgstr "Dosya baÄŸlarını takip et" + +#: optiondialog.cpp:1032 +msgid "" +"On: Compare the file the link points to.\n" +"Off: Compare the links." +msgstr "" +"Açık: Bağın iÅŸaret ettiÄŸi dosyayı karşılaÅŸtır.\n" +"Kapalı: BaÄŸları karşılaÅŸtır." + +#: optiondialog.cpp:1037 +msgid "Follow directory links" +msgstr "Dizin baÄŸlarını takip et" + +#: optiondialog.cpp:1040 +msgid "" +"On: Compare the directory the link points to.\n" +"Off: Compare the links." +msgstr "" +"Açık: Bağın iÅŸaret ettiÄŸin dizini karşılaÅŸtır.\n" +"Kapalı: BaÄŸları karşılaÅŸtır." + +#: optiondialog.cpp:1056 +msgid "Case sensitive filename comparison" +msgstr "" + +#: optiondialog.cpp:1059 +msgid "" +"The directory comparison will compare files or directories when their names " +"match.\n" +"Set this option if the case of the names must match. (Default for Windows is " +"off, otherwise on.)" +msgstr "" + +#: optiondialog.cpp:1063 +msgid "File Comparison Mode" +msgstr "" + +#: optiondialog.cpp:1067 +#, fuzzy +msgid "Binary comparison" +msgstr "Dizin KarşılaÅŸtırması Durumu" + +#: optiondialog.cpp:1068 +msgid "Binary comparison of each file. (Default)" +msgstr "" + +#: optiondialog.cpp:1070 +msgid "Full analysis" +msgstr "" + +#: optiondialog.cpp:1071 +msgid "" +"Do a full analysis and show statistics information in extra columns.\n" +"(Slower than a binary comparison, much slower for binary files.)" +msgstr "" + +#: optiondialog.cpp:1074 +msgid "Trust the modification date (unsafe)" +msgstr "DeÄŸiÅŸtirme tarihine güven (güvenilir deÄŸil)" + +#: optiondialog.cpp:1075 +msgid "" +"Assume that files are equal if the modification date and file length are " +"equal.\n" +"Useful for big directories or slow networks." +msgstr "" +"DeÄŸiÅŸtirilme tarihleri ve dosya uzunluklukları aynıysa dosyaların aynı olduÄŸunu " +"varsay.\n" +"Büyük dizinler ve yavaÅŸ aÄŸlar için kullanışlıdır." + +#: optiondialog.cpp:1078 +msgid "Trust the size (unsafe)" +msgstr "Boyuta güven (güvenilir deÄŸil)" + +#: optiondialog.cpp:1079 +msgid "" +"Assume that files are equal if their file lengths are equal.\n" +"Useful for big directories or slow networks when the date is modified during " +"download." +msgstr "" +"Dosya uzunlukları eÅŸitse dosyaların aynı olduÄŸunu varsay.\n" +"Tarih, indirme sırasında deÄŸiÅŸtirildiÄŸinde büyük dizinler ve yavaÅŸ aÄŸlar için " +"kullanışlıdır." + +#: optiondialog.cpp:1083 +msgid "Synchronize directories" +msgstr "" + +#: optiondialog.cpp:1086 +msgid "" +"Offers to store files in both directories so that\n" +"both directories are the same afterwards.\n" +"Works only when comparing two directories without specifying a destination." +msgstr "" + +#: optiondialog.cpp:1092 +msgid "White space differences considered equal" +msgstr "" + +#: optiondialog.cpp:1095 +msgid "" +"If files differ only by white space consider them equal.\n" +"This is only active when full analysis is chosen." +msgstr "" + +#: optiondialog.cpp:1101 +msgid "Copy newer instead of merging (unsafe)" +msgstr "BirleÅŸtirmek yerine daha yeni olanı kopyala (güvenli deÄŸil)" + +#: optiondialog.cpp:1104 +msgid "" +"Don't look inside, just take the newer file.\n" +"(Use this only if you know what you are doing!)\n" +"Only effective when comparing two directories." +msgstr "" +"İçeriÄŸe bakma, sadece daha yeni olan dosyayı al.\n" +"(Bu seçeneÄŸi sadece ne yaptığınızı biliyorsanız kullanın!)\n" +"Sadece iki dizini karşılaÅŸtırırken etkilidir." + +#: optiondialog.cpp:1109 +msgid "Backup files (.orig)" +msgstr "Dosyaları yedekle (.orig)" + +#: optiondialog.cpp:1112 +msgid "" +"When a file would be saved over an old file, then the old file\n" +"will be renamed with a '.orig'-extension instead of being deleted." +msgstr "" +"Bir dosya eski bir dosyanın üzerine kaydedileceÄŸi zaman,\n" +"eski dosya silinmek yerine '.orig' uzantısıyla kaydedilir." + +#: optiondialog.cpp:1176 +msgid "Regional Settings" +msgstr "" + +#: optiondialog.cpp:1272 +msgid "Language (restart required)" +msgstr "" + +#: optiondialog.cpp:1304 +msgid "" +"Choose the language of the GUI-strings or \"Auto\".\n" +"For a change of language to take place, quit and restart KDiff3." +msgstr "" + +#: optiondialog.cpp:1322 +msgid "Use the same encoding for everything:" +msgstr "" + +#: optiondialog.cpp:1325 +msgid "" +"Enable this allows to change all encodings by changing the first only.\n" +"Disable this if different individual settings are needed." +msgstr "" + +#: optiondialog.cpp:1330 +msgid "Note: Local Encoding is " +msgstr "" + +#: optiondialog.cpp:1334 +msgid "File Encoding for A:" +msgstr "" + +#: optiondialog.cpp:1340 +msgid "" +"If enabled then Unicode (UTF-16 or UTF-8) encoding will be detected.\n" +"If the file encoding is not detected then the selected encoding will be used as " +"fallback.\n" +"(Unicode detection depends on the first bytes of a file - the byte order mark " +"\"BOM\".)" +msgstr "" + +#: optiondialog.cpp:1344 optiondialog.cpp:1353 optiondialog.cpp:1362 +msgid "Auto Detect Unicode" +msgstr "" + +#: optiondialog.cpp:1349 +msgid "File Encoding for B:" +msgstr "" + +#: optiondialog.cpp:1358 +msgid "File Encoding for C:" +msgstr "" + +#: optiondialog.cpp:1367 +msgid "File Encoding for Merge Output and Saving:" +msgstr "" + +#: optiondialog.cpp:1371 +msgid "Auto Select" +msgstr "" + +#: optiondialog.cpp:1374 +msgid "" +"If enabled then the encoding from the input files is used.\n" +"In ambiguous cases a dialog will ask the user to choose the encoding for " +"saving." +msgstr "" + +#: optiondialog.cpp:1378 +msgid "File Encoding for Preprocessor Files:" +msgstr "" + +#: optiondialog.cpp:1389 +msgid "Right To Left Language" +msgstr "" + +#: optiondialog.cpp:1392 +msgid "" +"Some languages are read from right to left.\n" +"This setting will change the viewer and editor accordingly." +msgstr "" + +#: optiondialog.cpp:1402 +#, fuzzy +msgid "Integration" +msgstr "Ä°ÅŸlem" + +#: optiondialog.cpp:1402 +msgid "Integration Settings" +msgstr "" + +#: optiondialog.cpp:1412 +msgid "Command line options to ignore:" +msgstr "" + +#: optiondialog.cpp:1417 +msgid "" +"List of command line options that should be ignored when KDiff3 is used by " +"other tools.\n" +"Several values can be specified if separated via ';'\n" +"This will suppress the \"Unknown option\"-error." +msgstr "" + +#: optiondialog.cpp:1480 +msgid "" +"You selected a variable width font.\n" +"\n" +"Because this program doesn't handle variable width fonts\n" +"correctly, you might experience problems while editing.\n" +"\n" +"Do you want to continue or do you want to select another font." +msgstr "" + +#: optiondialog.cpp:1484 +msgid "Incompatible Font" +msgstr "Uyumsuz Yazıtipi" + +#: optiondialog.cpp:1485 +msgid "Continue at Own Risk" +msgstr "Riski Göze Alarak Devam Et" + +#: optiondialog.cpp:1485 +msgid "Select Another Font" +msgstr "BaÅŸka Bir Yazıtipi Seç" + +#: optiondialog.cpp:1521 +msgid "This resets all options. Not only those of the current topic." +msgstr "Bu, sadece bu bölümdekileri deÄŸil, tüm seçenekleri sıfırlar." + +#: pdiff.cpp:258 +msgid "PreprocessorCmd: " +msgstr "" + +#: pdiff.cpp:263 +msgid "" +"The following option(s) you selected might change data:\n" +msgstr "" + +#: pdiff.cpp:264 +msgid "" +"\n" +"Most likely this is not wanted during a merge.\n" +"Do you want to disable these settings or continue with these settings active?" +msgstr "" + +#: pdiff.cpp:266 +msgid "Option Unsafe for Merging" +msgstr "" + +#: pdiff.cpp:267 +msgid "Use These Options During Merge" +msgstr "" + +#: pdiff.cpp:267 +msgid "Disable Unsafe Options" +msgstr "" + +#: pdiff.cpp:297 +msgid "Loading A" +msgstr "" + +#: pdiff.cpp:301 +msgid "Loading B" +msgstr "" + +#: pdiff.cpp:318 pdiff.cpp:344 +msgid "Diff: A <-> B" +msgstr "" + +#: pdiff.cpp:324 pdiff.cpp:366 +msgid "Linediff: A <-> B" +msgstr "" + +#: pdiff.cpp:335 +msgid "Loading C" +msgstr "" + +#: pdiff.cpp:347 +msgid "Diff: B <-> C" +msgstr "" + +#: pdiff.cpp:350 +msgid "Diff: A <-> C" +msgstr "" + +#: pdiff.cpp:369 +msgid "Linediff: B <-> C" +msgstr "" + +#: pdiff.cpp:372 +msgid "Linediff: A <-> C" +msgstr "" + +#: pdiff.cpp:513 +#, fuzzy +msgid "All input files contain the same text, but are not binary equal." +msgstr "Tüm girdi dosyaları aynı metni içeriyor." + +#: pdiff.cpp:515 pdiff.cpp:517 pdiff.cpp:519 +#, fuzzy +msgid "" +"Files %1 and %2 are binary equal.\n" +msgstr "" +"B ve C dosyaları aynı metne sahip. \n" + +#: pdiff.cpp:516 pdiff.cpp:518 pdiff.cpp:520 +#, fuzzy +msgid "" +"Files %1 and %2 have equal text, but are not binary equal. \n" +msgstr "" +"A ve B dosyaları aynı metne sahip. \n" + +#: pdiff.cpp:530 +msgid "" +"Some inputfiles don't seem to be pure textfiles.\n" +"Note that the KDiff3-merge was not meant for binary data.\n" +"Continue at your own risk." +msgstr "" + +#: pdiff.cpp:979 +msgid "Abort" +msgstr "Çık" + +#: pdiff.cpp:985 pdiff.cpp:1073 +msgid "Opening files..." +msgstr "" + +#: pdiff.cpp:1050 pdiff.cpp:1121 +msgid "File open error" +msgstr "Dosya açma hatası" + +#: pdiff.cpp:1153 +msgid "Cutting selection..." +msgstr "" + +#: pdiff.cpp:1174 +msgid "Copying selection to clipboard..." +msgstr "" + +#: pdiff.cpp:1190 +msgid "Inserting clipboard contents..." +msgstr "" + +#: pdiff.cpp:1713 +msgid "Save && Continue" +msgstr "Kaydet ve Devam Et" + +#: pdiff.cpp:1713 +msgid "Continue Without Saving" +msgstr "Kaydetmeden Devam Et" + +#: pdiff.cpp:1920 +msgid "Search complete." +msgstr "Arama tamamlandı." + +#: pdiff.cpp:1920 +msgid "Search Complete" +msgstr "Arama Tamamlandı" + +#: pdiff.cpp:2144 +msgid "Nothing is selected in either diff input window." +msgstr "" + +#: pdiff.cpp:2144 +#, fuzzy +msgid "Error while adding manual diff range" +msgstr "Dizin oluÅŸturulması sırasında hata oluÅŸtu." + +#. i18n: file kdiff3_part.rc line 4 +#: rc.cpp:3 +#, no-c-format +msgid "&KDiff3" +msgstr "&KDiff3" + +#. i18n: file kdiff3_part.rc line 13 +#: rc.cpp:6 +#, no-c-format +msgid "Configure KDiff3" +msgstr "KDiff3 Uygulamasını Yapılandır" + +#. i18n: file kdiff3_shell.rc line 7 +#: rc.cpp:15 +#, no-c-format +msgid "&Directory" +msgstr "&Dizin" + +#. i18n: file kdiff3_shell.rc line 30 +#: rc.cpp:18 +#, no-c-format +msgid "Current Item Merge Operation" +msgstr "" + +#. i18n: file kdiff3_shell.rc line 38 +#: rc.cpp:21 +#, no-c-format +msgid "Current Item Sync Operation" +msgstr "" + +#. i18n: file kdiff3_shell.rc line 50 +#: rc.cpp:24 +#, no-c-format +msgid "&Movement" +msgstr "&Hareket" + +#. i18n: file kdiff3_shell.rc line 61 +#: rc.cpp:27 +#, fuzzy, no-c-format +msgid "D&iffview" +msgstr "KDiff3" + +#. i18n: file kdiff3_shell.rc line 73 +#: rc.cpp:30 +#, no-c-format +msgid "&Merge" +msgstr "&BirleÅŸtir" + +#. i18n: file kdiff3_shell.rc line 95 +#: rc.cpp:33 +#, no-c-format +msgid "&Window" +msgstr "&Pencere" + +#: smalldialogs.cpp:53 +msgid "A (Base):" +msgstr "" + +#: smalldialogs.cpp:59 smalldialogs.cpp:75 smalldialogs.cpp:91 +#: smalldialogs.cpp:134 +msgid "File..." +msgstr "Dosya..." + +#: smalldialogs.cpp:61 smalldialogs.cpp:77 smalldialogs.cpp:93 +#: smalldialogs.cpp:136 +msgid "Dir..." +msgstr "Dizin..." + +#: smalldialogs.cpp:86 +msgid "C (Optional):" +msgstr "C (Ä°steÄŸe BaÄŸlı):" + +#: smalldialogs.cpp:108 +msgid "Swap/Copy Names ..." +msgstr "" + +#: smalldialogs.cpp:114 smalldialogs.cpp:115 smalldialogs.cpp:116 +msgid "Swap %1<->%2" +msgstr "" + +#: smalldialogs.cpp:117 smalldialogs.cpp:118 smalldialogs.cpp:119 +msgid "Copy %1->Output" +msgstr "" + +#: smalldialogs.cpp:120 smalldialogs.cpp:121 smalldialogs.cpp:122 +msgid "Swap %1<->Output" +msgstr "" + +#: smalldialogs.cpp:129 +msgid "Output (optional):" +msgstr "Çıktı (Ä°steÄŸe BaÄŸlı):" + +#: smalldialogs.cpp:158 +msgid "Configure..." +msgstr "Yapılandır..." + +#: smalldialogs.cpp:347 +#, fuzzy +msgid "Search text:" +msgstr "Metin Ara:" + +#: smalldialogs.cpp:354 +msgid "Case sensitive" +msgstr "" + +#: smalldialogs.cpp:357 +msgid "Search A" +msgstr "A'yı Ara" + +#: smalldialogs.cpp:362 +msgid "Search B" +msgstr "B'yi Ara" + +#: smalldialogs.cpp:367 +msgid "Search C" +msgstr "C'yi Ara" + +#: smalldialogs.cpp:372 +msgid "Search output" +msgstr "Çıktıyı Ara" + +#: smalldialogs.cpp:377 +msgid "&Search" +msgstr "&Ara" + +#: smalldialogs.cpp:394 +msgid "Regular Expression Tester" +msgstr "" + +#: smalldialogs.cpp:405 +msgid "Example auto merge line:" +msgstr "" + +#: smalldialogs.cpp:407 +msgid "For auto merge test copy a line as used in your files." +msgstr "" + +#: smalldialogs.cpp:413 smalldialogs.cpp:442 smalldialogs.cpp:479 +msgid "Match result:" +msgstr "" + +#: smalldialogs.cpp:432 +msgid "Example history start line (with leading comment):" +msgstr "" + +#: smalldialogs.cpp:435 +msgid "" +"Copy a history start line as used in your files,\n" +"including the leading comment." +msgstr "" + +#: smalldialogs.cpp:461 +msgid "History sort key order:" +msgstr "" + +#: smalldialogs.cpp:469 +msgid "Example history entry start line (without leading comment):" +msgstr "" + +#: smalldialogs.cpp:471 +msgid "" +"Copy a history entry start line as used in your files,\n" +"but omit the leading comment." +msgstr "" + +#: smalldialogs.cpp:486 +msgid "Sort key result:" +msgstr "" + +#: smalldialogs.cpp:537 smalldialogs.cpp:547 smalldialogs.cpp:568 +msgid "Match success." +msgstr "" + +#: smalldialogs.cpp:541 smalldialogs.cpp:551 smalldialogs.cpp:574 +#, fuzzy +msgid "Match failed." +msgstr "Kaydetme baÅŸarısız oldu." + +#: smalldialogs.cpp:559 +msgid "Opening and closing parentheses don't match in regular expression." +msgstr "" + +#, fuzzy +#~ msgid "Diff and Merge" +#~ msgstr "KarşılaÅŸtırma ve BirleÅŸtirme" + +#, fuzzy +#~ msgid "Save Directory Merge State ..." +#~ msgstr "Dizin BirleÅŸtirmesi" + +#, fuzzy +#~ msgid "Load Directory Merge State ..." +#~ msgstr "Dizin BirleÅŸtirmesi" + +#, fuzzy +#~ msgid "Synchronize Directories" +#~ msgstr "Dizinler taranıyor..." + +#, fuzzy +#~ msgid "Copy Newer Files Instead of Merging" +#~ msgstr "BirleÅŸtirmek yerine daha yeni olanı kopyala (güvenli deÄŸil)" + +#, fuzzy +#~ msgid "Manually match lines" +#~ msgstr "El ile seçim" + +#, fuzzy +#~ msgid "Has no effect. For compatibility with certain tools." +#~ msgstr "Bazı araçlarla uyumluluk için." + +#~ msgid "For compatibility with certain tools." +#~ msgstr "Bazı araçlarla uyumluluk için." + +#~ msgid "Colors in Editor & Diff Output" +#~ msgstr "Düzenleyici ve KarşılaÅŸtırıcı Çıktısındaki Renkler" diff --git a/po/uk.po b/po/uk.po new file mode 100644 index 0000000..a792fc6 --- /dev/null +++ b/po/uk.po @@ -0,0 +1,2541 @@ +# Translation of kdiff3.po to Ukrainian +# +# Ivan Petrouchtchak , 2006. +msgid "" +msgstr "" +"Project-Id-Version: kdiff3\n" +"POT-Creation-Date: 2006-11-05 08:45+0100\n" +"PO-Revision-Date: 2006-06-14 23:20-0700\n" +"Last-Translator: Ivan Petrouchtchak \n" +"Language-Team: Ukrainian \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: KBabel 1.11.2\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>" +"=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" + +#: _translatorinfo.cpp:1 +msgid "" +"_: NAME OF TRANSLATORS\n" +"Your names" +msgstr "Іван Петрущак" + +#: _translatorinfo.cpp:3 +msgid "" +"_: EMAIL OF TRANSLATORS\n" +"Your emails" +msgstr "ivanpetrouchtchak@yahoo.com" + +#: diff.cpp:246 +msgid "Writing clipboard data to temp file failed." +msgstr "Помилка запиÑу даних кишені у тимчаÑовий файл." + +#: diff.cpp:250 +msgid "From Clipboard" +msgstr "З кишені" + +#: diff.cpp:491 +msgid "" +"Preprocessing possibly failed. Check this command:\n" +"\n" +" %1\n" +"\n" +"The preprocessing command will be disabled now." +msgstr "" + +#: diff.cpp:526 +msgid "" +"The line-matching-preprocessing possibly failed. Check this command:\n" +"\n" +" %1\n" +"\n" +"The line-matching-preprocessing command will be disabled now." +msgstr "" + +#: diff.cpp:1631 diff.cpp:1645 +msgid "" +"Data loss error:\n" +"If it is reproducable please contact the author.\n" +msgstr "" + +#: diff.cpp:1633 diff.cpp:1647 +msgid "Severe Internal Error" +msgstr "Критична Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°" + +#: difftextwindow.cpp:1643 kdiff3.cpp:753 +msgid "Top line" +msgstr "Верхній Ñ€Ñдок" + +#: difftextwindow.cpp:1653 +msgid "End" +msgstr "Кінець" + +#: directorymergewindow.cpp:142 +msgid "Mix of links and normal files." +msgstr "Суміш поÑилань Ñ– звичайних файлів." + +#: directorymergewindow.cpp:149 +msgid "Link: " +msgstr "ПоÑиланнÑ: " + +#: directorymergewindow.cpp:157 +msgid "Size. " +msgstr "Розмір. " + +#: directorymergewindow.cpp:170 +msgid "Date & Size: " +msgstr "Дата Ñ– розмір: " + +#: directorymergewindow.cpp:179 directorymergewindow.cpp:185 +msgid "Creating temp copy of %1 failed." +msgstr "Помилка ÑÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ñ‚Ð¸Ð¼Ñ‡Ð°Ñової копії %1." + +#: directorymergewindow.cpp:196 directorymergewindow.cpp:204 +msgid "Opening %1 failed." +msgstr "Помилка Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ñ‚Ñ %1." + +#: directorymergewindow.cpp:208 +msgid "Comparing file..." +msgstr "ПорівнÑÐ½Ð½Ñ Ñ„Ð°Ð¹Ð»Ð°..." + +#: directorymergewindow.cpp:218 directorymergewindow.cpp:224 +#, c-format +msgid "Error reading from %1" +msgstr "Помилка Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ Ð· %1" + +#: directorymergewindow.cpp:282 +msgid "Name" +msgstr "Ðазва" + +#: directorymergewindow.cpp:286 +msgid "Operation" +msgstr "ДіÑ" + +#: directorymergewindow.cpp:287 +msgid "Status" +msgstr "Стан" + +#: directorymergewindow.cpp:288 +msgid "Unsolved" +msgstr "Ðе розв'Ñзано" + +#: directorymergewindow.cpp:289 +msgid "Solved" +msgstr "Розв'Ñзано" + +#: directorymergewindow.cpp:290 +msgid "Nonwhite" +msgstr "Ðе-білий" + +#: directorymergewindow.cpp:291 +msgid "White" +msgstr "Білий" + +#: directorymergewindow.cpp:319 +#, fuzzy +msgid "" +"You are currently doing a directory merge. Are you sure, you want to abort the " +"merge and rescan the directory?" +msgstr "" +"Ви дійÑно хочете цілковито відновити Pilot з резервної копії (%1" +")? Ð¦Ñ Ð´Ñ–Ñ Ð¿Ñ€Ð¸Ð²ÐµÐ´Ðµ до повного ÑÑ‚Ð¸Ñ€Ð°Ð½Ð½Ñ Ð´Ð°Ð½Ð¸Ñ… на Pilot." + +#: directorymergewindow.cpp:320 directorymergewindow.cpp:2868 +msgid "Rescan" +msgstr "ПереÑканувати" + +#: directorymergewindow.cpp:320 kdiff3.cpp:603 pdiff.cpp:979 +msgid "Continue Merging" +msgstr "Продовжити об'єднаннÑ" + +#: directorymergewindow.cpp:462 +msgid "Opening of directories failed:" +msgstr "Помилка Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ñ‚Ñ ÐºÐ°Ñ‚Ð°Ð»Ð¾Ð³Ñ–Ð²:" + +#: directorymergewindow.cpp:465 +msgid "" +"Dir A \"%1\" does not exist or is not a directory.\n" +msgstr "" +"Каталог Ð \"%1\" не Ñ–Ñнує або це не каталог.\n" + +#: directorymergewindow.cpp:468 +msgid "" +"Dir B \"%1\" does not exist or is not a directory.\n" +msgstr "" +"Каталог Ð’ \"%1\" не Ñ–Ñнує або це не каталог.\n" + +#: directorymergewindow.cpp:471 +msgid "" +"Dir C \"%1\" does not exist or is not a directory.\n" +msgstr "" +"Каталог С \"%1\" не Ñ–Ñнує або це не каталог.\n" + +#: directorymergewindow.cpp:473 +msgid "Directory Open Error" +msgstr "Помилка Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ñ‚Ñ ÐºÐ°Ñ‚Ð°Ð»Ð¾Ð³Ñƒ" + +#: directorymergewindow.cpp:481 +msgid "" +"The destination directory must not be the same as A or B when three directories " +"are merged.\n" +"Check again before continuing." +msgstr "" + +#: directorymergewindow.cpp:483 +#, fuzzy +msgid "Parameter Warning" +msgstr "" +" Параметр %1 %2=\"%3\"\n" + +#: directorymergewindow.cpp:488 +msgid "Scanning directories..." +msgstr "Ð¡ÐºÐ°Ð½ÑƒÐ²Ð°Ð½Ð½Ñ ÐºÐ°Ñ‚Ð°Ð»Ð¾Ð³Ñ–Ð²..." + +#: directorymergewindow.cpp:537 +msgid "Reading Directory A" +msgstr "Ð§Ð¸Ñ‚Ð°Ð½Ð½Ñ ÐºÐ°Ñ‚Ð°Ð»Ð¾Ð³Ñƒ A" + +#: directorymergewindow.cpp:559 +msgid "Reading Directory B" +msgstr "Ð§Ð¸Ñ‚Ð°Ð½Ð½Ñ ÐºÐ°Ñ‚Ð°Ð»Ð¾Ð³Ñƒ B" + +#: directorymergewindow.cpp:581 +msgid "Reading Directory C" +msgstr "Ð§Ð¸Ñ‚Ð°Ð½Ð½Ñ ÐºÐ°Ñ‚Ð°Ð»Ð¾Ð³Ñƒ C" + +#: directorymergewindow.cpp:607 +msgid "Some subdirectories were not readable in" +msgstr "" + +#: directorymergewindow.cpp:612 +#, fuzzy +msgid "Check the permissions of the subdirectories." +msgstr "" +"У каталог\n" +"%1\n" +" не можливо запиÑати;\n" +"перевірте, будь лаÑка, права доÑтупу." + +#: directorymergewindow.cpp:646 kdiff3.cpp:552 kdiff3.cpp:636 kdiff3.cpp:661 +#: kdiff3.cpp:934 kdiff3.cpp:955 pdiff.cpp:1059 pdiff.cpp:1131 pdiff.cpp:1169 +#: pdiff.cpp:1185 pdiff.cpp:1215 pdiff.cpp:1226 +msgid "Ready." +msgstr "Готове." + +#: directorymergewindow.cpp:660 +msgid "Directory Comparison Status" +msgstr "Стан порівнÑÐ½Ð½Ñ ÐºÐ°Ñ‚Ð°Ð»Ð¾Ð³Ñ–Ð²" + +#: directorymergewindow.cpp:661 +msgid "Number of subdirectories:" +msgstr "КількіÑÑ‚ÑŒ підкаталогів:" + +#: directorymergewindow.cpp:662 +#, fuzzy +msgid "Number of equal files:" +msgstr "&КількіÑÑ‚ÑŒ wav файлів Ð´Ð»Ñ Ð¾Ð´Ð½Ð¾Ñ‡Ð°Ñного кодуваннÑ:" + +#: directorymergewindow.cpp:663 +#, fuzzy +msgid "Number of different files:" +msgstr "&КількіÑÑ‚ÑŒ недавніх файлів у ÑпиÑку:" + +#: directorymergewindow.cpp:666 +#, fuzzy +msgid "Number of manual merges:" +msgstr "" +"КількіÑÑ‚ÑŒ фраз: %1\n" + +#: directorymergewindow.cpp:802 +msgid "This affects all merge operations." +msgstr "" + +#: directorymergewindow.cpp:803 +msgid "Changing All Merge Operations" +msgstr "" + +#: directorymergewindow.cpp:803 mergeresultwindow.cpp:287 +#, fuzzy +msgid "C&ontinue" +msgstr "Пр&одовжити" + +#: directorymergewindow.cpp:1169 +#, fuzzy +msgid "Processing " +msgstr "Пакетна обробка" + +#: directorymergewindow.cpp:1647 directorymergewindow.cpp:1653 +msgid "To do." +msgstr "" + +#: directorymergewindow.cpp:1756 directorymergewindow.cpp:2899 +#, fuzzy +msgid "Copy A to B" +msgstr "%1: Ñкопіювати у проект" + +#: directorymergewindow.cpp:1757 directorymergewindow.cpp:2900 +#, fuzzy +msgid "Copy B to A" +msgstr "%1: Ñкопіювати у проект" + +#: directorymergewindow.cpp:1758 directorymergewindow.cpp:2901 +#, fuzzy +msgid "Delete A" +msgstr "&Видалити рахунок" + +#: directorymergewindow.cpp:1759 directorymergewindow.cpp:2902 +#, fuzzy +msgid "Delete B" +msgstr "Витерти кни&гу" + +#: directorymergewindow.cpp:1760 +#, fuzzy +msgid "Delete A & B" +msgstr "&Видалити рахунок" + +#: directorymergewindow.cpp:1761 directorymergewindow.cpp:2904 +#, fuzzy +msgid "Merge to A" +msgstr "Виберіть Ñке Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ Ð´Ð¾Ð´Ð°Ñ‚Ð¸" + +#: directorymergewindow.cpp:1762 directorymergewindow.cpp:2905 +#, fuzzy +msgid "Merge to B" +msgstr "Штамп Ð´Ð»Ñ Ð·Ð°Ð¿Ð¸Ñу" + +#: directorymergewindow.cpp:1763 +msgid "Merge to A & B" +msgstr "" + +#: directorymergewindow.cpp:1767 directorymergewindow.cpp:2896 +#, fuzzy +msgid "Delete (if exists)" +msgstr "Видалити вÑÑ– Ñ–Ñнуючі заÑтарілі нагадуваннÑ." + +#: directorymergewindow.cpp:1768 directorymergewindow.cpp:1769 +#: directorymergewindow.cpp:2895 optiondialog.cpp:809 smalldialogs.cpp:102 +#, fuzzy +msgid "Merge" +msgstr "Об'єднати" + +#: directorymergewindow.cpp:1768 directorymergewindow.cpp:1769 +msgid "Merge (manual)" +msgstr "" + +#: directorymergewindow.cpp:1770 +msgid "Error: Conflicting File Types" +msgstr "" + +#: directorymergewindow.cpp:1771 +msgid "Error: Dates are equal but files are not." +msgstr "" + +#: directorymergewindow.cpp:1795 directorymergewindow.cpp:1824 +#: directorymergewindow.cpp:1849 +#, fuzzy +msgid "This operation is currently not possible." +msgstr "" +"Ð¦Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð° в даний Ñ‡Ð°Ñ Ð¿Ñ€Ð°Ñ†ÑŽÑ” в автономному режимі. Хочете з'єднатиÑÑŒ?" + +#: directorymergewindow.cpp:1795 directorymergewindow.cpp:1824 +#: directorymergewindow.cpp:1849 directorymergewindow.cpp:2106 +#, fuzzy +msgid "Operation Not Possible" +msgstr "Зворотне траÑÑƒÐ²Ð°Ð½Ð½Ñ Ð½ÐµÐ¼Ð¾Ð¶Ð»Ð¸Ð²Ðµ" + +#: directorymergewindow.cpp:1888 +msgid "" +"This should never happen: \n" +"\n" +"mergeResultSaved: m_pMFI=0\n" +"\n" +"If you know how to reproduce this, please contact the program author." +msgstr "" + +#: directorymergewindow.cpp:1888 +#, fuzzy +msgid "Program Error" +msgstr "Помилка програми" + +#: directorymergewindow.cpp:1899 +#, fuzzy +msgid "" +"An error occurred while copying.\n" +msgstr "" +"" +"

Помилка під Ñ‡Ð°Ñ Ñпроби Ð²Ð¸Ð´Ð°Ð»ÐµÐ½Ð½Ñ Ñертифіката:

" +"

%1" +"

" + +#: directorymergewindow.cpp:1900 directorymergewindow.cpp:2306 +#, fuzzy +msgid "Merge Error" +msgstr "&Сховати помилки" + +#: directorymergewindow.cpp:1905 directorymergewindow.cpp:2311 +#, fuzzy +msgid "Error." +msgstr "Помилка." + +#: directorymergewindow.cpp:1910 directorymergewindow.cpp:2202 +#: directorymergewindow.cpp:2242 +#, fuzzy +msgid "Done." +msgstr "Завершено." + +#: directorymergewindow.cpp:1933 +#, fuzzy +msgid "Not saved." +msgstr "Файл не збережено." + +#: directorymergewindow.cpp:1968 +msgid "Unknown merge operation. (This must never happen!)" +msgstr "" + +#: directorymergewindow.cpp:2000 +msgid "Unknown merge operation." +msgstr "" + +#: directorymergewindow.cpp:2015 +msgid "" +"The merge is about to begin.\n" +"\n" +"Choose \"Do it\" if you have read the instructions and know what you are " +"doing.\n" +"Choosing \"Simulate it\" will tell you what would happen.\n" +"\n" +"Be aware that this program still has beta status and there is NO WARRANTY " +"whatsoever! Make backups of your vital data!" +msgstr "" + +#: directorymergewindow.cpp:2020 +#, fuzzy +msgid "Starting Merge" +msgstr "" +"\n" +"ЗапуÑк таблиці Ñтилів\n" +"\n" + +#: directorymergewindow.cpp:2020 +#, fuzzy +msgid "Do It" +msgstr "Зробити це" + +#: directorymergewindow.cpp:2020 +#, fuzzy +msgid "Simulate It" +msgstr "Симулювати помилку" + +#: directorymergewindow.cpp:2046 +msgid "" +"The highlighted item has a different type in the different directories. Select " +"what to do." +msgstr "" + +#: directorymergewindow.cpp:2055 +#, fuzzy +msgid "" +"The modification dates of the file are equal but the files are not. Select what " +"to do." +msgstr "" +"Типово GnuPG викориÑтовує файл ~/.gnupg/policies.txt Ð´Ð»Ñ Ð¿ÐµÑ€ÐµÐ²Ñ–Ñ€ÐºÐ¸ чи дозволені " +"правила Ñертифікатів. Якщо цей параметр ввімкнено, правила не перевірÑÑŽÑ‚ÑŒÑÑ." + +#: directorymergewindow.cpp:2106 +#, fuzzy +msgid "" +"This operation is currently not possible because directory merge is currently " +"running." +msgstr "" +"Програму інфрачервоного диÑтанційного ÐºÐµÑ€ÑƒÐ²Ð°Ð½Ð½Ñ Ð½Ðµ запущено. Без неї цей модуль " +"конфігурації не працюватиме правильно. Хочете Ñ—Ñ— зараз запуÑтити?" + +#: directorymergewindow.cpp:2166 +#, fuzzy +msgid "" +"There was an error in the last step.\n" +"Do you want to continue with the item that caused the error or do you want to " +"skip this item?" +msgstr "" +"Цей документ було Ñтворено за допомогою OpenOffice.org верÑÑ–Ñ— \"%1\". Цей " +"фільтр напиÑано Ð´Ð»Ñ Ð²ÐµÑ€ÑÑ–Ñ— 1.0. Ð§Ð¸Ñ‚Ð°Ð½Ð½Ñ Ñ†ÑŒÐ¾Ð³Ð¾ файла може Ñпричинити хаотичну " +"поведінку, крах або неправильне Ð²Ñ–Ð´Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ Ð´Ð°Ð½Ð¸Ñ…. Хочете продовжити " +"Ð¿ÐµÑ€ÐµÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð´Ð¾ÐºÑƒÐ¼ÐµÐ½Ñ‚Ð°?" + +#: directorymergewindow.cpp:2168 +msgid "Continue merge after an error" +msgstr "" + +#: directorymergewindow.cpp:2168 +msgid "Continue With Last Item" +msgstr "" + +#: directorymergewindow.cpp:2168 +#, fuzzy +msgid "Skip Item" +msgstr "Кинути елемент" + +#: directorymergewindow.cpp:2202 +#, fuzzy +msgid "Skipped." +msgstr "Пропущено %1." + +#: directorymergewindow.cpp:2209 directorymergewindow.cpp:2435 +#, fuzzy +msgid "In progress..." +msgstr "ВідбуваєтьÑÑ Ñ€ÐµÐ·ÐµÑ€Ð²ÑƒÐ²Ð°Ð½Ð½Ñ..." + +#: directorymergewindow.cpp:2257 +#, fuzzy +msgid "Merge operation complete." +msgstr "Запитану дію не може бути завершено." + +#: directorymergewindow.cpp:2257 directorymergewindow.cpp:2260 +#, fuzzy +msgid "Merge Complete" +msgstr "Пере&микнути Ð²Ñ–Ð´Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð¸Ñ… завдань" + +#: directorymergewindow.cpp:2269 +msgid "" +"Simulated merge complete: Check if you agree with the proposed operations." +msgstr "" + +#: directorymergewindow.cpp:2305 +msgid "" +"An error occurred. Press OK to see detailed information.\n" +msgstr "" + +#: directorymergewindow.cpp:2348 +msgid "Error: While deleting %1: Creating backup failed." +msgstr "" + +#: directorymergewindow.cpp:2355 +#, fuzzy +msgid "delete directory recursively( %1 )" +msgstr "Увімкнути/вимкнути рекурÑивне Ð´Ð¾Ð´Ð°Ð²Ð°Ð½Ð½Ñ ÐºÐ°Ñ‚Ð°Ð»Ð¾Ð³Ñ–Ð² у ÑпиÑок композицій." + +#: directorymergewindow.cpp:2357 +msgid "delete( %1 )" +msgstr "" + +#: directorymergewindow.cpp:2372 +msgid "Error: delete dir operation failed while trying to read the directory." +msgstr "" + +#: directorymergewindow.cpp:2391 +msgid "Error: rmdir( %1 ) operation failed." +msgstr "" + +#: directorymergewindow.cpp:2401 +#, fuzzy +msgid "Error: delete operation failed." +msgstr "Ð”Ñ–Ñ Ð²Ð¸Ð´Ð°Ð»ÐµÐ½Ð½Ñ Ð·Ð°Ð·Ð½Ð°Ð»Ð° невдачі." + +#: directorymergewindow.cpp:2427 +msgid "manual merge( %1, %2, %3 -> %4)" +msgstr "" + +#: directorymergewindow.cpp:2430 +msgid "" +" Note: After a manual merge the user should continue by pressing F7." +msgstr "" + +#: directorymergewindow.cpp:2453 +msgid "Error: copy( %1 -> %2 ) failed.Deleting existing destination failed." +msgstr "" + +#: directorymergewindow.cpp:2463 +msgid "copyLink( %1 -> %2 )" +msgstr "" + +#: directorymergewindow.cpp:2474 +msgid "Error: copyLink failed: Remote links are not yet supported." +msgstr "" + +#: directorymergewindow.cpp:2480 +#, fuzzy +msgid "Error: copyLink failed." +msgstr "" +"Виклик \"stat\" на %1 зазнав невдачі.\n" +"Помилка: %2" + +#: directorymergewindow.cpp:2500 +msgid "copy( %1 -> %2 )" +msgstr "" + +#: directorymergewindow.cpp:2526 +msgid "Error during rename( %1 -> %2 ): Cannot delete existing destination." +msgstr "" + +#: directorymergewindow.cpp:2532 +msgid "rename( %1 -> %2 )" +msgstr "" + +#: directorymergewindow.cpp:2541 +#, fuzzy +msgid "Error: Rename failed." +msgstr "" +"Виклик \"stat\" на %1 зазнав невдачі.\n" +"Помилка: %2" + +#: directorymergewindow.cpp:2559 +msgid "Error during makeDir of %1. Cannot delete existing file." +msgstr "" + +#: directorymergewindow.cpp:2575 +msgid "makeDir( %1 )" +msgstr "" + +#: directorymergewindow.cpp:2585 +#, fuzzy +msgid "Error while creating directory." +msgstr "Помилка ÑÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ñ„Ð°Ð¹Ð»Ð° %1:
%2
" + +#: directorymergewindow.cpp:2608 directorymergewindow.cpp:2725 +msgid "Dest" +msgstr "" + +#: directorymergewindow.cpp:2612 directorymergewindow.cpp:2650 +#, fuzzy +msgid "Dir" +msgstr "Каталог" + +#: directorymergewindow.cpp:2613 +#, fuzzy +msgid "Type" +msgstr "Тип" + +#: directorymergewindow.cpp:2614 +#, fuzzy +msgid "Size" +msgstr "Розмір" + +#: directorymergewindow.cpp:2615 +msgid "Attr" +msgstr "" + +#: directorymergewindow.cpp:2616 +#, fuzzy +msgid "Last Modification" +msgstr "Ð§Ð°Ñ Ð¾Ñтанньої модифікації" + +#: directorymergewindow.cpp:2617 +#, fuzzy +msgid "Link-Destination" +msgstr "Сховати міÑце Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ &поÑиланнÑ" + +#: directorymergewindow.cpp:2667 +#, fuzzy +msgid "not available" +msgstr "не доÑтупне" + +#: directorymergewindow.cpp:2687 +msgid "A (Dest): " +msgstr "" + +#: directorymergewindow.cpp:2690 +msgid "A (Base): " +msgstr "" + +#: directorymergewindow.cpp:2696 +msgid "B (Dest): " +msgstr "" + +#: directorymergewindow.cpp:2704 +msgid "C (Dest): " +msgstr "" + +#: directorymergewindow.cpp:2710 +#, fuzzy +msgid "Dest: " +msgstr "Схід-захід:" + +#: directorymergewindow.cpp:2775 +msgid "Save Directory Merge State As..." +msgstr "" + +#: directorymergewindow.cpp:2862 +msgid "Start/Continue Directory Merge" +msgstr "" + +#: directorymergewindow.cpp:2863 +#, fuzzy +msgid "Run Operation for Current Item" +msgstr "Припинити поточну дію" + +#: directorymergewindow.cpp:2864 +#, fuzzy +msgid "Compare Selected File" +msgstr "&Видалити вибрані файли" + +#: directorymergewindow.cpp:2865 +#, fuzzy +msgid "Merge Current File" +msgstr "Перезавантажити поточний файл з диÑка" + +#: directorymergewindow.cpp:2866 +msgid "Fold All Subdirs" +msgstr "" + +#: directorymergewindow.cpp:2867 +msgid "Unfold All Subdirs" +msgstr "" + +#: directorymergewindow.cpp:2871 +msgid "Choose A for All Items" +msgstr "" + +#: directorymergewindow.cpp:2872 +msgid "Choose B for All Items" +msgstr "" + +#: directorymergewindow.cpp:2873 +msgid "Choose C for All Items" +msgstr "" + +#: directorymergewindow.cpp:2874 +msgid "Auto-Choose Operation for All Items" +msgstr "" + +#: directorymergewindow.cpp:2875 +msgid "No Operation for All Items" +msgstr "" + +#: directorymergewindow.cpp:2880 +#, fuzzy +msgid "Show Identical Files" +msgstr "Вихідний файл та файл Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ñпівпадають" + +#: directorymergewindow.cpp:2881 +#, fuzzy +msgid "Show Different Files" +msgstr "Зберегти в інший файл" + +#: directorymergewindow.cpp:2882 +#, fuzzy +msgid "Show Files only in A" +msgstr "Відображати файли, що закінчуютьÑÑ Ð½Ð°: " + +#: directorymergewindow.cpp:2883 +#, fuzzy +msgid "Show Files only in B" +msgstr "Відображати файли, що закінчуютьÑÑ Ð½Ð°: " + +#: directorymergewindow.cpp:2884 +#, fuzzy +msgid "Show Files only in C" +msgstr "Відображати файли, що закінчуютьÑÑ Ð½Ð°: " + +#: directorymergewindow.cpp:2888 +msgid "Compare Explicitly Selected Files" +msgstr "" + +#: directorymergewindow.cpp:2889 +msgid "Merge Explicitly Selected Files" +msgstr "" + +#: directorymergewindow.cpp:2891 directorymergewindow.cpp:2898 +#, fuzzy +msgid "Do Nothing" +msgstr "Ðічого не робити" + +#: directorymergewindow.cpp:2892 +#, fuzzy +msgid "A" +msgstr "A" + +#: directorymergewindow.cpp:2893 +#, fuzzy +msgid "B" +msgstr "Б" + +#: directorymergewindow.cpp:2894 +#, fuzzy +msgid "C" +msgstr "Сі" + +#: directorymergewindow.cpp:2903 +#, fuzzy +msgid "Delete A && B" +msgstr "&Видалити рахунок" + +#: directorymergewindow.cpp:2906 +msgid "Merge to A && B" +msgstr "" + +#: fileaccess.cpp:595 +msgid "" +"While trying to make a backup, deleting an older backup failed. \n" +"Filename: " +msgstr "" + +#: fileaccess.cpp:602 +msgid "" +"While trying to make a backup, renaming failed. \n" +"Filenames: " +msgstr "" + +#: fileaccess.cpp:624 +#, fuzzy, c-format +msgid "Getting file status: %1" +msgstr "ДізнатиÑÑŒ про віддалений Ñтан наÑтупних файлів:" + +#: fileaccess.cpp:667 +#, fuzzy, c-format +msgid "Reading file: %1" +msgstr "Помилка при розборі файла: %1" + +#: fileaccess.cpp:703 +#, fuzzy, c-format +msgid "Writing file: %1" +msgstr "Помилка при розборі файла: %1" + +#: fileaccess.cpp:731 +#, fuzzy +msgid "Out of memory" +msgstr "Ðе виÑтачає пам'ÑÑ‚Ñ–" + +#: fileaccess.cpp:766 +#, fuzzy, c-format +msgid "Making directory: %1" +msgstr "Каталог резервних копій: %1." + +#: fileaccess.cpp:786 +#, fuzzy, c-format +msgid "Removing directory: %1" +msgstr "Каталог резервних копій: %1." + +#: fileaccess.cpp:801 +#, fuzzy, c-format +msgid "Removing file: %1" +msgstr "Ð’Ð¸Ð´Ð°Ð»ÐµÐ½Ð½Ñ Ð´Ð²Ñ–Ð¹ÐºÐ¾Ð²Ð¾Ð³Ð¾ файла %1" + +#: fileaccess.cpp:817 +#, fuzzy +msgid "Creating symbolic link: %1 -> %2" +msgstr "Віддалена машина не підтримує ÑÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ñимволічних поÑилань." + +#: fileaccess.cpp:843 +#, fuzzy +msgid "Renaming file: %1 -> %2" +msgstr "ÐŸÐµÑ€ÐµÐ¹Ð¼ÐµÐ½ÑƒÐ²Ð°Ð½Ð½Ñ Ñ„Ð°Ð¹Ð»Ñ–Ð²..." + +#: fileaccess.cpp:879 +#, fuzzy +msgid "Copying file: %1 -> %2" +msgstr "ÐšÐ¾Ð¿Ñ–ÑŽÐ²Ð°Ð½Ð½Ñ Ñ„Ð°Ð¹Ð»Ñ–Ð² у межах %1 не підтримуєтьÑÑ." + +#: fileaccess.cpp:893 +#, c-format +msgid "" +"Error during file copy operation: Opening file for reading failed. Filename: %1" +msgstr "" + +#: fileaccess.cpp:899 +#, c-format +msgid "" +"Error during file copy operation: Opening file for writing failed. Filename: %1" +msgstr "" + +#: fileaccess.cpp:914 +#, c-format +msgid "Error during file copy operation: Reading failed. Filename: %1" +msgstr "" + +#: fileaccess.cpp:923 +#, c-format +msgid "Error during file copy operation: Writing failed. Filename: %1" +msgstr "" + +#: fileaccess.cpp:1219 +#, fuzzy +msgid "Reading directory: " +msgstr "Ð§Ð¸Ñ‚Ð°Ð½Ð½Ñ Ñтруктури каталогів" + +#: fileaccess.cpp:1348 +#, fuzzy, c-format +msgid "Listing directory: %1" +msgstr "Вільне міÑце в каталозі призначеннÑ: %1" + +#: kdiff3.cpp:142 +#, fuzzy +msgid "Current Configuration:" +msgstr "Comment=ÐšÐ¾Ð½Ñ„Ñ–Ð³ÑƒÑ€Ð°Ñ†Ñ–Ñ ÐºÐ»Ñ–Ñ”Ð½Ñ‚Ð° Citrix ICA" + +#: kdiff3.cpp:147 +#, fuzzy +msgid "Config Option Error:" +msgstr "Помилка конфігурації CUPS" + +#: kdiff3.cpp:187 +msgid "Option --auto used, but no output file specified." +msgstr "" + +#: kdiff3.cpp:323 +msgid "Option --auto ignored for directory comparison." +msgstr "" + +#: kdiff3.cpp:359 +#, fuzzy +msgid "Saving failed." +msgstr "Ðе вдалоÑÑŒ зберегти об'єкт \"%1\"." + +#: kdiff3.cpp:386 pdiff.cpp:1041 pdiff.cpp:1112 +#, fuzzy +msgid "Opening of these files failed:" +msgstr "Виникла помилка при аналізі файла результатів ОРС:" + +#: kdiff3.cpp:395 +#, fuzzy +msgid "File Open Error" +msgstr "Помилка Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ñ‚Ñ Ñ„Ð°Ð¹Ð»Ð°" + +#: kdiff3.cpp:418 +#, fuzzy +msgid "Opens documents for comparison..." +msgstr "КількіÑÑ‚ÑŒ речень, Ñлів та літер в документі" + +#: kdiff3.cpp:423 +msgid "Saves the merge result. All conflicts must be solved!" +msgstr "" + +#: kdiff3.cpp:425 +#, fuzzy +msgid "Saves the current document as..." +msgstr "Зберігає документ Ñк..." + +#: kdiff3.cpp:427 +#, fuzzy +msgid "Print the differences" +msgstr "Ðемає відмінноÑÑ‚Ñ– від Ñховища." + +#: kdiff3.cpp:429 +#, fuzzy +msgid "Quits the application" +msgstr "ЗупинÑÑ” програму" + +#: kdiff3.cpp:431 +#, fuzzy +msgid "Cuts the selected section and puts it to the clipboard" +msgstr "Вирізає вибране та кладе його у кишеню" + +#: kdiff3.cpp:433 +#, fuzzy +msgid "Copies the selected section to the clipboard" +msgstr "Копіює вибране до кишені" + +#: kdiff3.cpp:435 +#, fuzzy +msgid "Pastes the clipboard contents to actual position" +msgstr "Ð’ÑтавлÑÑ” зміÑÑ‚ кишені в поточну позицію" + +#: kdiff3.cpp:437 +msgid "Select everything in current window" +msgstr "" + +#: kdiff3.cpp:439 +#, fuzzy +msgid "Search for a string" +msgstr "Шукати Ñ€Ñдок" + +#: kdiff3.cpp:441 +#, fuzzy +msgid "Search again for the string" +msgstr "РозглÑдати Ñ€Ñдок пошуку Ñк формальний вираз" + +#: kdiff3.cpp:443 +#, fuzzy +msgid "Enables/disables the toolbar" +msgstr "Вмикає/вимикає пенал" + +#: kdiff3.cpp:445 +#, fuzzy +msgid "Enables/disables the statusbar" +msgstr "Вмикає/вимикає Ñмужку Ñтану" + +#: kdiff3.cpp:449 +#, fuzzy +msgid "Configure KDiff3..." +msgstr "Ðалаштувати KDat..." + +#: kdiff3.cpp:470 +#, fuzzy +msgid "Go to Current Delta" +msgstr "Ð’ÑÑ– &до поточної Ñтільниці" + +#: kdiff3.cpp:471 +msgid "Go to First Delta" +msgstr "" + +#: kdiff3.cpp:472 +msgid "Go to Last Delta" +msgstr "" + +#: kdiff3.cpp:473 +msgid "(Skips white space differences when \"Show White Space\" is disabled.)" +msgstr "" + +#: kdiff3.cpp:474 +msgid "" +"(Does not skip white space differences even when \"Show White Space\" is " +"disabled.)" +msgstr "" + +#: kdiff3.cpp:475 +#, fuzzy +msgid "Go to Previous Delta" +msgstr "Перейти до попереднього ÑеанÑу" + +#: kdiff3.cpp:477 +#, fuzzy +msgid "Go to Next Delta" +msgstr "Перейти до наÑтупного ÑеанÑу" + +#: kdiff3.cpp:479 +#, fuzzy +msgid "Go to Previous Conflict" +msgstr "&ПовернутиÑÑ Ð´Ð¾ попередньої конфігурації" + +#: kdiff3.cpp:481 +#, fuzzy +msgid "Go to Next Conflict" +msgstr "Перейти до наÑтупного ÑеанÑу" + +#: kdiff3.cpp:483 +msgid "Go to Previous Unsolved Conflict" +msgstr "" + +#: kdiff3.cpp:485 +msgid "Go to Next Unsolved Conflict" +msgstr "" + +#: kdiff3.cpp:487 +#, fuzzy +msgid "Select Line(s) From A" +msgstr "Виберіть Ñервер зі ÑпиÑку..." + +#: kdiff3.cpp:488 +#, fuzzy +msgid "Select Line(s) From B" +msgstr "Виберіть Ñервер зі ÑпиÑку..." + +#: kdiff3.cpp:489 +#, fuzzy +msgid "Select Line(s) From C" +msgstr "Виберіть Ñервер зі ÑпиÑку..." + +#: kdiff3.cpp:490 +msgid "Automatically Go to Next Unsolved Conflict After Source Selection" +msgstr "" + +#: kdiff3.cpp:492 +msgid "Show Space && Tabulator Characters for Differences" +msgstr "" + +#: kdiff3.cpp:493 +msgid "Show White Space" +msgstr "" + +#: kdiff3.cpp:495 +#, fuzzy +msgid "Show Line Numbers" +msgstr "Разом з номерами Ñ€Ñдків" + +#: kdiff3.cpp:496 +msgid "Choose A Everywhere" +msgstr "" + +#: kdiff3.cpp:497 +msgid "Choose B Everywhere" +msgstr "" + +#: kdiff3.cpp:498 +msgid "Choose C Everywhere" +msgstr "" + +#: kdiff3.cpp:499 +msgid "Choose A for All Unsolved Conflicts" +msgstr "" + +#: kdiff3.cpp:500 +msgid "Choose B for All Unsolved Conflicts" +msgstr "" + +#: kdiff3.cpp:501 +msgid "Choose C for All Unsolved Conflicts" +msgstr "" + +#: kdiff3.cpp:502 +msgid "Choose A for All Unsolved Whitespace Conflicts" +msgstr "" + +#: kdiff3.cpp:503 +msgid "Choose B for All Unsolved Whitespace Conflicts" +msgstr "" + +#: kdiff3.cpp:504 +msgid "Choose C for All Unsolved Whitespace Conflicts" +msgstr "" + +#: kdiff3.cpp:505 +msgid "Automatically Solve Simple Conflicts" +msgstr "" + +#: kdiff3.cpp:506 +#, fuzzy +msgid "Set Deltas to Conflicts" +msgstr "ЗаÑтоÑувати до вÑÑ–Ñ… конфліктів даної Ñинхронізації" + +#: kdiff3.cpp:507 +#, fuzzy +msgid "Run Regular Expression Auto Merge" +msgstr "Формальні вирази Ð´Ð»Ñ Ð½Ð°Ð·Ð² файлів" + +#: kdiff3.cpp:508 +msgid "Automatically Solve History Conflicts" +msgstr "" + +#: kdiff3.cpp:509 +msgid "Split Diff At Selection" +msgstr "" + +#: kdiff3.cpp:510 +#, fuzzy +msgid "Join Selected Diffs" +msgstr "&Відкрити вибрану таблицю/запит" + +#: kdiff3.cpp:512 +#, fuzzy +msgid "Show Window A" +msgstr "Показувати вÑÑ– &вікна" + +#: kdiff3.cpp:513 +#, fuzzy +msgid "Show Window B" +msgstr "Показувати вÑÑ– &вікна" + +#: kdiff3.cpp:514 +#, fuzzy +msgid "Show Window C" +msgstr "Створене нове вікно" + +#: kdiff3.cpp:515 kdiff3.cpp:526 +#, fuzzy +msgid "Focus Next Window" +msgstr "Ð¤Ð¾ÐºÑƒÑ Ð´Ð¾ наÑтупної Ñтатті" + +#: kdiff3.cpp:517 +#, fuzzy +msgid "Normal Overview" +msgstr "ПереглÑд &флоту" + +#: kdiff3.cpp:518 +msgid "A vs. B Overview" +msgstr "" + +#: kdiff3.cpp:519 +msgid "A vs. C Overview" +msgstr "" + +#: kdiff3.cpp:520 +msgid "B vs. C Overview" +msgstr "" + +#: kdiff3.cpp:521 +msgid "Word Wrap Diff Windows" +msgstr "" + +#: kdiff3.cpp:522 +msgid "Add Manual Diff Alignment" +msgstr "" + +#: kdiff3.cpp:523 +msgid "Clear All Manual Diff Alignments" +msgstr "" + +#: kdiff3.cpp:528 +msgid "Focus Prev Window" +msgstr "" + +#: kdiff3.cpp:529 +#, fuzzy +msgid "Toggle Split Orientation" +msgstr "&ÐžÑ€Ñ–Ñ”Ð½Ñ‚Ð°Ñ†Ñ–Ñ Ñ€Ð¾Ð·Ð±Ð¸Ñ‚Ñ‚Ñ" + +#: kdiff3.cpp:531 +msgid "Dir && Text Split Screen View" +msgstr "" + +#: kdiff3.cpp:533 +msgid "Toggle Between Dir && Text View" +msgstr "" + +#: kdiff3.cpp:582 pdiff.cpp:1712 +msgid "The merge result hasn't been saved." +msgstr "" + +#: kdiff3.cpp:583 +#, fuzzy +msgid "Save && Quit" +msgstr "Зберегти Ñ– з'&єднатиÑÑŒ" + +#: kdiff3.cpp:583 +msgid "Quit Without Saving" +msgstr "" + +#: kdiff3.cpp:591 pdiff.cpp:1721 +#, fuzzy +msgid "Saving the merge result failed." +msgstr "Помилка Ð·Ð±ÐµÑ€ÐµÐ¶ÐµÐ½Ð½Ñ Ñ€ÐµÐ·ÑƒÐ»ÑŒÑ‚Ð°Ñ‚Ñ–Ð² %1." + +#: kdiff3.cpp:602 pdiff.cpp:978 +#, fuzzy +msgid "" +"You are currently doing a directory merge. Are you sure, you want to abort?" +msgstr "" +"Ви в даний Ñ‡Ð°Ñ Ð¿Ñ€Ð¸Ð¹Ð¼Ð°Ñ”Ñ‚Ðµ учаÑÑ‚ÑŒ у грі. Ви дійÑно хочете закрити Atlantik? Якщо " +"ви вийдете з гри, ви програли." + +#: kdiff3.cpp:625 +#, fuzzy +msgid "Saving file..." +msgstr "Ð—Ð±ÐµÑ€ÐµÐ¶ÐµÐ½Ð½Ñ Ñ„Ð°Ð¹Ð»Ð°..." + +#: kdiff3.cpp:642 +#, fuzzy +msgid "Saving file with a new filename..." +msgstr "Зберігаю файл з новим ім'Ñм..." + +#: kdiff3.cpp:732 +#, fuzzy +msgid "Printing..." +msgstr "Друкую..." + +#: kdiff3.cpp:738 kdiff3.cpp:900 +#, fuzzy +msgid "Printing aborted." +msgstr "Друк перервано" + +#: kdiff3.cpp:870 +#, fuzzy +msgid "Selection" +msgstr "Вибір" + +#: kdiff3.cpp:896 +#, fuzzy +msgid "Printing completed." +msgstr "Друк закінчено." + +#: kdiff3.cpp:906 +#, fuzzy +msgid "Exiting..." +msgstr "Вихід..." + +#: kdiff3.cpp:918 +#, fuzzy +msgid "Toggling toolbar..." +msgstr "Перемикаю пенал..." + +#: kdiff3.cpp:939 +#, fuzzy +msgid "Toggle the statusbar..." +msgstr "Перемикаю Ñмужку Ñтану..." + +#: kdiff3_part.cpp:155 kdiff3_part.cpp:224 +msgid "Couldn't find files for comparison." +msgstr "" + +#: kdiff3_part.cpp:291 +msgid "KDiff3Part" +msgstr "" + +#: kdiff3_shell.cpp:78 +msgid "" +"Could not find our part!\n" +"This usually happens due to an installation problem. Please read the " +"README-file in the source package for details." +msgstr "" + +#: main.cpp:35 +msgid "Tool for Comparison and Merge of Files and Directories" +msgstr "" + +#: main.cpp:40 +msgid "Merge the input." +msgstr "" + +#: main.cpp:42 +msgid "Explicit base file. For compatibility with certain tools." +msgstr "" + +#: main.cpp:44 +msgid "Output file. Implies -m. E.g.: -o newfile.txt" +msgstr "" + +#: main.cpp:45 +msgid "Output file, again. (For compatibility with certain tools.)" +msgstr "" + +#: main.cpp:46 +msgid "No GUI if all conflicts are auto-solvable. (Needs -o file)" +msgstr "" + +#: main.cpp:47 +msgid "Don't solve conflicts automatically. (For compatibility...)" +msgstr "" + +#: main.cpp:48 +msgid "Visible name replacement for input file 1 (base)." +msgstr "" + +#: main.cpp:49 +msgid "Visible name replacement for input file 2." +msgstr "" + +#: main.cpp:50 +msgid "Visible name replacement for input file 3." +msgstr "" + +#: main.cpp:52 +msgid "Alternative visible name replacement. Supply this once for every input." +msgstr "" + +#: main.cpp:53 +msgid "" +"Override a config setting. Use once for every setting. E.g.: --cs " +"\"AutoAdvance=1\"" +msgstr "" + +#: main.cpp:54 +msgid "Show list of config settings and current values." +msgstr "" + +#: main.cpp:55 +#, fuzzy +msgid "Use a different config file." +msgstr "Виберіть іншу назву Ð´Ð»Ñ Ñ„Ð°Ð¹Ð»Ð° призначеннÑ." + +#: main.cpp:59 +msgid "file1 to open (base, if not specified via --base)" +msgstr "" + +#: main.cpp:60 +#, fuzzy +msgid "file2 to open" +msgstr "Відкрити файл документа" + +#: main.cpp:61 +#, fuzzy +msgid "file3 to open" +msgstr "Відкрити файл документа" + +#: main.cpp:93 +msgid "Ignored. (User defined.)" +msgstr "" + +#. i18n: file kdiff3_part.rc line 16 +#: main.cpp:173 rc.cpp:9 +#, fuzzy, no-c-format +msgid "KDiff3" +msgstr "Diff3" + +#: main.cpp:186 +msgid "+ Many thanks to those who reported bugs and contributed ideas!" +msgstr "" + +#: mergeresultwindow.cpp:136 mergeresultwindow.cpp:939 +#: mergeresultwindow.cpp:953 mergeresultwindow.cpp:965 +#: mergeresultwindow.cpp:977 +msgid "Number of remaining unsolved conflicts: %1 (of which %2 are whitespace)" +msgstr "" + +#: mergeresultwindow.cpp:285 +#, fuzzy +msgid "" +"The output has been modified.\n" +"If you continue your changes will be lost." +msgstr "" +"Поточний документ було змінено на диÑку Ñ– міÑтить незбережені зміни.\n" +"Якщо ви його перезавантажите, вÑÑ– зміни буде втрачено." + +#: mergeresultwindow.cpp:797 pdiff.cpp:511 +#, fuzzy +msgid "All input files are binary equal." +msgstr "ЗдаєтьÑÑ, вÑÑ– файли однакові." + +#: mergeresultwindow.cpp:799 +msgid "All input files contain the same text." +msgstr "" + +#: mergeresultwindow.cpp:801 +msgid "" +"Files A and B are binary equal.\n" +msgstr "" + +#: mergeresultwindow.cpp:802 +msgid "" +"Files A and B have equal text. \n" +msgstr "" + +#: mergeresultwindow.cpp:803 +msgid "" +"Files A and C are binary equal.\n" +msgstr "" + +#: mergeresultwindow.cpp:804 +msgid "" +"Files A and C have equal text. \n" +msgstr "" + +#: mergeresultwindow.cpp:805 +msgid "" +"Files B and C are binary equal.\n" +msgstr "" + +#: mergeresultwindow.cpp:806 +msgid "" +"Files B and C have equal text. \n" +msgstr "" + +#: mergeresultwindow.cpp:812 +#, fuzzy +msgid "Total number of conflicts: " +msgstr "Друкувати деÑкі контакти." + +#: mergeresultwindow.cpp:813 +msgid "" +"\n" +"Nr of automatically solved conflicts: " +msgstr "" + +#: mergeresultwindow.cpp:814 +#, fuzzy +msgid "" +"\n" +"Nr of unsolved conflicts: " +msgstr "Розв'Ñзано конфлікт Ð´Ð»Ñ %1." + +#: mergeresultwindow.cpp:816 +#, fuzzy +msgid "Conflicts" +msgstr "Конфлікти" + +#: mergeresultwindow.cpp:1652 +msgid "" +msgstr "" + +#: mergeresultwindow.cpp:1660 +msgid "" +msgstr "" + +#: mergeresultwindow.cpp:1662 mergeresultwindow.cpp:2427 +msgid "" +msgstr "" + +#: mergeresultwindow.cpp:2635 +msgid "" +"Not all conflicts are solved yet.\n" +"File not saved.\n" +msgstr "" + +#: mergeresultwindow.cpp:2637 +#, fuzzy +msgid "Conflicts Left" +msgstr "Конфлікти й дублікати" + +#: mergeresultwindow.cpp:2649 +msgid "" +"\n" +"\n" +"Creating backup failed. File not saved." +msgstr "" + +#: mergeresultwindow.cpp:2649 mergeresultwindow.cpp:2689 +#, fuzzy +msgid "File Save Error" +msgstr "Помилка Ð·Ð±ÐµÑ€ÐµÐ¶ÐµÐ½Ð½Ñ Ð´Ñ–Ð°Ð³Ñ€Ð°Ð¼Ð¸." + +#: mergeresultwindow.cpp:2689 +#, fuzzy +msgid "Error while writing." +msgstr "Помилка Ð¿ÐµÑ€ÐµÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ñ‚ÐµÐºÑту %1." + +#: mergeresultwindow.cpp:3020 +#, fuzzy +msgid "Output" +msgstr "Вивід" + +#: mergeresultwindow.cpp:3032 mergeresultwindow.cpp:3139 +#, fuzzy +msgid "[Modified]" +msgstr "З&мінено" + +#: mergeresultwindow.cpp:3039 +#, fuzzy +msgid "Encoding for saving" +msgstr "ÐŸÐ¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ Ð¿Ñ€Ð¾ кодуваннÑ" + +#: mergeresultwindow.cpp:3075 mergeresultwindow.cpp:3081 +#: mergeresultwindow.cpp:3087 +msgid "Codec from" +msgstr "" + +#: optiondialog.cpp:362 +msgid "Unicode, 8 bit" +msgstr "" + +#: optiondialog.cpp:363 +#, fuzzy +msgid "Unicode" +msgstr "Юнікод" + +#: optiondialog.cpp:364 +#, fuzzy +msgid "Latin1" +msgstr "Latin1" + +#: optiondialog.cpp:383 +msgid "Change this if non-ASCII characters are not displayed correctly." +msgstr "" + +#: optiondialog.cpp:510 +msgid "Editor & Diff Output Font" +msgstr "" + +#: optiondialog.cpp:531 +msgid "Italic font for deltas" +msgstr "" + +#: optiondialog.cpp:534 +msgid "" +"Selects the italic version of the font for differences.\n" +"If the font doesn't support italic characters, then this does nothing." +msgstr "" + +#: optiondialog.cpp:542 +#, fuzzy +msgid "Color" +msgstr "Ð’ кольорі" + +#: optiondialog.cpp:542 +#, fuzzy +msgid "Colors Settings" +msgstr "Параметри кольору HTML" + +#: optiondialog.cpp:556 +msgid "Editor and Diff Views:" +msgstr "" + +#: optiondialog.cpp:564 +#, fuzzy +msgid "Foreground color:" +msgstr "Колір переднього плану:" + +#: optiondialog.cpp:570 +#, fuzzy +msgid "Background color:" +msgstr "Колір тла:" + +#: optiondialog.cpp:578 +#, fuzzy +msgid "Diff background color:" +msgstr "&Колір тла текÑту:" + +#: optiondialog.cpp:585 +#, fuzzy +msgid "Color A:" +msgstr "ÐšÐ¾Ñ€ÐµÐºÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ ÐºÐ¾Ð»ÑŒÐ¾Ñ€Ñƒ" + +#: optiondialog.cpp:592 +#, fuzzy +msgid "Color B:" +msgstr "Пенал кольорів" + +#: optiondialog.cpp:599 +#, fuzzy +msgid "Color C:" +msgstr "Вибір кольорів" + +#: optiondialog.cpp:605 +#, fuzzy +msgid "Conflict color:" +msgstr "&Виберіть колір:" + +#: optiondialog.cpp:612 +#, fuzzy +msgid "Current range background color:" +msgstr "Змінити колір тла вибраного текÑту." + +#: optiondialog.cpp:619 +#, fuzzy +msgid "Current range diff background color:" +msgstr "Змінити колір тла вибраного текÑту." + +#: optiondialog.cpp:625 +msgid "Color for manually aligned difference ranges:" +msgstr "" + +#: optiondialog.cpp:630 +msgid "Directory Comparison View:" +msgstr "" + +#: optiondialog.cpp:636 +msgid "Newest file color:" +msgstr "" + +#: optiondialog.cpp:639 +msgid "" +"Changing this color will only be effective when starting the next directory " +"comparison." +msgstr "" + +#: optiondialog.cpp:644 +msgid "Oldest file color:" +msgstr "" + +#: optiondialog.cpp:651 +msgid "Middle age file color:" +msgstr "" + +#: optiondialog.cpp:658 +#, fuzzy +msgid "Color for missing files:" +msgstr "\"require\" відÑÑƒÑ‚Ð½Ñ Ð´Ð»Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð¸ \"%1\"" + +#: optiondialog.cpp:670 +#, fuzzy +msgid "Editor" +msgstr "Редактор" + +#: optiondialog.cpp:670 +#, fuzzy +msgid "Editor Behavior" +msgstr "Режим роботи редактора" + +#: optiondialog.cpp:680 +#, fuzzy +msgid "Tab inserts spaces" +msgstr "Вживати &пробіли заміÑÑ‚ÑŒ табулÑції" + +#: optiondialog.cpp:683 +msgid "" +"On: Pressing tab generates the appropriate number of spaces.\n" +"Off: A Tab-character will be inserted." +msgstr "" + +#: optiondialog.cpp:689 +#, fuzzy +msgid "Tab size:" +msgstr "Розмір табулÑції:" + +#: optiondialog.cpp:694 +#, fuzzy +msgid "Auto indentation" +msgstr "ÐвтовідÑтуп" + +#: optiondialog.cpp:697 +msgid "" +"On: The indentation of the previous line is used for a new line.\n" +msgstr "" + +#: optiondialog.cpp:701 +#, fuzzy +msgid "Auto copy selection" +msgstr "Щоб вибрати, потÑгніть при натиÑнутій лівій кнопці." + +#: optiondialog.cpp:704 +msgid "" +"On: Any selection is immediately written to the clipboard.\n" +"Off: You must explicitely copy e.g. via Ctrl-C." +msgstr "" + +#: optiondialog.cpp:709 +#, fuzzy +msgid "Line end style:" +msgstr "Стиль кін&ців лінії:" + +#: optiondialog.cpp:721 +msgid "" +"Sets the line endings for when an edited file is saved.\n" +"DOS/Windows: CR+LF; UNIX: LF; with CR=0D, LF=0A" +msgstr "" + +#: optiondialog.cpp:732 +#, fuzzy +msgid "Diff" +msgstr "Diff3" + +#: optiondialog.cpp:732 +#, fuzzy +msgid "Diff Settings" +msgstr "Зберегти параметри Ñ– закрити" + +#: optiondialog.cpp:743 +#, fuzzy +msgid "Preserve carriage return" +msgstr "Стиль &MacOS (тільки Ð¿Ð¾Ð²ÐµÑ€Ð½ÐµÐ½Ð½Ñ ÐºÐ°Ñ€ÐµÑ‚ÐºÐ¸)" + +#: optiondialog.cpp:746 +msgid "" +"Show carriage return characters '\\r' if they exist.\n" +"Helps to compare files that were modified under different operating systems." +msgstr "" + +#: optiondialog.cpp:751 +#, fuzzy +msgid "Ignore numbers" +msgstr "Додати номери Ñторінок" + +#: optiondialog.cpp:754 +msgid "" +"Ignore number characters during line matching phase. (Similar to Ignore white " +"space.)\n" +"Might help to compare files with numeric data." +msgstr "" + +#: optiondialog.cpp:759 +msgid "Ignore C/C++ comments" +msgstr "" + +#: optiondialog.cpp:761 +msgid "Treat C/C++ comments like white space." +msgstr "" + +#: optiondialog.cpp:765 +#, fuzzy +msgid "Ignore case" +msgstr "Без ÑƒÑ€Ð°Ñ…ÑƒÐ²Ð°Ð½Ð½Ñ Ñ€ÐµÐ³Ñ–Ñтру" + +#: optiondialog.cpp:768 +msgid "Treat case differences like white space changes. ('a'<=>'A')" +msgstr "" + +#: optiondialog.cpp:772 +#, fuzzy +msgid "Preprocessor command:" +msgstr "Попередню підготовку звуку закінчено." + +#: optiondialog.cpp:776 +msgid "User defined pre-processing. (See the docs for details.)" +msgstr "" + +#: optiondialog.cpp:779 +msgid "Line-matching preprocessor command:" +msgstr "" + +#: optiondialog.cpp:783 +msgid "" +"This pre-processor is only used during line matching.\n" +"(See the docs for details.)" +msgstr "" + +#: optiondialog.cpp:786 +msgid "Try hard (slower)" +msgstr "" + +#: optiondialog.cpp:789 +msgid "" +"Enables the --minimal option for the external diff.\n" +"The analysis of big files will be much slower." +msgstr "" + +#: optiondialog.cpp:794 +msgid "Auto advance delay (ms):" +msgstr "" + +#: optiondialog.cpp:799 +msgid "" +"When in Auto-Advance mode the result of the current selection is shown \n" +"for the specified time, before jumping to the next conflict. Range: 0-2000 ms" +msgstr "" + +#: optiondialog.cpp:809 +#, fuzzy +msgid "Merge Settings" +msgstr "Зберегти параметри Ñ– закрити" + +#: optiondialog.cpp:822 +msgid "White space 2-file merge default:" +msgstr "" + +#: optiondialog.cpp:826 optiondialog.cpp:839 +#, fuzzy +msgid "Manual Choice" +msgstr "при перевірці пошти вручну" + +#: optiondialog.cpp:830 optiondialog.cpp:844 +msgid "" +"Allow the merge algorithm to automatically select an input for white-space-only " +"changes." +msgstr "" + +#: optiondialog.cpp:835 +msgid "White space 3-file merge default:" +msgstr "" + +#: optiondialog.cpp:849 +#, fuzzy +msgid "Automatic Merge Regular Expression" +msgstr "&Зберегти формальний вираз..." + +#: optiondialog.cpp:858 smalldialogs.cpp:397 +#, fuzzy +msgid "Auto merge regular expression:" +msgstr "&Формальний вираз меж речень:" + +#: optiondialog.cpp:862 +msgid "" +"Regular expression for lines where KDiff3 should automatically choose one " +"source.\n" +"When a line with a conflict matches the regular expression then\n" +"- if available - C, otherwise B will be chosen." +msgstr "" + +#: optiondialog.cpp:868 +#, fuzzy +msgid "Run regular expression auto merge on merge start" +msgstr "" +"Ваш формальний вираз неправильний, оÑкільки щоÑÑŒ передує \"початок Ñ€Ñдка\"." + +#: optiondialog.cpp:870 +msgid "" +"Run the merge for auto merge regular expressions\n" +"immediately when a merge starts.\n" +msgstr "" + +#: optiondialog.cpp:875 +msgid "Version Control History Merging" +msgstr "" + +#: optiondialog.cpp:884 smalldialogs.cpp:424 +#, fuzzy +msgid "History start regular expression:" +msgstr "&Формальний вираз меж речень:" + +#: optiondialog.cpp:888 +msgid "" +"Regular expression for the start of the version control history entry.\n" +"Usually this line contains the \"$Log$\"-keyword.\n" +"Default value: \".*\\$Log.*\\$.*\"" +msgstr "" + +#: optiondialog.cpp:894 smalldialogs.cpp:453 +#, fuzzy +msgid "History entry start regular expression:" +msgstr "&Формальний вираз меж речень:" + +#: optiondialog.cpp:906 +msgid "" +"A version control history entry consists of several lines.\n" +"Specify the regular expression to detect the first line (without the leading " +"comment).\n" +"Use parentheses to group the keys you want to use for sorting.\n" +"If left empty, then KDiff3 assumes that empty lines separate history entries.\n" +"See the documentation for details." +msgstr "" + +#: optiondialog.cpp:914 +msgid "History merge sorting" +msgstr "" + +#: optiondialog.cpp:916 +msgid "Sort version control history by a key." +msgstr "" + +#: optiondialog.cpp:926 +msgid "History entry start sort key order:" +msgstr "" + +#: optiondialog.cpp:930 +msgid "" +"Each parentheses used in the regular expression for the history start entry\n" +"groups a key that can be used for sorting.\n" +"Specify the list of keys (that are numbered in order of occurrence\n" +"starting with 1) using ',' as separator (e.g. \"4,5,6,1,2,3,7\").\n" +"If left empty, then no sorting will be done.\n" +"See the documentation for details." +msgstr "" + +#: optiondialog.cpp:941 +msgid "Merge version control history on merge start" +msgstr "" + +#: optiondialog.cpp:943 +msgid "Run version control history automerge on merge start." +msgstr "" + +#: optiondialog.cpp:947 +#, fuzzy +msgid "Test your regular expressions" +msgstr "Локальні Ñимволи Ð´Ð»Ñ Ñ„Ð¾Ñ€Ð¼Ð°Ð»ÑŒÐ½Ð¸Ñ… виразів:" + +#: optiondialog.cpp:952 +msgid "Irrelevant merge command:" +msgstr "" + +#: optiondialog.cpp:956 +msgid "" +"If specified this script is run after automerge\n" +"when no other relevant changes were detected.\n" +"Called with the parameters: filename1 filename2 filename3" +msgstr "" + +#: optiondialog.cpp:966 +#, fuzzy +msgid "Directory Merge" +msgstr "ПрипиÑÑƒÐ²Ð°Ð½Ð½Ñ ÐºÐ°Ñ‚Ð°Ð»Ð¾Ð³Ñ–Ð²" + +#: optiondialog.cpp:975 +#, fuzzy +msgid "Recursive directories" +msgstr "ÐŸÑ–Ð´Ñ€Ð°Ñ…ÑƒÐ²Ð°Ð½Ð½Ñ ÐºÐ°Ñ‚Ð°Ð»Ð¾Ð³Ñ–Ð²..." + +#: optiondialog.cpp:977 +#, fuzzy +msgid "Whether to analyze subdirectories or not." +msgstr "Чи додавати каталоги до ÑпиÑку композицій рекурÑивно" + +#: optiondialog.cpp:979 +#, fuzzy +msgid "File pattern(s):" +msgstr "Виберіть Ñтиль або шаблон." + +#: optiondialog.cpp:984 +msgid "" +"Pattern(s) of files to be analyzed. \n" +"Wildcards: '*' and '?'\n" +"Several Patterns can be specified by using the separator: ';'" +msgstr "" + +#: optiondialog.cpp:990 +msgid "File-anti-pattern(s):" +msgstr "" + +#: optiondialog.cpp:995 +msgid "" +"Pattern(s) of files to be excluded from analysis. \n" +"Wildcards: '*' and '?'\n" +"Several Patterns can be specified by using the separator: ';'" +msgstr "" + +#: optiondialog.cpp:1001 +msgid "Dir-anti-pattern(s):" +msgstr "" + +#: optiondialog.cpp:1006 +msgid "" +"Pattern(s) of directories to be excluded from analysis. \n" +"Wildcards: '*' and '?'\n" +"Several Patterns can be specified by using the separator: ';'" +msgstr "" + +#: optiondialog.cpp:1012 +msgid "Use .cvsignore" +msgstr "" + +#: optiondialog.cpp:1015 +msgid "" +"Extends the antipattern to anything that would be ignored by CVS.\n" +"Via local \".cvsignore\"-files this can be directory specific." +msgstr "" + +#: optiondialog.cpp:1020 +#, fuzzy +msgid "Find hidden files and directories" +msgstr "Ігнорувати приховані файли та теки" + +#: optiondialog.cpp:1023 +msgid "Finds files and directories with the hidden attribute." +msgstr "" + +#: optiondialog.cpp:1025 +msgid "Finds files and directories starting with '.'." +msgstr "" + +#: optiondialog.cpp:1029 +#, fuzzy +msgid "Follow file links" +msgstr "&Йти за Ñимволічними поÑиланнÑми" + +#: optiondialog.cpp:1032 +msgid "" +"On: Compare the file the link points to.\n" +"Off: Compare the links." +msgstr "" + +#: optiondialog.cpp:1037 +msgid "Follow directory links" +msgstr "" + +#: optiondialog.cpp:1040 +#, fuzzy +msgid "" +"On: Compare the directory the link points to.\n" +"Off: Compare the links." +msgstr "" +"ДозволÑти навігацію по Ñимволічних поÑиланнÑÑ…, Ñкі вка&зують на ділÑнки поза " +"деревом каталогу" + +#: optiondialog.cpp:1056 +msgid "Case sensitive filename comparison" +msgstr "" + +#: optiondialog.cpp:1059 +msgid "" +"The directory comparison will compare files or directories when their names " +"match.\n" +"Set this option if the case of the names must match. (Default for Windows is " +"off, otherwise on.)" +msgstr "" + +#: optiondialog.cpp:1063 +msgid "File Comparison Mode" +msgstr "" + +#: optiondialog.cpp:1067 +msgid "Binary comparison" +msgstr "" + +#: optiondialog.cpp:1068 +msgid "Binary comparison of each file. (Default)" +msgstr "" + +#: optiondialog.cpp:1070 +msgid "Full analysis" +msgstr "" + +#: optiondialog.cpp:1071 +msgid "" +"Do a full analysis and show statistics information in extra columns.\n" +"(Slower than a binary comparison, much slower for binary files.)" +msgstr "" + +#: optiondialog.cpp:1074 +#, fuzzy +msgid "Trust the modification date (unsafe)" +msgstr "

Модифіковано:%1