From 31e6158e86b5f95591b4c91a36e716b14302a4b1 Mon Sep 17 00:00:00 2001 From: Eike Sauer Date: Sun, 3 Aug 2014 16:37:00 +0100 Subject: [PATCH] Import kdiff3_0.9.98.orig.tar.gz [dgit import orig kdiff3_0.9.98.orig.tar.gz] --- AUTHORS | 1 + CMakeLists.txt | 53 + COPYING | 340 ++ ChangeLog | 561 +++ Doxyfile | 236 + INSTALL | 4 + NEWS | 1 + README | 188 + TODO | 123 + cmake/modules/FindLibKonq.cmake | 39 + config-kdiff3.h.cmake | 4 + configure | 87 + diff_ext_for_kdiff3/LICENSE | 25 + diff_ext_for_kdiff3/Makefile | 63 + diff_ext_for_kdiff3/Makefile_64bit | 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 | 640 +++ 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.rc | 47 + .../diff_ext_for_kdiff3.vcproj | 230 + .../diff_ext_for_kdiff3_msvc.def | 6 + diff_ext_for_kdiff3/diffextstring.h | 157 + diff_ext_for_kdiff3/server.cpp | 467 ++ diff_ext_for_kdiff3/server.h | 81 + doc/CMakeLists.txt | 9 + doc/README | 80 + doc/createpdfdoc | 14 + doc/da/CMakeLists.txt | 1 + doc/da/index.docbook | 2918 ++++++++++++ doc/de/CMakeLists.txt | 1 + doc/de/index.docbook | 2430 ++++++++++ doc/en/CMakeLists.txt | 1 + doc/en/common/1.png | Bin 0 -> 229 bytes doc/en/common/10.png | Bin 0 -> 271 bytes doc/en/common/2.png | Bin 0 -> 249 bytes doc/en/common/3.png | Bin 0 -> 255 bytes doc/en/common/4.png | Bin 0 -> 247 bytes doc/en/common/5.png | Bin 0 -> 255 bytes doc/en/common/6.png | Bin 0 -> 262 bytes doc/en/common/7.png | Bin 0 -> 245 bytes doc/en/common/8.png | Bin 0 -> 262 bytes doc/en/common/9.png | Bin 0 -> 263 bytes doc/en/common/artistic-license.html | 165 + doc/en/common/block_title_bottom.png | Bin 0 -> 292 bytes doc/en/common/block_title_mid.png | Bin 0 -> 202 bytes doc/en/common/block_title_top.png | Bin 0 -> 323 bytes doc/en/common/bottom-left.png | Bin 0 -> 149 bytes doc/en/common/bottom-middle.png | Bin 0 -> 130 bytes doc/en/common/bottom-right.png | Bin 0 -> 153 bytes doc/en/common/bsd-license.html | 45 + doc/en/common/doxygen.css | 96 + doc/en/common/favicon.ico | Bin 0 -> 1406 bytes doc/en/common/fdl-license | 397 ++ doc/en/common/fdl-license.html | 512 +++ doc/en/common/fdl-notice.html | 15 + doc/en/common/footer.html | 64 + doc/en/common/gpl-license | 340 ++ doc/en/common/gpl-license.html | 381 ++ doc/en/common/header.html | 67 + doc/en/common/kde-default.css | 327 ++ doc/en/common/kde_logo_bg.png | Bin 0 -> 192 bytes doc/en/common/lgpl-license | 504 +++ doc/en/common/lgpl-license.html | 502 +++ doc/en/common/mainfooter.html | 72 + doc/en/common/mainheader.html | 66 + doc/en/common/qpl-license.html | 164 + doc/en/common/tabs.css | 102 + doc/en/common/top-kde.jpg | Bin 0 -> 2944 bytes doc/en/common/top-left.jpg | Bin 0 -> 631 bytes doc/en/common/top-left.png | Bin 0 -> 6933 bytes doc/en/common/top-middle.png | Bin 0 -> 232 bytes doc/en/common/top-right.jpg | Bin 0 -> 646 bytes doc/en/common/top-right.png | Bin 0 -> 4248 bytes doc/en/common/top.jpg | Bin 0 -> 486 bytes doc/en/common/x11-license.html | 45 + doc/en/common/xml.dcl | 179 + doc/en/dirbrowser.png | Bin 0 -> 8127 bytes doc/en/dirmergebig.png | Bin 0 -> 30843 bytes doc/en/index.docbook | 2126 +++++++++ doc/en/iteminfo.png | Bin 0 -> 5506 bytes doc/en/kdiff3.1 | 121 + doc/en/letter_by_letter.png | Bin 0 -> 1978 bytes doc/en/merge_current.png | Bin 0 -> 185 bytes doc/en/new.png | Bin 0 -> 255 bytes doc/en/open_dialog.png | Bin 0 -> 5415 bytes doc/en/screenshot_diff.png | Bin 0 -> 33591 bytes doc/en/screenshot_merge.png | Bin 0 -> 10424 bytes doc/en/triple_diff.png | Bin 0 -> 2427 bytes doc/en/white_space.png | Bin 0 -> 1924 bytes doc/es/CMakeLists.txt | 1 + doc/es/index.docbook | 2965 +++++++++++++ doc/et/CMakeLists.txt | 1 + doc/et/index.docbook | 2964 +++++++++++++ doc/fr/CMakeLists.txt | 1 + doc/fr/index.docbook | 2320 ++++++++++ doc/it/CMakeLists.txt | 1 + doc/it/index.docbook | 3950 +++++++++++++++++ doc/nl/CMakeLists.txt | 1 + doc/nl/index.docbook | 2407 ++++++++++ doc/pt/CMakeLists.txt | 1 + doc/pt/index.docbook | 3004 +++++++++++++ doc/sv/CMakeLists.txt | 1 + doc/sv/index.docbook | 2967 +++++++++++++ doc/update_doc_dir | 67 + kdiff3.spec | 64 + kdiff3fileitemactionplugin/CMakeLists.txt | 4 + .../kdiff3fileitemaction.cpp | 296 ++ .../kdiff3fileitemaction.desktop | 68 + .../kdiff3fileitemaction.h | 55 + kdiff3plugin-QT4/CMakeLists.txt | 15 + kdiff3plugin-QT4/Messages.sh | 2 + kdiff3plugin-QT4/kdiff3_plugin.desktop | 43 + kdiff3plugin-QT4/kdiff3plugin.cpp | 281 ++ kdiff3plugin-QT4/kdiff3plugin.desktop | 45 + kdiff3plugin-QT4/kdiff3plugin.h | 55 + po/CMakeLists.txt | 56 + po/CMakeLists_xx.txt | 2 + po/README | 142 + po/ar/CMakeLists.txt | 2 + po/ar/kdiff3.po | 2964 +++++++++++++ po/bg/CMakeLists.txt | 2 + po/bg/kdiff3.po | 3206 +++++++++++++ po/br/CMakeLists.txt | 2 + po/br/kdiff3.po | 3016 +++++++++++++ po/bs/CMakeLists.txt | 2 + po/bs/kdiff3.po | 3239 ++++++++++++++ po/bs/kdiff3fileitemactionplugin.po | 86 + po/bs/kdiff3plugin.po | 86 + po/ca/CMakeLists.txt | 2 + po/ca/kdiff3.po | 3228 ++++++++++++++ po/ca/kdiff3fileitemactionplugin.po | 98 + po/ca/kdiff3plugin.po | 99 + po/ca@valencia/CMakeLists.txt | 2 + po/ca@valencia/kdiff3.po | 3233 ++++++++++++++ po/ca@valencia/kdiff3plugin.po | 101 + po/create_qm_files | 50 + po/cs/CMakeLists.txt | 2 + po/cs/kdiff3.po | 3174 +++++++++++++ po/cs/kdiff3fileitemactionplugin.po | 85 + po/cs/kdiff3plugin.po | 84 + po/cy/CMakeLists.txt | 2 + po/cy/kdiff3.po | 2991 +++++++++++++ po/da/CMakeLists.txt | 2 + po/da/kdiff3.po | 3208 +++++++++++++ po/da/kdiff3fileitemactionplugin.po | 97 + po/da/kdiff3plugin.po | 97 + po/de/CMakeLists.txt | 2 + po/de/kdiff3.po | 3293 ++++++++++++++ po/de/kdiff3fileitemactionplugin.po | 85 + po/de/kdiff3plugin.po | 100 + po/el/CMakeLists.txt | 2 + po/el/kdiff3.po | 3248 ++++++++++++++ po/el/kdiff3fileitemactionplugin.po | 99 + po/el/kdiff3plugin.po | 98 + po/en_GB/CMakeLists.txt | 2 + po/en_GB/kdiff3.po | 3272 ++++++++++++++ po/en_GB/kdiff3plugin.po | 99 + po/eo/CMakeLists.txt | 2 + po/eo/kdiff3.po | 2918 ++++++++++++ po/eo/kdiff3plugin.po | 84 + po/es/CMakeLists.txt | 2 + po/es/kdiff3.po | 3258 ++++++++++++++ po/es/kdiff3fileitemactionplugin.po | 89 + po/es/kdiff3plugin.po | 101 + po/et/CMakeLists.txt | 2 + po/et/kdiff3.po | 3209 +++++++++++++ po/et/kdiff3fileitemactionplugin.po | 97 + po/et/kdiff3plugin.po | 98 + po/fr/CMakeLists.txt | 2 + po/fr/kdiff3.po | 3282 ++++++++++++++ po/fr/kdiff3fileitemactionplugin.po | 102 + po/fr/kdiff3plugin.po | 101 + po/ga/CMakeLists.txt | 2 + po/ga/kdiff3.po | 2927 ++++++++++++ po/ga/kdiff3plugin.po | 85 + po/gl/CMakeLists.txt | 2 + po/gl/kdiff3.po | 3291 ++++++++++++++ po/gl/kdiff3plugin.po | 115 + po/hi/CMakeLists.txt | 2 + po/hi/kdiff3.po | 3105 +++++++++++++ po/hne/CMakeLists.txt | 2 + po/hne/kdiff3.po | 3054 +++++++++++++ po/hr/CMakeLists.txt | 2 + po/hr/kdiff3.po | 2916 ++++++++++++ po/hr/kdiff3plugin.po | 88 + po/hu/CMakeLists.txt | 2 + po/hu/kdiff3.po | 3384 ++++++++++++++ po/hu/kdiff3plugin.po | 100 + po/is/CMakeLists.txt | 2 + po/is/kdiff3.po | 3019 +++++++++++++ po/is/kdiff3plugin.po | 90 + po/it/CMakeLists.txt | 2 + po/it/kdiff3.po | 3242 ++++++++++++++ po/it/kdiff3fileitemactionplugin.po | 97 + po/it/kdiff3plugin.po | 95 + po/ja/CMakeLists.txt | 2 + po/ja/kdiff3.po | 3159 +++++++++++++ po/ja/kdiff3fileitemactionplugin.po | 82 + po/ja/kdiff3plugin.po | 82 + po/ka/CMakeLists.txt | 2 + po/ka/kdiff3.po | 3280 ++++++++++++++ po/kdiff3.pot | 2811 ++++++++++++ po/kdiff3plugin.pot | 80 + po/lt/CMakeLists.txt | 2 + po/lt/kdiff3.po | 3022 +++++++++++++ po/lt/kdiff3plugin.po | 85 + po/mai/CMakeLists.txt | 2 + po/mai/kdiff3.po | 2919 ++++++++++++ po/ml/CMakeLists.txt | 2 + po/ml/kdiff3.po | 3031 +++++++++++++ po/ml/kdiff3plugin.po | 107 + po/nb/CMakeLists.txt | 2 + po/nb/kdiff3.po | 3162 +++++++++++++ po/nb/kdiff3fileitemactionplugin.po | 99 + po/nb/kdiff3plugin.po | 99 + po/nds/CMakeLists.txt | 2 + po/nds/kdiff3.po | 3221 ++++++++++++++ po/nds/kdiff3fileitemactionplugin.po | 86 + po/nds/kdiff3plugin.po | 99 + po/nl/CMakeLists.txt | 2 + po/nl/kdiff3.po | 3244 ++++++++++++++ po/nl/kdiff3fileitemactionplugin.po | 100 + po/nl/kdiff3plugin.po | 101 + po/nn/CMakeLists.txt | 2 + po/nn/kdiff3.po | 2913 ++++++++++++ po/nn/kdiff3plugin.po | 90 + po/pl/CMakeLists.txt | 2 + po/pl/kdiff3.po | 3241 ++++++++++++++ po/pl/kdiff3fileitemactionplugin.po | 100 + po/pl/kdiff3plugin.po | 102 + po/pt/CMakeLists.txt | 2 + po/pt/kdiff3.po | 3229 ++++++++++++++ po/pt/kdiff3fileitemactionplugin.po | 94 + po/pt/kdiff3plugin.po | 100 + po/pt_BR/CMakeLists.txt | 2 + po/pt_BR/kdiff3.po | 3228 ++++++++++++++ po/pt_BR/kdiff3fileitemactionplugin.po | 100 + po/pt_BR/kdiff3plugin.po | 100 + po/ro/CMakeLists.txt | 2 + po/ro/kdiff3.po | 3001 +++++++++++++ po/ro/kdiff3plugin.po | 91 + po/ru/CMakeLists.txt | 2 + po/ru/kdiff3.po | 3279 ++++++++++++++ po/ru/kdiff3fileitemactionplugin.po | 102 + po/ru/kdiff3plugin.po | 102 + po/rw/CMakeLists.txt | 2 + po/rw/kdiff3.po | 3556 +++++++++++++++ po/sk/CMakeLists.txt | 2 + po/sk/kdiff3.po | 2911 ++++++++++++ po/sk/kdiff3fileitemactionplugin.po | 83 + po/sk/kdiff3plugin.po | 83 + po/sv/CMakeLists.txt | 2 + po/sv/kdiff3.po | 3191 +++++++++++++ po/sv/kdiff3fileitemactionplugin.po | 97 + po/sv/kdiff3plugin.po | 98 + po/ta/CMakeLists.txt | 2 + po/ta/kdiff3.po | 3327 ++++++++++++++ po/tg/CMakeLists.txt | 2 + po/tg/kdiff3.po | 3156 +++++++++++++ po/tr/CMakeLists.txt | 2 + po/tr/kdiff3.po | 3093 +++++++++++++ po/tr/kdiff3plugin.po | 101 + po/ug/CMakeLists.txt | 2 + po/ug/kdiff3.po | 2913 ++++++++++++ po/ug/kdiff3plugin.po | 85 + po/uk/CMakeLists.txt | 2 + po/uk/kdiff3.po | 3206 +++++++++++++ po/uk/kdiff3fileitemactionplugin.po | 98 + po/uk/kdiff3plugin.po | 99 + po/update_po_dir | 119 + po/zh_CN/CMakeLists.txt | 2 + po/zh_CN/kdiff3.po | 3179 +++++++++++++ po/zh_CN/kdiff3plugin.po | 94 + po/zh_TW/CMakeLists.txt | 2 + po/zh_TW/kdiff3.po | 2940 ++++++++++++ po/zh_TW/kdiff3fileitemactionplugin.po | 95 + po/zh_TW/kdiff3plugin.po | 96 + src-QT4/CMakeLists.txt | 58 + src-QT4/ccInstHelper.cpp | 332 ++ src-QT4/common.cpp | 349 ++ src-QT4/common.h | 134 + src-QT4/diff.cpp | 2335 ++++++++++ src-QT4/diff.h | 471 ++ src-QT4/difftextwindow.cpp | 2144 +++++++++ src-QT4/difftextwindow.h | 166 + src-QT4/directorymergewindow.cpp | 3500 +++++++++++++++ src-QT4/directorymergewindow.h | 187 + src-QT4/fileaccess.cpp | 1819 ++++++++ src-QT4/fileaccess.h | 186 + src-QT4/gnudiff_analyze.cpp | 869 ++++ src-QT4/gnudiff_diff.h | 360 ++ src-QT4/gnudiff_io.cpp | 558 +++ src-QT4/gnudiff_system.h | 121 + src-QT4/gnudiff_xmalloc.cpp | 86 + src-QT4/guiutils.h | 130 + src-QT4/hi16-app-kdiff3.png | Bin 0 -> 180 bytes src-QT4/hi32-app-kdiff3.png | Bin 0 -> 232 bytes src-QT4/kdiff3.cpp | 1089 +++++ src-QT4/kdiff3.desktop | 124 + src-QT4/kdiff3.h | 423 ++ src-QT4/kdiff3.ico | Bin 0 -> 1078 bytes src-QT4/kdiff3.lsm | 16 + src-QT4/kdiff3.pro | 77 + src-QT4/kdiff3_os2.ico | Bin 0 -> 1264 bytes src-QT4/kdiff3_part.cpp | 319 ++ src-QT4/kdiff3_part.h | 99 + src-QT4/kdiff3_part.rc | 24 + src-QT4/kdiff3_shell.cpp | 174 + src-QT4/kdiff3_shell.h | 72 + src-QT4/kdiff3_shell.rc | 128 + src-QT4/kdiff3os2.rc | 1 + src-QT4/kdiff3part.desktop | 42 + src-QT4/kdiff3win.rc | 1 + src-QT4/kreplacements/README | 30 + src-QT4/kreplacements/ShellContextMenu.cpp | 504 +++ src-QT4/kreplacements/ShellContextMenu.h | 60 + src-QT4/kreplacements/config-kdiff3.h | 2 + src-QT4/kreplacements/kaboutdata.h | 2 + src-QT4/kreplacements/kaccel.h | 2 + src-QT4/kreplacements/kaction.h | 2 + src-QT4/kreplacements/kactioncollection.h | 2 + src-QT4/kreplacements/kapplication.h | 2 + src-QT4/kreplacements/kcmdlineargs.h | 2 + src-QT4/kreplacements/kcolorbutton.h | 2 + src-QT4/kreplacements/kcomponentdata.h | 2 + src-QT4/kreplacements/kconfig.h | 2 + src-QT4/kreplacements/kdialogbase.h | 2 + src-QT4/kreplacements/kedittoolbar.h | 2 + src-QT4/kreplacements/kfiledialog.h | 2 + src-QT4/kreplacements/kfontdialog.h | 2 + src-QT4/kreplacements/kglobal.h | 2 + src-QT4/kreplacements/kiconloader.h | 2 + src-QT4/kreplacements/kinstance.h | 2 + src-QT4/kreplacements/kio/copyjob.h | 2 + src-QT4/kreplacements/kio/global.h | 2 + src-QT4/kreplacements/kio/job.h | 2 + src-QT4/kreplacements/kio/jobclasses.h | 2 + src-QT4/kreplacements/kio/jobuidelegate.h | 2 + src-QT4/kreplacements/klibloader.h | 2 + src-QT4/kreplacements/klocale.h | 2 + src-QT4/kreplacements/kmainwindow.h | 2 + src-QT4/kreplacements/kmenu.h | 2 + src-QT4/kreplacements/kmenubar.h | 2 + src-QT4/kreplacements/kmessagebox.h | 2 + src-QT4/kreplacements/konq_popupmenu.h | 2 + src-QT4/kreplacements/kpagedialog.h | 2 + src-QT4/kreplacements/kparts/factory.h | 2 + src-QT4/kreplacements/kparts/mainwindow.h | 2 + src-QT4/kreplacements/kparts/part.h | 2 + src-QT4/kreplacements/kprinter.h | 2 + src-QT4/kreplacements/kprogress.h | 2 + src-QT4/kreplacements/kprogressdialog.h | 2 + src-QT4/kreplacements/kreplacements.cpp | 1230 +++++ src-QT4/kreplacements/kreplacements.h | 632 +++ src-QT4/kreplacements/kshortcutsdialog.h | 2 + src-QT4/kreplacements/kstandardaction.h | 2 + src-QT4/kreplacements/kstandarddirs.h | 2 + src-QT4/kreplacements/kstatusbar.h | 2 + src-QT4/kreplacements/ktemporaryfile.h | 2 + src-QT4/kreplacements/ktoggleaction.h | 2 + src-QT4/kreplacements/ktoolbar.h | 2 + src-QT4/kreplacements/kunload.h | 2 + src-QT4/kreplacements/kurl.h | 2 + src-QT4/lo16-app-kdiff3.png | Bin 0 -> 180 bytes src-QT4/lo32-app-kdiff3.png | Bin 0 -> 232 bytes src-QT4/main.cpp | 278 ++ src-QT4/merger.cpp | 85 + src-QT4/merger.h | 61 + src-QT4/mergeresultwindow.cpp | 3472 +++++++++++++++ src-QT4/mergeresultwindow.h | 462 ++ src-QT4/optiondialog.cpp | 1901 ++++++++ src-QT4/optiondialog.h | 115 + src-QT4/options.h | 156 + src-QT4/pdiff.cpp | 2456 ++++++++++ src-QT4/progress.cpp | 545 +++ src-QT4/progress.h | 139 + src-QT4/smalldialogs.cpp | 601 +++ src-QT4/smalldialogs.h | 118 + src-QT4/stable.cpp | 1 + src-QT4/stable.h | 11 + src-QT4/version.h | 2 + src-QT4/xpm/autoadvance.xpm | 25 + src-QT4/xpm/currentpos.xpm | 22 + src-QT4/xpm/down1arrow.xpm | 25 + src-QT4/xpm/down2arrow.xpm | 25 + src-QT4/xpm/downend.xpm | 22 + src-QT4/xpm/file.xpm | 24 + src-QT4/xpm/filenew.xpm | 22 + src-QT4/xpm/fileopen.xpm | 22 + src-QT4/xpm/fileprint.xpm | 24 + src-QT4/xpm/filesave.xpm | 21 + src-QT4/xpm/folder.xpm | 24 + src-QT4/xpm/iconA.xpm | 22 + src-QT4/xpm/iconB.xpm | 22 + src-QT4/xpm/iconC.xpm | 22 + src-QT4/xpm/link_arrow.xpm | 24 + src-QT4/xpm/nextunsolved.xpm | 23 + src-QT4/xpm/prevunsolved.xpm | 23 + src-QT4/xpm/reload.xpm | 74 + src-QT4/xpm/showequalfiles.xpm | 23 + src-QT4/xpm/showfilesonlyina.xpm | 23 + src-QT4/xpm/showfilesonlyinb.xpm | 23 + src-QT4/xpm/showfilesonlyinc.xpm | 22 + src-QT4/xpm/showlinenumbers.xpm | 21 + src-QT4/xpm/showwhitespace.xpm | 22 + src-QT4/xpm/showwhitespacechars.xpm | 21 + src-QT4/xpm/startmerge.xpm | 25 + src-QT4/xpm/up1arrow.xpm | 22 + src-QT4/xpm/up2arrow.xpm | 25 + src-QT4/xpm/upend.xpm | 22 + test/alignmenttest.cpp | 281 ++ test/fakefileaccess.cpp | 107 + test/fakekdiff3_part.cpp | 7 + test/fakeoptiondialog.cpp | 3 + test/fakeprogressproxy.cpp | 76 + test/testdata/1_simpletest_base.txt | 2 + test/testdata/1_simpletest_contrib1.txt | 6 + test/testdata/1_simpletest_contrib2.txt | 5 + .../testdata/1_simpletest_expected_result.txt | 7 + test/testdata/README | 43 + test/tests.pro | 29 + 426 files changed, 227826 insertions(+) create mode 100644 AUTHORS create mode 100644 CMakeLists.txt create mode 100644 COPYING create mode 100644 ChangeLog create mode 100644 Doxyfile create mode 100644 INSTALL create mode 100644 NEWS create mode 100644 README create mode 100644 TODO create mode 100644 cmake/modules/FindLibKonq.cmake create mode 100644 config-kdiff3.h.cmake create mode 100755 configure create mode 100644 diff_ext_for_kdiff3/LICENSE create mode 100644 diff_ext_for_kdiff3/Makefile create mode 100755 diff_ext_for_kdiff3/Makefile_64bit 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 100644 diff_ext_for_kdiff3/diff_ext.cpp create mode 100644 diff_ext_for_kdiff3/diff_ext.h create mode 100644 diff_ext_for_kdiff3/diff_ext.pot create mode 100644 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.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/CMakeLists.txt create mode 100644 doc/README create mode 100644 doc/createpdfdoc create mode 100644 doc/da/CMakeLists.txt create mode 100644 doc/da/index.docbook create mode 100644 doc/de/CMakeLists.txt create mode 100644 doc/de/index.docbook create mode 100644 doc/en/CMakeLists.txt create mode 100644 doc/en/common/1.png create mode 100644 doc/en/common/10.png create mode 100644 doc/en/common/2.png create mode 100644 doc/en/common/3.png create mode 100644 doc/en/common/4.png create mode 100644 doc/en/common/5.png create mode 100644 doc/en/common/6.png create mode 100644 doc/en/common/7.png create mode 100644 doc/en/common/8.png create mode 100644 doc/en/common/9.png create mode 100644 doc/en/common/artistic-license.html create mode 100644 doc/en/common/block_title_bottom.png create mode 100644 doc/en/common/block_title_mid.png create mode 100644 doc/en/common/block_title_top.png 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/bsd-license.html create mode 100644 doc/en/common/doxygen.css create mode 100644 doc/en/common/favicon.ico create mode 100644 doc/en/common/fdl-license 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 create mode 100644 doc/en/common/gpl-license.html create mode 100644 doc/en/common/header.html create mode 100644 doc/en/common/kde-default.css create mode 100644 doc/en/common/kde_logo_bg.png create mode 100644 doc/en/common/lgpl-license create mode 100644 doc/en/common/lgpl-license.html create mode 100644 doc/en/common/mainfooter.html create mode 100644 doc/en/common/mainheader.html create mode 100644 doc/en/common/qpl-license.html create mode 100644 doc/en/common/tabs.css create mode 100644 doc/en/common/top-kde.jpg create mode 100644 doc/en/common/top-left.jpg 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.jpg create mode 100644 doc/en/common/top-right.png create mode 100644 doc/en/common/top.jpg create mode 100644 doc/en/common/x11-license.html create mode 100644 doc/en/common/xml.dcl create mode 100644 doc/en/dirbrowser.png create mode 100644 doc/en/dirmergebig.png create mode 100644 doc/en/index.docbook create mode 100644 doc/en/iteminfo.png create mode 100644 doc/en/kdiff3.1 create mode 100644 doc/en/letter_by_letter.png create mode 100644 doc/en/merge_current.png create mode 100644 doc/en/new.png create mode 100644 doc/en/open_dialog.png create mode 100644 doc/en/screenshot_diff.png create mode 100644 doc/en/screenshot_merge.png create mode 100644 doc/en/triple_diff.png create mode 100644 doc/en/white_space.png create mode 100644 doc/es/CMakeLists.txt create mode 100644 doc/es/index.docbook create mode 100644 doc/et/CMakeLists.txt create mode 100644 doc/et/index.docbook create mode 100644 doc/fr/CMakeLists.txt create mode 100644 doc/fr/index.docbook create mode 100644 doc/it/CMakeLists.txt create mode 100644 doc/it/index.docbook create mode 100644 doc/nl/CMakeLists.txt create mode 100644 doc/nl/index.docbook create mode 100644 doc/pt/CMakeLists.txt create mode 100644 doc/pt/index.docbook create mode 100644 doc/sv/CMakeLists.txt create mode 100644 doc/sv/index.docbook create mode 100644 doc/update_doc_dir create mode 100644 kdiff3.spec create mode 100644 kdiff3fileitemactionplugin/CMakeLists.txt create mode 100644 kdiff3fileitemactionplugin/kdiff3fileitemaction.cpp create mode 100644 kdiff3fileitemactionplugin/kdiff3fileitemaction.desktop create mode 100644 kdiff3fileitemactionplugin/kdiff3fileitemaction.h create mode 100644 kdiff3plugin-QT4/CMakeLists.txt create mode 100644 kdiff3plugin-QT4/Messages.sh create mode 100644 kdiff3plugin-QT4/kdiff3_plugin.desktop create mode 100644 kdiff3plugin-QT4/kdiff3plugin.cpp create mode 100644 kdiff3plugin-QT4/kdiff3plugin.desktop create mode 100644 kdiff3plugin-QT4/kdiff3plugin.h create mode 100644 po/CMakeLists.txt create mode 100644 po/CMakeLists_xx.txt create mode 100644 po/README create mode 100644 po/ar/CMakeLists.txt create mode 100644 po/ar/kdiff3.po create mode 100644 po/bg/CMakeLists.txt create mode 100644 po/bg/kdiff3.po create mode 100644 po/br/CMakeLists.txt create mode 100644 po/br/kdiff3.po create mode 100644 po/bs/CMakeLists.txt create mode 100644 po/bs/kdiff3.po create mode 100644 po/bs/kdiff3fileitemactionplugin.po create mode 100644 po/bs/kdiff3plugin.po create mode 100644 po/ca/CMakeLists.txt create mode 100644 po/ca/kdiff3.po create mode 100644 po/ca/kdiff3fileitemactionplugin.po create mode 100644 po/ca/kdiff3plugin.po create mode 100644 po/ca@valencia/CMakeLists.txt create mode 100644 po/ca@valencia/kdiff3.po create mode 100644 po/ca@valencia/kdiff3plugin.po create mode 100644 po/create_qm_files create mode 100644 po/cs/CMakeLists.txt create mode 100644 po/cs/kdiff3.po create mode 100644 po/cs/kdiff3fileitemactionplugin.po create mode 100644 po/cs/kdiff3plugin.po create mode 100644 po/cy/CMakeLists.txt create mode 100644 po/cy/kdiff3.po create mode 100644 po/da/CMakeLists.txt create mode 100644 po/da/kdiff3.po create mode 100644 po/da/kdiff3fileitemactionplugin.po create mode 100644 po/da/kdiff3plugin.po create mode 100644 po/de/CMakeLists.txt create mode 100644 po/de/kdiff3.po create mode 100644 po/de/kdiff3fileitemactionplugin.po create mode 100644 po/de/kdiff3plugin.po create mode 100644 po/el/CMakeLists.txt create mode 100644 po/el/kdiff3.po create mode 100644 po/el/kdiff3fileitemactionplugin.po create mode 100644 po/el/kdiff3plugin.po create mode 100644 po/en_GB/CMakeLists.txt create mode 100644 po/en_GB/kdiff3.po create mode 100644 po/en_GB/kdiff3plugin.po create mode 100644 po/eo/CMakeLists.txt create mode 100644 po/eo/kdiff3.po create mode 100644 po/eo/kdiff3plugin.po create mode 100644 po/es/CMakeLists.txt create mode 100644 po/es/kdiff3.po create mode 100644 po/es/kdiff3fileitemactionplugin.po create mode 100644 po/es/kdiff3plugin.po create mode 100644 po/et/CMakeLists.txt create mode 100644 po/et/kdiff3.po create mode 100644 po/et/kdiff3fileitemactionplugin.po create mode 100644 po/et/kdiff3plugin.po create mode 100644 po/fr/CMakeLists.txt create mode 100644 po/fr/kdiff3.po create mode 100644 po/fr/kdiff3fileitemactionplugin.po create mode 100644 po/fr/kdiff3plugin.po create mode 100644 po/ga/CMakeLists.txt create mode 100644 po/ga/kdiff3.po create mode 100644 po/ga/kdiff3plugin.po create mode 100644 po/gl/CMakeLists.txt create mode 100644 po/gl/kdiff3.po create mode 100644 po/gl/kdiff3plugin.po create mode 100644 po/hi/CMakeLists.txt create mode 100644 po/hi/kdiff3.po create mode 100644 po/hne/CMakeLists.txt create mode 100644 po/hne/kdiff3.po create mode 100644 po/hr/CMakeLists.txt create mode 100644 po/hr/kdiff3.po create mode 100644 po/hr/kdiff3plugin.po create mode 100644 po/hu/CMakeLists.txt create mode 100644 po/hu/kdiff3.po create mode 100644 po/hu/kdiff3plugin.po create mode 100644 po/is/CMakeLists.txt create mode 100644 po/is/kdiff3.po create mode 100644 po/is/kdiff3plugin.po create mode 100644 po/it/CMakeLists.txt create mode 100644 po/it/kdiff3.po create mode 100644 po/it/kdiff3fileitemactionplugin.po create mode 100644 po/it/kdiff3plugin.po create mode 100644 po/ja/CMakeLists.txt create mode 100644 po/ja/kdiff3.po create mode 100644 po/ja/kdiff3fileitemactionplugin.po create mode 100644 po/ja/kdiff3plugin.po create mode 100644 po/ka/CMakeLists.txt create mode 100644 po/ka/kdiff3.po create mode 100644 po/kdiff3.pot create mode 100644 po/kdiff3plugin.pot create mode 100644 po/lt/CMakeLists.txt create mode 100644 po/lt/kdiff3.po create mode 100644 po/lt/kdiff3plugin.po create mode 100644 po/mai/CMakeLists.txt create mode 100644 po/mai/kdiff3.po create mode 100644 po/ml/CMakeLists.txt create mode 100644 po/ml/kdiff3.po create mode 100644 po/ml/kdiff3plugin.po create mode 100644 po/nb/CMakeLists.txt create mode 100644 po/nb/kdiff3.po create mode 100644 po/nb/kdiff3fileitemactionplugin.po create mode 100644 po/nb/kdiff3plugin.po create mode 100644 po/nds/CMakeLists.txt create mode 100644 po/nds/kdiff3.po create mode 100644 po/nds/kdiff3fileitemactionplugin.po create mode 100644 po/nds/kdiff3plugin.po create mode 100644 po/nl/CMakeLists.txt create mode 100644 po/nl/kdiff3.po create mode 100644 po/nl/kdiff3fileitemactionplugin.po create mode 100644 po/nl/kdiff3plugin.po create mode 100644 po/nn/CMakeLists.txt create mode 100644 po/nn/kdiff3.po create mode 100644 po/nn/kdiff3plugin.po create mode 100644 po/pl/CMakeLists.txt create mode 100644 po/pl/kdiff3.po create mode 100644 po/pl/kdiff3fileitemactionplugin.po create mode 100644 po/pl/kdiff3plugin.po create mode 100644 po/pt/CMakeLists.txt create mode 100644 po/pt/kdiff3.po create mode 100644 po/pt/kdiff3fileitemactionplugin.po create mode 100644 po/pt/kdiff3plugin.po create mode 100644 po/pt_BR/CMakeLists.txt create mode 100644 po/pt_BR/kdiff3.po create mode 100644 po/pt_BR/kdiff3fileitemactionplugin.po create mode 100644 po/pt_BR/kdiff3plugin.po create mode 100644 po/ro/CMakeLists.txt create mode 100644 po/ro/kdiff3.po create mode 100644 po/ro/kdiff3plugin.po create mode 100644 po/ru/CMakeLists.txt create mode 100644 po/ru/kdiff3.po create mode 100644 po/ru/kdiff3fileitemactionplugin.po create mode 100644 po/ru/kdiff3plugin.po create mode 100644 po/rw/CMakeLists.txt create mode 100644 po/rw/kdiff3.po create mode 100644 po/sk/CMakeLists.txt create mode 100644 po/sk/kdiff3.po create mode 100644 po/sk/kdiff3fileitemactionplugin.po create mode 100644 po/sk/kdiff3plugin.po create mode 100644 po/sv/CMakeLists.txt create mode 100644 po/sv/kdiff3.po create mode 100644 po/sv/kdiff3fileitemactionplugin.po create mode 100644 po/sv/kdiff3plugin.po create mode 100644 po/ta/CMakeLists.txt create mode 100644 po/ta/kdiff3.po create mode 100644 po/tg/CMakeLists.txt create mode 100644 po/tg/kdiff3.po create mode 100644 po/tr/CMakeLists.txt create mode 100644 po/tr/kdiff3.po create mode 100644 po/tr/kdiff3plugin.po create mode 100644 po/ug/CMakeLists.txt create mode 100644 po/ug/kdiff3.po create mode 100644 po/ug/kdiff3plugin.po create mode 100644 po/uk/CMakeLists.txt create mode 100644 po/uk/kdiff3.po create mode 100644 po/uk/kdiff3fileitemactionplugin.po create mode 100644 po/uk/kdiff3plugin.po create mode 100644 po/update_po_dir create mode 100644 po/zh_CN/CMakeLists.txt create mode 100644 po/zh_CN/kdiff3.po create mode 100644 po/zh_CN/kdiff3plugin.po create mode 100644 po/zh_TW/CMakeLists.txt create mode 100644 po/zh_TW/kdiff3.po create mode 100644 po/zh_TW/kdiff3fileitemactionplugin.po create mode 100644 po/zh_TW/kdiff3plugin.po create mode 100644 src-QT4/CMakeLists.txt create mode 100644 src-QT4/ccInstHelper.cpp create mode 100644 src-QT4/common.cpp create mode 100644 src-QT4/common.h create mode 100644 src-QT4/diff.cpp create mode 100644 src-QT4/diff.h create mode 100644 src-QT4/difftextwindow.cpp create mode 100644 src-QT4/difftextwindow.h create mode 100644 src-QT4/directorymergewindow.cpp create mode 100644 src-QT4/directorymergewindow.h create mode 100644 src-QT4/fileaccess.cpp create mode 100644 src-QT4/fileaccess.h create mode 100644 src-QT4/gnudiff_analyze.cpp create mode 100644 src-QT4/gnudiff_diff.h create mode 100644 src-QT4/gnudiff_io.cpp create mode 100644 src-QT4/gnudiff_system.h create mode 100644 src-QT4/gnudiff_xmalloc.cpp create mode 100644 src-QT4/guiutils.h create mode 100644 src-QT4/hi16-app-kdiff3.png create mode 100644 src-QT4/hi32-app-kdiff3.png create mode 100644 src-QT4/kdiff3.cpp create mode 100644 src-QT4/kdiff3.desktop create mode 100644 src-QT4/kdiff3.h create mode 100644 src-QT4/kdiff3.ico create mode 100644 src-QT4/kdiff3.lsm create mode 100644 src-QT4/kdiff3.pro create mode 100644 src-QT4/kdiff3_os2.ico create mode 100644 src-QT4/kdiff3_part.cpp create mode 100644 src-QT4/kdiff3_part.h create mode 100644 src-QT4/kdiff3_part.rc create mode 100644 src-QT4/kdiff3_shell.cpp create mode 100644 src-QT4/kdiff3_shell.h create mode 100644 src-QT4/kdiff3_shell.rc create mode 100644 src-QT4/kdiff3os2.rc create mode 100644 src-QT4/kdiff3part.desktop create mode 100755 src-QT4/kdiff3win.rc create mode 100644 src-QT4/kreplacements/README create mode 100644 src-QT4/kreplacements/ShellContextMenu.cpp create mode 100644 src-QT4/kreplacements/ShellContextMenu.h create mode 100644 src-QT4/kreplacements/config-kdiff3.h create mode 100644 src-QT4/kreplacements/kaboutdata.h create mode 100644 src-QT4/kreplacements/kaccel.h create mode 100644 src-QT4/kreplacements/kaction.h create mode 100644 src-QT4/kreplacements/kactioncollection.h create mode 100644 src-QT4/kreplacements/kapplication.h create mode 100644 src-QT4/kreplacements/kcmdlineargs.h create mode 100644 src-QT4/kreplacements/kcolorbutton.h create mode 100644 src-QT4/kreplacements/kcomponentdata.h create mode 100644 src-QT4/kreplacements/kconfig.h create mode 100644 src-QT4/kreplacements/kdialogbase.h create mode 100644 src-QT4/kreplacements/kedittoolbar.h create mode 100644 src-QT4/kreplacements/kfiledialog.h create mode 100644 src-QT4/kreplacements/kfontdialog.h create mode 100644 src-QT4/kreplacements/kglobal.h create mode 100644 src-QT4/kreplacements/kiconloader.h create mode 100644 src-QT4/kreplacements/kinstance.h create mode 100644 src-QT4/kreplacements/kio/copyjob.h create mode 100644 src-QT4/kreplacements/kio/global.h create mode 100644 src-QT4/kreplacements/kio/job.h create mode 100644 src-QT4/kreplacements/kio/jobclasses.h create mode 100644 src-QT4/kreplacements/kio/jobuidelegate.h create mode 100644 src-QT4/kreplacements/klibloader.h create mode 100644 src-QT4/kreplacements/klocale.h create mode 100644 src-QT4/kreplacements/kmainwindow.h create mode 100644 src-QT4/kreplacements/kmenu.h create mode 100644 src-QT4/kreplacements/kmenubar.h create mode 100644 src-QT4/kreplacements/kmessagebox.h create mode 100644 src-QT4/kreplacements/konq_popupmenu.h create mode 100644 src-QT4/kreplacements/kpagedialog.h create mode 100644 src-QT4/kreplacements/kparts/factory.h create mode 100644 src-QT4/kreplacements/kparts/mainwindow.h create mode 100644 src-QT4/kreplacements/kparts/part.h create mode 100644 src-QT4/kreplacements/kprinter.h create mode 100644 src-QT4/kreplacements/kprogress.h create mode 100644 src-QT4/kreplacements/kprogressdialog.h create mode 100644 src-QT4/kreplacements/kreplacements.cpp create mode 100644 src-QT4/kreplacements/kreplacements.h create mode 100644 src-QT4/kreplacements/kshortcutsdialog.h create mode 100644 src-QT4/kreplacements/kstandardaction.h create mode 100644 src-QT4/kreplacements/kstandarddirs.h create mode 100644 src-QT4/kreplacements/kstatusbar.h create mode 100644 src-QT4/kreplacements/ktemporaryfile.h create mode 100644 src-QT4/kreplacements/ktoggleaction.h create mode 100644 src-QT4/kreplacements/ktoolbar.h create mode 100644 src-QT4/kreplacements/kunload.h create mode 100644 src-QT4/kreplacements/kurl.h create mode 100644 src-QT4/lo16-app-kdiff3.png create mode 100644 src-QT4/lo32-app-kdiff3.png create mode 100644 src-QT4/main.cpp create mode 100644 src-QT4/merger.cpp create mode 100644 src-QT4/merger.h create mode 100644 src-QT4/mergeresultwindow.cpp create mode 100644 src-QT4/mergeresultwindow.h create mode 100644 src-QT4/optiondialog.cpp create mode 100644 src-QT4/optiondialog.h create mode 100644 src-QT4/options.h create mode 100644 src-QT4/pdiff.cpp create mode 100644 src-QT4/progress.cpp create mode 100644 src-QT4/progress.h create mode 100644 src-QT4/smalldialogs.cpp create mode 100644 src-QT4/smalldialogs.h create mode 100644 src-QT4/stable.cpp create mode 100644 src-QT4/stable.h create mode 100644 src-QT4/version.h create mode 100644 src-QT4/xpm/autoadvance.xpm create mode 100644 src-QT4/xpm/currentpos.xpm create mode 100644 src-QT4/xpm/down1arrow.xpm create mode 100644 src-QT4/xpm/down2arrow.xpm create mode 100644 src-QT4/xpm/downend.xpm create mode 100644 src-QT4/xpm/file.xpm create mode 100644 src-QT4/xpm/filenew.xpm create mode 100644 src-QT4/xpm/fileopen.xpm create mode 100644 src-QT4/xpm/fileprint.xpm create mode 100644 src-QT4/xpm/filesave.xpm create mode 100644 src-QT4/xpm/folder.xpm create mode 100644 src-QT4/xpm/iconA.xpm create mode 100644 src-QT4/xpm/iconB.xpm create mode 100644 src-QT4/xpm/iconC.xpm create mode 100644 src-QT4/xpm/link_arrow.xpm create mode 100644 src-QT4/xpm/nextunsolved.xpm create mode 100644 src-QT4/xpm/prevunsolved.xpm create mode 100644 src-QT4/xpm/reload.xpm create mode 100644 src-QT4/xpm/showequalfiles.xpm create mode 100644 src-QT4/xpm/showfilesonlyina.xpm create mode 100644 src-QT4/xpm/showfilesonlyinb.xpm create mode 100644 src-QT4/xpm/showfilesonlyinc.xpm create mode 100644 src-QT4/xpm/showlinenumbers.xpm create mode 100644 src-QT4/xpm/showwhitespace.xpm create mode 100644 src-QT4/xpm/showwhitespacechars.xpm create mode 100644 src-QT4/xpm/startmerge.xpm create mode 100644 src-QT4/xpm/up1arrow.xpm create mode 100644 src-QT4/xpm/up2arrow.xpm create mode 100644 src-QT4/xpm/upend.xpm create mode 100644 test/alignmenttest.cpp create mode 100644 test/fakefileaccess.cpp create mode 100644 test/fakekdiff3_part.cpp create mode 100644 test/fakeoptiondialog.cpp create mode 100644 test/fakeprogressproxy.cpp create mode 100644 test/testdata/1_simpletest_base.txt create mode 100644 test/testdata/1_simpletest_contrib1.txt create mode 100644 test/testdata/1_simpletest_contrib2.txt create mode 100644 test/testdata/1_simpletest_expected_result.txt create mode 100644 test/testdata/README create mode 100644 test/tests.pro 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/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..0387420 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,53 @@ +cmake_minimum_required(VERSION 2.6) +project(kdiff3) + +find_package(KDE4 REQUIRED) +include (MacroLibrary) +SET(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules) + +add_definitions(${QT_DEFINITIONS} ${KDE4_DEFINITIONS}) + +include_directories( + ${KDE4_INCLUDE_DIR} + ${QT_INCLUDES} + ${CMAKE_CURRENT_BINARY_DIR} + ) + +link_directories( + ${KDE4_LIB_DIR} + ) + +configure_file(${CMAKE_CURRENT_SOURCE_DIR}/config-kdiff3.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/config-kdiff3.h ) + +add_subdirectory(src-QT4) +add_subdirectory(po) +add_subdirectory(doc) + + +find_file(KFILEITEMACTIONPLUGIN_FOUND kfileitemactionplugin.h PATHS ${KDE4_INCLUDE_DIR} NO_DEFAULT_PATH) +if(KFILEITEMACTIONPLUGIN_FOUND) + message(STATUS "") + message(STATUS "kfileitemactionplugin.h found........... YES") + message(STATUS " => kdiff3fileitemactionplugin (KDiff3 contextmenu plugin for Konqueror/Dolphin, KDE>4.6) will be built.") + message(STATUS "") + add_subdirectory(kdiff3fileitemactionplugin) +else(KFILEITEMACTIONPLUGIN_FOUND) + message(STATUS "") + message(STATUS "kfileitemactionplugin.h found........... NO") + message(STATUS " => kdiff3fileitemactionplugin (KDiff3 contextmenu plugin for Konqueror/Dolphin, KDE>4.6) will not be built.)") + message(STATUS "Trying fallback via libkonq (works with Konqueror only) ...") + MACRO_OPTIONAL_FIND_PACKAGE(LibKonq) + MACRO_BOOL_TO_01(LIBKONQ_FOUND HAVE_LIBKONQ) + if(LIBKONQ_FOUND) + message(STATUS "") + message(STATUS "libkonq module found........... YES") + message(STATUS " => kdiff3plugin (KDiff3 contextmenu plugin for Konqueror) will be built.") + message(STATUS "") + add_subdirectory(kdiff3plugin-QT4) + else(LIBKONQ_FOUND) + message(STATUS "") + message(STATUS "libkonq module found........... NO") + message(STATUS " => kdiff3plugin (KDiff3 contextmenu plugin for Konqueror) will not be built.)") + message(STATUS "") + endif(LIBKONQ_FOUND) +endif(KFILEITEMACTIONPLUGIN_FOUND) diff --git a/COPYING b/COPYING new file mode 100644 index 0000000..e7f1f85 --- /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 02111-1307 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Library General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Library General +Public License instead of this License. diff --git a/ChangeLog b/ChangeLog new file mode 100644 index 0000000..638cabc --- /dev/null +++ b/ChangeLog @@ -0,0 +1,561 @@ +Version 0.9.98 - 2014-07-04 +=========================== +- Text rendering now with QTextLayout fixes the following issues + - Correct handling for variable width fonts. + - Corrected display of highlighted text with Qt4.8.x on Ubuntu and Mac. + - Improved handling of texts with both right to left and left to right languages (mixed Arabic and western texts). + - Improved handling of Chinese and Japanese. + - Whitespace characters are now shown as dots for spaces and arrows for tabs, and not only in differences. + - Fixed symlink comparison (Qt4 symLinkTarget returns absolute paths) +- Text analysis for rendering with QTextLayout is interruptable and multithreaded. + (See progressbar and abort-button in statusbar) +- Fix for saving to relative path in KDE-environments. (Patch from Harald Sitter) +- Fixed bug in 0.9.97: Directory compare was always case sensitive. +- Fix for saving files on KDE with relative path specified via command line option -o. +- Fixed problem with KIO (nonlocal urls). +- Improved Mac support. +- Write --confighelp information to stdout instead of stderr. +- Directory Merge Window: Enabled state of "Delete A And B" now also depends on existence of source file A. +- Works now with Qt4 and Qt5 +- Progress dialog during printing. +- Workaround for bug in QSplitter::childEvent that broke QFileDialog::getSaveFileName + +Version 0.9.97 - 2012-08-10 +=========================== +- Memory usage optimized for comparison of large directories. (ca. 1/5 needed) +- On Windows use config file .kdiff3rc next to kdiff3.exe if exists. +- In overwiev for two way diff show if only one side contains text. +- Fix for Fedora by Neal Becker in src-QT4/kdiff3part.desktop. +- When word wrap is active toggling line numbers now recalculates the word wrap. +- Removed confusing "For compatibility ..." hint from option -qall +- Fixed mouse wheel problem. (Patch by David Hay) +- Change an encoding in diff text window via click on encoding label. (Patch by Alexey Kostromin) +- Fix for tab-key moving focus instead of adding a tab character in MergeResultWindow. +- Workaround for git on Cygwin that allows KDiff3 to find files in a Cygwin "/tmp" directory + when environment variable "CYGWIN_BIN" is set. (Patch by Nigel Stewart) +- Removed iostream dependency (Patch by Nigel Stewart) +- Regression test framework (by Maurice van der Pot) +- Documentation patch (by Burkard Lueck) +- Select text in Find dialog (by Eike Sauer) +- If text is selected in either input or output window use that in Find dialog. +- Added default directory anti patterns ".hg" and ".git" and file anti patterns ".rej" and ".bak" for better mercurial and git integration. +- Command line option --cs doesn't change the config value permanently anymore. +- On KDE: Not creating a KDiff3Part anymore. +- Windows (Vista or Win 7): Shell context menu in directory comparison view now again displays text. +- Windows 64 bit: Diff-Ext-for-KDiff3 context menu now installed as 32 bit and 64 bit versions to allow other 32 bit programs to use it too. +- Windows 64 bit specific installer. + +Version 0.9.96 - 2011-09-02 +=========================== +- KDiff3FileItemActionPlugin : Context menu that also works in dolphin (for KDE>=4.6) +- Parser for preprocessor commands. (Allows single apostrophs ') +- On Windows if the preprocessor command is "sed" try to use a "bin\sed.exe" next to the kdiff3.exe, if available. +- Warn if conversion errors appear (Invalid characters) +- Fix crash on A/B-overview (infinite recursion) +- Fix clearcase temp files not deleted problem on windows +- KDiff3 plugin: When launching KDiff3 konqueror isn't blocked anymore +- String corrections (Frederik Schwarzer) +- Fixed writing to KIO. +- OS2-Port (Patch by Silvan Scherrer) +- Fixed problem where destination directory would be renamed or deleted during copy operation. + Now if the destination directory exists only the files inside will be copied. +- In merge: Separate lines where the automatic choice would be the same but for different reasons. +- Fixed some problems with huge files in directory comparison mode (>2GB) (but direct comparison is still not possible) +- Fixed documentation compile errors with KDE>=4.5 +- Fixed white space merge default options +- Fixed regexp test tool. +- Exclude printing code if Qt was compiled without printing support. +- For Windows: Fixed handling of unicode characters in command line parameters. +- Improved "old mac" lineendstyle handling: Break lines. +- Detect encoding specified in xml header or html "meta" tag. + +Version 0.9.95 - 2009/03/03 +=========================== +- Show line end style for each file. +- Updated message translations. +- Fixed permissions when writing executable file. (Un*x only) +- Fixed IgnorableCmdLineOptions (important for SVNs '-u'-option) +- Directory merge: Error when either B or C is changed and the other is deleted. (User choice required.) +- Qt-only Un*x-version looks for translations in /usr/share/locale//LC_MESSAGES/kdiff3.qm + (for Debian, by Eike Sauer) +- New script: po/create_qm_files: To create and install translations for Qt-only version. + +Version 0.9.94 - 2009/01/17 +=========================== +- Fix for hidden text windows with --auto-flag. +- Fix for pasting clipboard truncated text if it contained characters that needed more than one byte in UTF-8 encoding. +- Fix for horizontal scrolling if word wrap is enabled. +- Directory tree: files hidden due to options (e.g. patterns etc.) don't affect folder equality any more. +- KDE: KIO-progress dialog is now hidden. (KDiff3 has its own progress dialog.) +- Directory merge: Default op for change in either B or C and delete in the other is now merge (previously copy). +- Directory merge: Not preserving merge operation after reload, because it might have changed. + +Version 0.9.93 - 2009/01/06 +=========================== +- Support for KDE4 (with much porting help from Valentin Rusu) +- Fix for diff_ext_for_kdiff3 (by Sergey Zorin) +- Win32-Installation: SendTo-integration fixed for Vista. +- Optional auto detection of line end style for saving. +- Option to close on ESC (default is off) +- Option to align B and C for 3 input files (default is off which is usually better for merging). + +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..71ec147 --- /dev/null +++ b/INSTALL @@ -0,0 +1,4 @@ +Please read the README-file. + +Joachim + 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..c84b28b --- /dev/null +++ b/README @@ -0,0 +1,188 @@ +KDiff3-Readme +============= + +Author: Joachim Eibl (joachim.eibl at gmx.de) +Copyright: (C) 2002-2014 by Joachim Eibl +KDiff3-Version: 0.9.98 + +KDiff3 runs best on KDE but can be built without it, depending only on Qt-libs. +These are available for Un*x, Windows, Mac. +Thus there are many setup possibilities to consider. + +Supported Qt-versions: 4.8, 5.2 or higher. +Supported KDE-version: 4 +(For KDE3/Qt3 use KDiff3-0.9.92 or older.) + +Contents +-------- + +- Introduction +- License +- Requirements & Installation + - For KDE4 + - With Qt4-libs, without KDE + - for Linux/Un*x + - for Windows + - Debugging with MinGW under Windows: + - for Mac: Building KDiff3 for Mac OSX (with Intel processor) + - Creating and installing translation messages +- Additional hints + + +Introduction +------------ + +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), +- has an intuitive graphical user interface, +- provides a context menu for KDE-Konqueror and Windows-Explorer, +- supports 64 bit systems. (Some build issues are discussed in here.) +- Support for many encodings and Unicode. + +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 02111-1307 + USA + + For details see file "COPYING". + + +Build & Install (for Un*x systems) +---------------------------------- + +0) Unpack KDiff3*.tar.gz +1) Run "./configure kde4" or "./configure qt4" from the KDiff3 source directory. +2) Follow instructions +If it doesn't work continue reading. + + +Requirements & Installation +--------------------------- + +- for KDE4: + For installation on most distributions you usually also need these packages + (names as on opensuse): + - g++ (version 4.2 or newer) + - libqt4-devel (Qt4-libs, version 4.8.0 or newer) + - libkde4-devel (KDE4 Header files and development libraries) + - libkonq-devel (optional, needed for the kdiff3-plugin, if not installed + then the contextmenu plugin for konqueror won't be built.) + - cmake (>2.6, checks dependencies and creates the appropriate Makefiles for + your system) + + Typically in a terminal (e.g. konsole) you cd into the kdiff3-directory and + run "./configure kde4". This script is essentially the same as these commands: + + mkdir releaseKde + cd releaseKde + # Find out your KDE4-directory and note the result + kde4-config --prefix + # create Makefile, replace with the prior result + cmake .. -DCMAKE_INSTALL_PREFIX= + # run make (compile and link) + make + # install as root user + sudo make install + + Now KDiff3 should be ready to use. Type "kdiff3" to start it. + There should also be a entry in your KDE-start menu in + "(Applications->)Development". + + For creating a debug version: + mkdir debug + cd debug + # Find out your KDE4-directory and note the result + kde4-config --prefix + cmake .. -DCMAKE_INSTALL_PREFIX= -DCMAKE_BUILD_TYPE=debugfull + make + sudo make install + + The depends on your distribution: + The command "kde4-config --prefix" should tell you. + - For opensuse 12 use "/usr". + +- Building KDiff3 with Qt4-libs, but without KDE + - for Linux/Un*x + - for Windows + - for Mac + + The version 0.9.98 requires Qt 4.8.0 or newer (from http://qt-project.org/) for + compilation. + + Recommended: Get Qt with QtCreator and use the kdiff3.pro file in src-QT4. + (should also work with Qt5) + + From command line: Install a working set of Qt-libs. + Build-instructions (Un*x, Linux, Mac): + Assuming Qt is correctly installed run "./configure qt4" which essentially + does the same as: + - mkdir releaseQt + - cd releaseQt + - qmake ../src-QT4/kdiff3.pro + - make (or "gmake", or "mingw32-make" etc.) + + Debugging with MinGW under Windows: + - Use Qt Creator as debugger frontend! + + Building KDiff3 (Qt4) for Mac OSX: + 1) Install XCode + 2) Install Qt with QtCreator for Mac + 3) Proceed again by opening the kdiff3.pro file + + Creating and installing the translation messages + The po directory contains translations from the KDE-translation teams. + If you use the Qt-only-version of KDiff3, then the installation described + above won't install translations automatically. + To create and install the translations: + 1) cd .../kdiff3-0.9.98/po + 2) sh create_qm_files install (asks for a super user password) + Just to create the files in the po directory (as needed for the windows + version): + 2) sh create_qm_files local + + +(End of KDiff3 with Qt4-instructions) +------------------------------------------------------------------------ + +Additional hints +---------------- + + 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..bf6428d --- /dev/null +++ b/TODO @@ -0,0 +1,123 @@ +This file contains some feature-wishes for future KDiff3-versions. + +TODO +==== +- Verknüpfungsziel für Links relativ anzeigen +- KDiff3-Plugin sollte auch in Dolphin arbeiten +- Alignmenttechnik bei Merge von 3 Dateien wählbar +- Horizontales Scrolling reparieren + +- 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/cmake/modules/FindLibKonq.cmake b/cmake/modules/FindLibKonq.cmake new file mode 100644 index 0000000..f9a06d2 --- /dev/null +++ b/cmake/modules/FindLibKonq.cmake @@ -0,0 +1,39 @@ +# - Try to find konqueror library +# Once done this will define +# +# LIBKONQ_FOUND - system has libkonq library +# LIBKONQ_INCLUDE_DIR - the LIBKONQ include directory +# LIBKONQ_LIBRARY - the libkonq library +# +# Original file: FindMarbleWidget.cmake (found in digikam-0.10.0-beta2) +# copyright 2008 by Patrick Spendrin +# use this file as you like +# +# Modifications to find libkonq by Joachim Eibl 2008 + +if(LIBKONQ_INCLUDE_DIR AND LIBKONQ_LIBRARY) + + # Already in cache + set(LIBKONQ_FOUND TRUE) + +else(LIBKONQ_INCLUDE_DIR AND LIBKONQ_LIBRARY) + find_path(LIBKONQ_INCLUDE_DIR konq_popupmenuplugin.h ) + + find_library(LIBKONQ_LIBRARY konq) + + if(LIBKONQ_INCLUDE_DIR AND LIBKONQ_LIBRARY) + set(LIBKONQ_FOUND TRUE) + endif(LIBKONQ_INCLUDE_DIR AND LIBKONQ_LIBRARY) + + if(LIBKONQ_FOUND) + if (NOT LIBKONQ_FIND_QUIETLY) + message(STATUS "Found libkonq: ${LIBKONQ_LIBRARY}") + endif (NOT LIBKONQ_FIND_QUIETLY) + else(LIBKONQ_FOUND) + if(LIBKONQ_FIND_REQUIRED) + message(FATAL_ERROR "Could NOT find KDE4 libkonq library") + endif(LIBKONQ_FIND_REQUIRED) + endif(LIBKONQ_FOUND) + + mark_as_advanced(LIBKONQ_INCLUDE_DIR LIBKONQ_LIBRARY) +endif(LIBKONQ_INCLUDE_DIR AND LIBKONQ_LIBRARY) diff --git a/config-kdiff3.h.cmake b/config-kdiff3.h.cmake new file mode 100644 index 0000000..e979021 --- /dev/null +++ b/config-kdiff3.h.cmake @@ -0,0 +1,4 @@ +/* config-kdiff3.h.cmake. */ + +/* Define to 1 if you have KDE4 libkonq shared library installed */ +#cmakedefine HAVE_LIBKONQ 1 diff --git a/configure b/configure new file mode 100755 index 0000000..30d60c1 --- /dev/null +++ b/configure @@ -0,0 +1,87 @@ +#!/bin/bash +# Manually created configure + +function showUsage { + printf "Usage: %s: [-d] [-o directory] [kde4|qt4] \n" $0 + echo Example 1: $0 kde4 + echo Example 2: $0 -d qt4 + echo Options: + echo -d ... enable debug + echo -o \ ... specify other build directory + echo The default build directory is based on the specified arguments. E.g.: \"releaseKde\" + echo For requirements, more options and details in case of failure see the README. + exit 2 +} + +echo "configure for KDiff3 Qt4/KDE4 by Joachim Eibl" + +config=release +outputDir="" +currentDir=`pwd` + +while getopts do: flag +do + case $flag in + d) config="debug";; + o) outputDir="$OPTARG";; + ?) showUsage;; + esac +done +if [ ! -z "$debug" ]; then + printf "Option -d specified\n" +fi + +shift $(($OPTIND - 1)) +#printf "Remaining arguments are: %s\n" "$*" + + +if [ "$1" = "kde4" ]; then + if [ "$outputDir" = "" ]; then + outputDir="${config}Kde" + fi + echo Trying to build for KDE4. If anything fails see the README for details. + echo Creating and entering subdir "$outputDir" + mkdir "$outputDir" # create sub directory + cd "$outputDir" + export QT_SELECT=4 + echo "Running cmake \"$currentDir\" -DCMAKE_INSTALL_PREFIX=`kde4-config --prefix`" + if [ config = "debug" ]; then + cmake "$currentDir" -DCMAKE_INSTALL_PREFIX=`kde4-config --prefix` -DCMAKE_BUILD_TYPE=debugfull + else + cmake "$currentDir" -DCMAKE_INSTALL_PREFIX=`kde4-config --prefix` + fi + if [ $? -ne 0 ] + then + echo "CMake errors." + exit + fi + + echo Running make. + make # run make (compile and link) + if [ $? -ne 0 ] + then + echo "Compile errors." + exit + fi + + echo If everything went OK then KDiff3 was built in the subdir "$outputDir". + echo "Install as root (requires password)." + sudo make install # install as root user +elif [ "$1" = "qt4" ]; then + if [ "$outputDir" = "" ]; then + outputDir="${config}Qt" + fi + echo Trying to build for Qt4 without KDE + echo Creating and entering subdir "$outputDir" + mkdir "$outputDir" # create sub directory + cd "$outputDir" + qmakecmd="qmake CONFIG+=$config \"$currentDir/src-QT4/kdiff3.pro\"" + echo "Running $qmakecmd" + $qmakecmd + echo "Running make" + make + echo "If everything went OK then KDiff3 was built as $outputDir/kdiff3" +else + showUsage +fi + 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..a17e3d8 --- /dev/null +++ b/diff_ext_for_kdiff3/Makefile @@ -0,0 +1,63 @@ +# 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 += -L. -s -static-libgcc +endif +CXXFLAGS += -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: + del .depend $(OBJ) $(DLL) ${EXPLIB} $(STATICLIB) + +$(DLL): $(OBJ) + dllwrap.exe \ + --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/Makefile_64bit b/diff_ext_for_kdiff3/Makefile_64bit new file mode 100755 index 0000000..c10cf94 --- /dev/null +++ b/diff_ext_for_kdiff3/Makefile_64bit @@ -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 := x86_64-w64-mingw32-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) + x86_64-w64-mingw32-dllwrap.exe \ + --mno-cygwin \ + --def $(DEFFILE) \ + --output-exp ${EXPLIB} \ + --driver-name x86_64-w64-mingw32-g++ -static-libgcc -L/Users/Joachim/qt/mingw-w64-bin_i686-mingw_20100105/mingw/lib \ + --implib $(STATICLIB) \ + $(OBJ) $(LDFLAGS) $(LIBS) \ + -o $@ + +.cpp.o: + $(CXX) $(CXXFLAGS) -c $< -o $@ + +.rc.res: + x86_64-w64-mingw32-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..538fd2e --- /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..2efaf34 --- /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 100644 index 0000000..9a11362 --- /dev/null +++ b/diff_ext_for_kdiff3/diff_ext.cpp @@ -0,0 +1,640 @@ +/* + * 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(); + + SERVER::instance()->recent_files(); // updates recent files list (reads from registry) + + 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 ) + { + 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(); + SERVER::instance()->save_history(); + } + else if(id == m_id_DiffLater) + { + MESSAGELOG(TEXT("Diff Later: ")+_file_name1); + m_recentFiles.remove( _file_name1 ); + m_recentFiles.push_front( _file_name1 ); + SERVER::instance()->save_history(); + } + 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(); + std::wstring sBits = i18n("(32 Bit)"); + if (sizeof(void*)==8) + sBits = i18n("(64 Bit)"); + 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 (c) 2006-2013 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 ")+sBits).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); + } + } + else + { + ret = E_INVALIDARG; + } + + return ret; +} + +STDMETHODIMP +DIFF_EXT::GetCommandString(UINT_PTR 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 ); + } + else + { + ret = E_INVALIDARG; + } + + 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 100644 index 0000000..f0b8a75 --- /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_PTR 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 100644 index 0000000..79dca98 --- /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..a502ed4 --- /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.rc b/diff_ext_for_kdiff3/diff_ext_for_kdiff3.rc new file mode 100644 index 0000000..5234b16 --- /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..6b8761f --- /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..9b61551 --- /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..af37057 --- /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 { + LPCTSTR subkey; + LPCTSTR name; + LPCTSTR 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 +#ifdef _WIN64 +// {34471FFB-4002-438b-8952-E4588D0C0FE9} +DEFINE_GUID( CLSID_DIFF_EXT, 0x34471FFB, 0x4002, 0x438b, 0x89, 0x52, 0xE4, 0x58, 0x8D, 0x0C, 0x0F, 0xE9 ); +#else +DEFINE_GUID( CLSID_DIFF_EXT, 0x9f8528e4, 0xab20, 0x456e, 0x84, 0xe5, 0x3c, 0xe6, 0x9d, 0x87, 0x20, 0xf3 ); +#endif + +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_WOW64_64KEY, &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 ) + { + m_pRecentFiles = new std::list; + } + else + { + m_pRecentFiles->clear(); + } + MESSAGELOG(TEXT("Reading history from registry...")); + 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 ) + { + HKEY key; + if( RegCreateKeyEx(HKEY_CURRENT_USER, (m_registryBaseName + TEXT("\\history")).c_str(), 0, 0, + REG_OPTION_NON_VOLATILE, KEY_WRITE | KEY_WOW64_64KEY, 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("KDiff3-diff-ext: Save history failed"), MB_OK | MB_ICONINFORMATION); + LocalFree(message); + } + } + for(; n<32; ++n ) + { + TCHAR numAsString[10]; + _sntprintf( numAsString, 10, TEXT("%d"), n ); + RegDeleteValue(key, numAsString ); + } + + 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..d443541 --- /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/CMakeLists.txt b/doc/CMakeLists.txt new file mode 100644 index 0000000..eacad6d --- /dev/null +++ b/doc/CMakeLists.txt @@ -0,0 +1,9 @@ +add_subdirectory(en) +add_subdirectory(da) +add_subdirectory(de) +add_subdirectory(es) +add_subdirectory(et) +add_subdirectory(fr) +add_subdirectory(it) +add_subdirectory(nl) +add_subdirectory(pt) 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..275a590 --- /dev/null +++ b/doc/createpdfdoc @@ -0,0 +1,14 @@ +# html2ps is from the "html2ps"-package +# ps2pdf is part of the "ghostscript-library"-package +for i in `find * -maxdepth 0 -type d`; do + cd $i + echo $i + if [ $i != "en" ]; then + for j in `ls ../en | grep png`; do ln -s ../en/$j $j; done + ln -s ../en/common common + fi + LANG=de_DE meinproc4 --check index.docbook --stylesheet /usr/share/kde4/apps/ksgmltools2/customization/kde-nochunk.xsl + html2ps --rcfile /usr/lib/html2ps/html2psrc -D -u -n index.html >index.ps + ps2pdf index.ps ../kdiff3_$i.pdf + cd .. +done diff --git a/doc/da/CMakeLists.txt b/doc/da/CMakeLists.txt new file mode 100644 index 0000000..3305e73 --- /dev/null +++ b/doc/da/CMakeLists.txt @@ -0,0 +1 @@ +kde4_create_handbook(index.docbook INSTALL_DESTINATION ${HTML_INSTALL_DIR}/da SUBDIR kdiff3) 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/de/CMakeLists.txt b/doc/de/CMakeLists.txt new file mode 100644 index 0000000..b30f93b --- /dev/null +++ b/doc/de/CMakeLists.txt @@ -0,0 +1 @@ +kde4_create_handbook(index.docbook INSTALL_DESTINATION ${HTML_INSTALL_DIR}/de SUBDIR kdiff3) diff --git a/doc/de/index.docbook b/doc/de/index.docbook new file mode 100644 index 0000000..1192e87 --- /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/en/CMakeLists.txt b/doc/en/CMakeLists.txt new file mode 100644 index 0000000..1ae7394 --- /dev/null +++ b/doc/en/CMakeLists.txt @@ -0,0 +1 @@ +kde4_create_handbook(index.docbook INSTALL_DESTINATION ${HTML_INSTALL_DIR}/en SUBDIR kdiff3) diff --git a/doc/en/common/1.png b/doc/en/common/1.png new file mode 100644 index 0000000000000000000000000000000000000000..a9ea29c1c4f52a90d62a1d0ca3586e4e82a46125 GIT binary patch literal 229 zcmeAS@N?(olHy`uVBq!ia0vp^JRr=$0wn*`OvwRKoCO|{#S9GG!XV7ZFl&wkP>{XE z)7O>#3J)uzHgn`VeLtWOQ|{y|+s$W~cD>F8CDWB9Nl&;r>bP!GGmTmTU6z!u+k3Jd|B@-YK>5F6=j6_TI2n zHt0zESv$sM!Tsl1Tc+%s!>v*8@Q3ALMIHOgqwlh}YWLP^O>emGb!kJy8o9-j_@lxX V&%2iQ_B7B144$rjF6*2UngDx8P7(kB literal 0 HcmV?d00001 diff --git a/doc/en/common/10.png b/doc/en/common/10.png new file mode 100644 index 0000000000000000000000000000000000000000..00ba60fff1d08e0d04f1c28e7aa9565b4da56e5a GIT binary patch literal 271 zcmeAS@N?(olHy`uVBq!ia0vp^JRr=$0wn*`OvwRKoCO|{#S9GG!XV7ZFl&wkP>{XE z)7O>#3J)t2t9s6wnpZ#}rX+877l!}s{b%+Ac?&#U977}|Sr0C3Y<6H^IWSdyV#K2f zC$bekMSE~&K2#NwoGs*c>5!+&H&r1^dtt$!E8Lp1O5Ih8Y*!uB=(?Fu=%y5U(PZ=G zcjxor~Q76Q7J N!PC{xWt~$(69B)eVUz#> literal 0 HcmV?d00001 diff --git a/doc/en/common/2.png b/doc/en/common/2.png new file mode 100644 index 0000000000000000000000000000000000000000..cc9762a8774fec901ef9ebe6efb8921c3c826d03 GIT binary patch literal 249 zcmeAS@N?(olHy`uVBq!ia0vp^JRr=$0wn*`OvwRKoCO|{#S9GG!XV7ZFl&wkP>{XE z)7O>#3J)uzj=oCy)hwV8Q}{#}Elg)`JTjnH@zO4yyaRB`Hsg zU&eaNL1|)UVroi`mk0M0flk{_8_P2)FP}Yn^5l_U&?S$1b5)(al+*Qh+uQpYU72LF z=gFH5D&ESG>n6qfpUjx7BH5mQa+&X>nj5yclYEs=7VYqwba7IRWsTHh-%U#{XE z)7O>#3J)uzu9EZJ8PkA5OiAAEE)4(M`_JqL@+Nq?IEF|_vL0OM$n40#aB!;n`rZ?h z?{kSsdUBtb?h)0ogjdDrTk4aOiE5eOpBnhK=UZ#W>PqspE1sTuOLykHe>Q(-ZF*y+ zDzA6=NNiD-=d#&8cT~NdC)vdO<2iX@f=YY&?O3BND*1jV*UO*0q-nWVr+vEr$(45} xy-d6<*QT?(q;xWm=QM5Aw|=J$bmPk|+51_nc`Ya8(G7GPgQu&X%Q~loCIDEiSr`BS literal 0 HcmV?d00001 diff --git a/doc/en/common/4.png b/doc/en/common/4.png new file mode 100644 index 0000000000000000000000000000000000000000..fd80c9227489a5f613ba1f401434ff30b85453f9 GIT binary patch literal 247 zcmeAS@N?(olHy`uVBq!ia0vp^JRr=$0wn*`OvwRKoCO|{#S9GG!XV7ZFl&wkP>{XE z)7O>#3J)uz9$%Ek@@+sNrX+877l!}s{b%+Ac^#fEjv*3~tOo^?js!3`9Bl7Cm|-Y! zMzrZ@*2WpxI%2C2#$=Wn{wTDXyyW!qqeGm{xKc&pGOlH#A72cChO1G=* zzooi!PF}mp>a>&7x1TKV_;f)>KCk`g2NQ3(TTi7KmZx0R^fZ#0WMg_u<>cx96hp7_ p*(#o5>!+Cf+C0l<%{;eD_9a)>i5b*ixd?O{XE z)7O>#3J)uzp6P34zezwLrX+877l!}s{b%+Ac@sQc977}|Sr0BuJQTp-a8P}}OVUAC zw|}BWPR||Pls2ANcS&%=i4!MY$4-h{wz@mBTy5!NJKpZ2XOkjogJu~OTF971&iOjc zhsSeL?Cg|B*XOq@MwU+XvB}vNH)-MOC(jgb%1&D7Tl7)6@|RcGUR7-~b9w)hdcG$Q yKm1ZQ@o1#gyI>=plaD4(`eMR+IICRkFEg*~y5Ieai)4XrWAJqKb6Mw<&;$VU30*S) literal 0 HcmV?d00001 diff --git a/doc/en/common/6.png b/doc/en/common/6.png new file mode 100644 index 0000000000000000000000000000000000000000..20ddbd5becba7e0e0321ef161cb56c435fc022a1 GIT binary patch literal 262 zcmeAS@N?(olHy`uVBq!ia0vp^JRr=$0wn*`OvwRKoCO|{#S9GG!XV7ZFl&wkP>{XE z)7O>#3J)t2lg<`<aB!;n#ElP> z;+M60+;X_YB=l2A+LJRP#p}Sn9vjOuDlc!ZzM54&VM^NWl#O0y{ZqJRd!}hw2ARsetB|A#>79CsXO*~x0RjjcP{!h;ZBLiy_k8n zv&&8{Pn-QDZd0MjW+x3)R_~u;@_UnH+iZX1m-7E_Y?v}R%JLx4i42~uelF{r G5}E+tb7nOF literal 0 HcmV?d00001 diff --git a/doc/en/common/7.png b/doc/en/common/7.png new file mode 100644 index 0000000000000000000000000000000000000000..22fee5bc83c53be63341e17f1dd35e817202027e GIT binary patch literal 245 zcmeAS@N?(olHy`uVBq!ia0vp^JRr=$0wn*`OvwRKoCO|{#S9GG!XV7ZFl&wkP>{XE z)7O>#3J)t2v$%}@>jOX`rX+877l!}s{b%+Ad2OC9jv*3~tOpk+HU}^`98{m^Q6ekU zxwgl}C^#iGyu&4}cTK~ZKcA|mFFBpKwW>nWGqYrdZd&)vobu%*r??Nen=QUKNu~R? z=Ff|oo<)`3o3baXv?oqZxuoW4r{`((a!Sf^MNhNXNjAKbRVuysPd=TbvO4hB?_bkY mPQLQ<{IzwqPnf^*OL;xTm6@}3{-y$5#Ng@b=d#Wzp$PyR4pqMZ literal 0 HcmV?d00001 diff --git a/doc/en/common/8.png b/doc/en/common/8.png new file mode 100644 index 0000000000000000000000000000000000000000..a9adacfdab46cdc78c7779fe056fab30f7cfdeca GIT binary patch literal 262 zcmeAS@N?(olHy`uVBq!ia0vp^JRr=$0wn*`OvwRKoCO|{#S9GG!XV7ZFl&wkP>{XE z)7O>#3J)t23!gdb)#E@RrX+877l!}s{b%+AdDA^z977}|Sr0BuJOtz(oIcSbr{IK# zj*-w!(FtoV2u3IhMV^%M$Vo|g@>S1M-#mTs?A9e)=BAxIsIfC5c$b%0ynH_U%r{#- z(snnmk(;zU?c~*W2^)5LtI4YV-2Cg8gi3SYB>CO5Z$8tLH1QV8KY2RZD08As&N;W$ z@h5|KoqCYDwNff&)AVhZbv!3^zg?oDo3{AkRi{h#9QQY_c-lT^3(!prp00i_>zopr E04@b!i2wiq literal 0 HcmV?d00001 diff --git a/doc/en/common/9.png b/doc/en/common/9.png new file mode 100644 index 0000000000000000000000000000000000000000..56b36121d76a0cf474cc3d7d6dda79c8be6ac24a GIT binary patch literal 263 zcmeAS@N?(olHy`uVBq!ia0vp^JRr=$0wn*`OvwRKoCO|{#S9GG!XV7ZFl&wkP>{XE z)7O>#3J)t2i;+auN(Z12Qj{`maq%NK1)D^DYy!*@eBy;8HB z*>~=SiuhTxlYP_mPwtMa+Pij=;>lMNCzWiqk_Zzwekp(D!v?+ESM&RUZe;Lu^>bP0 Hl+XkK9NuKn literal 0 HcmV?d00001 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/block_title_bottom.png b/doc/en/common/block_title_bottom.png new file mode 100644 index 0000000000000000000000000000000000000000..c0c0af512b362717cf32136e73a7aedfbc903f16 GIT binary patch literal 292 zcmeAS@N?(olHy`uVBq!ia0vp^8-SRNgAGU~tB9C^I7!~_E)4%caKYZ?lYt_f1s;*b z3=G`DAk4@xYmNj^kiEpy*OmPms|b%VAM3-_l|Z45o-U3d6}R3_^5r_@z|$JPBp^T| zRqS6wLSb_33&ySrUh{buwO6T}QEE|q?O^9M*)HhWS>=}N&%5o9=&!sZbnq2Rkny6M z^^t4$hWxx>eCg%Pw!CwzLNn*-*VfH_bo_hj`zvQWU%S*T+qZs|nbFpLdwl->S@Z19 z<laFtGP$pH>IC;kD-*s|3-%n6sywPua jZa42V?}N2c0Y4dcN3ea^a->2O=y(QCS3j3^P64nJa0`PlBg3pY5H=O_G_#nJjRxLWBAH|LTpLi?k)`fL2$v|<&%LT;hrvzAr-f3`x&_oD2O-jtSeQ%zwmnGymDRZi~mcbrfQf^tgn5# tw@yekaKBJ_!0&Cp9`{DPVmFl6xuef`i1GLAeLyQ1JYD@<);T3K0RaAfM*{!= literal 0 HcmV?d00001 diff --git a/doc/en/common/block_title_top.png b/doc/en/common/block_title_top.png new file mode 100644 index 0000000000000000000000000000000000000000..2344376159afe0f766b6111bb2b0ae95b10a16fe GIT binary patch literal 323 zcmeAS@N?(olHy`uVBq!ia0vp^8-SRNgAGU~tB9C^I7!~_E)4%caKYZ?lYt_f1s;*b z3=G`DAk4@xYmNj^kiEpy*OmPms|b&g&dFJ~?*N4^c)B=-RNQ(y$&ic5P{8&7iWLeR zd5c?HbCe@07#!CpKK{7IwxvVvfYbKi4FTPy8wIvpJg}iw4EucRo^u|5c%J{lcl%SzSD)M$QCw5l{ATqB|C;4fLVNPv@EGk)!1~(=dbp`7sJXo6)DF zlU8f;Iy7W~M&m}yB@yfN4PG#4Kji!P@6Q#+utTZUKBWy)3oP%(|6rUHE_3?xca3_W P-xxey{an^LB{Ts5(3^lq literal 0 HcmV?d00001 diff --git a/doc/en/common/bottom-left.png b/doc/en/common/bottom-left.png new file mode 100644 index 0000000000000000000000000000000000000000..a2d8a49093ab1840c3cb16de640bff6a7cf02763 GIT binary patch literal 149 zcmeAS@N?(olHy`uVBq!ia0vp^vw=8;kr_y?&b|Pm7>k44ofy`glX(f`a29w(76TPu z2Vq7hjoB4ILG}_)Usv|)+?>K{)=QiETY*B%0X`wF&tE+C6`1k{$d&MPaSV}=Oiqws mU7R4&(-dgH<#td*fro*^gn=>g+wChrH4L7velF{r5}E+(S|zXm literal 0 HcmV?d00001 diff --git a/doc/en/common/bottom-middle.png b/doc/en/common/bottom-middle.png new file mode 100644 index 0000000000000000000000000000000000000000..eba0bb056e3ffabafcbef1898cff7c73b3e0b01c GIT binary patch literal 130 zcmeAS@N?(olHy`uVBq!ia0vp^j6j^i!2~2v_?;VkfoECwpR z4#JF18nY{ag6t)pzOL-oxjBV3Oz-UM=K%_dc)B=-NL)^?`1eRtn3?&ohMbH9!-X*B V>e&-D&I9EcJYD@<);T3K0RSL+AO-*c literal 0 HcmV?d00001 diff --git a/doc/en/common/bottom-right.png b/doc/en/common/bottom-right.png new file mode 100644 index 0000000000000000000000000000000000000000..01d5cd5055eccb5520726b3a7d56ac6df1022887 GIT binary patch literal 153 zcmeAS@N?(olHy`uVBq!ia0y~yU|b7ir!X=DNq&yMdw>*Uage(c!@6@aFM%A+0*}aI zpyKNw%;=;sy8 + + + BSD License + + + + + + + + + +

BSD License

+ +

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. + +
  3. 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.
  4. +
+ +

THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR + 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/doc/en/common/doxygen.css b/doc/en/common/doxygen.css new file mode 100644 index 0000000..48563b4 --- /dev/null +++ b/doc/en/common/doxygen.css @@ -0,0 +1,96 @@ +#content td.memItemLeft { +text-align: right; +} + +.groupHeader { +font-size: medium; +color: #418ADE; +} + +hr { display: none; } +#content h2 { margin-left: 0px; } + +table.memname { +empty-cells: show; +background-color: #f8f8f8; +outline: .2em solid #d7d7d7; +margin-top: 3em; +margin-bottom: 1em; +} + +td.memname { +white-space: nowrap; +font-weight: bold; +} + +.paramtype { +white-space: nowrap; +font-weight: bold; +} + +.paramname { +white-space: nowrap; +font-weight: bold; +} + +.paramkey { +text-align: right; +} + + +table.mdTable { +background-color: #f8f8f8; +outline: .2em solid #d7d7d7; +width: 80%; +} + +td.mdRow { padding: 8px 20px; } +td.md { font-weight: bold; } +td.mdname1 { font-weight: bold; color: #602020; } +td.mdname { font-weight: bold; color: #602020; } + +div.bic { +border: 2px solid #E72300; +background: #F6CFDD; +padding: 0.5ex 1em; +} + +div.memitem { +} + +div.memproto { +/*background: #F9F9F9; +border: 1px solid #AAAAAA;*/ +font-weight: bold; +} + +div.memproto td { +white-space: nowrap; +padding:0; +margin:0; +} + +table.memname { +border-spacing: 0; +border-collapse:collapse; +} + +td.paramtype { +font-family:monospace; +} + +div.memproto a.el { +font-family:monospace; +} + +div.memproto a.elRef { +font-family:monospace; +} + +SPAN.keyword { color: #008000 } +SPAN.keywordtype { color: #604020 } +SPAN.keywordflow { color: #e08000 } +SPAN.comment { color: #800000 } +SPAN.preprocessor { color: #806020 } +SPAN.stringliteral { color: #002080 } +SPAN.charliteral { color: #008080 } diff --git a/doc/en/common/favicon.ico b/doc/en/common/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..3741beba39c68c62adf8a9f1859b655ff7f416ce GIT binary patch literal 1406 zcmaizd05m%7{|X>mfd#QZFXChR$c*RrLbsnh$4xyoT3~7rXU^&h;l3-YJ>vffh`LJ z?1F&sTbBKCh#(*kpn$-#H|!;_EH^Ap^^bq$%ri6ZGtc|X%=`I%2bf3t!i6C70(i{_ z76DjF2HCH-PFgd7%tb_$6n+ZDJ4dtxu(6tq#KEj;jI6>ExgZ5Y#bRAiS z91o(a8w1Kh7Ap7KLR651ag7AU!PbxzoW$Jh6gk5gL+vzVf^_iwEFn*{f$+pOsQ8KK zWJh8|+y>G4jhGbGKwX~!RUI3BMJ!Yu*nrL`D~M7(P!aEh8~$cc3C}=Lb`Ep`dA~so z?JX`8R0OUc*$VoUJA`p=pi`oW7CRsDr54B|ygh)&S`P8t z9F$er=*vF_RaG)*mLq1TMo7K+&`UcY%M1o@uNC3uOms;^$)R1uQ+AMC@gre;O9JGa!iiEzq7Ci}OF!UCqJIw_>sjiUGndnMmf*(dSJh2?j zA?u-|SeO=7LzG}c_+&!Nc7ul0B#d)~lt+A)5(PoD^FyEf(c#FqyPoapdO5mj-MaGc zF7Kb8qh0&i+j%BE%~86u@4Xq!+ZbPeKW3=ItKd+Jy79}O5`*65yjHQY)6BmzC3Kl< zpW_nvWDEa%dcjr+W%tK(e@9f?@8#~?v5IN>!S$1@uS13hG)I3pkyT55QfT=O^_IhL zzdrL6Rr>1hRP4O%)X$&aOnZIvSARXJQc!E!sSiCCdS0yA_mOm)mE7X^3obwATAwj| zygn|8+K`Z5ckPQ?fs7ZI-+g0HP?R6=68m)WV`ZEAMX%_^4d(Z5e81G@K-({=yDwCo zqu;-Juq5NtQ+sYdFZ(9!&N2St#mXzIeT%)F{hY$P&u2byT5VUj_qr{Ly!2>7 H|DW*ysYz_V literal 0 HcmV?d00001 diff --git a/doc/en/common/fdl-license b/doc/en/common/fdl-license new file mode 100644 index 0000000..4a0fe1c --- /dev/null +++ b/doc/en/common/fdl-license @@ -0,0 +1,397 @@ + GNU Free Documentation License + Version 1.2, November 2002 + + + Copyright (C) 2000,2001,2002 Free Software Foundation, Inc. + 51 Franklin St, 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 +functional and useful 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, in any medium, that +contains a notice placed by the copyright holder saying it can be +distributed under the terms of this License. Such a notice grants a +world-wide, royalty-free license, unlimited in duration, to use that +work under the conditions stated herein. The "Document", below, +refers to any such manual or work. Any member of the public is a +licensee, and is addressed as "you". You accept the license if you +copy, modify or distribute the work in a way requiring permission +under copyright law. + +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. (Thus, 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. If a +section does not fit the above definition of Secondary then it is not +allowed to be designated as Invariant. The Document may contain zero +Invariant Sections. If the Document does not identify any Invariant +Sections then there are none. + +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 Front-Cover Text may +be at most 5 words, and a Back-Cover Text may be at most 25 words. + +A "Transparent" copy of the Document means a machine-readable copy, +represented in a format whose specification is available to the +general public, that is suitable for revising the document +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, or absence of markup, has been arranged to thwart +or discourage subsequent modification by readers is not Transparent. +An image format is not Transparent if used for any substantial amount +of text. 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, PostScript or PDF designed for human modification. Examples of +transparent image formats include PNG, XCF and JPG. Opaque formats +include 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, PostScript or PDF 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. + +A section "Entitled XYZ" means a named subunit of the Document whose +title either is precisely XYZ or contains XYZ in parentheses following +text that translates XYZ in another language. (Here XYZ stands for a +specific section name mentioned below, such as "Acknowledgements", +"Dedications", "Endorsements", or "History".) To "Preserve the Title" +of such a section when you modify the Document means that it remains a +section "Entitled XYZ" according to this definition. + +The Document may include Warranty Disclaimers next to the notice which +states that this License applies to the Document. These Warranty +Disclaimers are considered to be included by reference in this +License, but only as regards disclaiming warranties: any other +implication that these Warranty Disclaimers may have is void and has +no effect on the meaning of this License. + + +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 (or copies in media that commonly have +printed covers) 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 computer-network location from which the general network-using +public has access to download using public-standard network protocols +a complete Transparent copy of the Document, free of added material. +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: + +A. 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. +B. 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 fewer than five), + unless they release you from this requirement. +C. State on the Title page the name of the publisher of the + Modified Version, as the publisher. +D. Preserve all the copyright notices of the Document. +E. Add an appropriate copyright notice for your modifications + adjacent to the other copyright notices. +F. 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. +G. Preserve in that license notice the full lists of Invariant Sections + and required Cover Texts given in the Document's license notice. +H. Include an unaltered copy of this License. +I. Preserve the section Entitled "History", Preserve 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. +J. 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. +K. For any section Entitled "Acknowledgements" or "Dedications", + Preserve the Title of the section, and preserve in the section all + the substance and tone of each of the contributor acknowledgements + and/or dedications given therein. +L. 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. +M. Delete any section Entitled "Endorsements". Such a section + may not be included in the Modified Version. +N. Do not retitle any existing section to be Entitled "Endorsements" + or to conflict in title with any Invariant Section. +O. Preserve any Warranty Disclaimers. + +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, and that you preserve all their Warranty Disclaimers. + +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, is called an "aggregate" if the copyright +resulting from the compilation is not used to limit the legal rights +of the compilation's users beyond what the individual works permit. +When the Document is included in an aggregate, this License does not +apply to the other works in the aggregate which 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 half of +the entire aggregate, the Document's Cover Texts may be placed on +covers that bracket the Document within the aggregate, or the +electronic equivalent of covers if the Document is in electronic form. +Otherwise they must appear on printed covers that bracket 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, and all the license notices in the +Document, and any Warranty Disclaimers, provided that you also include +the original English version of this License and the original versions +of those notices and disclaimers. In case of a disagreement between +the translation and the original version of this License or a notice +or disclaimer, the original version will prevail. + +If a section in the Document is Entitled "Acknowledgements", +"Dedications", or "History", the requirement (section 4) to Preserve +its Title (section 1) will typically require changing the actual +title. + + +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. + + +ADDENDUM: How to use this License for your documents + +To use this License in a document you have written, include a copy of +the License in the document and put the following copyright and +license notices just after the title page: + + Copyright (c) YEAR YOUR NAME. + Permission is granted to copy, distribute and/or modify this document + under the terms of the GNU Free Documentation License, Version 1.2 + or any later version published by the Free Software Foundation; + with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. + A copy of the license is included in the section entitled "GNU + Free Documentation License". + +If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts, +replace the "with...Texts." line with this: + + with the Invariant Sections being LIST THEIR TITLES, with the + Front-Cover Texts being LIST, and with the Back-Cover Texts being LIST. + +If you have Invariant Sections without Cover Texts, or some other +combination of the three, merge those two alternatives to suit the +situation. + +If your document contains nontrivial examples of program code, we +recommend releasing these examples in parallel under your choice of +free software license, such as the GNU General Public License, +to permit their use in free software. diff --git a/doc/en/common/fdl-license.html b/doc/en/common/fdl-license.html new file mode 100644 index 0000000..9ce378a --- /dev/null +++ b/doc/en/common/fdl-license.html @@ -0,0 +1,512 @@ + + + + GNU Free Documentation License - version 1.1 + + + + + + + + + +

GNU Free Documentation License

+

+ Version 1.2, November 2002 +

+ +
+  Copyright (C) 2000,2001,2002  Free Software Foundation, Inc.
+  51 Franklin St, 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 + functional and useful 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, in any medium, that + contains a notice placed by the copyright holder saying it can be + distributed under the terms of this License. Such a notice grants a + world-wide, royalty-free license, unlimited in duration, to use that + work under the conditions stated herein. The "Document", below, + refers to any such manual or work. Any member of the public is a + licensee, and is addressed as "you". You accept the license if you + copy, modify or distribute the work in a way requiring permission + under copyright law. +

+ +

+ 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. (Thus, 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. If a + section does not fit the above definition of Secondary then it is not + allowed to be designated as Invariant. The Document may contain zero + Invariant Sections. If the Document does not identify any Invariant + Sections then there are none. +

+ +

+ 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 Front-Cover Text may + be at most 5 words, and a Back-Cover Text may be at most 25 words. +

+ +

+ A "Transparent" copy of the Document means a machine-readable copy, + represented in a format whose specification is available to the + general public, that is suitable for revising the document + 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, or absence of markup, has been arranged to thwart + or discourage subsequent modification by readers is not Transparent. + An image format is not Transparent if used for any substantial amount + of text. 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, PostScript or PDF designed for human modification. Examples of + transparent image formats include PNG, XCF and JPG. Opaque formats + include 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, PostScript or PDF 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. +

+ +

+ A section "Entitled XYZ" means a named subunit of the Document whose + title either is precisely XYZ or contains XYZ in parentheses following + text that translates XYZ in another language. (Here XYZ stands for a + specific section name mentioned below, such as "Acknowledgements", + "Dedications", "Endorsements", or "History".) To "Preserve the Title" + of such a section when you modify the Document means that it remains a + section "Entitled XYZ" according to this definition. +

+ +

+ The Document may include Warranty Disclaimers next to the notice which + states that this License applies to the Document. These Warranty + Disclaimers are considered to be included by reference in this + License, but only as regards disclaiming warranties: any other + implication that these Warranty Disclaimers may have is void and has + no effect on the meaning of this License. +

+ +

+ 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 (or copies in media that commonly have + printed covers) 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 computer-network location from which the general network-using + public has access to download using public-standard network protocols + a complete Transparent copy of the Document, free of added material. + 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: +

+ +
    +
  • A. 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.
  • +
  • B. 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 fewer than five), + unless they release you from this requirement.
  • +
  • C. State on the Title page the name of the publisher of the + Modified Version, as the publisher.
  • +
  • D. Preserve all the copyright notices of the Document.
  • +
  • E. Add an appropriate copyright notice for your modifications + adjacent to the other copyright notices.
  • +
  • F. 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.
  • +
  • G. Preserve in that license notice the full lists of Invariant Sections + and required Cover Texts given in the Document's license notice.
  • +
  • H. Include an unaltered copy of this License.
  • +
  • I. Preserve the section Entitled "History", Preserve 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.
  • +
  • J. 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.
  • +
  • K. For any section Entitled "Acknowledgements" or "Dedications", + Preserve the Title of the section, and preserve in the section all + the substance and tone of each of the contributor acknowledgements + and/or dedications given therein.
  • +
  • L. 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.
  • +
  • M. Delete any section Entitled "Endorsements". Such a section + may not be included in the Modified Version.
  • +
  • N. Do not retitle any existing section to be Entitled "Endorsements" + or to conflict in title with any Invariant Section.
  • +
  • O. Preserve any Warranty Disclaimers.
  • +
+ +

+ 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, and that you preserve all their Warranty Disclaimers. +

+ +

+ 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, is called an "aggregate" if the copyright + resulting from the compilation is not used to limit the legal rights + of the compilation's users beyond what the individual works permit. + When the Document is included in an aggregate, this License does not + apply to the other works in the aggregate which 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 half of + the entire aggregate, the Document's Cover Texts may be placed on + covers that bracket the Document within the aggregate, or the + electronic equivalent of covers if the Document is in electronic form. + Otherwise they must appear on printed covers that bracket 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, and all the license notices in the + Document, and any Warranty Disclaimers, provided that you also include + the original English version of this License and the original versions + of those notices and disclaimers. In case of a disagreement between + the translation and the original version of this License or a notice + or disclaimer, the original version will prevail. +

+ +

+ If a section in the Document is Entitled "Acknowledgements", + "Dedications", or "History", the requirement (section 4) to Preserve + its Title (section 1) will typically require changing the actual + title. +

+ +

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

+ +

How to use this License for your documents

+ +

+ To use this License in a document you have written, include a copy of + the License in the document and put the following copyright and + license notices just after the title page: +

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

+ If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts, + replace the "with...Texts." line with this: +

+ +
+  with the Invariant Sections being LIST THEIR TITLES, with the
+  Front-Cover Texts being LIST, and with the Back-Cover Texts being LIST.
+
+ +

+ If you have Invariant Sections without Cover Texts, or some other + combination of the three, merge those two alternatives to suit the + situation. +

+ +

+ If your document contains nontrivial examples of program code, we + recommend releasing these examples in parallel under your choice of + free software license, such as the GNU General Public License, + to permit their use in free software. +

+ + diff --git a/doc/en/common/fdl-notice.html b/doc/en/common/fdl-notice.html new file mode 100644 index 0000000..862f09e --- /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.2 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..baa2973 --- /dev/null +++ b/doc/en/common/footer.html @@ -0,0 +1,64 @@ + + + +
+ +
+
+ +
+ + + +
+ + + + + + + + + diff --git a/doc/en/common/gpl-license b/doc/en/common/gpl-license new file mode 100644 index 0000000..93796b6 --- /dev/null +++ b/doc/en/common/gpl-license @@ -0,0 +1,340 @@ + 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: + + 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) 19yy + + 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. + + , 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/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..a0c9211 --- /dev/null +++ b/doc/en/common/header.html @@ -0,0 +1,67 @@ + + + + + + $title + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+
+ + +
+ +
+
+
+
+
+ + +
+ + +
+ + + + + diff --git a/doc/en/common/mainheader.html b/doc/en/common/mainheader.html new file mode 100644 index 0000000..2f5ad32 --- /dev/null +++ b/doc/en/common/mainheader.html @@ -0,0 +1,66 @@ + + + + + + $title + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+
+ +